整体概述参见:http://dreamyouxi.com:7129/blog/1203
本文介绍的是战斗部分的基础代码结构,在此结构之上可以构建自己的 GamePlay 架构。
服务端的基础代码结构与 Unity 引擎类似,采用传统的面向对象组件式编程,鼓励使用者尽可能以组合替代继承。
GamePlay 基础主要概念
- GameObject:组件的运行实体和容器,同时也是对象通信的载体和组件间的中间件。内存布局上各对象之间是平行关系,但可以借助 Transform 组件构建树形管理型对象。
- CppBehaviour:脚本基类,大部分业务逻辑在这里运作。生命周期函数与 Unity 引擎类似,包括 Awake、Start、Update、OnDestroy、OnTrigger、OnContactEnter、OnContactStay、OnContactExit 等。
- Transform:3D 数学变换组件,与 Unity 引擎类似。基础属性包括 position、scale、rotation,是构建三维世界的基础,可组成树形场景结构,并提供基础 3D 运算。
- Rigidbody、Collider、Joint、Ragdoll 等:提供基础物理属性和概念,作用与语义和 Unity 引擎保持一致,赋予服务器物理模拟和查询的能力。
- Prefab:提供序列化和反序列化能力,构成服务端游戏资源管理体系,用于构建游戏对象(GameObject)。
房间组件
以上是游戏对象相关的概念。服务端还有另一个重要概念——房间组件。
房间组件的基本语义是:非游戏逻辑对象,以单例形式存在。用 ECS 的概念类比,它更像是 System。以下几个例子可以说明游戏对象与房间组件的区别:
- 弹道计算:这是 GameObject,通过书写 CppBehaviour 进行逻辑开发。
- 载具生成器:这是房间单例,本身不是游戏对象,只是纯粹的逻辑概念,负责生成坦克、汽车等游戏对象。
- 游戏结束:这是房间单例,负责全局游戏结束的逻辑。不产生任何游戏对象,只根据已有信息进行逻辑决策。
- 快照生成器:这是房间单例,每一帧结束时,如有必要则生成当前游戏世界快照。
总结
以上介绍的是 GamePlay 的基础结构。在此之上,可以进一步构建其他 GamePlay 体系,例如 ECS、MVC 模式等。
从更底层的视角来看,这套基础结构所定义的是一批超底层的抽象:IO、网络、物理、资源、生命周期等。