Есть моделька генератор. Создал Префаб, вышло так что в префабе 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;
}
}
Проблема в том, что мне надо, чтобы это действовало на всех дочерних элементах, а не только на первом.
Вся ваша проблема в том, что вы испльзуете метод GetComponentInChildren<>()
, который возвращает первый найденный компонент в иерархии, используя поиск в глубину. Об этом написано в документации.
Для того, чтобы получить все компоненты на всех дочерних элементах используйте метод GetComponentsInChildren<>(), который вернет вам массив всех нужных компонентов.
И получится следующий подход:
var meshRenderers = gameObject.GetComponentsInChildren<MeshRenderer>();
foreach( var meshRenderer in meshRenderers)
meshRenderer.material = Ghost;
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как удалить определенный файл из Кэша в Юнити? Ситуация такая: у меня есть AssetBundle, который мне нужно постоянно удалять и загружать на его место...
У меня есть List в котором хранятся все клетки на игровом поле, у каждой клетки есть два состояния - проходима или нет (стена)Так как для генерации...
Есть две программы Server и ClientClient знает о функциях сервера и хочет их вызвать