Как отключить компоненты, не зная о его типе? Лучшее, что я получил, но нет опции enabled
на компоненте?Отключить компонент, даже не зная тип
Component[] tmpComponents = tmpGO.GetComponents <Component>();
foreach (Component tmpComponent in tmpComponents)
{
if (tmpComponent.GetType() != Transform && tmpComponent.GetType() != MeshRenderer)
{
tmpComponent.enabled = false; <= ???
}
}
я также попытался
tmpGO.GetComponent <tmpComponent.GetType()>().enabled = false;
Но это не сработало.
Обновлено: Я пробую это, но теперь он дает разную длину.
Component[] components = tmpGO.GetComponents <Component>();
Behaviour[] behaviours = tmpGO.GetComponents <Behaviour>();
for (int x = 0; x < components.Length; x++)
{
if (components[x].GetType() != typeof (Transform) && components[x].GetType() != typeof (MeshRenderer))
{
Debug.Log (components.Length);
Debug.Log (behaviours.Length);
//behaviours [x].enabled = false;
}
}
Это не работает, потому что просить о поведении не дает мне полного списка компонентов, которые могут быть включены.
Хорошо, но как я могу сравнить его тип? если мне нужно отключить все, тогда я могу просто отключить игровой объект? – user3014330
@ user3014330 Если вы хотите только определенный тип или типы компонентов, я бы обычно делал эту фильтрацию с помощью аргумента типа GetComponents. Какой бы тип вы ни указали, он будет возвращать только компоненты этого типа. – rutter
Ну, моя цель состояла в основном в повторном включении скрипта после того, как они были на экране, например, через систему сборки. Итак, я в конечном итоге использую, но мне хотелось бы, чтобы компоненты просто жаловались, что некоторые не могут быть отключены, а не нет. –
user3014330