在编辑器窗口中使游戏对象无法被选择

3

我在场景中有一个 gameobject,它是一个淡入淡出的面板。它必须位于所有其他游戏对象的顶部。然而,当我在编辑器窗口中点击一个对象时,由于这个 gameobject 位于最上方,它会自动成为在层级视图中选择的对象。

有没有一种方法可以让 gameobject 保持在画布的顶部,就像现在一样,但是在我点击场景时完全无法被选中?

1个回答

5
您可以在GameObject上使用HideFlags来使其不可选择:
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会使其在层次结构中消失,因此您将无法选择它。
编辑:由于对象将消失,如果您无法访问脚本,则无法将其恢复。因此,此脚本应附加到持久对象上,并且应在检查器中设置目标对象。
您可以通过单击右上角的齿轮图标并选择“设置标志”来使用上下文菜单选项。这是菜单中的最后一个选项。 阅读更多 希望对您有所帮助 :)
(添加者)我希望在编辑器模式下自动完成此操作。因此,我执行了相同的步骤,但是我稍微修改了脚本以在编辑器模式下工作。我在类的顶部添加了[ExecuteInEditMode],并且还添加了一个Awake()方法,该方法执行与SetFlags中相同的代码。看起来很好用。

谢谢Umair!我已经尝试过了,它确实有效,但是一旦我玩游戏并停止它,它就会恢复到先前的状态。当我手动隐藏对象时,它会从层次结构中隐藏,但是一旦我开始游戏,它就无法持续隐藏:(你是否遇到了相同的行为? - Spyros
嗯,根据文章的内容,它可能需要ExecuteInEditMode才能自动工作。我会测试一下。 - Spyros
1
是的,我已经让它在编辑模式下自动工作了。如果可以的话,我会在您的帖子末尾附加参考信息。 - Spyros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接