大家好!我想分享一下我的《3D合作生存类》武器系统架构。目标是实现复杂的协作效果(如在Magicraft或Noita中),但同时保持清晰和在线多人支持。

以下是技术方面的三大支持柱:

1. 分离“攻击”和“冲击”

我将武器分为两个独立的ScriptableObject层:

  • 攻击逻辑:定义了攻击的开始方式(如ProjectileAttackMeleeSwingChainLightning)。它不关心攻击后的结果。
  • 冲击效果:定义了冲击时发生的内容(如AoEExplosionStatusApply)。这使我可以使用相同的“射线”逻辑来发射火箭、毒药瓶或火星。

2. 剩余弹药系统(秘密酱)

我处理冲击顺序的方式最有帮助。每个冲击效果都有一个方法:void OnHit(..., List<HitEffect> remainingPayload) 当一个射线击中目标时,它会获取一个效果列表。第一个效果(如爆炸)发出并且将剩余列表传递给下一个目标。这创建了递归的“瀑布”效应,避免了繁琐的硬编码。

3. 逻辑桥(递归进程)

我特别设计了一个LogicTriggerEffect。它是 冲击效果,可以触发一个全新的 攻击逻辑 在冲击位置。

  • 示例:剑(近身攻击逻辑)-》冲击-》LogicTriggerEffect-》ChainLightning(攻击逻辑)。因为闪电只是另一个 攻击逻辑,它可以有自己的 冲击效果,创建了无尽的协作效果。

为什么有所帮助:现在我可以通过将三个 ScriptableObject 拖放到 Inspector 上创建“流星召唤者”建造体。没有新的C#代码需要编写新武器类型。

希望这能帮助开发者了解更加模块化的系统设计。如果你对剩余弹药逻辑有问题或想了解NPC协调,让我知道!

这是几个小时的写作记录,并希望与大家分享我创造的作品。如果有兴趣,你可以继续往下看。

也许你也感兴趣,可以支持我

Riftbound Survivors