Unity 编辑器 - 如何在编辑时阻止字段变蓝

Unity editor - How to stop field from turning blue when its edited

我正在 Unity 中制作一个工具,当您按下一个按钮时,它可以为多个平台构建您的项目。

我从该工具的首选项 window 开始,然后想到了一件烦人的事。每当我更改 EnumPopup 字段的枚举值时,该字段在编辑器中变为蓝色 window。有没有办法禁用它?

怎么看第二张图不是蓝色的,第三张变成蓝色了?我该如何防止这种情况发生?

提前致谢!

如果没有其余代码,很难提供帮助。

这是 Unity 的内置行为。我尝试了很多东西 来禁用/覆盖前缀标签的内置着色,但到目前为止没有运气。


然而,一个解决方法可能是使用独立的 EditorGUI.LabelField which will not be affected by the EnumPopup together with the EditorGUIUtility.labelWidth:

var LabelRect = new Rect(
    FILEMANAGEMENT_ENUMFIELD_RECT.x, 
    FILEMANAGEMENT_ENUMFIELD_RECT.y,
    // use the current label width
    EditorGUIUtility.labelWidth, 
    FILEMANAGEMENT_ENUMFIELD_RECT.height
);

var EnumRect = new Rect(
    FILEMANAGEMENT_ENUMFIELD_RECT.x + EditorGUIUtility.labelWidth, 
    FILEMANAGEMENT_ENUMFIELD_RECT.y, 
    FILEMANAGEMENT_ENUMFIELD_RECT.width - EditorGUIUtility.labelWidth, 
    FILEMANAGEMENT_ENUMFIELD_RECT.height
);

EditorGUI.LabelField(LabelRect, "File relative to");
QuickBuilder.Settings.Relation = (QuickBuilder.Settings.PathRelation)EditorGUI.EnumPopup(EnumRect, QuickBuilder.Settings.Relation);

正如你所看到的,标签没有变成蓝色,同时宽度保持灵活


旁注
而不是直接通过编辑脚本设置值 QuickBuilder.Settings.Relation = 您应该始终尝试使用正确的 SerializedProperty。它处理 Undo/Redo 之类的事情,并将相应的对象和场景标记为 dirty.

你使用EditorGUI而不是EditorGUILayout是否也有特殊原因?在后者中,您不需要设置 Rects.

EditorGUILayout.BeginHorizontal();
{
    EditorGUILayout.LabelField("File relative to", GUILayout.Width(EditorGUIUtility.labelWidth));
    QuickBuilder.Settings.Relation = (QuickBuilder.Settings.PathRelation)EditorGUILayout.EnumPopup(QuickBuilder.Settings.Relation);
}
EditorGUILayout.EndHorizontal();