实例化冻结统一

本文关键字:冻结 实例化 | 更新日期: 2023-09-27 18:36:43

尝试在游戏开始时立即创建简单圆形游戏对象的网格。在 2D 中,每个圆之间的空间需要为 1.41 和 1.34。因此,通过一些数学运算,我会认为此脚本将相对于初始引用对象创建此网格。

但是,在编辑器中单击播放后,游戏会冻结,我必须使用命令提示符杀死 Unity。

有什么想法吗?

这是代码:

void Awake()
{
    Transform transform = gameObject.GetComponent<Transform>();
    for (float i = 1; i < 8; i++)
    {
        for (float j = 1; j<8;j++)
        {
            Instantiate(gameObject, transform.position + new Vector3(i * 1.41f, 0, j * 1.34f), new Quaternion(0, 0, 0, 0));
        }
    }
}

实例化冻结统一

void Awake()
{
    Transform transform = gameObject.GetComponent<Transform>();
    for (float i = 1; i < 8; i++)
    {
        for (float j = 1; j<8;j++)
        {
            Instantiate(gameObject, transform.position + new Vector3(i * 1.41f, 0, j * 1.34f), new Quaternion(0, 0, 0, 0));
        }
    }
}

查看您的即时对象,您正在使用游戏对象。这是对保存该脚本的游戏对象的引用。因此,您似乎正在做的是实例化该对象的克隆。新创建的对象也会触发循环,这将启动新的创建过程,依此类推。

总而言之,你创造了一个无限循环。您需要创建其他内容的实例,很可能是瓷砖预制件。

public GameObject myTilePrefab;
void Awake()
{
    Transform transform = gameObject.GetComponent<Transform>();
    for (float i = 1; i < 8; i++)
    {
        for (float j = 1; j<8;j++)
        {
            Instantiate(myTilePrefab, transform.position + new Vector3(i * 1.41f, 0, j * 1.34f), new Quaternion(0, 0, 0, 0));
        }
    }
}