为什么我的统一编辑器崩溃了?使用实例化

Why my unity editor crash? with using Instantiate

我运行这个代码。 团结停止了。 统一在 1 到 10 分钟后关闭 当我删除 Instantiate 时,此代码运行良好! 我怎样才能使这段代码 运行 更好?

Unity Editor.log 文件:https://github.com/Oein/UnityBuilds/blob/main/Editor.log.zip

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MakeGround : MonoBehaviour
{
public Sprite ground;
public Sprite leftGround;
public Sprite rightGround;

string[] map = {
    "aaaaaaaaaa",
    "aaaaaaaaaa",
    "aaaaaaaaaa",
    "zxxxxxxxxc"
};
// Start is called before the first frame update
void Awake()
{
    for (int y = 0; y < map.Length; y++)
    {
        for (int x = 0; x < map[0].Length; x++)
        {
            print(x.ToString() + "  At  " + y.ToString());
            this.transform.position = new Vector3(x, y, 0);
            if (map[map.Length - 1 - y][x] != 'a')
            {
                Instantiate(gameObject , transform);
            }

        }
    }
}

// Update is called once per frame
void Update()
{

}
}

您正在实例化 gameObject 这是此脚本附加到自身的对象!

那么会发生什么:

  • 第一个Awake被调用
  • 您实例化 ngameObject
  • n 个新对象也有此脚本 MakeGround 附加
  • 所以又调用了 nAwake
  • 你生成 n x ngameObject
  • ..... => 无限指数实例化

您可能更愿意使用没有附加该脚本的专用单独预制件,并通过例如

引用它
[SerializeField] GameObject prefabToInstantiate;

然后

Instantiate(prefabToInstantiate, transform);