2017-01-22 5 views
0

私はゲームを構築していて、問題に遭遇しました。私は、 "ジャンプ"ボタンが押されたときにオブジェクトをインスタンス化しようとしています。インスタンス化されたオブジェクトに指定された場所の間のランダムな位置を与えようとしています。しかし、私のインスタンス化関数は2番目の引数である "Transform"変数のみを受け入れ、一般的にそうであるようにVector3の値を取り込まないようにしています。Unity C# - インスタンシエートされたオブジェクトの位置の 'Vector3'ではなく、 "Transform"を受け入れるだけでインスタンシエートする

誰でも教えてください。なぜ、この問題の解決策はありますか?これはコードです:Update関数のInstantiate関数に注意してください。ここで問題に取り掛かります。私はVector3のgarbagePositionを第2引数として使用したいと思います。ありがとう。

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); 
} 

}

答えて

2

これらはInstantiateオーバーロード関数です:あなたは二つのパラメータでInstantiate(garbage, garbagePosition);を呼び出すときにそれが最も近い過負荷だから、それは2つのパラメータを取りますので、

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); 

、それはpublic static Object Instantiate(Object original, Transform parent);オーバーロードを使用します。

しかし、garbagePositionVector3であり、2番目のパラメータはTransformではないと予想されます。Vector3です。

オーバーロードをpublic static Object Instantiate(Object original, Vector3 position, Quaternion rotation);にする必要があります。したがって、Vector3のポジションを通過するには、ローテーション/ Quaternionも渡す必要があります。

ローテーションを渡す必要がない場合は、ローテーションなしのQuaternion.identityに渡すだけです。

Instantiate(garbage, garbagePosition); 

Instantiate(garbage, garbagePosition, Quaternion.identity); 
+0

ああする必要があります!私はGameObject garb = Instantiate(ガベージ)を使用して、garb.transform.position = garbagePositionを手動で設定するという解決策を見つけました。あなたの方法も機能し、正しい方法です。 – user3324792

+0

"それはどういう意味ですか? – Programmer

+0

あなたの編集を見ただけです。はい、これを行う別の方法です。私の答えは、あなたの問題に対処し、それを持っている理由です。 – Programmer

関連する問題