木木的Unity学习笔记(一)—— 重写UGUI Editor(Button举例)

木木的Unity学习笔记(一)—— 重写UGUI Editor(Button举例)

昨天聊天的时候,有一位道友说自己无论是对字段进行公有化处理还是加上SerializeField标签都无法把自己的字段序列化显示到Unity的Inspector面板上,因为是要在Unity的UGUI中的ScrollRect组件面板上显示,所以另外一位道友提供了一个解决方案,就是继承重写ScrollRectEditor类,下面用UGUI中的Button类来举一个例子。

using UnityEngine;
using UnityEngine.UI;

[AddComponentMenu("UI/ButtonEx", 30)]
public class ButtonEx : Button {
    // 我们自定义的需要显示在面板上的变量
    [SerializeField] private int exProp;
}
  • 编辑ButtonExEditor.cs脚本,代码如下:
using UnityEditor;  // 因为是修改Unity编辑器所以需要继承UnityEditor类
using UnityEditor.UI;

[CustomEditor(typeof(ButtonEx), true)]
[CanEditMultipleObjects]
public class ButtonExEditor : ButtonEditor {

    private SerializedProperty exProp;

    protected override void OnEnable()
    {
        base.OnEnable();
        exProp = serializedObject.FindProperty("exProp");
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        EditorGUILayout.Space();
        serializedObject.Update();
        EditorGUILayout.PropertyField(exProp);
        serializedObject.ApplyModifiedProperties();
    }
}
  • 在Hierarchy面板创建GameObject空对象,并在此对象的Inspector面板中Add Component添加ButtonEx组件,ButtonEx组件可以直接搜索到,或者在UI下找到。

  • 添加ButtonEx组件,会发现ButtonEx组件和Unity自带的UGUI Button组件面板很相似,但是多了一个我们自定义的变量Ex Prop,下面是我们自定义的ButtonEx组件:

    下面是Unity自带的UGUI Button组件:

    以上便解决了那位道友的问题,可喜可贺。

猜你喜欢

转载自blog.csdn.net/fumikisama/article/details/80176892