91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[Unity插件]LitJson雜談

發布時間:2020-07-29 22:40:53 來源:網絡 閱讀:424 作者:蓬萊仙羽 欄目:開發技術

開場白


LitJson是一個開源項目,比較小巧輕便,安裝也很簡單,在Unity里只需要把LitJson.dll放到Plugins文件夾下,并在代碼的最開頭添加 “Using LitJson”就可以了。簡單來說,LitJson的用途是實現Json和代碼數據之間的轉換,一般用于從服務器請求數據,得到返回的Json后進行轉換從而在代碼里可以訪問。具體請詳見LitJson的官網。

關于和服務器數據之間的轉換在此就不再贅述,官網以及一些博客里已有涉及,而且也比較詳細了。

這里,主要談一下LitJson的其他用途。

想象一個場景,你需要顯示一個家庭信息的表格,這個表格的每一行代表了你的一個家人的名字、年齡、手機號碼和住址等信息。因為這個信息不大,用數據庫實在是大材小用,而且也很麻煩。

我們可以用一個數據結構來在代碼里表示每個家人的信息:

[csharp] view plaincopyprint?[Unity插件]LitJson雜談[Unity插件]LitJson雜談
  1. public class FamilyInfo {  
  2.     public string name;  
  3.     public int age;  
  4.     public string tellphone;  
  5.     public string address;  
  6. }  


然后用一個List來表示家庭信息表:

[csharp] view plaincopyprint?[Unity插件]LitJson雜談[Unity插件]LitJson雜談
  1. public class FamilyList {  
  2.     public List<FamilyInfo> family_list;  
  3. }  


