允许一个单一的实体跨越多个不同域而不会导致耦合。

(摘自《游戏编程模式》)

组件模式又是一个采用“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不可能傻到这样设计。因此,组件模式就发挥了巨大的作用。运用组件模式,我们可以将代码按照以下结构图进行组织:

角色拥有了这些类的一个实例。实例之间还可以通过角色互相访问和调用,并且这些类也没有相互耦合。这就是组件模式。每一个类都表示一个组件。

游戏编程模式之组件模式相关推荐

  1. 游戏设计模式阅读笔记13——解耦模式(组件模式)

    一.意图 允许单一实体跨越多个领域而不会导致这些领域彼此耦合. 二.动机 当一个系统涉及到渲染,物理,声音,控制器输入等等...如果都写在一个类中,这个类就显得巨大且不易维护添加,高度耦合. 在使用并 ...

  2. 【游戏设计模式】之四 《游戏编程模式》全书内容提炼总结

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/53240330 作者:毛星云(浅 ...

  3. 【游戏设计模式】之 《游戏编程模式》全书内容提炼总结

    转自浅墨毛星云:http://blog.csdn.net/poem_qianmo/article/details/53240330 这是一篇超过万字读书笔记,总结了<Game Programmi ...

  4. 学习笔记-《游戏编程模式》

    <游戏编程模式>全书内容梗概总结 这是一篇超过万字读书笔记,总结了<游戏编程模式>一书中所有章节与内容的知识梗概. 目录与说明 <游戏编程模式>一书中总共介绍了19 ...

  5. Unity实现:23种设计模式、《游戏编程模式》

    目录 一.23种设计模式在Unity实现 Creational Patterns 创建型模式(5种) 工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 Structural Patterns ...

  6. React的组件模式 1

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 组件是 React 的核心. 原文:React的组件模式 作者:前端小智 Fundebug经授权转载,版权归原作者所有 ...

  7. 【步兵 经验篇】组件模式的特点

    [步兵 经验篇]组件模式的特点 by EOS. 组件模式对u3d的开发者可能并不陌生,因为其框架设计大量的使用了这种模式, 但是cocos却没有使用,不过后来出的js也开始套用这种模式,他能被效仿,自 ...

  8. React的组件模式

    组件是 React 的核心,因此了解如何利用它们对于创建优秀的设计结构至关重要. 什么是组件 根据 React 官网的介绍,"组件让你可以将 UI 分割成独立的.可重用的部分,并独立管理每个 ...

  9. 【Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 )

    文章目录 一.模块化 与 组件化 模式控制 二.applicationId 设置 三.使用 sourceSets 配置组件模式下使用的清单文件 四.组件模式 与 集成模式 切换示例 五.完整的 Gra ...

最新文章

  1. 深入理解javascript函数系列第二篇——函数参数
  2. mac版python3.7怎么使用_【Mac环境】Mac使用python3.7环境
  3. pytorch 学习笔记目录
  4. 网摘--2014年5月12日
  5. Modelsim command line 传参数到 .do 文件
  6. 人事薪资管理系统V1.00功能简介(适用于工厂)c#.net+SQL Server2000
  7. python刷题+leetcode(第二部分)
  8. ResNet到底深不深?
  9. kb3042553显示不适用计算机,KB3042553补丁打不上,怎么办?
  10. 小米为什么拆分红米? | 畅言
  11. mysql批量导入txt数据_MySQL批量导入Excel、txt数据
  12. 大数据-实时推荐系统最主流推荐系统itemCF和userCF视频教程下载
  13. docker+elasticsearch的安装
  14. PHP PDF转图片:设置图像的色彩空间 RGBCMYK互转
  15. android开发---9.MediaPlayer实现音乐播放的demo
  16. 高考前最后一天,AI 监考老师已就位
  17. 关于IPhone无法收发短信---设置iphone短信中心号码
  18. 访问WebServcie遇到配额不足的时候,请增加配额
  19. 对称算法与非对称算法
  20. iOS用AVAudioPlayer播放m4a音频

热门文章

  1. 农场工具程序设计(三)
  2. matlab读取Ansys仿真数据实例演示
  3. pg中多值列_PostgreSQL中列的statistics属性
  4. oracle查看当前的数据库实例名称,主机名称
  5. app被Rejected 的各种原因
  6. 文章总结:ASPLOS 2013 Architecture I
  7. 神经网络知识梳理——从神经元到深度学习
  8. finalcut剪切快捷键_Final Cut Pro X 常用键盘快捷键
  9. matlab编写数学公式计算,关于MATLAB Function实现数学运算的相关介绍
  10. 手机算不算计算机系统,现在的手机是不是和电脑一样是组装机