Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
统一C#-';实例化';只接受;“转换”;,不是';矢量3';用于实例化对象位置_C#_Unity3d_Transform_Instantiation - Fatal编程技术网

统一C#-';实例化';只接受;“转换”;,不是';矢量3';用于实例化对象位置

统一C#-';实例化';只接受;“转换”;,不是';矢量3';用于实例化对象位置,c#,unity3d,transform,instantiation,C#,Unity3d,Transform,Instantiation,我正在制作一个游戏,遇到了一个问题。我试图在按下“跳转”按钮时实例化一个对象,并尝试在指定位置之间给实例化对象一个随机位置。然而,我的实例化函数只接受一个“Transform”变量作为它的第二个参数,而不接受任何Vector3值作为位置,就像它通常做的那样 谁能告诉我为什么,这个问题的解决办法是什么?这是代码:请注意Update函数中的实例化函数,这就是我遇到问题的地方。我想使用Vector3垃圾位置作为第二个参数。谢谢 public Transform ground; public Game

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

谁能告诉我为什么,这个问题的解决办法是什么?这是代码:请注意Update函数中的实例化函数,这就是我遇到问题的地方。我想使用Vector3垃圾位置作为第二个参数。谢谢

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。您的方法也很有效,而且是正确的。“我在使用中找到了解决方案”这是什么意思?刚刚看到你的编辑。是的,这是另一种方法。我的答案是解决你的问题以及为什么你会有问题。如果我的方法也有效,并且是正确的,你可以接受这个答案,将其标记为已回答谢谢。