Дочерние элементы в префабе обьекта

111
10 сентября 2019, 07:50

Есть моделька генератор. Создал Префаб, вышло так что в префабе 10 дочерних элементов. Есть код, который обращается в MeshRenderer и меняет материал дочернего объекта.

public class Unit : MonoBehaviour {
    public Material Ghost;
    public Material GhostNone;
    public Material Normal;
    string tagCreate = "CreateUnit";
    string tagComplete = "CompleteUnit";
    void Update ()
    {
        if (gameObject.tag == tagCreate)
        {
            gameObject.GetComponentInChildren<MeshRenderer>().material = Ghost;
        }
         if((gameObject.tag == tagCreate)&&(GlobalVar.onTriggerUnit == true))
        {
            gameObject.GetComponentInChildren<MeshRenderer>().material = GhostNone;
        }         
    }
    void OnTriggerEnter ()
    {
        GlobalVar.onTriggerUnit = true;
    }
    private void OnTriggerExit()
    {
        GlobalVar.onTriggerUnit = false;      
    }
}

Проблема в том, что мне надо, чтобы это действовало на всех дочерних элементах, а не только на первом.

Answer 1

Вся ваша проблема в том, что вы испльзуете метод GetComponentInChildren<>(), который возвращает первый найденный компонент в иерархии, используя поиск в глубину. Об этом написано в документации.

Для того, чтобы получить все компоненты на всех дочерних элементах используйте метод GetComponentsInChildren<>(), который вернет вам массив всех нужных компонентов.

И получится следующий подход:

var meshRenderers = gameObject.GetComponentsInChildren<MeshRenderer>();
foreach( var meshRenderer in meshRenderers)
     meshRenderer.material = Ghost;
READ ALSO
Unity Cache Delete File (Delete AssetBundle)

Unity Cache Delete File (Delete AssetBundle)

Как удалить определенный файл из Кэша в Юнити? Ситуация такая: у меня есть AssetBundle, который мне нужно постоянно удалять и загружать на его место...

85
Как реализовать работу с коллекцией для алгоритма поиска

Как реализовать работу с коллекцией для алгоритма поиска

У меня есть List в котором хранятся все клетки на игровом поле, у каждой клетки есть два состояния - проходима или нет (стена)Так как для генерации...

92
Вызвать функцию другой программы

Вызвать функцию другой программы

Есть две программы Server и ClientClient знает о функциях сервера и хочет их вызвать

92
Найти уникальные строки

Найти уникальные строки

Всем привет, хочу найти уникальные строки при чтении файла

117