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);
重载,因为这是最接近的重载,因为它需要两个参数。
但是 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);
我正在开发游戏,运行 遇到了问题。我试图在按下 "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);
重载,因为这是最接近的重载,因为它需要两个参数。
但是 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);