大家好!我想分享一下我开发的用于 3D 合作逃生类游戏的武器系统架构。目标是实现复杂的协同工作(类似于Magicraft或Noita),但保持它干净和多人玩家准备。
下面是技术解析的三大支柱:
1. 分离“火”和“撞击” 我分离武器为两个ScriptableObject层级:
- 攻击逻辑:定义了攻击开始的方式(如“射击攻击”、“近战挥砍”、“链电光”)。它不关心当它撞击时发生的事。
- 碰撞效果:定义了接触时发生的行为(如“区域爆炸”、“状态添加”)。这样就可以使用相同的“射击”逻辑来实现火箭弹、毒液瓶子或彗星。
2. “剩余载荷”系统(秘籍) 最有价值的部分就是我如何处理碰撞序列。这是为了实现协同工作,所有HitEffect都有方法:void OnHit(..., List<HitEffect> remainingPayload)当一颗弹头撞击时,它会接收列表中的效果。第一个效果(如爆炸)执行,然后将剩余列表传递给下一个目标。这种方式可以实现递归的“级联”效果而无需难以驾驭的硬编码。
3. 逻辑桥(递归进程) 我创建了一个特殊的LogicTriggerEffect。它是HitEffect类型,但可以触发一个完全新的AttackLogic在接触位置。
- 例子:劍(近身攻击逻辑)->撞击->
LogicTriggerEffect->链电光(攻击逻辑)。因为电光只是另一个AttackLogic类型,所以它也可以有自己的HitEffects,这使得协同工作可以无限地循环运作。
为什么这有用:现在,我可以通过拖拽三个ScriptableObject到设计器中创建“彗星召唤者”型号,无需编写新的C#代码即可添加新的武器类型。
希望这有助于有人与它们的模块化系统一起工作!如果你对remainingPayload逻辑或NGO同步有疑问,请告诉我!
本文耗时几个小时编写,我只是想让您知道我开发了什么,和潜在的感兴趣的你想要更多信息如果是这样的话。
如果你想支持我,你可以查看我的游戏!
评论 (0)