Unity开启多个协程往往造成卡顿,因此需要每完成一个协程再新开启一个协程。
for (int i = 0; i < result.result.Count; i++)
{
try
{
BaseStation responses = JsonMapper.ToObject<BaseStation>(JsonMapper.ToJson(result.result[i]));
//StartCoroutine(CreatBaseStation(responses));
CreatBaseStationAct(responses);
}
catch (Exception e)
{
Debug.LogError(e.Message);
throw;
}
}
public void CreatBaseStationAct(BaseStation baseStation)
{
CreatingBaseStationList.Add(baseStation);
// CreatingActionList.Add(act);
if (_isCreating)
return;
StartCoroutine(CreatBaseStation(baseStation));
}
public IEnumerator CreatBaseStation(BaseStation pBaseStation)
{
NotificationManager.instance.OpenLoading();
_isCreating = true;
Point pPoint = new Point(double.Parse(pBaseStation.x), double.Parse(pBaseStation.y), double.Parse(pBaseStation.z));
Vector3 v3 = PosManager.instance.RealToUnity(pPoint.ToVector3());
GameObject go = new GameObject(pBaseStation.sbid);
go.transform.SetParent(transform);
GameObject Model = pBaseStation.lx == "1" ? Instantiate(BaseStationModelPerson, v3, Quaternion.identity, go.transform) : Instantiate(BaseStationModelMonitor, v3, Quaternion.identity, go.transform);
Model.SetActive(false);
BaseStation baseStation = Model.AddComponent<BaseStation>();
baseStation.id = pBaseStation.id;
baseStation.sbid = pBaseStation.sbid;
baseStation.sbmc = pBaseStation.sbmc;
baseStation.x = pBaseStation.x;
baseStation.y = pBaseStation.y;
baseStation.z = pBaseStation.z;
baseStation.xkzh = pBaseStation.xkzh;
baseStation.lx = pBaseStation.lx;
baseStation.Go = Model;
_frameIndex++;
if (_frameIndex > CreatSpeed)
{
yield return new WaitForEndOfFrame();
_frameIndex = 0;
}
/*添加图层目录*/
UITreeExample.instance.addChildNode(new UITreeData("基站模型"), new UITreeData(pBaseStation.sbid));
UITreeExample.instance.addChildNode(new UITreeData("基站名称"), new UITreeData(pBaseStation.sbmc));
string url1 = "XXXXXXX"
string url2 = "XXXXXXX"
string url = pBaseStation.lx == "1" ? url1 : url2;
//基站名字
Point pPoint1 = new Point(double.Parse(pBaseStation.x), double.Parse(pBaseStation.y), double.Parse(pBaseStation.z) + 10);
Vector3 v31 = PosManager.instance.RealToUnity(pPoint1.ToVector3());
GameObject nameGo = Instantiate(NameTextGo, v31, Quaternion.identity, go.transform);
nameGo.transform.GetChild(0).GetComponentInChildren<TextMesh>().text = baseStation.sbmc;
//getBaseStationMessage(url, nameGo, pBaseStation, baseStation);
if (nameGo != null && baseStation != null)
{
baseStation.NameGo = nameGo;
lisBaseStation.Add(baseStation);
BaseStationAct?.Invoke(BaseStations);
}
yield return new WaitForEndOfFrame();
act?.Invoke(baseStation);
CreatingBaseStationList.Remove(pBaseStation);
if (CreatingBaseStationList.Count > 0)
StartCoroutine(CreatBaseStation(CreatingBaseStationList[0]));//循环生成基站
else
{
_isCreating = false;
}
yield return new WaitForSeconds(1f);
NotificationManager.instance.CloseLoading();
NotificationManager.instance.OpenNotification("基站生成完毕!");
}