Monotable 一个轻量Unity插件;按规则自动收集Gameobject下MonoScripts

在我之前待过的项目组,好几个都有自动收集ui自动生成的功能,用久了自己写demo的时候没有这种功能就很难受,就自己封装了一个

想法

1.在lua环境中查找ui组件需要频繁的find就会有性能问题,如果我们将所有的组件打包一起发送给lua就只会产生一次lua cal lc#。

2.如果ui频繁变动的情况下,替换一次ui,ui结构有可能会大改 改完之后需要对照前后的改变去改代码,非常麻烦。如果我们让一个mono去收集下面的一些ui组件,并将引用保存起来。那么结构的变动就影响不到我们的代码,因为代码直接引用组件,只要某个组件的功能不变则代码不需要变动,比如一个text是用来显示英雄名字,因为ui的变动,ui的结构发生变化,但text的功能没有变化,依旧还是显示英雄名字那么我们就完全不需要改变代码。

拆解

为了实现上诉想法,我们需要有

1.组件过滤,只加入我们感兴趣的组件而非所有组件

2.editor扩展,unity不支持显示dic,编写扩展以显示key值对应的ganeobject,以及dic的序列化。

3.有了go的dic就可以根据key自动生成对应的字段。所以是完全可以做一个自动生成代码的功能。

实现

第一个问题非常好解决 我们子需要规定以某种字符串开头的gameobject就会被收集进去,比如 @text__name ,就对应字段 Text name,@表示需要被收集,text表示收集的组件引用,name表示dic中的key。

第二个问题 用odin或是重写一下oninspectorgui解决unity不支持显示dic的问题。unity也不支持dic的序列化和反序列化,也就是存储。所以需要实现ISerializationCallbackReceiver接口,序列化时以两个list存储,运行时采用dic,加载或存储时

转换一下就ok。

第三个问题,生成代码。在第一步中根据规则我们已经获取到了go ,字段名 以及组件类型,直接生成就行;添加两个字段用于自定义生成脚本类名,命名空间,解决命名冲突;还需要在生成类中存储对应的对象的资源路径和层级路径用于防止错误的配置导致类名命名空间重复时弹出报错;使用parital关键字修饰生成类,让我们可以对该类写一些代码。

github代码仓库

相关推荐
JIes__12 小时前
Unity(二)——核心系统
unity·游戏引擎
独处东汉12 小时前
freertos开发空气检测仪之按键输入事件管理系统设计与实现
人工智能·stm32·单片机·嵌入式硬件·unity
Howrun77712 小时前
虚幻引擎_C++_游戏开始菜单
游戏·游戏引擎·虚幻
速冻鱼Kiel12 小时前
虚幻状态树解析
ue5·游戏引擎·虚幻
天人合一peng15 小时前
Unity 中 Text-TextMeshPro的获取与赋值
unity·游戏引擎
天人合一peng1 天前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
_乐无1 天前
Unity加载gly 点云 高斯泼溅渲染
unity
坚定信念,勇往无前1 天前
unity发布BuildWebGL.wasm 加载过慢
unity·wasm
avi91112 天前
Unity Data Excel读取方法+踩坑记;和WPS Excel的一些命令
unity·游戏引擎·excel·wps·data
郁闷的网纹蟒2 天前
虚幻5---第12部分---蒙太奇
开发语言·c++·ue5·游戏引擎·虚幻