即使不知道类型

时间:2017-02-22 00:33:40

标签: unity3d components

如何在不知道其类型的情况下禁用组件? 我得到的最好的是这个,但组件上没有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;
    }
}

这不起作用,因为要求行为不会给我一个可以启用的组件的完整列表。

2 个答案:

答案 0 :(得分:1)

编译器试图警告您类Component没有名为enabled的属性/字段 - 但它没有,因为有些组件类型无法启用/禁用

但是,您可以过滤出类型为Behaviour的组件:

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

从手册中引用:

  

行为是可以启用或禁用的组件。

答案 1 :(得分:-1)

您要修改的属性不是“启用”,而是“已启用”。

tmpComponent.enabled = false;