【Unity】【设计模式】函数的实现与与调用分离
基本结构
Listener
- 每个物体需要挂载一个。因为内容是一样的,所以可以通过脚本的方式自动挂载
1 | private void OnMouseDown() |
Manager
设置为单例脚本
通过‘名称’获取所有需要管理的物体
1 | // 获取物体并存储下来{ 物体名称:物体属性 },物体属性可以重新写一个类,来存储这个物体所有需要用到的属性 |
- 初始化物体,并注册事件
1 | public void RegisterClick(string clickObjName, UnityAction<string> clickCallback) |
也可以在AddClickDic函数中初始化物体,但是一般不这么做,原因有二:
这个函数只用来添加属性,不干其他的
RegisterClick函数是在AddClickDic函数后面执行的,如果在AddClickDic中初始化了,在RegisterClick中再初始化会覆盖AddClickDic中的初始化
那可能你又要问:为什么不在AddClickDic的时候就将物体初始化好,并且注册事件呢
答:因为这两个函数的作用位置不同
- AddClickDic是在Manager中先存储所有的物体信息,要先执行
- RegisterClick则是在每个物体自己的脚本中获取到Manager的字典,然后将物体各自的事件注册到字典对应的值中,要后执行
- 写一个通过‘名称’调用指定物体方法的函数
1 | public void ClickObj(string objName) |
Script
- 实现每个物体各自的方法
1 | public void Red_Fly() |
- 注册方法
1 | // 记得在start中调用 |