《勇士传说》是一个完整的 Unity 2D 横版动作冒险项目。玩家可以在丛林与洞穴场景中移动、跳跃、攻击和滑铲,与敌人战斗,并通过宝箱、存档点和传送门完成探索。
项目以事件驱动方式组织音频、UI、场景切换和存档流程,使用 Addressables 进行增量场景加载,并通过 Persistent 场景保存玩家和全局管理器。
- 角色控制:移动、下蹲、跳跃、墙跳、攻击连段与滑铲。
- 敌人系统:野猪和蜜蜂敌人,包含巡逻、追击与攻击状态。
- 交互系统:统一的
IInteractable接口、交互提示、宝箱、存档点和传送门。 - 场景管理:Addressables 异步加载、Additive 场景切换、入口/出口出生点。
- 转场效果:DOTween 黑屏渐入渐出,转场期间自动禁用输入并重置相机状态。
- 相机系统:Cinemachine 跟随、场景边界约束与切换后的相机状态刷新。
- 存档系统:JSON 本地存档,保存玩家、当前场景、宝箱及敌人状态。
- 音频系统:AudioMixer 分组、事件驱动的 BGM/SFX 播放与主音量调节。
- 输入系统:支持键盘与手柄,并根据当前设备切换交互提示图标。
- 完整 UI:主菜单、玩家状态、暂停、设置、死亡复活和背景模糊效果。
| 功能 | 键盘 | 手柄 |
|---|---|---|
| 移动 | WASD / 方向键 |
左摇杆 |
| 下蹲 | S / ↓ |
左摇杆向下 |
| 跳跃 | Space |
East 面键 |
| 攻击 | J |
West 面键 |
| 滑铲 | K |
North 面键 |
| 交互 / 确认 | E |
South 面键 |
| 暂停 / 返回 | Esc |
Start |
暂停菜单也可以通过游戏界面右上角的齿轮按钮打开。
- Unity
2022.3.62f2c1 - Universal Render Pipeline
14.0.12 - Unity Input System
1.14.2 - Addressables
1.22.3 - Cinemachine
2.10.5 - DOTween
- Tilemap / Rule Tile / Sprite Atlas
- AudioMixer
- uGUI / TextMeshPro
Initialization
└── Addressables 加载 Persistent
├── Player 与全局 UI
├── ScenesController
├── SaveController
├── AudioManager
└── Cinemachine 相机
ScenesController
├── 加载 Menu / Jungle / Cave
├── 设置玩家出生点
├── 更新相机边界
└── 卸载旧场景
项目使用多个 ScriptableObject Event 连接不同系统:
触发方 → EventSO → 订阅方
交互物体 → ScenesEventSO → ScenesController
音频定义 → AudioEventSO → AudioManager
UI 按钮 → SaveLoadEventSO → SaveController
场景控制 → FadeEventSO → FadeScreen
这种方式可以减少场景物体之间的直接引用,让场景、UI、音频和存档系统保持相对独立。
Assets/
├── AddressableAssetsData/ # Addressables 配置
├── ArtAssets/ # 角色、敌人、场景与 UI 素材
├── Blur/ # UI 背景模糊渲染功能
├── Scenes/ # 初始化、持久化、菜单及地图场景
├── Scripts/
│ ├── Audio/ # BGM、SFX 与 AudioMixer 管理
│ ├── Enemy/ # 敌人状态机
│ ├── General/ # 角色、攻击、物理检测等通用逻辑
│ ├── Interactables/ # 宝箱、存档点和传送门
│ ├── Player/ # 玩家控制、动画与存档
│ ├── Save/ # 存档数据与注册恢复流程
│ ├── Scenes/ # 场景加载和出生点管理
│ ├── ScriptableObjects/ # EventSO 与场景配置
│ ├── UI/ # HUD、暂停、设置、死亡和交互提示
│ └── Utils/ # 枚举、接口和相机工具
└── Settings/ # Input System、Renderer 与 AudioMixer
- 安装 Unity Hub。
- 使用 Unity
2022.3.62f2c1打开项目。 - 等待 Package Manager 和 Addressables 导入完成。
- 打开
Assets/Scenes/Initialization.unity。 - 点击 Unity 编辑器顶部的 Play 按钮。
Initialization 是 Build Settings 中唯一需要直接加载的场景,其他场景通过 Addressables 以 Additive 模式加载。
- 打开
Window > Asset Management > Addressables > Groups。 - 执行
Build > New Build > Default Build Script。 - 打开
File > Build Settings。 - 确认
Initialization已加入 Scenes In Build。 - 选择目标平台并执行 Build。
当前仓库已经生成 macOS 构建:
MyGame/MeryAdventure.app
存档使用 JsonUtility 序列化,并保存在:
Application.persistentDataPath/SAVE DATA/{存档槽位}/data.sav
当前存档内容包括:
- 玩家位置、生命值、体力和朝向。
- 当前场景与主音量。
- 宝箱开启状态。
- 敌人位置、朝向与死亡状态。
场景物体通过 PersistentID 获得稳定标识,再由 SaveableBehavior 注册到 SaveController 完成统一保存与恢复。
这个项目主要实践了以下 Unity 开发内容:
- MonoBehaviour 生命周期与组件通信。
- ScriptableObject 事件系统与发布订阅。
- 新 Input System 的 Action Map 管理。
- Addressables 异步场景加载与句柄释放。
- Additive 场景和 Persistent 场景架构。
- 角色状态、敌人状态机与 2D 物理。
- 可扩展的对象存档与稳定 ID 设计。
- URP 2D、Cinemachine、AudioMixer 与 UI 渲染。
本项目用于 Unity 学习与功能复刻,项目课程来源:https://space.bilibili.com/370283072?spm_id_from=333.1387.follow.user_card.click
项目所使用的美术、字体和音频资源,其版权归各自原作者所有。请在用于公开发布或商业用途前确认对应资源许可。