当您按下按钮时,我正在Unity中制作一个工具来为多个平台构建项目。
我从该工具的“首选项”窗口开始,然后想到了一个令人讨厌的东西。每当我更改EnumPopup字段的枚举值时,该字段就会在编辑器窗口中变为蓝色。有办法禁用它吗?
看看第二张图片中的字段不是蓝色,而在第三张图片中的字段变为蓝色吗?如何防止这种情况发生?
谢谢!
答案 0 :(得分:0)
在没有其余代码的情况下很难提供帮助。
这是Unity的内置行为。我尝试了很多方法see here来禁用/覆盖前缀标签的内置颜色,但到目前为止还算不上成功。
但是,工作环境可能是改为使用独立的EditorGUI.LabelField
,不受EnumPopup
和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);
如您所见,标签没有变蓝,而宽度保持灵活
边注
而不是直接通过edito脚本来设置值
QuickBuilder.Settings.Relation =
,您应该始终尝试使用正确的SerializedProperty。它处理诸如“撤消/重做”之类的事情,还将相应的对象和场景标记为dirty
。
使用EditorGUI
而不是EditorGUILayout
还有其他特殊原因吗?在后者中,您不需要设置Rect
。
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.LabelField("File relative to", GUILayout.Width(EditorGUIUtility.labelWidth));
QuickBuilder.Settings.Relation = (QuickBuilder.Settings.PathRelation)EditorGUILayout.EnumPopup(QuickBuilder.Settings.Relation);
}
EditorGUILayout.EndHorizontal();