Unity-C#Instantiate无效

时间:2018-04-28 08:10:50

标签: c# unity3d game-engine game-development

我使用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);
        }
    }


}

它创建对象连续

2 个答案:

答案 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++)