博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【UGUI】重写UGUI组件继承组件的方式(以button举例)
阅读量:2167 次
发布时间:2019-05-01

本文共 2148 字,大约阅读时间需要 7 分钟。

继承重写UGUI的组件很简单以Button为例子 

首先在Unity的Project面板上创建一个新文件夹Scripts,在该文件夹下创建一个新的脚本,我的命名是ButtonEx,

脚本代码如下:

using UnityEngine.EventSystems;namespace UnityEngine.UI{    public class ButtonEx : Button    {        [SerializeField] public string music = "click";        public override void OnPointerClick(PointerEventData eventData)        {            if (eventData.button != PointerEventData.InputButton.Left)                return;            if (!IsActive())                return;            UISystemProfilerApi.AddMarker("Button.onClick", this);            onClick.Invoke();            //  播放音乐            //MusicManager.GetInstance().PlaySoundEffect(music);        }    }}

这样就继承了Button组件 可以自己添加新的字段。

但是添加字段后会发现无论是访问级别是 public 还是 添加[SerializeField] 都不会显示在unity的Inspector面板上

原来是因为 每个UGUI组件的脚本都有对应的Editor脚本负责显示这些字段。

所以我们可以通过重写对应的Editor脚本的方式去让我们新创建的字段显示出来。

我们要创建一个新的脚本MyButtonEditor继承ButtonEditor 

注意:这是一个编辑器类,如果想要使用它必须要把它放到工程目录下的Editor文件夹下

PS:Editor文件夹可以存在在根目录下,也可以存在于子目录下 只要他的名字是Editor。存放于Editor文件夹下的资源只在编辑器下可以使用,打包发布时不会一同发布。

所以在这里我在根目录下创建了一个Editor文件夹并新建MyButtonEditor脚本

脚本代码如下:

using UnityEditor;//编辑器类在UnityEditor命名空间下。所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用。using UnityEditor.UI;//ButtonEditor位于此命名空间下using UnityEngine.UI;//指定我们要自定义编辑器的脚本 [CustomEditor(typeof(ButtonEx), true)]//使用了 SerializedObject 和 SerializedProperty 系统,因此,可以自动处理“多对象编辑”,“撤销undo” 和 “预制覆盖prefab override”。[CanEditMultipleObjects]public class ButtonExEditor : ButtonEditor{    //对应我们在MyButton中创建的字段    //PS:需要注意一点,使用SerializedProperty 必须在MyButton类_newNumber字段前加[SerializeField]    private SerializedProperty _addValue;// 添加变量    protected override void OnEnable()    {        base.OnEnable();        _addValue = serializedObject.FindProperty("music");    }    //并且特别注意,如果用这种序列化方式,需要在 OnInspectorGUI 开头和结尾各加一句 serializedObject.Update();  serializedObject.ApplyModifiedProperties();    public override void OnInspectorGUI()    {        base.OnInspectorGUI();        EditorGUILayout.Space();//空行        serializedObject.Update();        EditorGUILayout.PropertyField(_addValue);//显示我们创建的属性        serializedObject.ApplyModifiedProperties();    }}

现在就可以显示我们自己创建的属性了,,,至于buttonex的应用,这这里。

转载地址:http://qeszb.baihongyu.com/

你可能感兴趣的文章
【Loadrunner】性能测试报告实战
查看>>
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>