我使用instantiate来创建对象,但它会创建对象连续。
代码在这里:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class instantiateObject: MonoBehaviour {
public int topSayi;
public Transform prefab;
void Start () {
for(int a = 0; a < topSayi; a++)
{
prefab.localPosition = new Vector3(0, a * -0.5f, 5);
Instantiate(prefab);
}
}
}
它创建对象连续
答案 0 :(得分:0)
看起来它不会进入for循环。我猜想topSayi
是你要实例化的时间,所以你写错了for语句。它应该是这样的:
for(int a = 0; a < topSayi; a++)
{
prefab.localPosition = new Vector3(0, a * -0.5f, 5);
Instantiate(prefab);
}
您正在检查a
是否大于topSayi
,这绝不会是这种情况。因此它永远不会进入for语句。它必须是相反的方式。
答案 1 :(得分:0)
修订版1:
在预制件上创建脚本,在Start()
或Awake()
中创建相同预制件的副本,其功能相当于创建无限递归。每当实例化预制件的副本时,它(几乎)立即无限制地创建另一个自身副本。简单地说,不要这样做!有一些其他经理类型的对象来进行实例化。
<强>原始强>
您没有实例化转换,您实例化GameObjects:
public GameObject prefab;
其次,您应该设置AFTER后的位置,或者最好在实例化期间设置:
var go = Instantiate(prefab, position);
最后,正如@ JackMini36所说,你的for循环的条件是(编辑:是)格式错误:
for(int a = 0; a < numSayi; a++)