技術概述
在前端與后端進行數據交換的時候,往往都采用將數據封裝成Json對象進行傳輸。該方法是在unity腳本中向后端服務器傳遞、接收與解析Json對象的方法。
技術詳述
傳輸:
以HttpWebRequest方式向后端傳輸信息,以Json形式發送。、
接收:
接收的前半部分在傳輸的圖中,將服務器返回的信息以string形式接收,即傳輸圖中responseFromServer。
然后,將該string解析為Json對象,即可通過該json對象取出對象中任意想要的值,例如單獨取出data.code即返回碼進行狀態判斷。
解析:
解析的要點在於C#實體類的轉化,將需要的Json對象轉化為C#實體類(這一步可以通過網站自動轉化),然后利用該實體類以及unity自帶的JsonUtility,依圖上方式,即可實現。
技術使用中遇到的問題和解決過程
首先是實體類的轉化,為了正確解析Json對象和接收數據必須按照后端要求的Json格式正確轉化實體類,這一點通過找到能夠進行自動轉化的網站解決了。
另一個問題,必須在實體類前加上[Serializable],否則對於嵌套對象無法正確接收,如上圖中的return data實體類包含了UserInfo實體類對象,若沒有加上[Serializable]字段,那么該實體類無法正確解析后端傳來的Json對象中,與UserInfo實體類對象對應的部分,具體的表現形式即上圖中data對象可以正確接收並調用data.code與data.messge等,但調用data.userInfo.nickName等將會得到空值,即沒有正確接收或解析。
加上[Serializable]即解決。
總結
Unity腳本的編寫以C#為基礎,但是一些關鍵東西的寫法與C#並不相同,比如Json對象的解析可以使用unity自帶的JsonUtility,為此必須先將Json對象格式轉化為實體類。
在游戲的制作中,前后端互相傳輸數據是非常關鍵的部分,因此這一技術雖然簡單,但是必不可少,也毫無疑問是構建游戲的基礎也是核心。
[Serializable]是個坑,一開始還以為JsonUtility不能正確解析帶嵌套的Json對象,后來發現只是少了這個標識。