实例化冻结团结

时间:2016-02-29 20:30:20

标签: c# unity3d

在游戏开始时尝试创建简单圈子游戏对象的网格。每个圆之间的空间需要为1.41和2D中的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));
        }
    }
}

1 个答案:

答案 0 :(得分:2)

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));
        }
    }
}

查看您的Instantantiate,您正在使用gameObject。这是对持有该脚本的游戏对象的引用。所以你似乎正在做的是实例化该对象的克隆。新创建的对象也会触发循环,这将启动一个新的创建过程,依此类推。

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

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));
        }
    }
}