ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

游戏编程模式之组件模式

2021-10-28 16:02:01  阅读:169  来源: 互联网

标签:角色 编程 Transform 模式 Unity 组件 Animator


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

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

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

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

标签:角色,编程,Transform,模式,Unity,组件,Animator
来源: https://www.cnblogs.com/ZhuSenlin/p/15476087.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有