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)
替换 UI根元素 方法 就是在 创建出来的时候,看下用户操作是不是在Canvas下进行的, 是的话就在该 调整坐标,设置Canvas为它的父物体
ButtonEditor 类是 管理 检测面板属性 的类,如果重写了Button,或者想给Button 组件 暴露一些属性的话, 就要重写这个类,
通过序列化 寻找 属性. 在想要 暴露的属性 前 添加 [SerializeField] 特性,
然后Editor类就会通过Editor下的SerializedObject
类下的函数 FindProperty
它会通过Name去 查找, 背后是一套 序列化机制;
SerializedObject 又会去调用
SerializedProperty类下的 internal extern bool FindPropertyInternal(string propertyPath);