2016-10-25 1 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); 
} 

я могу получить доступ руки карты, но порядок не прав , Какие-либо предложения ?

Благодаря

Marlon

+0

Вам необходимо отсортировать его самостоятельно –

ответ

2

Никогда не зависит от порядка элементов FindGameObjectsWithTag возвращается как это не оговорено в документации и могут быть непредсказуемыми. Вам нужно добавить настраиваемую функцию, которая проходит через массив и находит указанный вами GameObject по сравнению с свойством GameObject.name.

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

Этот ответ хорош, однако, говоря, что вы никогда не должны полагаться на порядок элементов, нет: единичный интерфейс (реализованный в 4.6) основан на иерархическом порядке => то, что последний в иерархии будет нарисован сверху. Это может быть действительно полезно/разочаровывает в зависимости от ситуации;) – Kardux

+0

@ Kardux Я говорю о функции FindGameObjectsWithTag. Заказ [undefined] (http://answers.unity3d.com/questions/16097/order-of-gameobjectfindgameobjectswithtagstring-ta.html). Возможно, что-то изменилось в Единстве, о котором я не знаю. Что делать, если один из GameObjects, допустим, 'card3' отключен до вызова 'FindGameObjectsWithTag'? Вся вещь заказа теперь перепутана. Я понимаю, что порядок отображения пользовательского интерфейса, который * документирован *, но не имеет ничего общего с 'FindGameObjectsWithTag'. Если у вас есть ссылка, где говорится, что 'FindGameObjectsWithTag' теперь работает, как вы упомянули – Programmer

+0

, напишите об этом. – Programmer