立项背景:
FinalRPG 是一款从零自主搭建的 3D RPG 游戏 Demo,旨在不依赖任何第三方游戏框架的前提下,深入实践游戏开发中的状态机设计、系统间解耦通信、数据持久化、动画适配、战斗反馈等核心工程问题。项目以"从零理解每个环节"为出发点,76 个 C# 脚本全部手写,覆盖玩家控制、敌人 AI、背包、任务、对话、存档、战斗反馈 7 大系统完整闭环。
核心功能模块:
1. 玩家控制——支持移动/跳跃/翻越/攀爬/战斗/闪避/受击硬直,Cinemachine 第三人称相机跟随
2. 敌人 AI——决策树驱动行为切换,扇形范围攻击检测,可配置能力集(移动/战斗/跳跃/越障)
3. 背包系统——道具获取/堆叠/使用,UI Toolkit 动态图标加载
4. 任务系统——多目标任务(击杀/收集/对话),自动追踪进度,奖励发放
5. 对话系统——集成 Yarn Spinner 引擎,5+ 分支剧情脚本,选项影响后续走向,打字机效果
6. 存档系统——全量数据持久化(属性/背包/任务/对话状态),启动自动读档,退出自动存档
7. 战斗反馈——帧冻结(Hit Stop)+ 镜头晃动 + 伤害跳字,打击感完整
业务流程:
玩家进入游戏→自动读档恢复状态→操控角色移动/战斗→与 NPC 对话接取任务(多分支选项)→击杀怪物收集物品推进任务→查看背包/任务面板→剧情节点自动存档→退出游戏自动存档→再次启动恢复全部进度。
技术架构:
- 自研树形分层状态机(HSM):状态按父子关系组织成树,切换时自动计算 LCA,仅出入变化的状态。TransitionSequencer 编排退出→切换→进入三阶段异步过渡,Update() 轮询 Task 完成状态,主循环零阻塞。覆盖 Idle/Move/Combat/Dodge 等 15+ 状态。
- EventBus 解耦架构:全局事件总线负责所有系统间通信,子系统零直接引用,可插拔替换。
- MVVM/MVP 分层:Model 纯数据(SO+纯 C#),ViewModel/Presenter 桥接驱动 UI,View 用 UI Toolkit 被动渲染,不含业务逻辑。全项目 ScriptableObject 驱动配置。
系统实现:
- 背包:ItemData SO 定义元数据,InventoryModel 纯 C# 无 Unity 耦合,事件驱动增删。
- 任务:QuestData SO 配置多目标,EventBus 事件自动推进进度,完整接取→完成→奖励链路。
- 对话:MVP+YarnDialogueAdapter 适配器,Presenter 对引擎无感知。8+ 自定义 Yarn 命令,DOTween 打字机逐字显示。
- 存档:PlayerStats/Inventory/Quest/Yarn 变量全量持久化,启动读档→剧情自动存档→退出存档触发链闭环。Yarn 变量类型安全序列化,已完成任务过滤防污染。
技术难点:
- 动画混合:统一 Root Transform+指数减速曲线+Foot Plant 同步,消除脚步抖动与浮空
- CC 接地:多帧缓冲+坡面切线方向移动,消除坡道闪断与卡顿
- Yarn 持久化:显式类型字典序列化,避免 TryGetValue() 异常与对话状态回退
- 攻击去重:HashSet 按角色去重,防 OverlapSphere 多碰撞体重复命中
- 帧冻结:DOTween SetUpdate(true) 强制 unscaled time,兼容 Time.timeScale 压低场景
- 震屏:ImpulseListener 放 VCam 而非 Main Camera,符合 CinemachineExtension 约束
GitHub仓库: https://github.com/primer496/3DRPG