中EN
概念页

数据驱动与游戏世界编辑器

Data-Driven Engines & Game World Editors

当游戏行为可以部分或全部由美术和策划提供的数据控制,而不只由程序员写的代码控制时,引擎就是数据驱动的。它能提高团队效率、缩短迭代时间,但工具、健壮的运行时和预览手段都要花大量成本,过度设计反而降低生产力,所以要权衡并坚持 KISS。玩法领域里对应 DCC 工具的是游戏世界编辑器:创建世界块并放入静态和动态元素、设定对象初始状态和行为。GEA 列出了它的典型功能,并比较了不同引擎在何时做平台相关优化上的取舍(GEA4 卷 II 16.3–16.4)。

数据驱动的收益与代价

早期游戏几乎全由程序员硬编码,因为内容少、质量要求低。现在内容量增长快于团队规模:第九代主机(Xbox Series X/S、PS5)时代,团队常说要用不比上一代大多少的团队做出十倍的内容(卷 II 16.3)。

  • 收益:程序员稀缺昂贵,产出内容比美术和策划慢得多;把创造内容的能力交给负责内容的人,能充分利用每个人、减轻程序团队压力;改一个小参数或整关重做都能很快看到效果,最好无需程序员帮忙,从而把游戏打磨到很高质量。
  • 代价:要为美术和策划写定义数据的工具;运行时代码要能健壮地处理各种可能的输入;还要提供游戏内预览和排错工具。这些都要花大量时间编写、测试和维护。
  • 常见失败:很多团队一窝蜂地数据驱动化,不研究对自己游戏和成员需求的影响,结果工具和引擎系统过于复杂、难用、bug 多、难以适应需求变化,生产力反而不如老式硬编码。
  • 原则:每个引擎都该有一些数据驱动组件,但要非常谨慎地选择哪些部分数据驱动:比较实现该功能的成本与它在项目周期内预计节省的时间;牢记 KISS("保持简单"),借爱因斯坦的话说,"尽可能简单,但不能更简单"。配置层面的数据驱动见 引擎配置系统。

世界编辑器

所有商业引擎都有某种世界编辑器(卷 II 16.4):Quake/Doom 系的 Radiant;Valve Source/Source 2 的 Hammer(曾名 Worldcraft、The Forge,用于《半衰期 2》《传送门》《求生之路》《泰坦陨落》等);CRYENGINE 的 Sandbox(可同时在 2D 和立体 3D 下实时编辑多平台环境)。

世界编辑器通常能设定游戏对象的初始状态(属性值),也能控制动态对象的行为:可以用数据驱动的配置参数(A 初始不可见、B 生成后立即攻击玩家、C 可燃),也可以用脚本语言,这就把策划的工作推进了编程领域;有的编辑器甚至允许几乎不靠程序员定义全新的对象类型。

典型功能

(卷 II 16.4.1)

功能要点
世界块管理新建、改名、拆分、合并、删除块;块关联静态网格及导航网格、可攀爬边缘、掩体点等静态数据。有的引擎块必须依附一个背景网格,有的块可以独立存在(由 AABB、OBB 或任意多边形区域定义)。地形、水等可能有专门工具,也可能在 DCC 里制作后打标记(《神秘海域》《最后生还者》的水是带特殊材质的三角网格),甚至用独立工具(《荣誉勋章:血战太平洋》的高度场地形用 EA 另一团队工具的定制版,比集成进 Radiant 更省事)
可视化3D 透视视图和/或 2D 正交视图,常见四分视图(顶、侧、前 + 透视)。渲染可以来自工具内置渲染器、宿主 DCC(Maya、3ds Max)的视口、与游戏引擎通信,或编辑器本身就集成在引擎里
导航正交视图滚动缩放;3D 视图绕对象旋转、"飞行"模式;一键聚焦选中对象、保存并跳转相机位置、粗细两档移动速度、类似浏览器的导航历史
选择单选或多选;正交视图框选、3D 视图射线拾取;按名字在列表/树中查找;保存命名选择集。对象密集时可以循环选择射线穿过的所有对象,或临时隐藏已选对象再选
图层 (layers)预定义或自定义分组,可整层隐藏、按颜色区分;也是分工手段(灯光组只看相关元素)。若能按层单独存取,灯光、背景、NPC 各存一层,多人就能同时编辑同一个世界块而不冲突
属性网格 (property grid)显示并编辑选中对象的属性:简单键值对和布尔、整数、浮点、字符串,或数组、嵌套结构、向量、RGB 颜色、外部资产引用
对象摆放与对齐位置、朝向、缩放用视口手柄控制;资产引用(如换网格要立即显示)需要编辑器特殊处理;吸附网格、吸附地形、对齐到对象等辅助
特殊对象类型见下文
世界块存取粒度不同(每块一个文件,或按层单独存取);格式有自定义二进制、XML、JSON 等文本格式
快速迭代编辑器运行在游戏内、与运行中的游戏实时连接,或离线(独立工具或 Lightwave/Maya 插件)但能把修改热重载进游戏

