![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
游戏设计模式
Lezvin
这个作者很懒,什么都没留下…
展开
-
游戏中的设计模式之优化模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version优化模式中包含了四种不同的模式,分别是:数据局部性 脏标识 对象池 空间分区这里实现了对象池和空间分区,四种模式的说明详见笔记部分。基本思想:数据局部性 CPU缓存读写速度大于内存读写速度,所以要尽量减少缓存不命中(CPU从内存读取信息)的次数 用连续队列代替指针的不断跳转 不过此模式会让代码更复杂,并伤害其灵活性 脏标识模式 需要结果时才去执行工作原创 2020-10-12 21:41:03 · 220 阅读 · 0 评论 -
游戏中的设计模式之解耦模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version包含了组件模式 本质上是功能的模块化,延伸了面向对象的解耦思想 U3D的编程思想就是面向组件的,MonoBehaviour的子类都可作为组件挂在GameObject上 事件序列 就像银行办事需要排号一样——每个顾客要处理的事都是一个事件,编号后就形成了天然的事件序列,银行会按一定规则来依次处理队列中的事件 一般在底层实现,但宏观上依然存在,例如RTS游戏中通过Shi原创 2020-10-12 12:52:53 · 240 阅读 · 0 评论 -
游戏中的设计模式之行为模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version包含了字节码 享元模式、原型模式中,不同的属性被存储在数据库中,而字节码是将行为存在数据库中 可用于实现可视化脚本编辑工具 子类沙箱 子类使用基类方法,或在基类方法上扩展 类型对象 其实是享元模式、原型模式的一种应用,以不同数据(而不是不同类)区分对象类型 ...原创 2020-10-12 12:49:01 · 120 阅读 · 0 评论 -
游戏中的设计模式之序列模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version包含了双缓冲模式 当一个缓冲准备好后才会被使用——就像一个集装箱装满才会发货一样;当一个缓冲被使用时另一个处于准备状态,就形成了双缓冲 在渲染中广泛使用,一帧准备好后才会被渲染到屏幕上——所以准备时间太长就会导致帧率下降 游戏循环 可参考脚本生命周期 更新方法 同上,实际上是Unity通过反射在生命周期不同时刻调用MonoBehaviour中的相关方法 这三原创 2020-10-11 20:50:32 · 125 阅读 · 0 评论 -
游戏中的设计模式之状态模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_VersionSwitchCase版本,用按键控制一盏冷暖灯,关灯状态下,按一次打开暖光,再按切换为白光,再按变为暖白光,再按关闭 状态类版本,交通灯 停止、通行、闪烁、等待的切换基本思想:现在状态和条件决定对象的新状态,状态决定行为(Unity内AnimationController就是状态机)为什么要使用它:使流程清晰化、结构化 简化判断逻辑,比如嘴的状态是洗牙,那.原创 2020-10-11 20:28:00 · 155 阅读 · 0 评论 -
游戏中的设计模式之单例模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_VersionU3D中利用MonoBehaviour初始化单例非常简单,只要在Awake中加入Instance = this,不过要注意的是,别的类不能在Awake里使用这个单例单例在普通C#中还有其他做法,甚至有些泛型、线程安全的扩展,也都不复杂,可以自行查询。基本思想:使用单例意味着这个对象只有一个实例,这个实例是此对象自行构造的,并且可向全局提供为什么要使用它:减少.原创 2020-10-11 19:49:06 · 116 阅读 · 0 评论 -
游戏中的设计模式之原型模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_VersionUnity中Prefab本质就是此模式里的原型,而Spawner要做的只是调用Instantiate方法 新的Prefab被生成以后,通过读取Dragons.txt里配置的信息来设置克隆体的名称和尺寸注:这里为了快速实现使用txt记录配置表,但实际项目里,往往使用SQL、Json、csv等方式进行配置基本思想:将一个或多个对象当做原型,通过统一的生成器克隆出很多类似.原创 2020-10-11 11:20:51 · 192 阅读 · 0 评论 -
游戏中的设计模式之观察者模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version基本思想:事件与其他对象行为的解耦——例如一个代码描述了日本核电站爆炸的事件,世界人民买盐这种行为显然不应该由核电站爆炸直接调用,而是通过卫星电视告诉广大群众,群众想买盐还是想买仙人掌就由他们自己决定了~好处:解耦,物价局改了粮价不需要挨家挨户通知公民,只需要让电视台播个新闻就好 如果要挨家挨户通知,物价局必须有每个公民的地址,这显然不合理,也会浪费很多资源 扩展困难——原创 2020-10-10 16:59:12 · 133 阅读 · 0 评论 -
游戏中的设计模式之享元模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version左半部分为享元模式下,只有一个CubeBase,通过ObjInstancing(int num)讲共享的网格、材质及一个Transform信息表传递给GPU,只有一个Draw Call,所以效率极高右半部分为关闭享元模式后的做法,每生成一个Cube都会重新实例化一个立方体,并向GPU发送一次网格、材质和位置信息,所以1000个立方体就需要1000个Draw Call,效率极低原创 2020-10-10 00:38:37 · 137 阅读 · 0 评论 -
游戏中的设计模式之命令模式 笔记
源代码来自:https://github.com/TYJia/GameDesignPattern_U3D_Version命令模式基本思想:将命令封装,与目标行为解耦,使命令由流程概念变为对象数据(需要大量实例化命令对象)缺点:可能会导致大量的实例化,从而浪费内存扩展:可用享元模式代替大量的实例化命令变成了数据,也就变成了可被传递、存储、重复利用的:通过命令数据 队列/栈 可以轻易实现撤销、重做、时光倒流 命令数据还可以形成日志,用于复现用户行为,便于重复测试同样序列命令对各种目标的影响原创 2020-10-10 00:11:17 · 156 阅读 · 0 评论