首页 理论教育 Unity3D开发:刚体动态仿真实时实现

Unity3D开发:刚体动态仿真实时实现

时间:2023-11-21 理论教育 版权反馈
【摘要】:使用Unity 3D进行产品开发时,大部分时候都需要通过代码实现产品的功能。本书主要介绍MVC和ECS这两个常用框架。ECS的E也就是entity,即传统引擎中的对象。每个entity是由多个component组合而成,共享一个生命期;而component之间可以组合在一起作为system筛选的标准。下面将简要介绍使用Unity 3D进行开发时的基本步骤。有关Unity 3D的使用更进一步的学习可参见参考文献[12]。

Unity3D开发:刚体动态仿真实时实现

使用Unity 3D进行产品开发时,大部分时候都需要通过代码实现产品的功能。由于产品功能的复杂性,因此需要对代码进行规范的设计管理。如果代码的设计随意,当实现比较复杂的产品功能时,代码的耦合性可能会较高,影响产品的开发进度及效率。什么是耦合性?耦合性就是类与类之间的关系,被调用的类如果发生改变会严重影响使用调用它的类的改变,那就说明此类代码的耦合性是极高的。所以很多框架设计主要的逻辑方向就是解耦,解耦通过创建中间层,将调用方与被调用方之间的影响降到最低。本书主要介绍MVC(模型,视图,控制器)和ECS(entity component system,实体-组件-系统)这两个常用框架。

1.MVC框架

MVC框架主要是将数据模型层——M层、逻辑控制层——C层、视图层——V层三者进行分离。M层用于保存数据。V层是视图层,我们能看见的所有东西都是V层的,如场景或者一个game object(开发对象)。C层为逻辑控制层,V层与M层之间的交互通过C层进行。例如,M层用户单击跳转场景按钮,此时M层将此消息发送给C层,C层接收后访问至M层,获取到将要跳转的场景名称;之后C层将场景名称反馈到V层,V层根据名称进行跳转,确保了M和V的同步,一旦M改变,V层实现同步更新,大大提高了开发的便捷性。

2.ECS框架

ECS是一个gameplay层面的框架,它是建立在渲染引擎、物理引擎之上的,主要解决的问题是如何建立一个模型来处理对象的更新操作。(www.xing528.com)

传统的很多引擎是基于面向对象来设计的,每个对象有一个名为Update的方法,框架遍历所有的对象,依次调用其Update方法。有些引擎甚至定义了多种Update方法,在同一帧的不同时机去调用。这么做其实是有极大缺陷的,因为对象是由很多部分聚合而成,引擎的功能模块很多,不同的模块关注的部分往往互不相关。例如,渲染模块不关心网络连接、产品对象处理不关心模型种类等。从自然意义上说,把产品对象的属性聚合在一起成为一个对象是很自然的事情,对于这个对象的生命期管理也是最合理的方式。但对于不同的业务模块来说,针对聚合在一起的对象做处理,把处理方法绑定在对象身上就不那么自然了。这会导致模块的内聚性很差,模块间也会出现不必要的耦合。

ECS的E也就是entity,即传统引擎中的对象。但在这个系统下,它仅仅是component(组件)的组合,它的意义在于生命期管理。C和S是这个框架的核心。system(系统)也就是上面提到的模块。对于产品开发来说,每个模块应该负责开发的一部分,要么作用于同类的一组对象的单个个体,要么关心这类对象的某种特定的交互行为。例如,碰撞系统只关心对象的体积和位置,不关心对象的名字、连接状态、音效等,也不一定关心所有对象,如关心那些不参与碰撞的装饰物。所以对每个子系统来说,筛选出系统关心的对象子集以及只给展示出所关心的数据就是框架的责任了。

在ECS框架中,把每个可能单独使用的对象属性归纳为一个component。例如,对象的名字就是一个component,对象的位置状态是另一个component。每个entity是由多个component组合而成,共享一个生命期;而component之间可以组合在一起作为system筛选的标准。在开发时,可以定义一个system关心某一个固定component的组合;那么框架就会把满足有这个组合的entity都筛选出来供这个system遍历,如果一个entity只具备这组component中的一部分,就不会进入这个筛选集合,也就不被这个system所关心了。

下面将简要介绍使用Unity 3D进行开发时的基本步骤。有关Unity 3D的使用更进一步的学习可参见参考文献[12]。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