2016-12-23 8 views
0

Я держу свои клоны в списке графических интерфейсов в Unity3D & C#.Как включить дочерние объекты клона в Unity?

button = Instantiate(BlackBox, Vector2.zero, Quaternion.identity) as GameObject; 
buttons.Add(button); 

Как включить ArrowRight в this situation?

Я хочу связаться с ArrowRight, чтобы включить его. Я пробовал вариации такого рода методов:

buttons[index].gameObject.transform.GetChild(1).gameObject.SetActive(true); 

, но он не работает. Objects' components.

+0

Глядя на образ, я подозреваю, что вы хотите назвать GetChild (0), но это небольшая проблема , Другое сомнение: активирован ли объект BlackBox? Потому что вы не можете сделать ребенка активным, если родителя нет. –

+0

Да, но этот код не включает также ArrowLeft. –

+0

Вы правы, я отредактировал свой комментарий с другой проблемой, пока вы отвечали на вопросы :) –

ответ

0

Решено:

вместо:

buttons[index].gameObject.transform.GetChild(1).gameObject.SetActive(true); 

использование:

buttons[index].transform.GetChild(1).gameObject.SetActive(true); 
+0

Вы понимаете, что оба они точно такие же? Один из них проходит только один дополнительный шаг, чтобы получить трансформацию игрового объекта. – Alox

+0

Я не знаю, один из них не работает, один из них. Я новичок в Unity, и я понятия не имею, почему. –

0

Я просто быстро получил этот код, чтобы исправить вашу проблему. Возможно, это не лучшее решение, но оно должно работать, если я правильно понял ваш вопрос.

using UnityEngine; 

public class blackBox : MonoBehaviour { 
    public bool toggleRight; 

    // Update is called once per frame 
    void Update() { 
     if(toggleRight) 
     { 
      foreach(Transform child in transform) 
      { 
       if(child.name.Equals("ArrowRight")) 
       { 
        child.gameObject.SetActive(!child.gameObject.activeSelf); 
       } 
      } 
      toggleRight = false; 
     } 
    } 
} 

Это всего лишь демонстрационный пример, разорвать его, чтобы удовлетворить ваши потребности.

Поместите, что в объекте игры blackbox и используйте foreach для активации или деактивации игрового объекта с указанным именем.

+0

Спасибо за ответ, но он не работает. Я изменить свой код так: 'Еогеасп (Transform ребенка кнопок [индекс] .transform) { если (child.name.Equals ("ArrowRight")) { child.gameObject.SetActive (истина); } } ' –

+0

Хорошо, да, если вы не хотите проверять игру, дети должны быть такими, как это сделать. Как я сказал, «разорвите его, чтобы удовлетворить ваши потребности». Сделал ли он то, что вы хотели, в конце концов? – Alox

+0

Мои изменения тоже не работают. Я просто набрал способ изменения кода при попытке. Но ответ нашел: buttons [index] .transform.GetChild (1) .gameObject.SetActive (true); –

Смежные вопросы