Unity-设计模式
组合模式
组合模式是为了在项目提高代码复用性,降低增加对象成本的设计模式。
简单来说,就是将每个功能单独分为一个脚本上使用,然后根据需要挂载到游戏对象上。
在 Unity 中,脚本继承了 MonoBehaviour
类,就会被视为一个脚本组件,如:public class GameManager : MonoBehaviour
,然后根据需要,将脚本组件添加到游戏对象上。
脚本通讯
1 | var xxxx = GetComponent<Walk>(); |
GetComponent()的性能问题
- 避免在 Update 中来使用 GetComponent,否则性能代价过于昂贵。
- 若多处地方使用 GetComponent,尝试初始化获得组件的引用,避免反复获取。
单例模式
单例模式是最常用的设计模式之一,原因是因为其存在着方便快捷的好处,但同时也会带来耦合度高和扩展困难的问题。
优点:
- 节约内存 只存在一个对象进行运作
- 节省性能 只会在第一次请求时被创建,不用频繁经历被引用对象的创建和销毁
- 使用方便 可以轻松地链接游戏各个模块
缺点:
- 代码耦合度加大,维护困难 滥用单例中的对象,修改对象时牵扯到的脚本数量难以计量
- 代码更新和扩展困难 对单例中的对象,动一发则牵全身。
单例模式的两种写法
第一种强调的是,除非 Instance 为空,才赋值;否则都自毁。
1 | private void Awake() |
第二种强调的是,只有 Instance 不为空且不等于自己,才自毁;否则都更换新的指向对象。(重新赋值的几率更大)
1 | private void Awake() |
用例:Unity-实现功能 # 1.2 GameManager - 游戏管理器
命令模式
通过命令模式可以简单的实现解耦,撤销功能,以及对象的可参数化。
观察者模式
通过委托和事件,将一个批量处理的操作,转换成事件的添加与执行。
处理一个信息对应多个事件发生的情况
使用更少的代码
更加易于维护
对象池模式
对象池模式可以大幅度减少游戏的性能开销,适用于高重复创建销毁物体的情况