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代码仓库

相关推荐
天人合一peng1 小时前
Unity中做表头时像work中整个调整宽窄
unity
小李也疯狂13 小时前
Unity 中的立方体贴图(Cubemaps)
unity·游戏引擎·贴图·cubemap
牛掰是怎么形成的13 小时前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y13 小时前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
EQ-雪梨蛋花汤13 小时前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎
我的offer在哪里14 小时前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎
泡泡茶壶ᐇ14 小时前
Unity游戏开发入门指南:从零开始理解游戏引擎核心概念
unity·游戏引擎
YigAin15 小时前
Unity中的Lock,到底在锁什么,什么时候该用?
unity
Var_al16 小时前
抖小Unity WebGL分包命令行工具实践指南
unity·游戏引擎·webgl
天人合一peng18 小时前
unity 通过代码修改button及其名字字体的属性
unity·游戏引擎