Ludo Atlas · 技术实现手册¶
定位:游戏程序员的工程手册,覆盖架构模式选型、核心系统实现要点、性能方法论、多平台适配、网络基础、工程基础设施、引擎概念对照。 配套:《避坑大全》(程序与架构章节)·《制作管理手册》·《资源大全》(工具与课程)·
docs/engines/(12 条引擎轨道)。 原则:本手册给"选型判断与检查清单",具体代码实现随引擎生态变化,以官方文档与你的 Profiler 为准。
1. 架构模式选型¶
| 模式 | 解决什么 | 适用场景 | 避免 |
|---|---|---|---|
| 有限状态机 FSM | 单一对象的行为切换 | 角色控制、UI 流程、Boss 阶段 | 状态爆炸(>10 个状态时升级) |
| 分层状态机 HFSM | 状态分组复用 | 复杂角色(移动/战斗/受击分层) | 小项目过度设计 |
| 行为树 BT | 可组合的 AI 决策 | 敌人 AI、NPC 行为 | 需要高频动态变化时(改树成本高) |
| GOAP / 效用 AI | 目标驱动的动态计划 | 沙盒/模拟类 NPC | 表现力优先的项目(选择成本高) |
| ECS | 数据局部性、海量实体 | 模拟、弹幕、大世界 | 小项目(样板代码成本 > 收益) |
| 事件驱动/信号 | 模块解耦 | 成就、UI 通知、音效触发 | 事件链过长无人能懂(限制层级) |
| 命令模式 | 输入记录/回放/撤销 | 回放、撤销、网络输入流 | 无回放需求时纯增加抽象 |
| 数据驱动/资源管线 | 非程序员调数值/内容 | 量产期全部项目 | 无工具链时的假数据驱动(表没人维护) |
选型心法:按"当前团队规模 × 变更频率"选;模块边界清晰比模式先进重要;抽象多一层,先问它会省掉哪三处重复。
2. 核心系统实现要点(跨引擎清单)¶
2.1 输入系统¶
- 动作映射层(逻辑动作
Jump↔ 物理按键),为按键重映射与多设备提供基础。 - 输入缓冲:缓存 100-200ms 的跳跃/攻击输入;组合输入(双击冲刺)要防误触。
- 输入与帧解耦:在 Update 收集、物理步执行;录制输入流(回放/测试自动化)。
2.2 角色控制¶
- 参数分离:最大速度 / 加速度 / 减速度 / 空中控制 / 重力(上升/下落分开),这些是手感调参的核心旋钮。
- 跳到"宽容期":土狼时间 80-150ms + 预输入缓冲;落地判定用射线/形状而非纯碰撞事件(防穿透)。
- 状态机化(Idle/Move/Jump/Fall/Attack/Hit…),状态切换防抖(优先级 + 锁定窗口)。
2.3 相机系统¶
- 跟随:目标点 + 前瞻(朝移动方向偏移);死区(小动不移动相机);平滑(指数趋近 > 弹簧 > 插值硬调)。
- 边界与室内:相机约束区(volumes)、房间切换;缩放(战斗拉远/探索拉近)。
- 震屏:位移/旋转/缩放三类,叠加规则要限幅;必须提供关闭选项(可访问性)。
- 相机是"第二个玩家",它的体验优先级仅次于角色操作。
2.4 存档系统¶
- 结构:版本号 + 数据块 + 校验;只存状态不存对象引用;序列化用引擎推荐格式(JSON/二进制按体量)。
- 版本迁移:每次改存档结构写迁移函数(v1→v2→v3 链式);上线前测试"旧档→新版本"路径(见《避坑大全》存档坑)。
- 原子写入:先写临时文件再替换,防写入中断坏档;云存档需要冲突合并策略(时间戳/手动选择)。
2.5 对象池与实例化¶
- 高频生成销毁(子弹/特效/敌人)一律池化;预热峰值数量;池溢出策略(拒绝/扩容/降级)明确定义。
2.6 UI 架构¶
- 视图与数据分离(被动视图);导航栈管理(返回键/手柄 B 键);弹窗优先级与输入吞噬规则。
- 多分辨率:锚点 + 安全区 + 缩放策略(见 §4);文本溢出(多语言长度 +30%)提前测试。
2.7 音频系统(程序视角)¶
- 播放总线:Master → BGM/SFX/Voice/UI 分组;分组音量独立可调。
- 播放接口事件化(
PlayEvent("hit_metal")而非直接塞文件);并发上限与优先级(重要音效不被淹没)。 - 池化与流式:短音效内存缓存,长音乐流式;随机化(音高/素材变体)防"复读机感"。
2.8 本地化系统¶
- 字符串键值外置(禁止硬编码可见文本);支持复数/性别/词序占位符;字体回退链(CJK/西文/emoji)。
- 布局弹性:允许文本区域扩展;伪本地化(伪语言测试)提前暴露排版问题。
2.9 时间与更新¶
- 固定时间步物理 + 可变渲染帧;逻辑用 delta time 或固定 tick(网络游戏慎用可变 delta)。
- 全局暂停系统:单一暂停源管理(时间缩放要处理音频/动画/粒子)。
2.10 随机数¶
- 所有随机走可控种子(调试可复现);避免直接用全局随机;网络同步需要确定性随机时,用自行实现的 PRNG。
3. 性能工程方法论¶
3.1 预算制¶
- 先定预算再开发:帧预算(16.6ms@60fps / 33ms@30fps 的分配表)、内存预算(分平台)、包体预算、加载时间预算。
- 每个资产类别有配额(纹理 MB、音效 MB、动画文件数),超预算即警告(进 CI 更好)。
3.2 测量工具¶
| 工具 | 用途 |
|---|---|
| 引擎内置 Profiler(Unity Profiler / Godot Profiler / Unreal Insights) | CPU/GPU/内存总览 |
| RenderDoc / Nsight / PIX | 抓帧、GPU 管线分析 |
| 平台工具(Xcode Instruments / Android Studio Profiler) | 真机 CPU/内存/电量 |
| 云真机(WeTest/Testin) | 设备矩阵批量测试 |
原则:没有测量不做优化;优化前后记录数据;真机 > 编辑器(编辑器数据常常失真)。
3.3 常见热点与对策¶
| 热点 | 症状 | 对策 |
|---|---|---|
| Draw Call 过多 | GPU 等待、CPU 提交忙 | 合批(批处理/图集/合网格)、减少材质切换 |
| Overdraw | 移动端发热掉帧 | 减少全屏半透明、UI 遮罩滥用、粒子密度 |
| GC 停顿(C#/Java) | 周期性卡顿 | 对象池、避免每帧分配、结构体化数据 |
| 物理开销 | 大量刚体/复杂碰撞 | 分层碰撞过滤、睡眠体、简化碰撞体、降低物理频率 |
| 加载卡顿 | 进入场景卡住 | 异步加载、分帧实例化、预加载策略 |
| 纹理内存 | 移动端 OOM | 压缩格式(ASTC/ETC2)、Mipmap、按需流式 |
3.4 移动端专项清单¶
目标机型分档(低/中/高端);温控策略(发热降频预案);电量(后台行为);内存水位(系统 OOM 杀进程防御);首包体与下载转化(分包/资源外置)。
4. 多平台与适配¶
- 输入抽象层:逻辑动作 ↔ 设备(键鼠/手柄/触屏/触控笔);手柄提示图标按设备切换(Xbox/PS/Switch)。
- 分辨率与安全区:UI 锚点策略(对齐边角/比例缩放)、刘海屏安全区、超宽屏(21:9)与 4K 支持清单。
- 平台差异核对表:存档路径规范、权限申请、生命周期(后台挂起/恢复)、多用户切换(主机)、系统语言读取。
- 平台能力接入:成就、云存档、排行榜、好友、手柄体感,按平台 SDK 清单逐项打勾(对照《全平台上架手册》)。
- 构建矩阵:Windows/macOS/Linux + 主机 + iOS/Android + Web,CI 每平台至少每日一构建(见 §6)。
5. 网络与多人基础(入门地图)¶
| 模型 | 原理 | 适合 | 代价 |
|---|---|---|---|
| 状态同步(服务器权威) | 服务器跑逻辑,客户端发送输入+渲染 | 大多数联机游戏 | 服务器成本;需要预测/插值抗延迟 |
| 帧同步(Lockstep) | 只同步输入,各端确定性重演 | RTS、部分 MOBA | 必须完全确定性;掉线重连难 |
| P2P(无服务器) | 玩家之间直连 | 小规模合作 | NAT 穿透复杂;作弊难防 |
| 异步联机 | 非实时数据交换 | 排行榜、幽灵数据 | 不解决实时需求 |
- 延迟工具箱:客户端预测(本地先演)、服务器回滚、插值渲染(他人平滑)、延迟补偿(命中回溯)。
- 服务器形态:专用服务器 vs 对战托管(PlayFab/Photon/腾讯 GSE 等,见《资源大全》§8.1);房间制 + 匹配服务 + 断线重连是联机功能最小集。
- 反作弊入口:关键经济与战斗判定服务器权威化;客户端只做表现;接入反作弊系统(早期,见《避坑大全》)。
- 深潜:Gaffer On Games 网络系列(《资源大全》§3.1)。
6. 工程基础设施¶
| 项 | 最小实践 | 进阶 |
|---|---|---|
| 版本控制 | Git + Git LFS(二进制资产);提交信息规范 | 分支策略(主干+特性分支)、锁文件 |
| CI/CD | 每日自动构建 + 冒烟测试;产物可下载 | 自动打包上传(Steam/TestFlight)、性能基准回归 |
| 测试 | 关键逻辑单元测试;headless 冒烟(启动→进场景→模拟操作) | 视觉回归截图对比;设备矩阵云测 |
| 日志与监控 | 分级日志 + 崩溃上报(含符号表) | 线上指标看板(崩溃率/卡顿率) |
| 文档 | README + 架构概览 + ADR(决策记录) | 新人 30 分钟可跑起来 |
7. 代码质量与协作¶
- 评审清单:是否符合项目命名/结构规范?错误处理与边界?性能敏感路径有测量吗?可测试性?新增依赖的许可证核对(见《法务、专利与竞争手册》)?
- 命名与组织:领域词表(游戏术语统一:Enemy/Turret/Projectile),目录按领域而非类型(
combat/优于scripts/)。 - ADR(架构决策记录):每个重大技术选型写一页(背景/选项/决定/后果),半年后的你会感谢现在。
- AI 辅助编程边界:生成代码必须过评审与测试;核心系统要求可解释;工具链与权限见《AI 工作流手册》与《AI 智能体》(含引擎 MCP 安全模型)。
8. 引擎概念对照表(Unity / Godot / Unreal)¶
| 概念 | Unity | Godot 4 | Unreal |
|---|---|---|---|
| 对象 | GameObject | Node | Actor |
| 组件/行为 | Component (MonoBehaviour) | Node 脚本(_ready/_process) | Component |
| 组合容器 | Prefab | PackedScene | Blueprint / Level |
| 场景 | Scene | Scene (tscn) | Level / Map |
| 脚本语言 | C# | GDScript / C# | C++ / Blueprint |
| 事件/消息 | UnityEvent / C# event | Signal | Delegate / Event Dispatcher |
| 协程/异步 | Coroutine / async-await | await / 信号 | 蓝图延迟 / Async |
| 物理 | PhysX / Box2D | Godot Physics (Jolt 可选) | Chaos |
| UI | UGUI / UI Toolkit | Control 节点 | UMG |
| 资源导入 | Importer 设置(.meta) | .import 文件 | Import 设置 |
| 打包 | Build Profiles | Export Templates | Packaging |
| 服务 | Unity Services | 第三方 | EOS / 自建 |
用途:跨引擎迁移与阅读对方教程时的翻译表;差异细节以各引擎版本官方文档为准。
9. 学习路线与延伸¶
- 语言与引擎基础 → 做 3 个小游戏(覆盖:2D 移动、物理、UI、存档)。
- 本手册 §2 逐系统实现一遍(每个系统做最小可玩 demo)。
- 用 Profiler 优化一个"故意写坏"的场景(性能直觉训练)。
- 做一个联机 demo(房间 + 同步 + 重连三件套),体会网络思维。
-
完整项目:进《制作管理手册》,把工程基础设施(§6)拉满,走一次发布全流程。
-
课程与工具见《资源大全》§1-§3;引擎专项见
docs/engines/。