我正在构建游戏并遇到问题。我正在尝试在按下“跳转”按钮时实例化一个对象,并且我试图给实例化对象一个指定位置之间的随机位置。但是,我的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);
}
}
答案 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);
重载,因为它是最近的重载,因为它需要两个参数。
但garbagePosition
是Vector3
,而第二个参数预计Transform
不是Vector3
。
您需要使用public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
重载。因此,为了传递Vector3
位置,您还必须传递轮换/ Quaternion
。
如果你没有旋转来传递它,你可以传递它Quaternion.identity
,这意味着没有旋转。
Instantiate(garbage, garbagePosition);
应该是
Instantiate(garbage, garbagePosition, Quaternion.identity);