Unity 自定义 UnityEngine.UI 按钮检查器

Unity custom UnityEngine.UI button inspector

我自己实现了一个按钮,继承自UnityEngine.UI.Button,它有自己的自定义检查器。

public class TwoStateButton : Button
{
    ...
}

[CustomEditor(typeof(TwoStateButton))]
public class TwoStateButtonEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
    }

    ...
}

我有一个问题,只要我有一个自定义编辑器,按钮检查器中的过渡模式设置的行为就不能正常工作我的 class TwoStateButton。

Button 检查器看起来像 this,如果我删除或注释掉自定义编辑器,TwoStateButton 检查器也是如此 class。

但我的自定义检查器看起来像 this,尽管我没有对检查器进行任何更改。

所以基本上,根据转换模式,哪些字段可见的行为会丢失,并且始终显示所有设置。

我试过将 base.OnInspectorGUI();DrawDefaultInspector(); 交换,但没有效果。 我已经尝试导入 UnityEditor.UI 库并使我的 TwoStateButtonEditor 继承自 ButtonEditor 而不是 Editor,但没有效果。

有没有办法制作自定义编辑器,但仍保持过渡模式设置行为?

您可以通过检查 OnInspectorGui 方法中的转换模式来做到这一点。

类似于:

[CustomEditor(typeof(TwoStateButton))]
public class TwoStateButtonEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        switch(target.transitionMode)
        {
            case Automatic:
                //Automatic code
                [...]
                break;
            case ColorTint:
                //Color Tint code
                [...]
                break;
            default:
                break;
        }
    }
}

您的编辑器看起来不像 Button 编辑器的原因是您正在创建一个新的自定义编辑器,而不是从自定义 Button 编辑器扩展而来。如果你这样做了,你就会得到你想要的行为。您也可以复制 Button 的自定义编辑器并根据需要进行更改。

Button Editor extends from Selectable Editor