大家好!我想和大家分享我为3D合作类生存游戏开发的武器系统架构。目标是在保持清洁和多人游戏支持的同时,实现复杂的协同作用(像Magicraft或Noita一样)。
以下是技术的分解:三个支柱:
1. 将“火”与“冲击”分离 我将武器分为了两个不同的ScriptableObject层:
- AttackLogic: 定义了攻击方式(例如,
ProjectileAttack、MeleeSwing、ChainLightning)。 它不关心碰撞时的效果。 - HitEffect: 定义了碰撞时的效果(例如,
AoEExplosion、StatusApply)。 这样我就可以使用同样的“弹射”逻辑来制作火箭、毒液瓶或大气。
2. 剩余有效载荷系统(秘方) 最有帮助的部分是如何处理.hit序列。 每个 HitEffect 都有一个方法: void OnHit(..., List<HitEffect> remainingPayload) 当弹射体碰撞时,它会取出一个事件列表。第一个效果(例如爆炸)执行,然后将剩余的列表传递给下一个目标。这就创建了递归“叠加”效果,没有混乱的硬编码。
3. 逻辑桥梁(递归方法) 我用一个特殊的LogicTriggerEffect来弥合逻辑的差距。这是一个能在碰撞点触发新的 AttackLogic 的HitEffect 。
- 例子: 剑( Melee Logic)-> 撞击 -> LogicTriggerEffect -> ChainLightning(Attack Logic)。 Lightning只是另一个
AttackLogic,因此它可以有自己的HitEffect,创建无限的协同作用。
为什么有用: 现在我就可以通过在调试器中拖拽三个脚本文件来创建“彗星召唤者”人设,而不需要任何新的C#代码。
希望这个系统能帮助更多人创建模块化系统!如果你有关于remainingPayload逻辑或NPC同步的问题,请告诉我!
本文已花费数小时,我现在只想让大家知道我构建了什么,并潜在地,如果你有兴趣,我可以提供更多详细的信息!
如果你想支持我,你可以查看我的游戏!
评论 (0)