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

相关推荐
GLDbalala2 小时前
Unity基于自定义管线实现经典经验光照模型
unity·游戏引擎
心疼你的一切5 小时前
Unity异步编程神器:Unitask库深度解析(功能+实战案例+API全指南)
深度学习·unity·c#·游戏引擎·unitask
呆呆敲代码的小Y7 小时前
【Unity 实用工具篇】 | Book Page Curl 快速实现翻书效果
游戏·unity·游戏引擎·u3d·免费游戏·翻书插件
AC梦20 小时前
unity中如何将UI上的字高清显示
ui·unity
小贺儿开发1 天前
Unity3D 智慧城市管理平台
数据库·人工智能·unity·智慧城市·数据可视化
June bug2 天前
【领域知识】休闲游戏一次发版全流程:Google Play + Apple App Store
unity
星夜泊客2 天前
C# 基础:为什么类可以在静态方法中创建自己的实例?
开发语言·经验分享·笔记·unity·c#·游戏引擎
dzj20212 天前
PointerEnter、PointerExit、PointerDown、PointerUp——鼠标点击物体,则开始旋转,鼠标离开或者松开物体,则停止旋转
unity·pointerdown·pointerup
心前阳光2 天前
Unity 模拟父子关系
android·unity·游戏引擎
在路上看风景2 天前
26. Mipmap
unity