最后,打印信息:
[csharp] view plaincopyprint?[Unity插件]LitJson雜談[Unity插件]LitJson雜談
  1. private void DisplayFamilyList(FamilyList familyList) {  
  2.     if (familyList == nullreturn;  
  3.           
  4.     foreach (FamilyInfo info in familyList.family_list) {  
  5.         Debug.Log("Name:" + info.name + " Age:" + info.age + " Tel:" + info.tellphone + " Addr:" + info.address);  
  6.     }  
  7. }  
  

準備工作都已經做好,那么數據到底在什么時候初始化呢?

第一種方法

一種方法是我們可以在編輯面板里直接初始化。為了達到目的,我們還需要告訴Unity編輯器在面板里顯示我們的FamilyInfo,以便我們可以隨機編輯,這是通過在類名前聲明

[System.Serializable]來實現的。

具體代碼如下:

[csharp] view plaincopyprint?[Unity插件]LitJson雜談[Unity插件]LitJson雜談
  1. sing System.Collections;  
  2. using System.Collections.Generic;  
  3. using LitJson;  
  4.   
  5. [System.Serializable]  
  6. public class FamilyInfo {  
  7.     public string name;  
  8.     public int age;  
  9.     public string tellphone;  
  10.     public string address;  
  11. }  
  12.   
  13. [System.Serializable]  
  14. public class FamilyList {  
  15.     public List<FamilyInfo> family_list;  
  16. }  
  17.   
  18. public class LitJsonSample : MonoBehaviour {  
  19.       
  20.     public FamilyList m_FamilyList = null;  
  21.       
  22.     // Use this for initialization  
  23.     void Start () {  
  24.         DisplayFamilyList(m_FamilyList);  
  25.     }  
  26.       
  27.     private void DisplayFamilyList(FamilyList familyList) {  
  28.         if (familyList == nullreturn;  
  29.           
  30.         foreach (FamilyInfo info in familyList.family_list) {  
  31.             Debug.Log("Name:" + info.name + "       Age:" + info.age + "        Tel:" + info.tellphone + "      Addr:" + info.address);  
  32.         }  
  33.     }  
  34.       
  35.     // Update is called once per frame  
  36.     void Update () {  
  37.       
  38.     }  
  39. }  


運行結果如下:
[Unity插件]LitJson雜談


但是這種方法靈活性太差,而且很容易發生錯誤。例如當我們不小心改變了變量名稱,那么我們在面板里編輯好的數據就都會不見了!下面介紹另一種比較好的方法——把數據保存為本地的一個文本文件。


第二種方法


正如前面所說,我們把信息存成一個表格,并保存為txt格式。注意,為了能使用LitJson解析,txt中必須使用Json格式。
family.txt如下:
[plain] view plaincopyprint?[Unity插件]LitJson雜談[Unity插件]LitJson雜談
  1. {  
  2.     "family_list": [  
  3.         {  
  4.             "name" : "candycat",  
  5.             "age" : 21,  
  6.             "tellphone" : "xxx",  
  7.             "address" : "xxx"  
  8.         },  
  9.         {  
  10.             "name" : "candycat#",  
  11.             "age" : 22,  
  12.             "tellphone" : "xxx",  
  13.             "address" : "xxx"  
  14.         },  
  15.         {  
  16.             "name" : "candycat##",  
  17.             "age" : 23,  
  18.             "tellphone" : "xxx",  
  19.             "address" : "xxx"  
  20.         }  
  21.     ]  
  22. }  

代碼如下:
[csharp] view plaincopyprint?[Unity插件]LitJson雜談[Unity插件]LitJson雜談
  1. using UnityEngine;  
  2. using UnityEditor;  
  3. using System.Collections;  
  4. using System.Collections.Generic;  
  5. using LitJson;  
  6.   
  7. public class FamilyInfo {  
  8.     public string name;  
  9.     public int age;  
  10.     public string tellphone;  
  11.     public string address;  
  12. }  
  13.   
  14. public class FamilyList {  
  15.     public List<FamilyInfo> family_list;  
  16. }  
  17.   
  18. public class LitJsonSample : MonoBehaviour {  
  19.       
  20.     public FamilyList m_FamilyList = null;  
  21.       
  22.     // Use this for initialization  
  23.     void Start () {  
  24.         ReloadFamilyData();  
  25.           
  26.         DisplayFamilyList(m_FamilyList);  
  27.     }  
  28.       
  29.     private void ReloadFamilyData()  
  30.     {             
  31.         UnityEngine.TextAsset s = Resources.Load("Localize/family"as TextAsset;   
  32.         string tmp = s.text;  
  33.         m_FamilyList = JsonMapper.ToObject<FamilyList>( tmp );  
  34.         if ( JsonMapper.HasInterpretError() )  
  35.         {  
  36.             Debug.LogWarning( JsonMapper.GetInterpretError() );  
  37.         }  
  38.     }  
  39.       
  40.     private void DisplayFamilyList(FamilyList familyList) {  
  41.         if (familyList == nullreturn;  
  42.           
  43.         foreach (FamilyInfo info in familyList.family_list) {  
  44.             Debug.Log("Name:" + info.name + "       Age:" + info.age + "        Tel:" + info.tellphone + "      Addr:" + info.address);  
  45.         }  
  46.     }  
  47.       
  48.     // Update is called once per frame  
  49.     void Update () {  
  50.       
  51.     }  
  52. }  

有幾點注意的地方:
  • Resources.Load("Localize/family")表示加載family文件,但一定要注意要把family.txt文件放在Resources文件夾下,只有這樣Resources.Load才能夠訪問到,在這個例子里family的絕對路徑為“Resources/Localize/family”。這是因為Resources文件夾是Unity默認的資源文件夾,有著特殊的用途,這里我還不是很了解,以后要深入學習一下;
  • Resources.Load參數中的路徑名一定不可以包含后綴,這里也就是.txt后綴;

輸出結果和第一種方法完全一樣。

注意

使用LitJson解析時,解析類(如上面的FamilyInfo)若包含Dictionary結構,則key的類型必須是string,而不能是int類型(如需表示id等),否則無法正確解析!

插件下載地址:http://download.csdn.net/detail/candycat1992/6624695
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

un j
AI

武清区| 白银市| 吴堡县| 新源县| 高尔夫| 合作市| 儋州市| 高雄县| 瑞丽市| 苍梧县| 宜昌市| 曲沃县| 彭山县| 泗阳县| 托里县| 望奎县| 灵武市| 浏阳市| 九龙城区| 宜阳县| 故城县| 卫辉市| 平昌县| 阜平县| 高淳县| 衡山县| 伊川县| 清新县| 长葛市| 招远市| 固始县| 临清市| 南昌市| 朔州市| 周至县| 景洪市| 苍山县| 肃北| 汉寿县| 阜宁县| 冕宁县|