Unity C# - 'Instantiate'只接受“Transform”,而不是'Vector3'用于实例化的对象位置

时间:2017-01-22 15:49:23

标签: c# unity3d transform instantiation

我正在构建游戏并遇到问题。我正在尝试在按下“跳转”按钮时实例化一个对象,并且我试图给实例化对象一个指定位置之间的随机位置。但是,我的Instantiate函数只接受一个“Transform”变量作为它的第二个参数,而不是像通常那样接受任何Vector3的位置值。

任何人都可以告诉我原因,这个问题的解决方案是什么?这是代码:请注意Update函数中的Instantiate函数,这就是我遇到问题的地方。我想使用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);
}

}

1 个答案:

答案 0 :(得分:2)

这些是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);
相关问题