Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity自定义UnityEngine.UI按钮检查器_C#_Unity3d_Unity5 - Fatal编程技术网

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

C# Unity自定义UnityEngine.UI按钮检查器,c#,unity3d,unity5,C#,Unity3d,Unity5,我自己实现了一个按钮,它继承自UnityEngine.UI.button,并且有自己的自定义检查器 public class TwoStateButton : Button { ... } [CustomEditor(typeof(TwoStateButton))] public class TwoStateButtonEditor : Editor { public override void OnInspectorGUI() { base.OnIns

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

public class TwoStateButton : Button
{
    ...
}

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

    ...
}
我有一个问题,即按钮检查器中的转换模式设置的行为对于我的类TwoStateButton不能正常工作,只要我有一个自定义编辑器

按钮检查器看起来像,如果我删除或注释掉自定义编辑器类,TwoStateButton检查器也是如此

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

public class TwoStateButton : Button
{
    ...
}

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

    ...
}
因此,基本上,根据过渡模式,哪些字段可见的行为将丢失,并且始终显示所有设置

我尝试过交换
base.OnInspectorGUI()带有
DrawDefaultInspector()但没有效果。
我尝试导入UnityEdit.UI库,并使我的
TwoStateButtoneEditor
继承自
ButtoneEditor
,而不是
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;
        }
    }
}

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


扩展自

我以前确实尝试过,如前所述,没有效果。但我一定是做错了什么,因为这确实解决了我的问题。非常感谢。我犯的错误很可能是我继承了ButtoneEditor,但调用了DrawDefaultInspector()而不是base.OnInspectorGUI(),如果有人有这个问题的话。