挂载代码
有的时候,我们会将代码挂到GameObject上,然而,如果一个GameObject会包含很多热更脚本,一个个手动AddComponent太浪费时间,于是就有了自动绑定工具
注意,主工程Instantiate一个带有ClassBind的prefab的时候一定要去手动调用该prefab上的ClassBind的BindSelf方法,否则ClassBind无法激活
挂载步骤
- 给GameObject或预制体添加Class Bind脚本
- 想给该GameObject加几个热更脚本,就把ScriptsToBind数组添加几次
- Namespace写命名空间 (默认HotUpdateScripts,即热更命名空间),Class写脚本类名
- 运行后会自动绑定,可以勾选Active After自动激活
- 继承MonoBehaviour的脚本,激活需要enabled = true 以及 调用Awake(),
- 继承JBehabviour的脚本,直接调用Activate()
- 如果希望使用构造函数,在
use constructor
一栏打勾即可
参数介绍
ScriptsToBind
- 要添加多少个热更DLL里的脚本
Namespace
- 热更脚本的命名空间,默认HotUpdateScripts
Class
- 热更脚本的类名
Active After
- 勾选后,会在绑定后,或绑定+赋值后,只要该类具有
Active()
方法,就会自动调用激活 - 没勾选,需手动,参考指南第5和第6条
- 勾选后,会在绑定后,或绑定+赋值后,只要该类具有
Require Bind Fields
- 勾选后,会根据Fields里的数据自动赋值
- 没勾选,哪怕Fields里有东西也不赋值
Use Constructor
- 勾选后,会使用该类的构造函数进行初始化赋值
Fields
- 自动赋值该脚本多少个值
Field Type
- 该值的类型(支持数字类型,布尔值类型,字符串类型,GameObject和挂在GameObject上面的不可热更的脚本)
Field Name
该值在热更脚本里的名字
Value
- 如果
Field Type
不是GameObject
或Unity Component
的时候,这里是该Field的数值- 如果是数字或字符串,直接写进去
- 如果是布尔值,写true或false
- 如果是热更资源,输入资源完整路径或XAsset可检测到的短路径
Field Type
为GameObject
或Unity Component
的时候,此处Value
写什么都不会发生效果
- 如果
GameObject
- 如果
Field Type
是GameObject
或Unity Component
,直接将那个场景中的GameObject拖拽到这里即可
- 如果
小工具
自动获取全部Field
一个类里面可能有很多Field和Property,一个个去写太费劲,在Unity编辑器下可以点击按钮一键获取
自动匹配FieldType
如果全部field一个个去设置type太费劲,在Unity编辑器下可以点击按钮一键匹配
路径转GameObject
Inspector中,ClassBind脚本的右上角有个小工具,用于老版本,手动写GameObject路径的项目
- ClassBind右上角 -> Convert Path to GameObject
- 可以把老项目中的路径变可拖拽可视化的场景GameObject,且无需关系路径变更