2017-02-22 36 views
-1

Как отключить компоненты, не зная о его типе? Лучшее, что я получил, но нет опции 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; 
    } 
} 

Это не работает, потому что просить о поведении не дает мне полного списка компонентов, которые могут быть включены.

ответ

-1

Свойство, которое вы хотите изменить, не «включено», а «включено».

tmpComponent.enabled = false; 
1

компилятор пытается предупредить вас, что класс Component не имеет свойство/поле с именем enabled - и это не так, потому что есть некоторые составные типы, которые не могут быть включены/отключены.

Вы можете, однако, отфильтровать компоненты с типом Behaviour:

foreach (var b in tmpGO.GetComponents<Behaviour>()) { 
    b.enabled = false; 
} 

Цитируя из руководства:

Поведение компонента, которые могут быть включены или отключены.

+0

Хорошо, но как я могу сравнить его тип? если мне нужно отключить все, тогда я могу просто отключить игровой объект? – user3014330

+0

@ user3014330 Если вы хотите только определенный тип или типы компонентов, я бы обычно делал эту фильтрацию с помощью аргумента типа GetComponents. Какой бы тип вы ни указали, он будет возвращать только компоненты этого типа. – rutter

+0

Ну, моя цель состояла в основном в повторном включении скрипта после того, как они были на экране, например, через систему сборки. Итак, я в конечном итоге использую , но мне хотелось бы, чтобы компоненты просто жаловались, что некоторые не могут быть отключены, а не нет. – user3014330

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

  • Нет связанных вопросов^_^