litjson调用ToObject和ToJson的时候,如果文件内容过大(MB级别),会阻塞主线程造成卡顿,可以使用多线程读取,然后Unity这边开协程等待,这样不会对主线程有影响。
private int _readJsonCount = 0;
IEnumerator InitAllMapInfo()
{
_readJsonCount++;
ParameterizedThreadStart threadStart = new ParameterizedThreadStart(ReadMapJson);
Thread thread = new Thread(threadStart);
thread.Start(m);
while (_readJsonCount > 0)
{
yield return null;
}
//读取完毕
}
private void ReadMapJson(object mapId)
{
try
{
int m = int.Parse(mapId.ToString());
string FullName = GetMapJsonPath(m);
_dictAllLands.Add(m, JsonMapper.ToObject(File.ReadAllText(FullName)));
_readJsonCount--;
}
catch (Exception e)
{
_exMsg = e.Message;
_readJsonCount--;
}
}
ParameterizedThreadStart 是可以传参数的Thread,如果不需要,可以用ThreadStart。