-1

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

我从该工具的首选项窗口开始,并想出了一个令人讨厌的事情。每当我更改 EnumPopup 字段的枚举值时,该字段在编辑器窗口中变为蓝色。有没有办法禁用它?

这是我用来在窗口上显示枚举字段的代码

这是枚举字段未更改时的窗口

这是枚举字段更改时的窗口

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

提前致谢!

4

1 回答 1

0

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

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


然而,一个解决方法可能是使用一个独立的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);

如您所见,标签没有变成蓝色,而宽度保持灵活

在此处输入图像描述


旁注
与其直接通过编辑脚本设置值,不如 QuickBuilder.Settings.Relation =始终尝试使用正确的SerializedProperty。它处理诸如撤消/重做之类的事情,并将相应的对象和场景标记为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();
于 2019-03-22T13:29:19.130 回答