2015-09-22 6 views
1

Hello :-) Я новый разработчик в Unity3D. У меня вопрос, что лучше всего подходит для всех детей GameObject.Лучшая практика для получения всех дочерних игровых объектов?

GameObject's hierarchy

Я хочу активных или де-активных 3 кнопки (камеры, SNS, за исключением кнопок) при некоторых условиях.

вот мой код для этого. но я думаю, что это не хорошо. Я бы хотел его заменить. Существует так много заявлений foreach. Когда объект родительской игры будет добавлен, будет добавлен цикл foreach.


var uiRoot = GameObject.Find("UIRoot"); 
    if (uiRoot != null) 
    { 

     foreach (Transform camera in uiRoot.transform) 
     { 
      camera.gameObject.SetActive(true); 

      foreach (Transform anchor in camera.transform) 
      { 
       anchor.gameObject.SetActive(true); 

       foreach (Transform buttons in anchor.transform) 
       { 
        if (buttons.gameObject.tag == "PictureTag") 
        { 
         buttons.gameObject.SetActive(!isCameraVisible); 
        } 
        else if (buttons.gameObject.tag == "CameraTag") 
        { 
         buttons.gameObject.SetActive(isCameraVisible); 
        } 
       } 
      } 
     } 
    } 

ли вы, ребята, есть хорошая идея для этого? Помогите мне, спасибо.

ответ

2

Если намерение состоит в том, чтобы захватить все компоненты в дочерних геймобжекты, то вы можете использовать что-то вроде этого:

var uiRoot = GameObject.Find("UIRoot"); 
if (uiRoot != null) 
{ 
    bool includeInactiveGameobjects = true; 
    var buttons = uiRoot.GetComponentsInChildren<UIButton>(includeInactiveGameobjects); 
    foreach (UIButton uibutton in buttons) 
    { 
     // Do stuff to button here: 
    } 
} 

Это создает набор компонентов Button, которые могут быть итерация и связанные с ними геймобжекты могут быть доступ с использованием свойства gameObject на компоненте внутри цикла foreach:

... 
foreach (UIButton uibutton in buttons) 
{ 
    // Do stuff to button here: 
    GameObject gameObject = uibutton.gameObject; 
} 

Cheers!