【问题标题】:Editor freezes with Instantiate() in Unity 2019编辑器在 Unity 2019 中使用 Instantiate() 冻结
【发布时间】:2020-03-26 00:37:54
【问题描述】:

我的游戏有一个家庭场景和两个游戏场景(SceneA 和 SceneB)。使用 SceneManager.LoadScene() 从主场景移动到场景 A 时,编辑器会冻结。

所以,我检查了 SceneA 的代码。然后我注意到编辑器被冻结在一个地方。

以下代码适用于场景A。

//SceneA Script

[SerializeField]
float range;
[SerializeField]
GameObject obj;

void Start()
{
    Spawn();
}

void Spawn()
{
    for (int i = 0; i < 99; i++)
    {
        Instantiate(obj, new Vector3(Random.Range(-range, range), 0.5f, Random.Range(-range, range)), Quaternion.identity);
    }
}

如果我删除 Spawn(),它不会冻结。但我需要创建 99 个 obj 对象。 突然间它开始冻结,即使它是在不久前完成的。

此外,SceneB 在出现此问题之前一直正常加载,但现在当您在此问题后尝试 SceneManager.LoadScene(SceneB) 时,它会冻结。

这是一个 Unity 错误吗?是否涉及播放器设置? SceneB无法读取的原因是在SceneA中冻结时终止编辑器任务有问题?

我真的遇到了麻烦,因为我没有看到任何错误。请有人帮助我。

【问题讨论】:

  • 好吧Instantiating 100 个对象只需要一段时间。特别是如果所有这些对象也有一些我们不知道的组件,这可能需要一段时间......你是否确保生成的对象没有附加相同的脚本,并且每个对象都会生成另外 100 个对象,例如? ;) freeze 是什么意思.. 它只是需要一些时间还是永远不会终止?
  • 是否反对从一开始就在场景中拥有所有这些对象并且只更新它们的位置?

标签: c# unity3d


【解决方案1】:

我的一个小错误导致了这个问题。 也许这个问题对于被 SceneManager.LoadScene() 冻结 Unity 的其他人来说毫无用处。

我的失败:

Instantiate() 创建的对象的脚本中有错误。

//freeze code
void Start()
{
     StartCoroutine("Load");
}
IEnumarator Load()
{
    yield return new WaitFOrSeconds(2);
    while(true)
    {
        //Something heavy processing
    }
}

结冰是很自然的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2019-01-04
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多