游戏中的选关界面,每个关卡都有不同的文本信息,这时就需要一些方便的存储和读取的手段,经过搜索和学习,我发现一般都是使用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解析类
using LitJson;
using System.Collections.Generic;
using UnityEngine;
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#脚本 关卡数据信息类
using System;
[Serializable]
public class LevelDataInfo {
[NonSerialized]
public string levelIndex;
public string levelName;
public string levelText;
public string levelPicPath;
}
网友评论