我的 Android ARCore Unity 应用/游戏在协程运行时卡住,然后在协程完成后恢复。协程位于附加到游戏对象的脚本中,并且在 Start() 函数中调用协程。我尝试将 yield return null;
插入到协程的更多部分,这减少了暂停时间,但增加了更多暂停,导致游戏在一两秒内非常不稳定(基本上不存在)对象被实例化。发生这种情况是因为 ARCore 不支持多线程渲染吗?如果是这种情况(或不是),我该如何解决这个问题,以便我的协程在对象实例化后运行(我猜是“在后台”),因此它不会影响游戏玩法 FPS?
这是我的代码:
void Start()
{
StartCoroutine(MyCoroutine());
}
IEnumerator MyCoroutine ()
{
yield return null;
Transform[] allChildren = GetComponentsInChildren<Transform>();
foreach (Transform child in allChildren)
{
if (child.gameObject.GetComponent<MeshFilter>())
{
if (!child.gameObject.GetComponent<MeshCollider>())
{
child.gameObject.AddComponent<MeshCollider>();
}
}
child.gameObject.tag = "CenterObject";
}
}
最佳答案
协程在构建它们时似乎有一定的开销,如下所述:https://forum.unity.com/threads/startcoroutine-performance-cost.233623/
鉴于您正在实例化对象,我建议使用以下路径:
- 将协程更改为简单的函数调用,因为您似乎不需要循环迭代之间的任何延迟,这是在 Unity 中使用协程的主要思想。您还添加了碰撞器并期望游戏继续进行,如果您需要注册碰撞,这可能会导致意外行为。
- 如果可能的话,实例化预先附加碰撞器的预制件。
- 使用对象池,您可以在游戏开始之前创建对象,并在需要时激活它们,并在必要时在它们被销毁时禁用它们。
关于unity-game-engine - 协程运行时应用程序/游戏完全卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50078410/