unity-game-engine - 协程运行时应用程序/游戏完全卡住

标签 unity-game-engine arcore

我的 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/

相关文章:

c# - DLL 中的 Unity C# 脚本

unity-game-engine - AR 应用程序的多边形数量限制是什么?

arcore - 如何使用 Sceneform 对每一帧进行处理?

android - 在 Unity3d 中使用 Android 上的音量按钮

visual-studio - "GetReferenceNearestTargetFrameworkTask"未找到任务

c# - 如何在unity3d 5.5.3版本中使用SSL协议(protocol)tlsv_1.2?

android - iOS ARCore - 如何使用 ARCore 连接 Android 和 iOS 设备并发送和接收 AR 对象?

c# - Unity(对象名称与游戏对象)

android - 如何使用 ARCore Camera 拍摄带有物体的图像?

java - Augmented Faces API – 面部地标是如何生成的?