统一C#-';实例化';只接受;“转换”;,不是';矢量3';用于实例化对象位置
我正在制作一个游戏,遇到了一个问题。我试图在按下“跳转”按钮时实例化一个对象,并尝试在指定位置之间给实例化对象一个随机位置。然而,我的实例化函数只接受一个“Transform”变量作为它的第二个参数,而不接受任何Vector3值作为位置,就像它通常做的那样 谁能告诉我为什么,这个问题的解决办法是什么?这是代码:请注意Update函数中的实例化函数,这就是我遇到问题的地方。我想使用Vector3垃圾位置作为第二个参数。谢谢统一C#-';实例化';只接受;“转换”;,不是';矢量3';用于实例化对象位置,c#,unity3d,transform,instantiation,C#,Unity3d,Transform,Instantiation,我正在制作一个游戏,遇到了一个问题。我试图在按下“跳转”按钮时实例化一个对象,并尝试在指定位置之间给实例化对象一个随机位置。然而,我的实例化函数只接受一个“Transform”变量作为它的第二个参数,而不接受任何Vector3值作为位置,就像它通常做的那样 谁能告诉我为什么,这个问题的解决办法是什么?这是代码:请注意Update函数中的实例化函数,这就是我遇到问题的地方。我想使用Vector3垃圾位置作为第二个参数。谢谢 public Transform ground; public Game
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);
}
公共变换场;
公共游戏对象垃圾;
公共浮动装载时间;
公共物品;
专用队列;
公共矢量3起始位置;
公共矢量3下一个位置;
//用于初始化
无效开始(){
下一个位置=开始位置;
groundQueue=新队列(numberOfObjects);
对于(int i=0;i而言,这些是实例化
重载函数:
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);
时,它将使用公共静态对象Instantiate(Object original,Transform parent);
重载,因为这是最接近的重载,因为它需要两个参数
但是garbagePosition
是一个Vector3
,而第二个参数期望一个Transform
而不是Vector3
您需要使用公共静态对象实例化(对象原始、向量3位置、四元数旋转);
重载。因此,为了传递向量3
位置,您还必须传递旋转/四元数
如果你没有旋转来传递它,你可以传递它,这意味着没有旋转
Instantiate(garbage, garbagePosition);
应该是
Instantiate(garbage, garbagePosition, Quaternion.identity);
以下是实例化重载函数:
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);
时,它将使用公共静态对象Instantiate(Object original,Transform parent);
重载,因为这是最接近的重载,因为它需要两个参数
但是garbagePosition
是一个Vector3
,而第二个参数期望一个Transform
而不是Vector3
您需要使用公共静态对象实例化(对象原始、向量3位置、四元数旋转);
重载。因此,为了传递向量3
位置,您还必须传递旋转/四元数
如果你没有旋转来传递它,你可以传递它,这意味着没有旋转
Instantiate(garbage, garbagePosition);
应该是
Instantiate(garbage, garbagePosition, Quaternion.identity);
啊!我在使用GameObject garb=实例化(垃圾)然后手动设置garb.transform.position=garbagePosition中找到了一个解决方案。你的方法也很有效,而且是正确的。“我在使用中找到了一个解决方案”这是什么意思?刚刚看到你的编辑。是的,这是另一种方法。我的答案是解决你的问题以及你为什么会有这个问题。如果我的方法也有效,并且是正确的,你可以接受这个答案,将其标记为已回答。谢谢。啊!我在使用GameObject garb=Instantiate(垃圾)中找到了一个解决方案然后手动设置garb.transform.position=garbagePosition。您的方法也很有效,而且是正确的。“我在使用中找到了解决方案”这是什么意思?刚刚看到你的编辑。是的,这是另一种方法。我的答案是解决你的问题以及为什么你会有问题。如果我的方法也有效,并且是正确的,你可以接受这个答案,将其标记为已回答谢谢。