实例化冻结统一
本文关键字:冻结 实例化 | 更新日期: 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));
}
}
}