如果您曾试图建设一款平台游戏,肯定就知道那一刻您的架构就开始崩溃了。您的 Player.cs 脚本处理 movement。然后你添加攻击组件,所以它还处理了健康。然后又有一个存储器,再加上音乐、动画功能... 而突然之间,你就拥有了一款2000行的"黑盒"玩偶。要是你尝试更改跳跃物理,存储系统就会崩溃。
我对技术债的毁灭感受到了如此深刻的体验,所以我在 Platformer Core 基础上花了几个月时间建设了一个完全解耦,相当于 AAA 数字游戏标准的 2D 引擎。我想分享它建立的技术架构思想。
架构:消灭硬依赖
而不是使用 monolithic 脚本,我适应了 Unity 本地工具的 ECS 轻型技术。
1. 零硬依赖 (Event-Driven):ombat 系统、Movement、UI 和存储系统完全不认识彼此,他们只通过一个强大的 Global 事件系统进行通信。想添加一个尖刺地雷?只需要使用 GameEventListener 就可以,不用进行重写。
2. 数据驱动工作流 (ScriptableObjects): 我将所有的平衡性配置 (跳跃高度、伤害值、物理阻力) 都放入 ScriptsObject 表中。这创建了一个 "单一的真理源"。你可以通过不用编辑你的代码一次来调整整个游戏感觉。
"Juice" 和机制:
由于架构是干净的,所以添加高级机制变得非常容易。核心现在正在跑 52+ 不解耦的脚本,处理:
- 高级物理: 自定义 Verlet 榆条物理和紧密响应的 Dash 控制器。
- AAA 攻击: DarkSouls *_型灵魂状态条、模块化伤害触发器和高强度碰撞的停止效果。
- 生产就绪系统: 全球存储系统(处理状态和设置)、logarithmic 音频混音器和直接输入重绑定 UI。
🎮 试验架构本身!
我建造了这个架构,希望开发者可以更注重 * Game 设计 ,而不是花费6个月时间编写存储系统和输入重绑定。
要是你希望测试感觉如何,或者在实时查看事件驱动反馈,上传了一个 Free WebGL demo ,你可以在浏览器中直接玩:
通常你如何处理玩家控制器?你使用状态机,你使用超级大的 monolithic 脚本,或者使用脚本化对象实现状态?
告诉我!
评论 (0)