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

相关推荐
真鬼12313 小时前
【Unity 6】Unity6快捷下载,快速下载
unity·游戏引擎
会潜水的小火龙15 小时前
unity打包apk报错Failure to initialize问题解决方法
unity·游戏引擎
平行云17 小时前
实时云渲染平台数据通道,支持3D应用文件上传下载分享无缝交互
linux·unity·云原生·ue5·gpu算力·实时云渲染·像素流送
Sator119 小时前
unity仅用粒子系统实现拖尾
unity·游戏引擎
游乐码19 小时前
Unity基础(五)四元数相关
unity·游戏引擎
想做后端的前端19 小时前
Unity热更新 - HybridCLR & YooAsset
unity·游戏引擎
鹿野素材屋20 小时前
Unity预加载:减少游戏中首次加载资源时的卡顿
windows·游戏·unity
RPGMZ20 小时前
RPGMZ游戏引擎事件技巧大全
javascript·游戏引擎·事件·rpgmz·rpgmakermz
天若有情67320 小时前
Superpowers 游戏引擎核心应用场景与落地指南
游戏引擎·superpowers
winlife_21 小时前
嵌入式 MCP server vs 外挂桥接进程:引擎编辑器自动化的架构取舍
架构·自动化·编辑器·游戏引擎·架构设计·mcp·编辑器自动化