游戏内调试工具
In-Game Debugging Tools
各子系统(渲染、动画、碰撞、物理、音频、网络、玩家机制、AI……)都有大量配置项,能在游戏运行时调整而无需改代码、重新编译链接再运行,可大幅节省调试和搭建关卡/玩法的时间。GEA 介绍支撑这一点的几类游戏内工具:游戏内菜单(及 Dear ImGui 等第三方 GUI)、游戏内控制台、调试摄像机与暂停/慢动作、作弊功能、截图与录像。(卷 I 10.3–10.7 节)
游戏内菜单(卷 I 10.3)
菜单项可以:切换全局布尔设置、调整全局整数和浮点值、调用任意函数(可在引擎内做任何事)、打开子菜单(层级组织便于导航)。菜单应能方便地呼出,如按一个手柄组合键(要选正常游玩中不会出现的组合,组合键检测见 引擎输入系统)。呼出菜单通常会暂停游戏:开发者可以玩到问题发生前一刻,呼出菜单暂停,调整引擎设置让问题更易观察,再取消暂停深入检查。
Naughty Dog 引擎(《最后生还者 重制版》):顶层菜单包含各主要子系统的子菜单;渲染子菜单下又有很多子菜单,进入 Mesh Options 可关闭所有静态背景网格只显示动态前景网格(书中图 10.8 借此找到了「那头讨厌的鹿」)。与配置文件、命令行等配置途径的关系见 引擎配置系统。
第三方 GUI(10.3.1):很多团队用第三方 GUI 库给引擎加菜单等调试设施,常见选择是 Dear ImGui——立即模式 (immediate mode) GUI:通过调用函数构建界面,每帧调用 ImGui::Begin() / ImGui::End() 画出可缩放窗口,中间调用 ImGui::Text()、ImGui::BeginMenuBar() 等添加控件;想让界面显示多久就每帧调用多久。
ImGui::Begin("Debug", &debug_active);
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save")) MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
ImGui::End();
(项目地址 https://github.com/ocornut/imgui,书中所引。)
游戏内控制台(卷 I 10.4)
有的引擎提供游戏内控制台(代替或补充菜单):像 DOS 命令提示符或 csh/tcsh/ksh/bash 那样的命令行界面,可查看和修改全局引擎设置、运行任意命令。对打字不快的人不如菜单方便,但可以强大得多:有的只提供少量硬编码命令(灵活度与菜单相当),有的几乎能访问引擎的全部功能(书中以 Minecraft 的控制台为例)。若引擎有强大的脚本语言,而控制台「说」同一种语言,那么脚本能做的事都能在控制台中交互完成(脚本语言见第 17.9 节)。
| 工具 | 优点 | 缺点 |
|---|---|---|
| 游戏内菜单 | 用手柄即可操作,方便;层级导航直观 | 能力受预先定义的菜单项限制 |
| 游戏内控制台 | 可非常强大,若接脚本语言则能做脚本能做的一切 | 需要打字,不太方便 |
调试摄像机、暂停与慢动作(卷 I 10.5)
菜单或控制台最好搭配两项关键功能:(a) 把摄像机与玩家角色分离,在世界中自由飞行检查场景任一方面;(b) 暂停、取消暂停和单步游戏。暂停时仍要能控制摄像机:只要游戏逻辑时钟暂停时渲染引擎和摄像机控制继续运行即可。慢动作对审查动画、粒子、物理与碰撞、AI 行为等非常有用,实现也简单:只要所有玩法元素都用独立于真实时钟的时钟更新,让玩法时钟走慢就行;同理可做快进,迅速跳过耗时段落到达关注区域(作者调侃配上走调的 Benny Hill 音乐很搞笑)。时间线机制见 游戏时间线与时钟。
(注:原文此处写「单步见 8.5.5 节」,但 8.5.5 节讲的是断点处理,游戏时钟单步实际在 8.4.2 节;原文如此。)
作弊(卷 I 10.6)
开发调试时要允许为了效率打破游戏规则,即作弊 (cheats)。例如很多引擎允许把玩家角色「拎起来」在世界中飞行、关闭碰撞穿过一切障碍,飞到想去的地方再放回正常玩法模式,而不必真的玩到那里。其他常用作弊:无敌、给予任意武器、无限弹药(测试武器系统或 AI 受击反应时不必找弹夹)、选择玩家网格(多套「服装」时测试用)。也可以把一些作弊开放给最终玩家,通常通过在手柄或键盘输入未公开的作弊码和/或完成特定目标来激活。
截图与录像(卷 I 10.7)
- 截图:细节因平台而异,通常调用图形 API 把帧缓冲内容从显存传到主内存,再转换为所选图像格式(.bmp、.jpg、.tga)写到预定文件夹,用日期时间戳命名保证唯一。常见选项:是否包含调试图元和文字;是否包含 HUD;捕获分辨率(有的引擎修改投影矩阵分别以正常分辨率拍屏幕四个象限,再拼成高分辨率图);简单摄像机动画(标记摄像机起止位置与朝向,逐步插值并连续截图)。
- 录像:完整的录像模式以游戏目标帧率捕获截图序列,离线或运行时编码为 MPEG-2 (H.262) 或 MPEG-4 Part 10 (H.264)。引擎不支持时也可用外部采集硬件(如 Roxio Game Capture HD Pro),PC/Mac 上有 Fraps、Camtasia、Dxtory、Debut、Action! 等软件。
- 原书问题:书中写「Camtasia by Camtasia Software」,Camtasia 实为 TechSmith 公司的产品(见 Wikipedia「Camtasia」条目、TechSmith 官网 About Us)。
- PS5:内置分享截图和视频片段:游玩时持续录制最近 15 分钟,玩家随时按 Share 键保存到 SSD 或上传到在线服务。Naughty Dog 利用这一功能在每次崩溃时自动保存视频和截图,看清导致崩溃的情境。PS5 还支持直播;Sony 的 Remote Viewer 应用让开发者连接远程 PS5(同事桌上或工作室外)观看串流画面,甚至把 PS5 手柄插到自己 PC 的 USB 口远程操控——对「在我机器上是好的」这类问题特别有用,可直接在对方 PS5 上调试。
- 原书问题(与官方资料并列):GEA 称 PS5 持续录制「最近 15 分钟」并按「Share 键」分享。PS5 的 DualSense 手柄上对应按键名为 Create(创作)键(取代 PS4 的 Share 键);PlayStation 官方支持页「How to capture PS5 gameplay and screenshots」说明「保存最近游戏画面」可保存最近 15 秒至 1 小时(15 分钟是 PS4 时代的缓冲长度)。
出处
- Game_Engine_Architecture_4Ed_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 I 第 10 章 10.3–10.7 节