框架简介:
在《七日杀》的 Mod 开发中,想要实现复杂的自定义战斗特效(如大面积集束轰炸、高频次伤害毒圈、全屏追踪法术)往往会遭遇严重的性能瓶颈。其根本原因在于:游戏原生的物理系统在处理海量实体与体素方块的碰撞时,会产生毁灭性的 CPU 算力消耗。
为了彻底打破这一局限并极大拓宽游戏的战斗交互深度,我重构并开发了这套完全受 XML 驱动的底层战斗框架。本框架通过底层逻辑解耦,将视觉特效的华丽展现与物理计算的性能消耗剥离,为开发者提供了一套高性能、高自由度的自定义战斗武器开发方案。
核心设计:性能优化与物理演算剥离
本框架与其他爆炸特效类框架区别在于处理复杂战斗场景时的极致性能表现。我重写了范围判定与飞行物底层,采用了以下核心优化策略:
-
零方块物理演算,突破高频触发极限:所有的飞行物轨迹判定、瞬时范围爆破(AOE)以及持续性滞留伤害场(Zone),均完全放弃了对地形方块的物理碰撞模拟。底层采用轻量级的射线投射(Raycast)与无内存分配重叠扫描(NonAlloc Overlap)接管运算。这意味着,你可以毫无顾忌地创造每秒触发 10 次、覆盖几十米的大面积特效,而服务器的帧率依然稳如泰山。
-
保留生物物理交互反馈:在剥离环境方块演算的同时,并未牺牲打击感。框架依然保留了对生物实体(丧尸、动物)的物理级互动。系统会根据爆炸中心距离自动计算矢量衰减推力,并对接《七日杀》原生的 Ragdoll(布娃娃系统),实现极具张力的击飞、倒地与瘫痪表现。
拓展战斗交互深度 :
参考暗黑,流放系列特效满屏的技能机制,开发者能够彻底摆脱传统的“开火-命中单体”模式,构建极具策略性的立体战术体系:
-
空间阻断与阵地战: 引入
SpawnZone机制。支持在指定坐标生成地形自适应的持续性伤害场/增益场(如火墙、拒马毒气、区域治疗)。结合白/黑名单阵营过滤,将战斗从单一的点对点射击升级为强调走位与空间控制的阵地博弈。
-
不可预测的连锁反应: 引入
CustomProjectile的多级分裂与自动索敌系统。命中目标后,可向四周呈自定义散布角爆出次级弹道碎片,且碎片按比例完美继承父级的追踪能力与滞留场属性,实现绝佳的清场视觉与数值体验。
架构模块构成:
本指南将详细解析框架内三大核心模块的 XML 参数接口,无需编写一行 C# 代码,只需修改 XML 属性,即可调用庞大的底层逻辑:
MinEventActionAOEDamage:瞬时定点范围伤害触发器(支持击飞演算与留存伤害场)。
MinEventActionCustomProjectile:自定义物理弹道发射器(支持追踪与连锁分裂)。
MinEventActionSpawnZone:独立的持续性滞留法阵生成器。
瞬时定点范围伤害触发器 AOEDamage
功能简介: 在触发MiniEvent时(如挥动武器/buff更新/射线命中点等)产生一次瞬间爆发的范围效果。
如果配置了 zone_ 参数,还会在该位置遗留一个持续范围特效伤害(如鸡尾酒效果,或自定义毒雾效果)。
启用格式:
action="AOEDamage, CustomAoeParticleEffect"
瞬时爆炸参数:
事件发生/命中那一瞬间的伤害和物理效果。
| 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示例)
<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(自定义飞行物全参数总表)
介绍:自定义特效飞行物。
启用格式:
action="CustomProjectile, CustomAoeParticleEffect"
支持物理下坠、随机散布、索敌追踪、命中爆炸特效、落地留阵、以及击中后的连环弹射(且碎片继承微缩后的法阵和追踪能力)。
基础发射与飞行参数 :
控制子弹出膛到命中前的视觉与物理轨迹。
| XML 属性名 | 数据类型 | 默认值 | 功能说明与注释 |
count |
int | 1 |
一次开火发射的弹道数量(例如霰弹枪填 8)。 |
on_aim |
bool | 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 |
|
落地滞留法阵:
如燃烧瓶的地面燃烧效果,或悬空的毒雾冰雾,治疗阵效果。(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 |
|
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 |
碎片追踪的拐弯敏捷度。 |
SpawnZone (主动法阵参数总表)
介绍:可自定义持续性滞留范围特效伤害,毫不夸张地说,我这个架构比原版的燃烧瓶造成的范围燃烧特效要好用的多,原版只是粗暴检测进入该区域的实体附加一层燃烧buff,既没有范围内实施刷新,也不能真正意义上的造成范围DOT伤害。
启用格式:
action="SpawnZone, CustomAoeParticleEffect"
视觉与坐标控制:
控制法阵生成在哪里、长什么样、以及多大。
| 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 |
|
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中,计划添加更多的爆炸范围形状,例如扇形,长方形等,可以做更多有意思的特效,以及真正意义的激光特效框架。
因此该框架仍在开发中,但接近尾声,如果你有什么想法和建议请回复评论区,谢谢!




















鄂公网安备42011202002543号



帖子仍在施工,刚刚一直有不明原因不让我发布。
接模组定制 +Q 1079703478
这种对电脑好啊,他那个代码太烂了
这个逼装的我给82分,剩下的用666的方式打给你!
好 很好
品赛博烧鸡,做电子魅魔