2016-10-25 2 views
0

私はカードハンドの配列を作成しました。 hierchyに表示されている:ゲームオブジェクトの配列/リストに階層構造の名前でアクセスする

たとえば、階層には示しています

Canvas 
    Hand 
    card1 
    card2 
    card3 
    card4 

私はこのコードを作成しました:

players = GameObject.FindGameObjectsWithTag("Player"); 
foreach (GameObject go in players) 
{ 
    Debug.Log("Player " + go + " is named " + go.name); 
} 

私は、カードの手にアクセスすることができますが、順序が間違っています。助言がありますか ?

マーロン

+0

あなたはそれを自分でソートする必要があります –

答えて

2

おかげで、これはマニュアルで指定されておらず、予測不可能なように返しFindGameObjectsWithTag項目の順序に依存することはありません。配列をループし、GameObject.nameプロパティと比較することによって、指定したGameObjectを見つけるカスタム関数を追加する必要があります。

GameObject[] players; 
void test() 
{ 
    players = GameObject.FindGameObjectsWithTag("Player"); 
    foreach (GameObject go in players) 
    { 
     Debug.Log("Player " + go + " is named " + go.name); 
    } 
} 

GameObject getGameObject(string gameObjectName) 
{ 
    for (int i = 0; i < players.Length; i++) 
    { 
     //Return GameObject if the name Matches 
     if (players[i].name == gameObjectName) 
     { 
      return players[i]; 
     } 
    } 

    Debug.Log("No GameObject with the name \"" + gameObjectName + "\" found in the array"); 
    //No Match found, return null 
    return null; 
} 

使用

GameObject card1 = getGameObject("card1"); 
GameObject card2 = getGameObject("card2"); 
GameObject card3 = getGameObject("card3"); 
GameObject card4 = getGameObject("card4"); 

EDIT

あなたの目標は、これはそれを行う必要があり、順番に、配列内のアイテムをソートする場合:

players = GameObject.FindGameObjectsWithTag("Player"); 
players = players.OrderBy(c => c.name).ToArray(); 
+0

この回答は良いですが、あなたはアイテムの順序に頼るべきではないと言っていいです:ユニティUI(4.6で実装されています)は階層序列に基づいています=>階層の最後は上に描画されます。状況に応じてこれは本当に役に立つ/不満になるかもしれません;) – Kardux

+0

@Kardux私は 'FindGameObjectsWithTag'関数について話しています。順序は[未定義]です(http://answers.unity3d.com/questions/16097/order-of-gameobjectfindgameobjectswithtagstring-ta.html)。多分私が知らないユニティで変わった何か。 GameObjectのどれかが 'FindGameObjectsWithTag'が呼び出される前に' card3'が無効になっているとしましょう。注文全体のことが今や混乱しています。私は*ドキュメント化されたUIレンダリングの順序を理解していますが、これは 'FindGameObjectsWithTag'とは関係ありません。 'FindGameObjectsWithTag'が今述べたようにリンクされている場合は、 – Programmer

+0

として投稿してください。 – Programmer

関連する問題