C# 使游戏对象在编辑器窗口中不可选择

C# 使游戏对象在编辑器窗口中不可选择,c#,unity3d,C#,Unity3d,我的场景中有一个fadepanel游戏对象,它必须位于所有其他游戏对象之上。但是,当我在编辑器窗口中单击一个对象时,由于这个gameobject位于所有对象之上,因此它是在层次结构中自动选择的对象 有没有办法保持游戏对象在画布上,就像现在一样,但在我点击我的场景时使其完全不可选择?你可以使用游戏对象上的隐藏标签使其不可选择: public class HideFlagsSetter : MonoBehaviour { public Component target; public

我的场景中有一个fadepanel
游戏对象
,它必须位于所有其他游戏对象之上。但是,当我在编辑器窗口中单击一个对象时,由于这个
gameobject
位于所有对象之上,因此它是在层次结构中自动选择的对象


有没有办法保持
游戏对象
在画布上,就像现在一样,但在我点击我的场景时使其完全不可选择?

你可以使用
游戏对象
上的
隐藏标签
使其不可选择:

public class HideFlagsSetter : MonoBehaviour
{
    public Component target;
    public HideFlags customHideFlags;

    public enum Mode
    {
        GameObject,
        Component
    }

    public Mode setOn = Mode.GameObject;

    [ContextMenu("Set Flags")]
    private void SetFlags()
    {
        if (setOn == Mode.GameObject)
        {
            target.gameObject.hideFlags = customHideFlags;
        }
        else if (setOn == Mode.Component)
        {
            target.hideFlags = customHideFlags;
        }
    }
}
将customHideFlags设置为
HideInHierarchy
将使其从层次结构中消失,因此您将无法选择它

编辑:由于对象将消失,如果无法访问脚本,则无法将其恢复。所以这个脚本应该附加到一个持久对象上,并且应该在inspector中设置目标对象

通过单击右上角的齿轮图标并选择“设置标志”,可以使用关联菜单选项。这是菜单中的最后一个选项


希望这有帮助:)

(由提问者补充)


我想要一种在编辑器模式下自动实现的方法。所以我做了同样的步骤,但是我对脚本做了一些修改,以在编辑器模式下工作。我在类的顶部添加了[ExecuteInEditMode],还添加了一个Awake()方法,该方法执行与SetFlags中相同的代码。看起来很好。

谢谢Umair!我已经尝试过了,它确实有效,但一旦我玩游戏并停止它,它就会恢复到以前的状态。当我手动执行此操作时,对象会从层次结构中隐藏,但在我玩游戏后,它不会一直隐藏:(你也有同样的行为吗?嗯,它可能需要ExecuteInEdit模式才能自动工作,可能是基于文章。我会测试一下。是的,我让它在编辑器模式下自动工作。如果可以的话,会在你的文章末尾追加以供参考。)