C# 如何在Unity Inspector中隐藏组件

C# 如何在Unity Inspector中隐藏组件,c#,unity3d,C#,Unity3d,我的检查器中有一个游戏对象,包含很多组件。使用自定义编辑器,我能够访问和收集阵列中的所有组件。我希望能够隐藏那些名为“blahblah”的组件。这是我的代码: arryCom = GetComponents(typeof(Component)); for (int i = 0; i < arryCom.Length; i++) { if (arryCom [i].GetType ().ToString () == "blahblah")

我的检查器中有一个游戏对象,包含很多组件。使用自定义编辑器,我能够访问和收集阵列中的所有组件。我希望能够隐藏那些名为“blahblah”的组件。这是我的代码:

arryCom = GetComponents(typeof(Component));
    for (int i = 0; i < arryCom.Length; i++)
    {
        if (arryCom [i].GetType ().ToString () == "blahblah")
              arryCom [i].hideFlags = HideFlags.HideInInspector;
    }
这是自定义编辑器:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(FlowchartManager))]
public class FlowchartEditor : Editor
{
    public override void OnInspectorGUI()
    {
        //base.OnInspectorGUI();
        FlowchartManager fm = (FlowchartManager)target;
        if (GUILayout.Button ("Hide Says"))
            fm.HideSays ();
    }
}
此屏幕截图显示FlowchartManager脚本连接到游戏对象时没有任何问题:


顺便说一句,我没有发现任何编译器错误。

让我(我想这也可能让你)明白的是,更改隐藏标签不会重新绘制编辑器。只有在更改选择(或以其他方式强制创建面板)后,零部件才会隐藏

而且,代替

foo.GetType().ToString()=="Bar" 
使用它更好

foo.GetType()==typeof(Bar)

您的
if
语句出错。这应该是
if(arryCom[i].GetType().ToString()=“blahblah”)
。你怎么能期望一个没有编译的代码被执行呢?谢谢@Programmer。我纠正了它。但是,它仍然不起作用。在这种情况下,请包含完整的脚本。既然你犯了那个错误,我怀疑还有更多的错误,而且你的脚本没有编译。另外,显示
blahblah
脚本的完整代码。最后,一个游戏对象的屏幕截图,用来证明它实际上是附在一个对象上的。当我说*完整脚本时,我指的是该文件中的所有代码。复制并粘贴为什么不使用
arryCom=GetComponents(typeof(blahblah))????它也可以做同样的事情,但是你必须删除
if(arryCom[i].GetType().ToString()=“blahblah”)
似乎我不能很好地解释自己,因为英语不是我的母语。我再试一次:我有一个游戏对象。它的名字是“流程图”。流程图包含,比如说50个组件。在这50个组件中,有10个属于“blahblah”类型。我希望检查员隐藏所有这10个废话,只显示40个其他组件。
foo.GetType()==typeof(Bar)