2017-01-29 26 views
0

このコードはC#であり、私はUnityゲームエンジンを使用しています。配列要素(C#)Unityを1つずつ有効にする方法

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class CollisionDetectionForQuest : MonoBehaviour { 

public GameObject[] Garbages; 
public GameObject[] GarbagesDummy; 
public bool activateInactive; 
//public GameObject[] Counter; 


void Start(){ 

    Garbages = GameObject.FindGameObjectsWithTag("Trash"); 
    foreach (GameObject garb in Garbages) { 

    } 

    GarbagesDummy = GameObject.FindGameObjectsWithTag ("TrashDummy"); 
    foreach(GameObject dummy in GarbagesDummy){ 
     dummy.gameObject.SetActive (false); 
    } 
} 

void OnCollisionEnter(Collision obj){ 
    if (obj.gameObject.CompareTag ("Trash")) { 
     obj.gameObject.SetActive (false); 
     activateInactive = true; 

     //in this line i want to activate my GarbageDummy 1 by 1 base on 
     //every Trash i put in my collider. 
     foreach(GameObject a in GarbagesDummy){ 
      a.gameObject.SetActive (true); 
     } 
} 

だから基本的に私は私のコライダーを置くすべてのゴミに1によってgarbagedummyゲームオブジェクト1をアクティブにします。しかし、私はこれを試して、それは動作しません:

誰でも助けてください。ここで

は私のスクリーンショットです:

Here

+0

Hmmあなたが達成しようとしていることは不明です。あなたはあなたのコライダーに 'ゴミ箱'オブジェクトを置くたびに、 'ゴミ箱'オブジェクトを一つ起動させたいのですか?それは特定のごみダミーか、それともちょうどのものである必要がありますか? –

+0

@LukeBriggsそれらのいずれか。私は**ゴミ**オブジェクトを私のコライダーに置くたびにそれをsetActive(false)として設定し、私の**ゴミのダミー**オブジェクトをアクティブにして、ちょうど自然に置いたように見えるようにします。 – TheGinxx009

答えて

1

あなたは、単一のゴミダミーオブジェクト(それらのいずれかの配列で)を活性化したい場合は、あなたがそこにループを使用する必要はありません。ゴミオブジェクトが追加されるたびに続いて、その数を増やし、あなたのGarbagesDummy配列にインデックスとして使用

public int ActivatedDummyIndex; // Add this! 
public GameObject[] Garbages; 
public GameObject[] GarbagesDummy; 
... 

:代わりに、あなたはこのようなフィールドとして、最大有効にしている1を追跡

これは、ダミーオブジェクトの数がゴミ箱オブジェクトの数と同じであることを前提としています。ゴミ箱オブジェクトをさらに追加してそれらをすべて追加すると、最終的に(ダミーオブジェクトを使い果たしてしまう)範囲外の例外のインデックスが取得されます。

あなたの質問に答える必要がありますが、はこれが典型的なアプローチではないことに言及する価値があります。固定数の隠しダミーオブジェクトを必要に応じて表示するのではなく、通常は新しいダミーオブジェクトをインスタンス化します(GameObject.Instantiateを使用)。

+0

うわーいいアプローチ。おかげさまでありがとうございます – TheGinxx009

+0

しかし、私はそれをロードするときに私はあなたの提案を試みたときに問題を抱えていません。私はこのコード行が必要だと思います: if(obj.gameObject.CompareTag( "TrashDummy")){ 私のゲームをロードするときにそれを有効にするには – TheGinxx009

+0

@ TheGinxx009 'CompareTag("ゴミ箱 ")または" CompareTag( " TrashDummy ")'は上記のスクリプトが実際にどのオブジェクトにアタッチされているかによって異なります:) –

関連する問題