Unity C# - 'Instantiate' 只接受 "Transform",不接受实例化对象位置的 'Vector3'

Unity C# - 'Instantiate' only accepting "Transform", not 'Vector3' for instantiated object position

我正在开发游戏,运行 遇到了问题。我试图在按下 "Jump" 按钮时实例化一个对象,并且我试图为实例化对象提供指定位置之间的随机位置。然而,我的 Instantiate 函数只接受一个 "Transform" 变量作为它的第二个参数,而不像通常那样接受任何 Vector3 位置值。

谁能告诉我为什么,这个问题的解决方案是什么?这是代码:请注意更新函数中的实例化函数,这就是我 运行 遇到问题的地方。我想使用 Vector3 garbagePosition 作为第二个参数。谢谢

public Transform ground;

public GameObject garbage;

public float loadTime;

public int numberOfObjects;

private Queue<Transform> groundQueue;

public Vector3 startPosition;
public Vector3 nextPosition;

// Use this for initialization
void Start () {

    nextPosition = startPosition;
    groundQueue = new Queue<Transform>(numberOfObjects);

    for(int i = 0; i<numberOfObjects; i++)
    {
        groundQueue.Enqueue((Transform)Instantiate(ground));
    }

    for(int j = 0; j<numberOfObjects; j++)
    {
        Recycle();
    }

}

// Update is called once per frame
void Update () {

    if (groundQueue.Peek().localPosition.z + 10 < PlayerScript.playerDistance)
    {
        Recycle();
    }

    if (Input.GetButtonDown("Jump"))

    {
        Vector3 garbagePosition = new Vector3(Random.Range(-4, 4),
                                               0.5f,
                                               PlayerScript.playerDistance + Random.Range(10, 20));

        Instantiate(garbage, garbagePosition); 

        loadTime += Time.time;
    }
}

private void Recycle()
{
    Transform item = groundQueue.Dequeue();
    item.localPosition = nextPosition;
    nextPosition.z += item.localScale.z;
    groundQueue.Enqueue(item);
}

}

这些是 Instantiate 重载函数:

public static Object Instantiate(Object original);
public static Object Instantiate(Object original, Transform parent);
public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

当您使用两个参数调用 Instantiate(garbage, garbagePosition); 时,它将使用 public static Object Instantiate(Object original, Transform parent); 重载,因为这是最接近的重载,因为它需要两个参数。

但是 garbagePositionVector3,而第二个参数期望 Transform 而不是 Vector3

您需要使用 public static Object Instantiate(Object original, Vector3 position, Quaternion rotation); 重载。所以为了传入Vector3位置,还必须传入旋转/Quaternion

如果你没有旋转传递它,你可以直接传递它Quaternion.identity,这意味着没有旋转。

Instantiate(garbage, garbagePosition); 

应该是

Instantiate(garbage, garbagePosition, Quaternion.identity);