如何在不知道其类型的情况下禁用组件?
我得到的最好的是这个,但组件上没有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;
}
}
这不起作用,因为要求行为不会给我一个可以启用的组件的完整列表。
答案 0 :(得分:1)
编译器试图警告您类Component
没有名为enabled
的属性/字段 - 但它没有,因为有些组件类型无法启用/禁用
但是,您可以过滤出类型为Behaviour
的组件:
foreach (var b in tmpGO.GetComponents<Behaviour>()) {
b.enabled = false;
}
从手册中引用:
行为是可以启用或禁用的组件。
答案 1 :(得分:-1)
您要修改的属性不是“启用”,而是“已启用”。
tmpComponent.enabled = false;