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

标签 c# unity3d

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

有没有办法让 gameobject 保持在 Canvas 顶部,就像现在一样,但在我点击我的场景时让它完全无法选择?

最佳答案

您可以在 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 会使其从层次结构中消失,因此您将无法选择它。

编辑: 由于该对象将消失,如果您无法访问脚本,则无法将其取回。所以这个脚本应该附加到一个持久对象,目标对象应该在检查器中设置。

您可以通过单击右上角的齿轮图标并选择“设置标志”来使用上下文菜单选项。它是菜单中的最后一个选项。

Read more


希望这有帮助:)

(由提问者添加)

我想要一种在编辑器模式下自动发生这种情况的方法。所以我做了相同的步骤,但我稍微更改了脚本以在编辑器模式下工作。我在类的顶部添加了 [ExecuteInEditMode],还添加了一个 Awake() 方法,该方法执行与 SetFlags 中相同的代码。似乎工作正常。

关于c# - 使游戏对象在编辑器窗口中不可选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48658158/

相关文章:

c# - 如何在保存到磁盘之前压缩文件?

c# - Unity VectorN变量是否重新计算?

ios - iOS 上的 Opus 解码器崩溃,原因不明

c# - 在 LINQ 查询中返回没有时间的日期

c# - Unity不断获取: “Can not play a disabled audio source”

android - onStop() 中的 finish() 之后的 onCreate()

c# - 如何统一输入字段的(删除/使不可见/更改颜色)边框?

c# - 在组合框中显示数据库值之前显示初始值和空字符串

c# - 使用 Entity Framework 执行存储过程

c# - 通过避免像点击事件这样的回发,使用 javascript 显示消息框。确定,取消按钮应该只关闭消息框