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
是否也有特殊原因?在后者中,您不需要设置 Rect
s.
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.LabelField("File relative to", GUILayout.Width(EditorGUIUtility.labelWidth));
QuickBuilder.Settings.Relation = (QuickBuilder.Settings.PathRelation)EditorGUILayout.EnumPopup(QuickBuilder.Settings.Relation);
}
EditorGUILayout.EndHorizontal();
我正在 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
是否也有特殊原因?在后者中,您不需要设置 Rect
s.
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.LabelField("File relative to", GUILayout.Width(EditorGUIUtility.labelWidth));
QuickBuilder.Settings.Relation = (QuickBuilder.Settings.PathRelation)EditorGUILayout.EnumPopup(QuickBuilder.Settings.Relation);
}
EditorGUILayout.EndHorizontal();