多对象编辑:各对象某属性值相同就显示该值,编辑后写入所有选中对象;值不同就留空,输入新值会覆盖全部使它们一致。选中异构对象时只显示所有类型共有的属性;因为游戏对象类型通常继承自共同基类,至少位置、朝向这类共享属性仍能一起编辑(卷 II 16.4.1.6)。

自由属性 (free-form properties):属性集合和类型一般按对象类型定义(可渲染对象有位置、朝向、缩放、网格;光源有位置、朝向、颜色、强度、类型)。有的编辑器允许逐实例添加用户自定义的键值对,名字、类型、值都由用户定,非常适合原型化新玩法或一次性场景(卷 II 16.4.1.6)。

需要特殊处理的对象类型(卷 II 16.4.1.8):

  • 光源:没有网格,用图标表示;编辑器最好能近似显示光照效果,方便实时调整。
  • 粒子发射器:独立渲染器的编辑器里可能只显示图标或做近似模拟;编辑器在游戏内或与游戏实时连接时不成问题。
  • 声源:可视化全向声源的最大半径,或定向声源的方向和锥形(3D 音频模型见 三维音频渲染)。
  • 区域:用来检测对象进出等事件或划定用途的空间体积。有的只支持球或定向盒,有的支持俯视为任意凸多边形、侧面竖直的形状,甚至 k-DOP 等更复杂几何;球形只需一个半径属性,任意形状就需要专门的编辑工具。
  • 样条:由控制点(可能还有切线)定义的三维曲线。常用 Catmull-Rom,因为它只需控制点、且曲线经过所有控制点(见 埃尔米特与 Kochanek-Bartels 样条)。编辑器要能显示样条并选中、操作单个控制点;有的提供"粗选"(选对象)和"细选"(选控制点、区域顶点)两种模式。
  • AI 导航网格:用二维三角网格描述可行走区域边界并为寻路提供连通信息,编辑器通常是 AI 策划创建、查看、编辑它的核心工具(UE5 侧见 AI 感知、EQS 与导航)。
  • 其他自定义数据:例如给 AI 用的"可供性 (affordance)"(窗、门、可攻防点)、掩体点、可攀爬边缘。

迭代时间

具体机制不重要,关键是从修改到在游戏里看到效果的往返迭代时间足够短。迭代不必是瞬时的,应与修改的范围和频率相称:改角色最大生命值应该很快,整块世界的灯光大改则可以接受更长时间(卷 II 16.4.1.10)。代码侧的快速迭代见 Live Coding 实时编译,运行时调参见 游戏内调试工具。

集成资产管理

有的引擎把世界编辑器和资产数据库管理的其他方面集成在一起:网格与材质属性、动画、混合树、动画状态机、碰撞与物理属性、纹理资源等(卷 II 16.4.2)。最著名的是 UnrealEd:它直接集成在引擎里,编辑器中的修改直接作用于运行中游戏的动态元素,快速迭代很容易;它管理从动画、音频片段到网格、纹理、材质和着色器的整个资产数据库,提供统一、实时、所见即所得的视图(Content Browser 访问全部资产)。

