跳到主要內容

精選

遊戲伺服器2025年初架設與研究part14收送封包的Json格式與Unity內建JsonUtility相關的問題(支援性)

 上次針對如何在Unity的新版TMP Text中使用中文字 而這次則是來分享一下先前有提過的 Json文字轉換 的問題 首先我們知道Unity內建的Json轉換是 JsonUtility JsonUtility 在使用上有一些限制在 算是有優點也有缺點 優點是畢竟是寫在Unity底層的, 效能 比較好 如果功能沒有問題的情況下,可以比額外安裝的Json轉換插件效能要好上不少 甚至有些插件能差兩倍以上的執行效能 不過自然也是有缺點 就是它有不少 不支援 的型別 很多時候常常讓伺服器與遊戲端的人打架的其中一個原因,伺服器表示資料明明就有送,遊戲端則是表示我沒收到(伺服器傳的Json格式轉不出來的種種問題或是可能性) 詳細可以參考Unity的官方文件 https://docs.unity3d.com/6000.1/Documentation/Manual/json-serialization.html 那我這邊也把一些重點特別拿出來講 首先我們先前在聊天訊息回傳的時候,就已經有用到基本的功能 可以先看到我們伺服器端的程式碼(Python) 如以上這語法 這是我們先前使用的方式 那這邊因為是跟先前相同的 相同的部分我就用截圖來顯示(詳細程式碼在Part11有可以複製) 可以看到我們主要回傳的結構 json.dumps({"type": "chat", "message": msg}) 這段就是把後面的內容透過Json轉換成Json字串後傳給使用者(遊戲端) 而我們Unity接收的位置是這樣寫的 ServerPacket packet = JsonUtility.FromJson<ServerPacket>(json); 這行就是我們今天 主要 想討論的地方 並且假設大家想要使用額外安裝的Json套件,也幾乎就是替換這行就能達到想要的效果 接下來我們看到ServerPacket這個class 這邊可以看到關鍵是我們的class要 可序列化 也就是說要加上 [Serializable] 那雖然說是只要加上可序列化,就能轉換 但是也是因為這樣,有很多不能被Unity內建支援的型別,則會轉換不出來 而...

遊戲伺服器2025年的初架設與研究part1-版本選擇與IP與網域設置

首先系統安裝還有硬體配置的檢疫流程可以觀看前一篇網誌

這邊簡單的針對目前按造初始的步驟選擇安裝來進行一步說明

首先系統選擇了Ubuntu server主版本號是22

因為似乎是比較穩定的版本,並且相對windows要好上不少

當然也有看到新的24版本,雖然看功能上應該也是不錯

不過根據查到的資料來看,也許支援性反而會比較差(目前來說)

當然我的考量其實也很簡單,就是網路上有更多資料可以查,然後穩定

所以自然選擇22版了


那想必大家有在專研程式碼的,應該也很清楚,現在各種不同版本,時常就需要注意不同版本之間的差異產生的問題,應該多少都會注意這塊了吧


那回到伺服器這邊,首先要架設伺服器自然是得使用"固定IP"


還有配套的轉發與https網域申請


當然如果測試的話,也可以暫時只有IP(可以先測試連線)


但是IP直連的缺點也是相當的多,也包含了直連沒有https的加持(加密)會被顯示不安全的連線


當然如果你自己使用,或是你的使用者都很信任你的IP,這塊倒是沒問題就是了,雖然依然會有被攔截被駭導入一些增加風險的狀況


而我這邊則是簡單說明我設置讓網域生效的過程

首先我是先找了網域商購買網域,當然這可以選擇自己信任的商家,又或是選擇台灣便宜的網域商家都可以

根據我簡單的搜尋結果是想買.tw這種網域,買台灣的網域商似乎比較便宜(我沒有做很完整的調查,只是粗略看起來)


所以我最後選擇的是Godaddy買的.com網域,因為在那邊買.tw似乎不太順利(遇到了一些問題後就直接改買.com了)

然後啟用Cloudflare的DNS那邊的轉發,就是新增一個


如上圖的樣子,就可以了

當然還要按照指示的把Cloudflare 名稱伺服器加入到Godaddy那邊


那這邊如果熟悉的話,也可以按照Cloudflare的建議把Godaddy的網域轉移到Cloudflare使用

可以看自己需求,如果不清楚差異也可以就那樣放著,目前還不會用到有差的功能

設置完,其實就會自動轉發相關的流量從網域到你的IP了

也算是可以正式的開始架設伺服器相關的東西

這邊的話伺服器使用的語言選擇,還有資料庫的部分

首先畢竟也不算熟練,所以先使用了輕量化的設計

 Flask + PostgreSQL+Nginx

主要語言則使用Python

那首先這邊可以先安裝這幾個

那除非你很確定專案內全都會用到這些套件

不然可以先建立虛擬環境再進行安裝

進入虛擬環境看到(venv)後可以打pip install 套件名,再去安裝那些套件到虛擬環境中

當然這時候要注意,先前的防火牆是否已經開啟

畢竟已經使用固定IP架設伺服器了,多少還是會有些風險


檢查的話可以打sudo ufw status

去檢查防火牆的狀態,當然要記得啟用sudo ufw enable 

然後針對你要的port去開啟,也可以指定TCP或UDP

不過根據我查到的資料似乎有寫到Cloudflare對於UDP轉發是有限制的(對免費用戶)所以如果想使用UDP的人還得多研究一下轉發的部分是否真的有支援,我目前是只用了TCP,所以沒有遇到問題


這邊也提供我測試的方法

首先寫一個python程式碼,新增在你指定的專案中,例如main.py等等

當然你也可以再另一台電腦撰寫,我目前就是使用原本的電腦進行專案管理

寫好的py檔案在透過內網丟到伺服器上,例如讓其監聽網域底層的@app.route("/")

之後把檔案丟到你伺服器專案內需要執行的位置後,透過指令python3 main.py

當然記得切換到正確執行的路徑底下

執行後你就可以透過瀏覽器打自己的網域,進行測試是否真的有看到你剛剛再main.py程式碼中所丟的回應了~


這次就先分享到這邊,如果有疑問,或是有什麼講錯的地方想指正,也歡迎留言






















留言