继续看控件逻辑; 继承自UIBehaviour逻辑,它本身也是继承自MonoBehaviour,还有按钮点击的IPointerClickHandler; 然后,就是序列化,各个按钮点击相关

这个控件,主要是用于,animationTime控制动画播放时间,和多久可以触发一次按钮invokeIntervalTime

触发和调用本身,是用的协程

样式

重置按钮,相关逻辑,就是置空,动画控制器,播放时间和触发时间归零,通过UnityEventTools,移除动画事件

运行游戏,点击,效果也是正常的,实时修改也可以; 需要注意的是,两时间,是有制约关系的,间隔时间,是需要等动画播放完毕,才可以下一次点击,所以这里设置了MinValue最小值,就是按钮动画播放时间

这是一个,遍历,创建Asset文件的脚本,可以看到,是继承自OdinMenuEditorWindow的,先拿到,自己创建的类

会重写BuildMenuTree

是创建预制体的核心逻辑; 设置是,在menutree中,选中的预制体,作为asset命名; 在targetFolder目标文件夹中,创建即可; 其中预览Object实体,是在BuildMenuTree函数重写的逻辑里,完成初始化 参考:Activator.CreateInstance 方法

会根据选中的物体,如果是文件夹,就直接把它,当作目标文件夹;如果选中的物体,是文件,就拿它所在的文件夹,作为目标文件夹; 使用Trim处理修剪一下路径分割符号,然后显示窗体,即可

表现

这是收集UI节点的工具类

在Canvas画布创建一个空节点

加上这个工具类

其中的UINode列表,包含一个UINodeGroup类

点击+加号,会新增这个类对应的,绘制结构

其中,节点类型的命名选择,是遍历UnityEngine.UI,拿到对应的Name字段即可

而Nodes节点的选择,就是检索,所选物体,ChildGameObjectsOnly子物体下,归属UnityEngine.UI里面的节点; 其中的逻辑,也验证了,是否为选中的UI类型控件

如果不是所选的UI类型控件,会显示这个报错提示

在测试的空节点,创建3个ui组件

先检索出来,Image图片类

点+号,如逻辑所示,检索出子物体

如果选择了,非Image类型的话,如逻辑所示,会出现验证提示

修改成正确的类型,即可

按钮和文本的ui控件,也是相同处理

先加一个,对应面板的脚本

加一个 partial 关键字 参考partial分部类和方法即可

加上

填上,点击

对应逻辑; 文件后缀Extensions限制是"cs, lua",拿到对应类的名称,然后生成的类,命名后缀会加上,字符Extention;

添加注释说明,还有命名空间,主要使用StringBuilder实现即可;

创建一个Node,也是遍历uINodes里面节点组,创建即可

最后,使用StreamWriter文件流,创建新的脚本文件即可

这里有一个判断,是重名元素的

是遍历节点组,查看是否有重复元素

整一个字符串类,使用GroupBy处理,如果相同字符串的总数大于1,就输入提示

测试一下,添加一个,Button下,跟Text控件,同名的子组件

点击,重复提示,正常

删掉测试的Text,重新点击

自动创建出来了

脚本内容

编辑器表现:

为组件赋值,从className类名,这里是TestPanel,配合uINodes列表遍历,拿到对应的targetValue组件,再通过SetValue设置值即可

点击,正常生效

在这个脚本创建一个,按钮点击的逻辑

运行,点击正常