数据处理成本:资产管线通常分两步:先从 DCC 导出到只含游戏相关数据的平台无关中间格式,再处理成针对特定平台优化的格式(多平台项目中一个中间资产会生成多个平台资产)。各工具管线的关键差别在于第二步发生的时机(卷 II 16.4.2.1):

引擎平台相关优化发生在取舍
UnrealEd(GEA 的描述)资产首次导入编辑器时关卡设计迭代快;但修改网格、动画、音频等源资产更痛苦
Source、Quake运行游戏前烘焙 (bake out) 关卡时每次运行前付出优化成本
Halo首次加载进引擎时转换,结果缓存随时可以改原始资产,缓存避免每次运行都重复优化

与 UE5 文档的对照:GEA 说 UnrealEd 在导入时就做平台相关优化。本库依据 UE 5.8 文档的 烘焙、打包与 Zen 加载器 则写明,引擎内部以 PNG、WAV 等格式存资产,转换为各平台格式发生在打包流程的 Cook 阶段。两种说法并列记录:至少就 UE5 的官方描述而言,平台相关转换属于烘焙阶段,而不是导入阶段。

ACP 的整体结构见 资产管线与工具链,UE5 编辑器的扩展方式见 编辑器扩展与 Python 脚本。

  1. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  2. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 16 章 16.3–16.4 节

相关页面

