【发布时间】:2016-02-29 20:30:19
【问题描述】:
游戏一开始就尝试创建一个简单的圆形游戏对象的网格。每个圆圈之间的空间在 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));
}
}
}
【问题讨论】:
-
然后尝试使用调试器并逐步执行代码我相信它会冻结在有问题和/或问题的行上。你调试过这个但我认为这个
gameObject应该替换为transform,因为这是Instantiate(gameObject,这一行中新创建的对象实例@ -
由此我认为 Awake 函数在每个副本上运行,并且在迭代器上永远不会超过 1,无休止地循环,有没有办法阻止这种情况?
-
@JamesHughes 你是对的,每个副本都会调用一次,所以你只是创建了无限循环。只需将网格创建和您的圆形对象分开即可。
-
@junipi 啊谢谢