UnityUI 源码深入 MenuOption ButtonEditor

版权声明:转载 请说明出处 https://blog.csdn.net/qq2512667/article/details/89178674

MenuOptions 就是管理 所有UGUI 按钮菜单显示的

[MenuItem(“GameObject/UI/Button”, false, 2030)]
static public void AddButton(MenuCommand menuCommand)
{
GameObject go = DefaultControls.CreateButton(GetStandardResources());
PlaceUIElementRoot(go, menuCommand);
}
在这里插入图片描述

点击这个 会 通过 DefaultControls 去创建 Button,传入 menuCommand 会再层级面板上 右键选择的物体 传给PlaceUIElementRoot函数,然后如果它有Canvas组件就 会把Button 生产出来 作为它的子物体;

DefaultControls 类就 像 一个工厂, 里面存放 一些 零件资源,
这个是 DefaultControls下是结构体Resources 数据
在这里插入图片描述
在这里插入图片描述
m默认参数

在这里插入图片描述
创建UI 元素 添加RectTransform 设置 宽高

在这里插入图片描述
创建UI物体 添加RectTransform 设置 父物体。有父物体 就设置父物体,再去设置 层级(递归地)
在这里插入图片描述

下面是 创建 Button
在这里插入图片描述

创建UI 元素 使用默认 大小, 再去创建子物体,Text,设置居中 父物体, 再去 创建 Image 组件 设置 默认sprite 默认类型,默认颜色,
创建Button组件 设置默认交互 颜色, 高亮,按下,禁用。
在这里插入图片描述

然后就Text 组件, 默认字体 大小,居中排列方式, 然后就是去设置 锚点。
最后 Bu’t’ton就被创建出来了.

这里 Text的处理并没有用下面的CreateText方法在这里插入图片描述
可能 理解 是 一个 Button 是一个 UI元素,

第一次创建会去寻找根节点,没有就创建根 (Canvas)

扫描二维码关注公众号,回复: 6047111 查看本文章

替换 UI根元素 方法 就是在 创建出来的时候,看下用户操作是不是在Canvas下进行的, 是的话就在该 调整坐标,设置Canvas为它的父物体

在这里插入图片描述

ButtonEditor 类是 管理 检测面板属性 的类,如果重写了Button,或者想给Button 组件 暴露一些属性的话, 就要重写这个类,

在这里插入图片描述
通过序列化 寻找 属性. 在想要 暴露的属性 前 添加 [SerializeField] 特性,
在这里插入图片描述
然后Editor类就会通过Editor下的SerializedObject
在这里插入图片描述
类下的函数 FindProperty
在这里插入图片描述
它会通过Name去 查找, 背后是一套 序列化机制;

SerializedObject 又会去调用
SerializedProperty类下的 internal extern bool FindPropertyInternal(string propertyPath);
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq2512667/article/details/89178674