-
时间:2021.06 - 2021.07(大三游戏开发大作业);2025.10至今(重构)
-
概述:《匿旅者》(Drifter)是一款2D像素风格横版动作RPG冒险游戏。玩家化身为勇敢善良的小姑娘,为生病父亲寻找草药而踏上旅途,在战斗、探索与成长中穿越城镇、森林与洞穴三大关卡。
-
原始开发期:三人小组协作,负责战斗系统血量部分、道具系统
-
重构期(2025至今):独立进行系统性架构重构
- 架构设计:分层组合模型(单例管理层 + 实体组件层 + 接口契约层)
- 程序实现:重构八大核心子系统(状态机、战斗管线、属性修改器、背包装备、存档、场景过渡、音频、UI)
- 实时动作战斗 多段连击 + 反击(弹反)系统:在敌人攻击脆弱窗口弹反可使其眩晕,创造输出机会
- 属性驱动的伤害结算 闪避判定 → 暴击检定 → 护甲减伤 → 伤害计算 → 击退/重击退,完整RPG数值循环
- 装备与属性双向绑定 装备时注入修改器并订阅效果,卸下时按来源精准还原,支持多来源同属性叠加
- 跨关卡探索与存档 城镇 → 森林 → 洞穴三大主题关卡,检查点存档 + 路径点定位确保场景无缝衔接
- 完整冒险循环 探索 → 战斗 → 物品收集 → 装备升级 → NPC对话 → 商店交易 → 存档
| 模块 | 技术方案 |
|---|---|
| 实体架构 | 组件组合模式,Entity + 同级 Entity_* 组件族,避免上帝对象 |
| 行为驱动 | 有限状态机(FSM),OnEnter → OnUpdate → OnExit 生命周期,三层继承消除冗余转换 |
| 战斗管线 | 动画事件驱动:输入→状态变更→动画→武器接触帧调用伤害判定,确保视听同步 |
| 属性系统 | baseValue + List<StatModifier>,脏标记惰性求值,按 source 字符串成对添加/移除 |
| 物品数据 | ScriptableObject 不可变蓝图 + 运行时 Inventory_Item 可变包装,存档仅序列化身份与数量 |
| 存档系统 | 集中式 SaveManager 编排 + 分布式 ISaveable 接口,实现两方法即可参与存档 |
| UI管理 | 单例调度器模式,统一管理面板引用、输入状态、层级与互斥语义 |
| 音频系统 | ScriptableObject 数据库解耦 + BGM 交叉淡入淡出 + 音频多样性随机播放 |
-
项目成果
- 完整可运行的2D动作RPG游戏(3关卡、完整战斗流程、完整装备与存档系统)
- 系统性重构使代码架构从高耦合演进为分层解耦,新增敌人仅需继承+编写AI状态
-
未来改进方向
- 属性修改器扩展百分比/乘法类型,增强Buff系统表达力
- 存档系统增加版本号与迁移策略,兼容后续版本迭代
- 扩展更多敌人类型与Boss战,丰富关卡内容
- 优化状态机规模增长时的可维护性,考虑引入转换表或分层状态机