数据驱动游戏开发是一种以数据为核心,强调游戏设计和游戏内容的灵活性和可扩展性的游戏开发模式。在这种模式下,游戏设计师和内容创作者不需要工程师编写或修改C/C++代码,就能创建、调整和扩展游戏中的对象、系统和行为。这种开发方式在追求效率和适应快速变化设计需求的项目中显得尤为重要。 数据驱动的定义是“无需工程师参与”,因为工程师开发速度较慢,并且在没有适当功能的情况下,设计师可能会绕过现有系统,导致出现技术债务。数据驱动游戏开发的目标之一是尽可能地从游戏中移除C/C++代码,从而模糊游戏引擎与内容之间的界限。 在数据驱动游戏开发中,GameObject(Go)是指具有逻辑交互内容的游戏对象。Go可以执行多种任务,如渲染、寻路、路径跟随、发声、动画和持久化等。游戏中的很多元素都是GameObject的实例,包括树木、灌木、怪物、操纵杆、航点标记、门、英雄、物品等。这些GameObject中有些是“纯粹的逻辑”对象,设计师通常看不见它们,例如触发器、电梯移动器、摄像机序列等。 GameObjectSystem负责构建和管理GameObject,将ID映射到对象指针,并且负责消息的路由。GoDb是与GameObject相关的数据库,而ContentDb则是静态内容数据库。这些数据库构成了游戏数据驱动的基础,每个游戏或多或少都会有这种形式的数据库。 在数据驱动游戏开发中,对GameObject系统的问题进行分解成类的方法有无数种,但它们都是错误的。游戏设计经常发生变化,设计师会独立于工程结构做出决策,他们可能会提出跨越工程关注点的要求。因此,项目的开发者不应该抗拒变化,否则会导致更加严重的问题。然而,C++在这方面并不具备足够的灵活性,因为C++代码有固化的倾向,随着时间的推移对变化的抵抗性增强。重组类树需要大量的工作,而且在需要修改时会导致工程师的挫败感,进而引发类合并、虚拟重写和复杂度的增加。 为了更好地理解数据驱动游戏开发,我们可以参考Dungeon Siege这款游戏中超过7300种独特的游戏对象类型和超过100000个放置在两个地图中的对象。Dungeon Siege展现了连续世界的意义——任何东西都可以随时加载。这样的设计使得游戏设计师能够更加灵活地创作内容,而无需工程师的直接干预。 数据驱动游戏开发的另一个重要组成部分是不断变化的设计需求。当代码越接近内容时,需求就越模糊,这导致开发者必须定期重构代码。开发者应该接受这种变化,因为抵抗变化将导致更多问题。 在数据驱动游戏开发中,C++的不灵活性是一个主要问题。代码倾向于“硬化”,即随着时间的推移对变化的抵抗性增强。重排类树需要大量的工作,而需要改变时会导致工程挫败感,进而引发类合并、虚拟重写和复杂度的增加。因此,数据驱动游戏开发不仅是一种编程技术,更是一种理念,它挑战了传统游戏开发中工程师和设计师之间的界限,鼓励更灵活的设计和开发流程。
剩余40页未读,继续阅读
- 粉丝: 16
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助