
定义“纯粹的逻辑类”。 基本职责:对游戏对象的“逻辑值”进行定义、存储和计算。 关键要素:只关心逻辑数据,不考虑表现问题。(如同在没有表现能力的服务端写代码)。 不用继承Monobehaviour(Unity中)、不在任何系统自带的组件上存取逻辑值。 可在逻辑运算的特定的位置抛出数据变更事件。 或在数据操作完成后回调到 Controller。 举例说明:如定义、存储和计算 “变换相关的坐标、旋转、缩放”、“战斗属性相关的“生命、法力”等。
定义“纯粹的表现类”。 基本职责:根据逻辑类中的数据,对物体进行实际显示更新。 关键要素:持有 实际的游戏物体(GameObject)。(获得游戏物体的对象引用) 持有或可访问对应的逻辑类。(可获得对应逻辑类的数据内容) 可监听逻辑类中的数据变更事件,并以此对要表现的游戏对象及其子对象做显示更新(观察模式单向弱依赖)。 或由 Controller 类控制,“可选地” 对实际物体进行操作。
如:逻辑数据上的位移变化较粗糙,但修改实际物体时,可对Transform组件上的值进行直接赋值或平滑插值。
实际开发中,这两个类其实是可以合并为一个类的,只是要注意保持这种单向弱依赖的处理的方式。
ECS(Entity-Component-System)架构是一种将游戏对象分解为实体、组件和系统的设计模式,用于分离游戏对象的逻辑和渲染。每个实体都由多个组件组成,每个组件都包含游戏对象的一部分数据和行为。系统则用于处理组件,例如更新位置、处理输入、渲染等。
具体来说,ECS架构的核心是:
实体:实体是游戏对象的抽象,每个实体都由一组组件组成。实体本身不包含任何逻辑或数据。
组件:组件是实体的一部分,它包含了游戏对象的数据和行为。例如,Transform组件包含了游戏对象的位置、旋转和缩放等信息,Renderer组件包含了游戏对象的渲染信息。
系统:系统是用于处理组件的逻辑模块,它可以更新组件的状态、处理输入、渲染等。系统通过访问组件来实现对实体的控制。
使用ECS架构可以带来多方面的好处,包括:
更高的性能:ECS架构是一种数据驱动的设计模式,它避免了基于继承的面向对象设计模式中的多态开销。由于组件是数据,系统可以对组件进行批量处理,从而提高性能。
更好的可维护性:ECS架构可以分离游戏对象的逻辑和渲染,使代码更加清晰和易于维护。
更好的可重用性:ECS架构的组件是可以被重用的,它们可以被应用于多个实体和系统中,从而提高代码的可重用性。
总之,ECS架构是一种非常有用的设计模式,特别是对于需要处理大量游戏对象的游戏来说,它可以提高游戏的性能和可维护性。