大家好!我想分享一下我的《3D合作生存类》武器系统架构。目标是实现复杂的协作效果(如在Magicraft或Noita中),但同时保持清晰和在线多人支持。
以下是技术方面的三大支持柱:
1. 分离“攻击”和“冲击”
我将武器分为两个独立的ScriptableObject层:
- 攻击逻辑:定义了攻击的开始方式(如
ProjectileAttack、MeleeSwing、ChainLightning)。它不关心攻击后的结果。 - 冲击效果:定义了冲击时发生的内容(如
AoEExplosion、StatusApply)。这使我可以使用相同的“射线”逻辑来发射火箭、毒药瓶或火星。
2. 剩余弹药系统(秘密酱)
我处理冲击顺序的方式最有帮助。每个冲击效果都有一个方法:void OnHit(..., List<HitEffect> remainingPayload) 当一个射线击中目标时,它会获取一个效果列表。第一个效果(如爆炸)发出并且将剩余列表传递给下一个目标。这创建了递归的“瀑布”效应,避免了繁琐的硬编码。
3. 逻辑桥(递归进程)
我特别设计了一个LogicTriggerEffect。它是 冲击效果,可以触发一个全新的 攻击逻辑 在冲击位置。
- 示例:剑(近身攻击逻辑)-》冲击-》LogicTriggerEffect-》ChainLightning(攻击逻辑)。因为闪电只是另一个
攻击逻辑,它可以有自己的冲击效果,创建了无尽的协作效果。
为什么有所帮助:现在我可以通过将三个 ScriptableObject 拖放到 Inspector 上创建“流星召唤者”建造体。没有新的C#代码需要编写新武器类型。
希望这能帮助开发者了解更加模块化的系统设计。如果你对剩余弹药逻辑有问题或想了解NPC协调,让我知道!
这是几个小时的写作记录,并希望与大家分享我创造的作品。如果有兴趣,你可以继续往下看。
也许你也感兴趣,可以支持我
评论 (0)