游戏开发游戏世界与游戏对象Game World & Game Objects游戏由玩法 (gameplay) 而不是技术定义;游戏机制 (game mechanics) 是支配游戏中各实体交互的规则,以及目标、成败标准、玩家能力、非玩家实体和整体流程(GEA 引用的论文称实现玩法的软件系统为游戏的 G 因子)。大多数游戏世界由静态元素和动态元素组成,划分为若干世界块,并由高层游戏流程组织玩家目标;动态元素通常实现为游戏对象 (GO),引擎提供的建模设施称为游戏对象模型,且分为工具侧和运行时两套(GEA4 卷 II 16、16.1–16.2)。游戏开发资产管线与工具链Asset Conditioning Pipeline & Tools游戏引擎的输入数据来自美术使用的数字内容创作 (DCC) 工具,但 DCC 格式几乎从不直接用于游戏,必须经过资产调理管线 (Asset Conditioning Pipeline, ACP) 导出、处理并按平台打包。围绕它还有世界编辑器、记录资产元数据的资源数据库,以及几种工具架构(独立工具、与引擎共享底层、编辑器内嵌于引擎、Web 界面),各有取舍。游戏开发 · UE5编辑器扩展与 Python 脚本Editor Extension & Python Scripting扩展 UE 编辑器有三条主要路线,门槛由低到高:Python 脚本(只在编辑器中可用,适合批量处理资产和串联外部 DCC 管线)、Editor Utility Widget(基于 UMG 的蓝图编辑器界面,做成自定义标签页),以及 C++ 编辑器插件(如 Editor Standalone Window 模板,用 Slate 的声明式语法构建窗口)。游戏开发 · UE5世界分区World Partition世界分区 (World Partition) 是 UE5 的自动数据管理与基于距离的关卡流送 (Level Streaming) 系统:整个世界存为一个持久关卡,按可配置的运行时网格划分为单元格 (Cell),由流送源 (Streaming Source,默认是玩家控制器) 按距离加载/卸载。它配合一 Actor 一文件 (One File Per Actor, OFPA) 支持多人协作编辑,用数据层 (Data Layers) 按玩法状态切换内容,用分层细节层次 (Hierarchical Level of Detail, HLOD) 在远处以代理网格显示未加载的单元格。游戏开发引擎配置系统Engine Configuration游戏引擎总会积累大量可配置选项:有的通过选项菜单暴露给玩家(画质、音量、手柄设置),有的只供开发团队使用、发售前隐藏或去除(如玩家最大行走速度在开发期可调、发售前改成硬编码)。GEA 讨论选项的存取方式(文本文件、压缩二进制、注册表、命令行、环境变量、在线档案)、全局与每用户选项,以及 Quake cvar、OGRE、Naughty Dog 三个真实例子。游戏数学埃尔米特与 Kochanek-Bartels 样条Hermite & Kochanek-Bartels Splines三次 Hermite 曲线用两个端点和两个端点切线定义,比贝塞尔控制点更直观;把多段 Hermite 曲线串起来经过一系列点时,Kochanek-Bartels 用张力、偏置、连续性三个参数从相邻弦计算切线,默认参数即 Catmull-Rom 样条。均匀三次 B 样条则以不经过控制点为代价换来处处 C^2 连续。游戏开发 · UE5AI 感知、EQS 与导航AI Perception, EQS & NavigationAI 的感官层由三块组成:AI 感知 (AI Perception) 组件挂在 AIController 上监听视觉/听觉/伤害等刺激并更新黑板;环境查询系统 (EQS) 用生成器产生候选项、先过滤后打分,回答「哪里最好」;导航系统从碰撞几何生成分瓦片的导航网格 (NavMesh),按多边形代价寻路,并提供 RVO 与 Detour Crowd 避让。它们为行为树/StateTree 提供输入。游戏开发 · UE5Live Coding 实时编译Live CodingLive Coding 集成了 Live++,在引擎运行时重新编译 C++ 并给二进制打补丁;它比旧的 Hot Reload 快得多、也更灵活,新安装默认启用,快捷键 Ctrl+Alt+F11。默认开启的「对象重实例化 (Object Reinstancing)」会替换掉现有的 UCLASS/USTRUCT 等对象实例,从而支持新增函数、变量这类结构性修改;关闭它时只适合小改动,大改通常会崩溃。坑:在 .cpp 构造函数里改的默认值不会作用到已存在的实例。游戏开发 · UE5烘焙、打包与 Zen 加载器Cooking, Packaging & Zen Loader打包是一组构建操作:编译 (Build) → 烘焙 (Cook,把资产转成目标平台格式) → 暂存 (Stage) → 打包 (Package) → 可选的部署 (Deploy)。UE5 的运行时加载器 Zen Loader 会在暂存阶段离线算好包与对象的依赖图,并把数据装进 .utoc/.ucas 容器(IoStore),由 I/O 分发器以很低的 CPU 开销定位数据块;.pak 只用于不常访问的零散文件。游戏开发游戏内调试工具In-Game Debugging Tools各子系统(渲染、动画、碰撞、物理、音频、网络、玩家机制、AI……)都有大量配置项,能在游戏运行时调整而无需改代码、重新编译链接再运行,可大幅节省调试和搭建关卡/玩法的时间。GEA 介绍支撑这一点的几类游戏内工具:游戏内菜单(及 Dear ImGui 等第三方 GUI)、游戏内控制台、调试摄像机与暂停/慢动作、作弊功能、截图与录像。(卷 I 10.3–10.7 节)游戏开发三维音频渲染3D Audio Rendering3D 音频渲染引擎要尽可能可信地重现"玩家若真在游戏世界里会听到什么"。它的输入是世界里大量的 3D 声音,输出是少数几路扬声器声道;主要任务是合成、空间化(距离衰减 + 声像定位)、声学建模(混响、遮挡、衍射)、多普勒和混音。GEA 给出了恒功率声像律、聚焦角、混响区域交叉混合、遮挡/阻挡/排除的分析方法,以及顽皮狗《最后生还者》的随机传播建模和声音门户(GEA4 卷 II 15.4)。游戏开发世界块数据格式与生成器World Chunk Data Formats & Spawners世界块中的动态部分要为每个游戏对象记录两样东西:属性初始值和对象类型。GEA 比较了三种存储方式:二进制对象映像(生成最简单,但要处理指针、虚表和字节序,且对变化很脆弱)、序列化描述(XML/JSON/私有二进制格式,配合反射与类工厂),以及生成器 (spawner) + 类型模式 (type schema):生成器是只含类型 id 和键值对的轻量数据块,彻底切断世界编辑器与运行时代码的耦合;模式里的默认值配合"与默认值相同就省略键"可以让默认值的修改自动传播到旧实例(GEA4 卷 II 17.3)。

被这些页面引用1 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原