C# Unity-C实例化不工作

C# Unity-C实例化不工作,c#,unity3d,game-engine,game-development,C#,Unity3d,Game Engine,Game Development,我使用实例化创建对象,但它创建对象是连续的 代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; public class instantiateObject: MonoBehaviour { public int topSayi; public Transform prefab; void Start () { for(int a =

我使用实例化创建对象,但它创建对象是连续的

代码如下:

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


}

它创建对象连续

它看起来没有进入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版:

在一个预置上有一个脚本,可以在Start或Awake中创建同一预置的副本,这在功能上等同于创建一个无限递归。每当预置的一个副本被实例化时,它几乎会立即无限地创建它自己的另一个副本。简单地说,不要这样做!让其他管理器类型的对象来进行实例化

原件:

您不实例化转换,而是实例化游戏对象:

public GameObject prefab;
其次,您应该在实例化之后或最好在实例化期间设置位置:

var go = Instantiate(prefab, position);
最后,正如@JackMini36所指出的,for循环上的条件是edit:was-morformed:

for(int a = 0; a < numSayi; a++)

欢迎来到堆栈溢出。你能描述一下你所说的不正常是什么意思吗?发生了什么事?目前,我看不到任何代码来设置预置变量本身的值。它并没有发生任何事情,所以您是否使用了调试器来单步执行代码?topSayi的价值是什么?看起来循环条件是错误的,但是我们也看不到topSayi是在哪里声明的……这里有一些潜在的陷阱。for条件,topSayi,实例化转换,在实例化之前设置位置,以及设置localPosition。@浸入式:啊,是的,我一直忘了:你有一个无限循环,这意味着你的for条件不好。for循环现在看起来是什么样子?还有,这个脚本在你实例化的预置上吗?aka隐式递归那么topSayi的值是多少?