【问题标题】:Unity crashes when using Instantiate inside for loop在 for 循环中使用 Instantiate 时 Unity 崩溃
【发布时间】:2019-02-24 09:25:48
【问题描述】:
using UnityEngine;

public class SpawnIll : MonoBehaviour
{
    public int numberIll;
    public GameObject illPrefab;
    public Vector2 pos;
    void Start()
    {
        for (int i = 1; i <= numberIll; i++)
        {
          pos=new Vector2(Random.Range(-1000,1001),Random.Range(-1000,1001));
            Instantiate(illPrefab, pos, Quaternion.identity);
        }
    }

}

无论我选择什么作为 numberIll,Unity 都会崩溃。我认为它进入了一个无限循环,但我不知道我做错了什么。

【问题讨论】:

  • 除非你为你实例化的每个预制件增加numberIll,否则我看不出这个循环应该如何变得无限。有没有尝试设置 Brakepoints 并逐行调试代码?
  • @derHugo 在我使用 Instantiate 之前一切正常。也许它有什么问题。我不想使用协程。你还有什么想法吗?
  • 是否有可能附加到该预制件的组件导致问题?我认为问题不在于您提供的代码
  • @derHugo 我在预制件上附加了另一个脚本,但它处于非活动状态。除此之外没有别的了。
  • 嗯听起来很奇怪.. 可能会附加其他脚本以防万一。场景中是否还有其他脚本可能会干扰您提供的脚本或实例化对象?

标签: visual-studio unity3d crash


【解决方案1】:

已解决:创建的每个对象都在执行 for 循环,因此它只会创建大量游戏对象。我使用了协程,它奏效了。

【讨论】:

  • 什么?这个脚本是否附加到预制件上?
  • @Draco18s 不,如果你将它附加到预制件上,它将以指数方式创建对象(例如 1,2,4,8,16,...),所以你必须将它附加到一个空游戏对象
  • 嗯,是的,我知道。我试图弄清楚将您的代码更改为协程如何解决问题。因为那应该是零效应。
  • @Draco18s 好吧,当我使用 for 循环时,脚本被附加到预制件上,然后我使用协程并将脚本附加到一个空的游戏对象。
  • 所以,实际上,协程并不是解决方案,而是空的游戏对象。
猜你喜欢
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多