• 注册
  • 攻略教程 攻略教程 关注:894 内容:240

    基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

  • 查看作者
  • 打赏作者
  • 当前位置: 七日杀中文网 > 攻略教程 > 正文
  • 攻略教程
  • 基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    框架简介:

    在《七日杀》的 Mod 开发中,想要实现复杂的自定义战斗特效(如大面积集束轰炸、高频次伤害毒圈、全屏追踪法术)往往会遭遇严重的性能瓶颈。其根本原因在于:游戏原生的物理系统在处理海量实体与体素方块的碰撞时,会产生毁灭性的 CPU 算力消耗。

    为了彻底打破这一局限并极大拓宽游戏的战斗交互深度,我重构并开发了这套完全受 XML 驱动的底层战斗框架。本框架通过底层逻辑解耦,将视觉特效的华丽展现与物理计算的性能消耗剥离,为开发者提供了一套高性能、高自由度的自定义战斗武器开发方案。

    核心设计:性能优化与物理演算剥离

    本框架与其他爆炸特效类框架区别在于处理复杂战斗场景时的极致性能表现。我重写了范围判定与飞行物底层,采用了以下核心优化策略:

    • 零方块物理演算,突破高频触发极限:所有的飞行物轨迹判定、瞬时范围爆破(AOE)以及持续性滞留伤害场(Zone),均完全放弃了对地形方块的物理碰撞模拟。底层采用轻量级的射线投射(Raycast)与无内存分配重叠扫描(NonAlloc Overlap)接管运算。这意味着,你可以毫无顾忌地创造每秒触发 10 次、覆盖几十米的大面积特效,而服务器的帧率依然稳如泰山。

    • 保留生物物理交互反馈:在剥离环境方块演算的同时,并未牺牲打击感。框架依然保留了对生物实体(丧尸、动物)的物理级互动。系统会根据爆炸中心距离自动计算矢量衰减推力,并对接《七日杀》原生的 Ragdoll(布娃娃系统),实现极具张力的击飞、倒地与瘫痪表现。

    拓展战斗交互深度 :

    参考暗黑,流放系列特效满屏的技能机制,开发者能够彻底摆脱传统的“开火-命中单体”模式,构建极具策略性的立体战术体系:

    • 空间阻断与阵地战: 引入 SpawnZone 机制。支持在指定坐标生成地形自适应的持续性伤害场/增益场(如火墙、拒马毒气、区域治疗)。结合白/黑名单阵营过滤,将战斗从单一的点对点射击升级为强调走位与空间控制的阵地博弈。

    基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    • 不可预测的连锁反应: 引入 CustomProjectile 的多级分裂与自动索敌系统。命中目标后,可向四周呈自定义散布角爆出次级弹道碎片,且碎片按比例完美继承父级的追踪能力与滞留场属性,实现绝佳的清场视觉与数值体验。

    基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    • 更加简单的调用爆炸代码,以及华丽的爆炸特效(核爆):引入AOEDamage的直接调用特效资源与自定义爆炸范围等,配合多级分裂,制造出超华丽的子母弹效果,同时也不会造成卡顿。

      基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

      核爆演示


    架构模块构成:

    本指南将详细解析框架内三大核心模块的 XML 参数接口,无需编写一行 C# 代码,只需修改 XML 属性,即可调用庞大的底层逻辑:

    MinEventActionAOEDamage:瞬时定点范围伤害触发器(支持击飞演算与留存伤害场)。

    MinEventActionCustomProjectile:自定义物理弹道发射器(支持追踪与连锁分裂)。

    MinEventActionSpawnZone:独立的持续性滞留法阵生成器。


    瞬时定点范围伤害触发器 AOEDamage

    功能简介: 在触发MiniEvent时(如挥动武器/buff更新/射线命中点等)产生一次瞬间爆发的范围效果。

    如果配置了 zone_ 参数,还会在该位置遗留一个持续范围特效伤害(如鸡尾酒效果,或自定义毒雾效果)。

    启用格式:

    action="AOEDamage, CustomAoeParticleEffect"


    动图示例:基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    瞬时爆炸参数:

    事件发生/命中那一瞬间的伤害和物理效果。

    XML 属性名 输入格式 默认值 参数说明与注释
    radius 浮点数 (float) 3 瞬间爆发的球形判定半径(单位:米)。
    damage 整数 (int) 50 瞬间造成的直接健康值伤害。
    force 浮点数 (float) 1 物理冲击力/击退力。数值越高,丧尸被弹飞得越远。
    ragdoll_time 浮点数 (float) 0 布娃娃时间。目标被击飞后在地上躺平、无法动弹的时间(秒)。

    视觉与坐标控制 :

    控制瞬间爆炸特效长什么样,以及在哪里爆炸。

    XML 属性名 输入格式 默认值 参数说明与注释
    particle 字符串 (string) 瞬间爆发的粒子特效路径。支持简写(如 modname?prefabName)。播放完后约3秒自动销毁。
    offset 坐标 (x, y, z) 0, 0, 0 爆炸中心点的坐标偏移。相对于施法者面朝的方向:X是左右,Y是上下,Z是前后。
    random_radius 浮点数 (float) 0 随机散布半径。如果大于0,实际爆炸点会在原点周围的这个圆形半径内随机偏移(适合做流星雨、随机雷阵)。

    目标与阵营筛选:

    决定谁会挨打,谁能免疫。(这套筛选规则同时对瞬间伤害和持续法阵生效)

    XML 属性名 输入格式 默认值 参数说明与注释
    target_tags 标签 (FastTags) 白名单。只有携带这些标签的实体才会受伤(如 zombie,animal)。如果不填,默认攻击所有检测到的实体。
    ignore_tags 标签 (FastTags) 黑名单。携带这些标签的实体绝对免疫伤害(如 player,ally)。
    ignore_self 布尔值 (bool) false 施法者免疫。填 true 则自己绝对不会被自己的 AOE 炸伤或挂上负面 Buff。
    hit_blocks 布尔值 (bool) true (仅针对射线触发器有效)当射线打到无生命的方块/墙壁时是否触发爆炸。填 false 则打墙无效,必须直接打中实体。

    持续滞留范围伤害参数:

    控制爆发后留在地上的火墙/毒圈。如果 zone_lifetime 为 0,则以下所有参数都不会生效,只进行单纯的瞬间爆发。

    XML 属性名 输入格式 默认值 参数说明与注释
    hit_particle 字符串 (string) 持续法阵的粒子特效路径。代表圈的外观,它会一直存在直到 zone_lifetime 结束。
    zone_lifetime 浮点数 (float) 0 法阵的存活时间(秒)。大于 0 时正式激活法阵功能。
    zone_damage 整数 (int) 0 法阵内每跳造成的持续伤害(与瞬间的 damage 独立)。
    zone_buff 字符串 (string) 法阵内每跳附加的 Buff 名称(如点燃、减速、挂毒)。
    zone_tick_rate 浮点数 (float) 1 触发频率。每隔多少秒跳一次伤害/补一次 Buff。
    zone_box_size 尺寸 (x, y, z) 0, 0, 0 形状覆写。如果不填,法阵默认使用 radius 作为球形检测范围。如果填了(如 5, 2, 5),法阵判定变为长方体。
    zone_id 字符串 (string) default 技能唯一标识符(如 MyFireWall)。用于底层字典记录,防止伤害错乱。
    zone_can_overlap 布尔值 (bool) false 防叠加机制。如果填 false,同 zone_id 的多个圈叠在一起,丧尸每跳也只受一次伤害。填 true 则伤害翻倍。
    zone_is_ground 布尔值 (bool) true 自动贴地。填 true 时,系统会向下发射射线寻找地板,并将判定框与斜坡法线对齐,防止法阵悬在半空或卡进地下。

    AOEDamage 射线命中触发模板(RayHit示例)

    效果演示:基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场
    近战演示:基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    <triggered_effect trigger="onSelfPrimaryActionRayHit" action="AOEDamage, CustomAoeParticleEffect"  
    radius="4" damage="120" force="5" ragdoll_time="1.5" particle="poison?PoisonBurst" 
    offset="0, 0, 0"
     target_tags="zombie,animal" ignore_self="true" 
    random_radius="0" hit_blocks="true" 
    zone_lifetime="8" zone_damage="0" zone_buff="buffPoisoned" zone_tick_rate="0.5" 
    hit_particle="poison?PoisonGas"zone_id="Bio_Nade_Gas" zone_can_overlap="false"
     zone_is_ground="true" />

    CustomProjectile(自定义飞行物全参数总表)

    基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    介绍:自定义特效飞行物。

    启用格式:

    action="CustomProjectile, CustomAoeParticleEffect"

    支持物理下坠、随机散布、索敌追踪、命中爆炸特效、落地留阵、以及击中后的连环弹射(且碎片继承微缩后的法阵和追踪能力)。

    基础发射与飞行参数 :

    控制子弹出膛到命中前的视觉与物理轨迹。

    XML 属性名 数据类型 默认值 功能说明与注释
    count int 1 一次开火发射的弹道数量(例如霰弹枪填 8)。
    on_aim bool false

    true: 子弹朝准星指着的物理落点飞。

    false: 沿着玩家正前方的水平方向飞。

    velocity float 20 子弹初始飞行速度(米/秒)。
    gravity float 9.8 弹道受到的重力下坠。想做激光或直线火球填 0
    spread_angle float 0 水平方向的随机散射角度。数值越大越散。
    vertical_angle x,y 0, 0 垂直方向随机仰角范围(如 0, 15 表示向上扬起0~15度,适合抛物线榴弹)。
    particle string 飞行过程中的拖尾/子弹本体特效路径(如 mod?prefab)。
    particle_scale float 1.0 飞行特效的整体三维缩放倍率。


    主体追踪雷达:

    控制发射出去的子弹是否具有“自动追踪(锁头)”能力。

    XML 属性名 数据类型 默认值 功能说明与注释
    homing_radius float 0 索敌雷达半径(米)。大于 0 时激活追踪功能
    homing_speed float 120 每秒最大转向角度(度/秒)。数值越大拐弯越敏捷。

    命中瞬间爆炸 :

    子弹撞击目标或方块时,那一瞬间产生的破坏与视觉效果。开发者建议:就算不想要爆炸效果仍然推荐挂在一个特效,从而优化飞行物命中的表现

    XML 属性名 数据类型 默认值 功能说明与注释
    hit_radius float 0 爆炸杀伤半径。填 0 代表只有单体撞击,无范围波及。
    hit_damage int 0 瞬间爆炸造成的直接生命值伤害。
    hit_force float 0 瞬间爆炸的物理击退力。
    ragdoll_time float 0 目标被炸后,倒地不起/布娃娃系统生效的时间(秒)。
    hit_particle string 撞击瞬间的爆炸火花特效路径名称。
    hit_lifetime float 3.0 撞击爆炸特效的存活时间,播放完后销毁。
    hit_blocks bool true

    false: 子弹穿墙,打到无生命方块不触发爆炸,只打活物。

    true: 撞墙即爆。

    落地滞留法阵:

    如燃烧瓶的地面燃烧效果,或悬空的毒雾冰雾,治疗阵效果。(zone_lifetime > 0 激活)

    XML 属性名 数据类型 默认值 功能说明与注释
    zone_lifetime float 0 法阵存在时间。大于 0 时激活落地留圈功能
    zone_particle string 留在地上的法阵视觉特效(如一滩绿水)。
    zone_damage int 0 圈内每跳伤害(纯数值跳字伤害)。
    zone_buff string 圈内每跳挂上的 Buff(如点燃、减速)。
    zone_tick_rate float 1.0 伤害/Buff的触发间隔时间(秒)。
    zone_box_size x,y,z 0,0,0 形状覆写。默认使用 hit_radius 作为球形检测。填长宽高则变为方块雷达。
    zone_id string default 防叠加机制的唯一 ID。
    zone_can_overlap bool false

    true: 多个同源毒圈叠在一起时,怪物受双倍伤害。

    false: 防叠加,只受单次伤害。

    zone_is_ground bool true true: 自动向下寻找地面并贴合斜坡,防止毒圈悬在半空。

    目标筛选白/黑名单:

    此规则同时对“命中瞬间”和“滞留法阵”生效,也遗传给所有碎片。

    XML 属性名 数据类型 默认值 功能说明与注释
    target_tags Tags 白名单。仅带有这些标签的实体受伤(如 zombie,animal)。空代表无差别攻击。
    ignore_tags Tags 黑名单。带有这些标签的实体免疫此攻击。
    ignore_self bool false true: 施法者自身绝对免疫该子弹的爆炸和毒圈伤害。


    连锁分裂机制 :

    核心特色,命中后向四周爆出子级弹道(碎片)。子弹道会继承父级的所有特性,但范围和威力会按比例衰减。

    XML 属性名 数据类型 默认值 功能说明与注释
    chain_count int 0 允许分裂的代数。1: 炸开产生碎片。2: 碎片打中后还能再裂开一次。
    chain_amount int 1 每次爆炸产生多少个碎片弹道。
    chain_scale float 1.0 碎片的威力/范围/特效的缩放比例(如 0.5 代表碎片只有母弹一半大小和伤害)。
    chain_velocity float 15 碎片飞出的初速度。
    chain_gravity float 9.8 碎片受到的重力。
    chain_spread float 360 碎片在水平面上的散布范围。360 代表向四周全向爆开。
    chain_vertical x,y 10, 45 碎片向上弹起的仰角范围。碎片会像喷泉一样呈 10~45 度角抛射。
    chain_lifetime float 3.0 碎片撞击后,其瞬间爆炸特效的存活时间。
    chain_homing_radius float 0 碎片的追踪雷达半径。如果大于0,分裂出去的碎片会自动寻找周围的活物扑过去。
    chain_homing_speed float 180 碎片追踪的拐弯敏捷度。

    动图示例:基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场

    SpawnZone (主动法阵参数总表)

    介绍:可自定义持续性滞留范围特效伤害,毫不夸张地说,我这个架构比原版的燃烧瓶造成的范围燃烧特效要好用的多,原版只是粗暴检测进入该区域的实体附加一层燃烧buff,既没有范围内实施刷新,也不能真正意义上的造成范围DOT伤害。

    启用格式:

    action="SpawnZone, CustomAoeParticleEffect"

    动图演示:基于 XML 驱动的自定义战斗架构:瞬时范围伤害、多级分裂飞行物与持续性滞留伤害场


    视觉与坐标控制:

    控制法阵生成在哪里、长什么样、以及多大。

    XML 属性名 数据类型 默认值 功能说明与注释
    particle string 法阵的视觉特效路径(如 mod?prefab)。该特效将持续存在直到 zone_lifetime 结束。
    radius float 3.0 球形法阵的扫描半径(米)。同时也会决定特效模型的缩放比例。
    offset x,y,z 0,0,0 生成位置相对于施法者的偏移。例如 0, 0, 3 表示在玩家正前方 3 米处生成法阵。

    滞留雷达核心参数:

    控制这个法阵在存活期间如何对内部的实体产生影响。

    XML 属性名 数据类型 默认值 功能说明与注释
    zone_lifetime float 10.0 法阵的存活时间(秒)。时间到了自动销毁特效并移除物理雷达。
    zone_damage int 0 法阵内每跳造成的纯数值跳字伤害。
    zone_force float 0 每次伤害附带的推力(小心使用,一直推可能会导致怪物鬼畜)。
    zone_buff string 站在法阵内的实体每跳会被挂上此 Buff(非常适合做治疗阵或剧毒阵)。
    zone_tick_rate float 1.0 伤害/Buff的触发频率,每隔多少秒判定一次。
    zone_box_size x,y,z 0,0,0 形状覆写。若填入长宽高,则放弃球形扫描,改为方块范围(适合做火墙、拒马阵)。
    zone_id string default_zone 防叠加的唯一标识符。
    zone_can_overlap bool false

    true: 多个法阵重叠放置时,效果可叠加(比如奶阵叠放可以快速回血)。

    false: 防叠加。

    zone_is_ground bool true true: 生成时自动向下发射射线,把法阵拍在地板上,防止悬空。

    目标筛选白/黑名单

    控制法阵会对谁起作用。

    XML 属性名 数据类型 默认值 功能说明与注释
    target_tags Tags 白名单。仅带有这些标签的实体受影响。空代表无差别判定。
    ignore_tags Tags 黑名单。带有这些标签的实体绝对免疫法阵效果。
    ignore_self bool false true: 施法者绝对免疫这个法阵的伤害和负面状态。

    SpawnZone 主动释放示例:

    <triggered_effect trigger="onSelfPrimaryActionRayHit" action="SpawnZone, CustomAoeParticleEffect" 
                particle="testeffect?FireAreatest" target_tags="zombie"
                offset="0, 0, 3" zone_box_size="5, 2, 5" zone_lifetime="15" zone_damage="50" zone_buff="buffBurning" zone_tick_rate="0.5" zone_id="FireArea" 
                zone_can_overlap="true" zone_is_ground="true" ignore_self="true" />

    开发者提示:虽然叫持续性范围伤害特效,但只需要将持续伤害改为0,或玩家免疫,并通过”buffs.xml”自定义一个回血buff,就可以实现阵地回血技能,或提高force的物理击退数值和击倒时间,就可以做成风墙,禁区等技能,因为开发者在这里只是做一个示例,只用了最直观的燃烧地面为例子。其本身不要被伤害两字所禁锢,可以开发出很多玩法。

    结语:

    1. 欢迎来到魔法时代!

    2. 我也没想到,只是为了做完拳套重修MOD,竟然做了如此大的框架,主要还是原版xml和游戏引擎的破烂代码让我这个比较完美主义的人有些难以接受。 

    3. 个人感觉此框架能开发出更多的玩法,并且它为轻量Mod开发者调用自定义特效,弹道等代码实践上提供了极大的便利,因此我完善,规范化并分享此框架和使用说明。

    4. 推荐在Unity编辑特效时,将特效大小范围设置在1米左右,因为此框架所有范围和特效放大的标准都是以米为准,如果不知道unity里这个特效大小,可以写个显示脚本。

    5. 最后希望这个MOD能为MOD社区提供更多精彩,也希望能帮助到大家!


    PS:这时候有人会问,开发说明看完了,框架呢? 作者:目前还在进一步完善和debug中,计划添加更多的爆炸范围形状,例如扇形,长方形等,可以做更多有意思的特效,以及真正意义的激光特效框架。

    因此该框架仍在开发中,但接近尾声,如果你有什么想法和建议请回复评论区,谢谢!

    "点赞是美意,打赏是鼓励"

    帖子仍在施工,刚刚一直有不明原因不让我发布。

  • Nanami_705施工完毕
    拉黑 3小时前 电脑端回复
  • Nanami_705目前写一点更新一下内容,内容很多怕一次写完就像之前发不出去了,因此如果造成了刷屏提前道歉。
    拉黑 3小时前 电脑端回复
  • Nanami_705奇了怪了,现在没啥问题了,我一直以为是动图或者表格问题导致的,现在正在慢慢补齐所有XML表格参数
    拉黑 3小时前 电脑端回复
  • 回复
    Lv.7
    赠送了礼物[火箭]
  • 拉黑 3小时前 电脑端回复
  • 回复
    Lv.9
    萌新驾到
    赠送了礼物[加油]

    接模组定制 +Q 1079703478

  • 拉黑 3小时前 电脑端回复
  • 回复

    这种对电脑好啊,他那个代码太烂了

    回复
    Lv.6

    这个逼装的我给82分,剩下的用666的方式打给你!

    回复
    LV.4

    好 很好

    回复
    这么强

    品赛博烧鸡,做电子魅魔

    回复
    又一位大神出现了,真是七日杀的造化,哈哈哈
    回复
    因恶意刷帖用户过多,本版块已取消回帖金币奖励,请签到获取!>>>金币获取指南<<<

    请登录之后再进行评论

    登录
    • 大版主
    • 小版主
  • yichen
    yichen
    Mod闲聊群762251937
  • 柒月白风清
    柒月白风清
    一只小萌新,万年摸鱼党!已经脱坑了。。。
  • Cure_805
    Cure_805
    晚上在睡觉,白天在工作,不一定能及时回复,有事可以留言!
  • 至善丶丶
    至善丶丶
    群:1050040662 定制/开服/地图制作/价格公道
  • 已重置033
    已重置033
    一只爱折腾七日杀的脆皮大学生
  • 暂没有数据

    赞助广告位

  • 点击展示图片即可一键加入QQ群
    赞助广告:100R/月 目前空缺广告位:0

    分享网站

  • 繁体中文
  • 任务
  • 动态
  • 到底部
  • 帖子间隔 侧栏位置: