游戏编程模式之组件模式
允许一个单一的实体跨越多个不同域而不会导致耦合。
(摘自《游戏编程模式》)
组件模式又是一个采用“Have One”实现多态的模式。从客观上来说,Unity引擎的GameObject就是使用组件尤为成功的例子。在使用Unity开发中,我们可以给一个GameObject添加引擎自带或自己编写的组件。下图展示了某个项目中一个VR人物游戏对象上面绑定的组件,我们将从这个案例中引入我们即将介绍的组件模式。
根据图片,VR角色模型绑定了Transform、Animator、VRIK、CalibrateSize、CharacterWalkLomotion、WalkingJitter以及BonesTransformData七个根组件。从命名上我们不难猜测他们的作用:
- Transform:管理这个角色的位置
- Animator:管理角色的动画
- VRIK:VR的反向动力学
- CalibrateSize:角色身材大小管理
- CharacterWalkLomotion:角色行走相关
- WalkingJitter:模拟行走抖动
- BonesTransformData:角色骨骼数据(位置、旋转方向等)
仔细探讨它们的组织形式,我们都知道,重用功能主要的实现方式就是继承和Have One。首先我们先来探讨用继承的方式实现,其代码结构如下图所示:
我们来仔细分析以下整个角色模块。其实通过继承来共享功能在这个例子中是一件很得不偿失得的方案。理由如下:
- 在各个继承关系中,子类仅仅是需要某一些数据、某一些函数。而不是所有数据。
- 子类不希望是父类的类似实例。Animator不希望成为和Transform家族(他们根本没有太多类似的地方),然而继承把它们绑在了一起,并强行让Animator认爹。
- 类与类之间的逻辑已经变得太过复杂。上面的结构图还不是功能完整的结构图。
Unity不可能傻到这样设计。因此,组件模式就发挥了巨大的作用。运用组件模式,我们可以将代码按照以下结构图进行组织:
角色拥有了这些类的一个实例。实例之间还可以通过角色互相访问和调用,并且这些类也没有相互耦合。这就是组件模式。每一个类都表示一个组件。
游戏编程模式之组件模式相关推荐
- 游戏设计模式阅读笔记13——解耦模式(组件模式)
一.意图 允许单一实体跨越多个领域而不会导致这些领域彼此耦合. 二.动机 当一个系统涉及到渲染,物理,声音,控制器输入等等...如果都写在一个类中,这个类就显得巨大且不易维护添加,高度耦合. 在使用并 ...
- 【游戏设计模式】之四 《游戏编程模式》全书内容提炼总结
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/53240330 作者:毛星云(浅 ...
- 【游戏设计模式】之 《游戏编程模式》全书内容提炼总结
转自浅墨毛星云:http://blog.csdn.net/poem_qianmo/article/details/53240330 这是一篇超过万字读书笔记,总结了<Game Programmi ...
- 学习笔记-《游戏编程模式》
<游戏编程模式>全书内容梗概总结 这是一篇超过万字读书笔记,总结了<游戏编程模式>一书中所有章节与内容的知识梗概. 目录与说明 <游戏编程模式>一书中总共介绍了19 ...
- Unity实现:23种设计模式、《游戏编程模式》
目录 一.23种设计模式在Unity实现 Creational Patterns 创建型模式(5种) 工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 Structural Patterns ...
- React的组件模式 1
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 组件是 React 的核心. 原文:React的组件模式 作者:前端小智 Fundebug经授权转载,版权归原作者所有 ...
- 【步兵 经验篇】组件模式的特点
[步兵 经验篇]组件模式的特点 by EOS. 组件模式对u3d的开发者可能并不陌生,因为其框架设计大量的使用了这种模式, 但是cocos却没有使用,不过后来出的js也开始套用这种模式,他能被效仿,自 ...
- React的组件模式
组件是 React 的核心,因此了解如何利用它们对于创建优秀的设计结构至关重要. 什么是组件 根据 React 官网的介绍,"组件让你可以将 UI 分割成独立的.可重用的部分,并独立管理每个 ...
- 【Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 )
文章目录 一.模块化 与 组件化 模式控制 二.applicationId 设置 三.使用 sourceSets 配置组件模式下使用的清单文件 四.组件模式 与 集成模式 切换示例 五.完整的 Gra ...
最新文章
- 深入理解javascript函数系列第二篇——函数参数
- mac版python3.7怎么使用_【Mac环境】Mac使用python3.7环境
- pytorch 学习笔记目录
- 网摘--2014年5月12日
- Modelsim command line 传参数到 .do 文件
- 人事薪资管理系统V1.00功能简介(适用于工厂)c#.net+SQL Server2000
- python刷题+leetcode(第二部分)
- ResNet到底深不深?
- kb3042553显示不适用计算机,KB3042553补丁打不上,怎么办?
- 小米为什么拆分红米? | 畅言
- mysql批量导入txt数据_MySQL批量导入Excel、txt数据
- 大数据-实时推荐系统最主流推荐系统itemCF和userCF视频教程下载
- docker+elasticsearch的安装
- PHP PDF转图片:设置图像的色彩空间 RGBCMYK互转
- android开发---9.MediaPlayer实现音乐播放的demo
- 高考前最后一天,AI 监考老师已就位
- 关于IPhone无法收发短信---设置iphone短信中心号码
- 访问WebServcie遇到配额不足的时候,请增加配额
- 对称算法与非对称算法
- iOS用AVAudioPlayer播放m4a音频