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

时间:2017-02-21 12:56:53

标签: c# unity3d unity5

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

public class TwoStateButton : Button
{
    ...
}

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

    ...
}

我遇到一个问题,只要我有自定义编辑器,Button检查器中的Transition模式设置的行为对于我的类TwoStateButton就不能正常工作。

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

Button EditorSelectable Editor

延伸

答案 1 :(得分:0)

你可以通过检查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;
        }
    }
}