Управление материальными элементами дочернего объекта - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть набор 3D-моделей, и у каждой есть свои материальные элементы.Одна модель имеет все элементы в сетке, и мне легко вносить изменения в каждый элемент, как показано ниже:

enter image description here

Код, используемый для внесения изменений

public Renderer[] rend;

    rend[PlayerPrefs.GetInt("SelectedBall")].materials[0].color = currentcolor;
    if (PlayerPrefs.GetInt("SelectedBall") == 1)
    {
        rend[PlayerPrefs.GetInt("SelectedBall")].materials[0].color = Color.white;
        rend[PlayerPrefs.GetInt("SelectedBall")].materials[1].color = currentcolor;
        rend[PlayerPrefs.GetInt("SelectedBall")].materials[2].color = currentcolor;
        rend[PlayerPrefs.GetInt("SelectedBall")].materials[3].color = currentcolor;
    }

У меня есть вторая модель с 2 дочерними объектами, каждый со своими элементами.

enter image description here

Задача, которой я являюсьЕсли я использую тот же код, что и выше, он сталкивается только с элементами "Cylinder001".

Как получить доступ к элементам Sphere003 и внести изменения также в одном коде.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Если вы хотите пройти по дереву трансформации, например, чтобы получить компоненты-братья (я понимаю, что вы хотите повлиять на MeshRenderer объекта-брата), вы можете использовать transform.parent, чтобы переместить уровень вверх.

GameObject parentGameObject=transform.parent.gameObject;
MeshRenderer[] allMeshRenderers=parentGameObject.GetComponentsInChildren<MeshRenderer>();

Тогда вы могли бы перебирать рендереры и менять цвета / материалы, как вы будете

0 голосов
/ 18 декабря 2018

Я не понял, почему именно существует рендер-массив или вы используете его для доступа ко всем рендерерам сетки для всех ваших моделей, но этот фрагмент кода может помочь решить проблему для всех объектов:

    for (int i = 0; i< gameObject.transform.childCount;i++)
    {
       rend = gameObject.transform.GetChild(i).GetComponent<MeshRenderer>();
       rend.materials[0].color = Color.white;
       for(int j = 1; j<rend.materials.Length;j++)
        {
            rend.materials[j].color = currentcolor;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...