Unity学习笔记——LitJson的简单使用

游戏中的选关界面,每个关卡都有不同的文本信息,这时就需要一些方便的存储和读取的手段,经过搜索和学习,我发现一般都是使用Json存储信息。在Unity中导入LitJson,代码中解析Json就可以解决需求,由于目前只需要读,所以就暂时不研究写的用法了。

Json

[  
    {  
        "levelIndex": "1",
        "levelName":"黎维尼亚",
        "levelText":"经过黎维尼亚边境时,敌人发现了我们。我们不得不应战了,招募更多的勇士,击败敌人。",
        "levelPicPath":"Sprite/image3582"
    },  
    {  
        "levelIndex": "2",
        "levelName":"兰塔",
        "levelText":"敌人一直跟着我们到了兰塔城外,这里有茂密的树林,非常适合伏击敌人,我们需要更多的弓箭手。",
        "levelPicPath":"Sprite/image3582"
    },  
    {  
        "levelIndex": "3",
        "levelName":"诺尔顿",
        "levelText":"我们回到了城堡,敌人仍然不死心,四面八方集结了大量军队,他们试图在诺尔顿消灭我们。",
        "levelPicPath":"Sprite/image3582"
    },
    {  
        "levelIndex": "4",  
        "levelName":"阿克西亚",
        "levelText":"溃败的敌人已经四散逃走了,现在他们的城堡里估计正在瑟瑟发抖,我们只需要逐个击破就可以消灭它们。",
        "levelPicPath":"Sprite/image3582"
    },  
    {  
        "levelIndex": "5",  
        "levelName":"海塞斯",
        "levelText":"有一股敌人逃跑了,他们乘坐船只度过了北海,为了斩草除根,我们必须打下海塞斯。",
        "levelPicPath":"Sprite/image3582"
    },  
    {  
        "levelIndex": "6", 
        "levelName":"北海湾",
        "levelText":"有一股游击的敌军联合海盗袭击了我们在北海湾的海港补给站,我们需要回援北海湾。",
        "levelPicPath":"Sprite/image3582"
    },  
    {  
        "levelIndex": "7",
        "levelName":"北冰原",
        "levelText":"敌人已经穷途末路了,他们逃到了大陆的最北方,但我相信,这也是他们最后的坟墓了。",
        "levelPicPath":"Sprite/image3582"
    }   
]  

Json文件里有中文的话,TextAsset得到的对象无法识别,需要在如NotePad++这种文本编辑器里编码改为UTF-8 无BOM格式编码,得到文本内容后,使用litjson提供JsonMapper.ToObject方法,将文本转成jsondata,使用JsonMapper.ToObject方法,将data.ToJson()转为List<LevelDataInfo>后,就可以使foreach遍历信息了。

C#脚本 关卡Json解析类

public class LevelJsonPrase : MonoBehaviour
{
    public static LevelJsonPrase Instance;
    private void Awake()
    {
        Instance = this;
    }
    private void Start()
    {
        ParseUIPanelTypeJson();
    }
    private List<LevelDataInfo> levelDataList;
    private void ParseUIPanelTypeJson()
    {

        levelDataList = new List<LevelDataInfo>();
        TextAsset ta = Resources.Load<TextAsset>("LevelData");
        string levelJson = ta.text;
        JsonData data = JsonMapper.ToObject(levelJson);
        levelDataList = JsonMapper.ToObject<List<LevelDataInfo>>(data.ToJson());
        foreach (LevelDataInfo info in levelDataList)
        {
            Global.indexList.Add(info.levelIndex);
            Global.nameList.Add(info.levelName);
            Global.textList.Add(info.levelText);
            Global.mapPicPathList.Add(info.levelPicPath);
        }
    }
}
C#脚本 关卡数据信息类
[Serializable]
public class LevelDataInfo {
    [NonSerialized]
    public string levelIndex;
    public string levelName;
    public string levelText;
    public string levelPicPath;
}


猜你喜欢

转载自blog.csdn.net/u012187817/article/details/80459747
今日推荐