子弹、状态、目标选择与召唤机制
本页于 2026-10-15 整合现有功能稿、飞书内容及客户端 origin/develop@7f0636c9 的功能资料。原 draft/unknown 不因整理自动变为批准;设计规则、源配置与运行结果分别说明。本次只做文档及源码审阅,没有执行游戏功能测试。
适用范围与冲突裁决边界
这是技能可使用的机制设计库,参数示例不代表每个英雄都使用,也不是当前引擎逐项完成声明。英雄独立规则优先:阿斯特拉高抛只命中快照落点;赛芙拉返回不造成沿途伤害;红品第二代禁止继续终末派生。旧“分裂层数3”与同源“子弹不再次分裂”冲突,当前红品采用明确的两代/每技能20对象、同屏100对象预算,不开放无限继承。
弹射和穿透复合按分裂→弹射→穿透判定;分裂后母体销毁,子体独立继承剩余机制;弹射优先找未命中目标,耗尽后才沿最后方向穿透。原文普通抛物线追踪建议不覆盖阿斯特拉的固定落点。下面完整保留机制、参数、视觉与召唤字段;旧爆气触发和旧英雄技能模板已被新版纯CD三态与逐英雄技能替代。
一、设计总览
1.1 核心设计理念
子弹系统驱动:基于子弹技能系统的弹道形式和机制组合设计英雄技能
元素分类:火、冰、电三元素体系,每个元素对应专属弹道形式
词条叠加由当前配置MaxStacks决定,0表示无上限;旧统一10个上限不作为现行通用规则。
可视化优先:弹道形式清晰区分英雄特色
1.2 弹道形式与元素对应
| 元素 | 专属弹道形式 | 核心特性 | 适用场景 |
|---|---|---|---|
| 🔥 火 | 抛物线 | 高度变化,视觉冲击强 | 越过前排,范围爆发 |
| ❄️ 冰 | 直线+追踪 | 精准命中,穿透稳定 | 单体高伤,穿透输出 |
| ⚡ 电 | 闪电链 | 瞬间链接,快速弹射 | 连锁伤害,群体打击 |
1.3 机制组合体系
五大机制(参考子弹技能系统):
分裂:命中后产生新子弹
弹射:命中后在目标间弹射
穿透:穿过敌人继续飞行
折射:击中障碍物后反弹
停留返回:飞行一定距离后停留并返回
1.4 子弹释放方式
散射(Scatter Shot):
定义:单次攻击发射多个子弹,子弹之间有固定夹角
夹角参数:spread_angle,单位为度(°)
发射方式:从英雄位置同时发射所有子弹,或快速连续发射
排列方式:扇形布局(fan)、并列布局(parallel)、随机散射
适用场景:提升命中概率,覆盖更广范围
连射(Multi-Shot):
定义:连续发射多次子弹,每次发射之间有固定时间间隔
间隔参数:fire_interval,单位为秒(s)
发射逻辑:触发攻击动作后,在指定时间间隔内连续发射所有子弹
子弹数量:由bullet_count参数控制
适用场景:提升单位时间内输出,配合爆发增益使用
散射与连射叠加规则:
✅ 允许叠加:散射和连射可以同时生效
叠加示例:散射(2发,夹角15°)+ 连射(3次,间隔0.1秒)= 实际发射2×3=6发子弹
优先级:先执行散射配置,再按间隔执行连射
视觉效果:所有子弹正常显示弹道特效
释放方式对比:
| 特性 | 散射 | 连射 | 散射+连射 |
|---|---|---|---|
| 发射时机 | 同时/快速连续 | 有时间间隔 | 有时间间隔 |
| 子弹分布 | 空间角度分布 | 时间顺序分布 | 空间+时间分布 |
| 主要优势 | 扩大命中范围 | 提升爆发伤害 | 范围+伤害双重提升 |
| 典型参数 | spread_angle: 30° | fire_interval: 0.1s | 两者同时配置 |
| 适用条件 | 扇形覆盖 | 连续命中 | 同时需要覆盖与连续命中 |
参数示例:
// 散射配置{ "attack_mode": "scatter_shot", "bullet_count": 3, // 散射子弹数量 "fire_interval": 0.05, // 每发间隔(秒) "spread_angle": 30, // 散射总角度(°) "bullet_layout": "fan", // 排列方式:fan/parallel/random "first_angle_offset": -15 // 第一发角度偏移(-spread_angle/2)}// 连射配置{ "attack_mode": "multi_shot", "bullet_count": 3, // 连射子弹数量 "fire_interval": 0.1, // 每发间隔(秒) "sequential": true // 是否顺序发射(true=依次,false=同时)}// 散射+连射配置{ "attack_mode": "scatter_multi_shot", "scatter_count": 2, // 每次散射子弹数 "multi_shot_count": 3, // 连射次数 "fire_interval": 0.1, // 连射间隔 "spread_angle": 20, // 散射角度 "total_bullets": 6 // 总子弹数(2×3)}
二、子弹核心机制详解
2.1 分裂机制 (Split)
触发时机: 子弹击中目标后立即触发
参数定义:
{ "split_count": 2, // 分裂数量: 产生的新子弹数量 "split_range": 2.5, // 分裂范围: 寻找目标的最大半径(格子单位) "split_damage_ratio": 0.5, // 分裂伤害比例: 新子弹伤害倍率 "split_bullet_id": "child_bullet_id" // 分裂子弹类型ID(空则复制自身)}
核心逻辑流程:
1. 母子弹击中目标 → 触发伤害结算2. 判断分裂数量 > 03. 在分裂范围内寻找敌人: - 优先选择未分裂过的目标 - 距离优先: 优先选择最近的敌人 - 最多选择 split_count 个目标4. 为每个目标生成新子弹: - 伤害 = 母子弹伤害 × split_damage_ratio - 方向 = 从命中点指向新目标 - 继承母子弹的剩余机制(弹射/穿透/折射/停留)5. 母子弹销毁
视觉表现:
母子弹命中时产生分裂爆炸特效
每个新子弹从命中点飞向新目标
建议不同分裂数使用不同特效:
2分叉: V字形分裂光效
3分叉: 三叉戟形光效
4分叉: 十字形光效
注意事项:
分裂后的子弹不再再次触发分裂,避免无限分裂
分裂范围较小(1.5-2.5格)时需要明显视觉提示
金色卡牌分裂建议伴随音效升级
2.2 弹射机制 (Bounce)
触发时机: 子弹击中目标后,若有剩余弹射次数则触发
参数定义:
{ "bounce_count": 3, // 弹射次数: 总共可弹射的次数 "bounce_range": 3.0, // 弹射范围: 寻找下一个目标的最大半径 "bounce_damage_decay": 0.7, // 弹射伤害衰减: 每次弹射伤害倍率 "bounce_damage_decay_mode": 1, // 衰减模式: 1=每次都衰减, 0=不衰减 "bounce_tracking": true, // 是否追踪: 新子弹是否追踪目标 "bounce_priority_target_type": 0 // 优先目标类型: 0=最近, 1=标记目标}
核心逻辑流程:
1. 子弹击中目标 → 触发伤害结算2. 判断 bounce_count > 0: - 是: 继续步骤3 - 否: 子弹销毁3. 弹射次数 -14. 在弹射范围内寻找下一个目标: - 优先级: 标记目标 > 优先级类型(最近/随机/最低血) - 排除当前命中的目标5. 计算新方向: - 有追踪: 持续指向新目标 - 无追踪: 按原方向偏转角度飞向新目标6. 计算新伤害: - bounce_damage_decay_mode=1: 伤害 = 原伤害 × bounce_damage_decay - bounce_damage_decay_mode=0: 伤害 = 原伤害7. 继续飞行8. 若 bounce_count = 0 时击中目标 → 不再弹射,子弹销毁
视觉表现:
每次弹射产生电弧连接特效
弹射轨迹显示虚线或光链
不同弹射次数使用不同特效:
2次: 蓝色电弧
3次: 青色电弧
4次+: 紫色电弧+粒子
注意事项:
弹射次数为0时不触发弹射,直接销毁
范围内无目标时,子弹继续直线飞行直到超出边界或时间超时
弹射优先级需要支持Roguelike配置修改(如优先标记目标)
2.3 穿透机制 (Penetrate)
触发时机: 子弹击中目标时
参数定义:
{ "penetrate_count": 1, // 穿透次数: 可穿透的目标数量 "penetrate_damage_decay": 0.8, // 穿透伤害衰减: 每次穿透伤害倍率 "penetrate_damage_decay_mode": 1,// 衰减模式: 1=每次都衰减, 0=不衰减 "penetrate_after_split": true, // 分裂后是否保留穿透 "penetrate_after_bounce": true // 弹射后是否保留穿透}
核心逻辑流程:
1. 子弹击中目标 → 触发伤害结算2. 判断 penetrate_count > 0: - 是: 继续步骤3 - 否: 子弹销毁3. 穿透次数 -14. 计算新伤害: - penetrate_damage_decay_mode=1: 伤害 = 原伤害 × penetrate_damage_decay - penetrate_damage_decay_mode=0: 伤害 = 原伤害5. 子弹继续沿原有轨迹飞行6. 若 penetrate_count = 0 时击中目标 → 销毁
视觉表现:
穿透时产生穿身特效(如光束穿过敌人)
被穿透的目标显示穿透标记
每次穿透产生小粒子特效
建议穿透光束逐渐变细表示伤害衰减
注意事项:
穿透次数为0时子弹在击中后立即销毁
穿透时不触发分裂/弹射,仅计算伤害
穿透伤害衰减建议设置明显视觉反馈(光束变细)
穿透子弹在分裂/弹射后是否保留穿透由参数控制
2.4 折射机制 (Reflect)
触发时机: 子弹击中障碍物(墙壁、战场边缘、不可通行区域)时
参数定义:
{ "reflect_count": 2, // 折射次数: 可折射的总次数 "reflect_range": 999, // 折射范围(实际无意义,保留兼容) "reflect_angle_offset": 0, // 折射角度偏移(0=标准镜像折射) "reflect_bullet_speed": 1.0, // 折射后速度倍率 "reflect_damage_decay": 1.0 // 折射伤害衰减}
核心逻辑流程:
1. 子弹碰撞检测 → 判断是否击中障碍物2. 判断 reflect_count > 0: - 是: 继续步骤3 - 否: 子弹销毁3. 折射次数 -14. 计算新方向(镜像折射): - 水平墙壁: Y轴速度取反 - 垂直墙壁: X轴速度取反 - 角落: 根据碰撞法线反射5. 应用角度偏移(如果有): - 新方向 = 镜像方向 + reflect_angle_offset6. 更新速度: 新速度 = 原速度 × reflect_bullet_speed7. 继续飞行
视觉表现:
折射时产生反光特效
折射点显示反射粒子
折射轨迹改变颜色或亮度
折射次数耗尽时,子弹在下次撞墙时直接销毁
注意事项:
只对障碍物有效,击中角色/敌人时不触发
折射次数耗尽后,下次撞墙直接销毁
折射不会改变子弹的分裂/弹射/穿透状态
建议给折射子弹一个特殊的光效标识(如蓝色光晕)
2.5 停留后返回机制 (Stay & Return)
触发时机: 子弹飞行距离达到阈值时、击中目标时
参数定义:
{ "stay_type": "target"/"distance", // 停留类型:"target"=击中目标停,"distance"=飞行距离停 "stay_distance": 4.0, // 飞行距离: 停留前飞行的距离(格子单位) "stay_duration": 2.0, // 停留时间: 停留时长(秒) "return_speed": 2.0, // 返回速度: 返回时的速度倍率 "return_damage_mode": 0, // 返回伤害模式: 0=返回路径造成伤害, 1=不造成 "return_target": "caster" // 返回目标: "caster"=施法者, "origin"=原点}
核心逻辑流程:
阶段1: 飞行至停留点1. 子弹生成 → 记录起点坐标2. 持续飞行并计算累计飞行距离3. 判断飞行距离 >= stay_distance: - 是: 进入停留阶段 - 否: 继续飞行阶段2: 停留阶段4. 子弹在当前位置悬停 stay_duration 秒5. 期间保持静止,不进行伤害判定6. 显示停留特效(如充能动画、光圈扩散)阶段3: 返回阶段7. 停留时间结束 → 计算返回目标: - return_target="caster": 目标=施法者当前位置 - return_target="origin": 目标=起点位置8. 设置新方向 = 从当前位置指向返回目标9. 速度 = 原速度 × return_speed10. 返回模式判断: - return_damage_mode=0: 返回路径上击中敌人造成伤害 - return_damage_mode=1: 仅返回,不造成伤害11. 到达返回目标后,子弹销毁
视觉表现:
飞行阶段: 正常弹道光效
停留阶段: 子弹发光变亮,光圈扩散动画,倒计时显示
返回阶段: 改变轨迹颜色(如从蓝变红),速度视觉提升
建议停留时显示距离倒计时或停留进度条
注意事项:
停留期间不触发伤害判定,是技能的蓄力阶段
返回阶段可以设置是否造成伤害
返回速度可以快于飞行速度,增强打击感
停留期间可被打断(根据技能设计需求)
三、子弹触发优先级系统
3.1 优先级规则
| 优先级 | 机制 | 触发条件 | 特殊说明 |
|---|---|---|---|
| P1 (最高) | 分裂 | 击中目标 | 分裂后母子弹销毁,不再触发其他机制 |
| P2 | 弹射 | 击中目标 | 弹射后继续飞行,可能再次命中 |
| P3 | 穿透 | 击中目标 | 穿透后继续沿原轨迹飞行 |
| P4 | 折射 | 击中障碍物 | 只对障碍物有效,不与其他机制冲突 |
| P5 (最低) | 停留返回 | 飞行距离达到 | 与命中不冲突,独立触发 |
3.2 复合机制处理流程图
子弹生成 ↓【飞行阶段】 ├─ 检测到障碍物? ──是──→ [P4] 触发折射? │ └─ 是 → 折射 → 返回飞行 │ └─ 否 → 销毁 │ ├─ 检测到目标(敌人/英雄)? ──是──→ [P1] 可分裂? │ └─ 是 → 触发分裂 → 母子弹销毁 → 分裂子弹继续 │ └─ 否 → [P2] 可弹射? │ └─ 是 → 触发弹射 → 弹射次数-1 → 继续飞行 │ └─ 否 → [P3] 可穿透? │ └─ 是 → 穿透次数-1 → 继续飞行 │ └─ 否 → [P4] 可停留返回? │ └─ 是 → 击中目标停留类型? │ └─ 是 → 停留N秒 → 返回 → 销毁 │ └─ 否 → 继续飞行→ 飞行距离达到阈值→ 停留N秒 → 返回 → 销毁 │ └─ 否 → 销毁 └─ 超时/超出边界 → 销毁
四、子弹弹道形式设计
4.1 抛物线弹道 (Parabolic Trajectory)
适用场景: 火焰射手、熔岩炮手等需要从空中攻击的技能
参数定义:
{ "trajectory_type": "parabolic", "parabolic_height": 2.0, // 抛物线高度系数 "parabolic_curve": 0.5, // 抛物线曲率系数 "gravity": 9.8, // 重力加速度 "arc_duration": 1.0 // 抛物线飞行时间(秒)}
核心逻辑:
1. 计算起点与终点的水平距离: horizontal_distance = |终点 - 起点|2. 根据距离计算抛物线高度: arc_height = horizontal_distance × parabolic_height3. 使用抛物线公式计算Z轴高度: - 假设起点为(0, 0, 0),终点为(dx, dy, 0) - 抛物线参数方程: t = 当前时间 / arc_duration (0 ≤ t ≤ 1) x(t) = 起点.x + dx × t y(t) = 起点.y + dy × t z(t) = arc_height × 4 × t × (1 - t) // 标准抛物线4. 更新子弹位置和朝向: - 位置 = (x(t), y(t), z(t)) - 朝向 = 当前位置指向下一帧位置的向量
视觉表现:
子弹从起点以抛物线轨迹飞向目标
中间有明显的高度变化(向上弧线再下落)
落地时产生冲击波特效
建议配合粒子特效显示轨迹
注意事项:
抛物线高度应与射击距离成比例
避免抛物线过高导致子弹飞出视野
落地瞬间需要精确判定碰撞
建议为抛物线子弹添加阴影,提升空间感
抛物线子弹会持续检测目标位置,追踪;但当检测时发现目标位置与原位置相差很大距离(参数N)时,该子弹以原位置为落点
4.2 闪电链弹道 (Lightning Chain)
适用场景: 雷电射手、雷电类技能的弹射机制
参数定义:
{ "trajectory_type": "lightning_chain", "link_duration": 0.3, // 链接持续时间(秒) "chain_width": 0.2, // 闪电链宽度 "lightning_segments": 5, // 闪电分段数量 "jitter_intensity": 0.5, // 闪电抖动强度 "fade_out_duration": 0.2, // 淡出时间 "color": {"r": 0.5, "g": 0.8, "b": 1.0, "a": 1.0} // 闪电颜色}
核心逻辑:
1. 子弹生成 → 目标锁定2. 瞬间创建闪电链接: - 起点 = 子弹发射位置 - 终点 = 目标位置 - 在起点和终点之间生成折线路径3. 链接阶段(link_duration秒): - 每帧更新闪电特效(抖动、闪烁) - 单次击中造成1次伤害,随后找下一个目标4. 淡出阶段(fade_out_duration秒): - 透明度从1.0渐变为0.0 - 闪电宽度逐渐收缩5. 链接结束后 → 触发弹射机制(如果有) - 寻找下一个目标 - 快速脱离起点,链接到新目标6. 重复步骤2-5,直到弹射次数耗尽
闪电特效实现:
1. 分段生成策略: - 将起点到终点的线段分为N段(N = lightning_segments) - 每段的端点在垂直方向添加随机偏移 - 偏移量 = random(-1, 1) × jitter_intensity2. 闪烁效果: - 每帧调整闪电的透明度: alpha = base_alpha × random(0.7, 1.0) - 可以添加光晕脉冲效果3. 粒子特效: - 沿闪电路径随机生成电弧粒子 - 粒子生命周期短(0.1-0.2秒) - 粒子颜色略亮于主体闪电4. 音效配合: - 闪电链接时播放"滋滋"声 - 每次弹射播放"啪"的音效
视觉表现:
蓝色/青色折线连接起点和目标
折线有明显的抖动和闪烁效果
命中点产生电弧扩散特效
弹射时闪电快速切换到下一个目标
淡出时闪电逐渐变细、变淡
注意事项:
闪电链不应受到物理碰撞影响
需要确保闪电特效与弹射同步
抖动强度不宜过大,避免视觉混乱
建议添加音效增强打击感
挂载脚本
如果是Line用第一个,否则用第二个
4.3 激光弹道 (Laser Beam)
适用场景: 激光类持续伤害技能,如持续照射的激光炮
参数定义:
{ "trajectory_type": "laser", "laser_duration": 3.0, // 激光持续时间(秒) "laser_width": 0.15, // 激光宽度 "laser_color": {"r": 1.0, "g": 0.3, "b": 0.3, "a": 0.8}, // 激光颜色 "damage_interval": 0.2, // 伤害间隔(秒) "max_targets": 1, // 最大同时打击目标数 "switch_target_delay": 0.3, // 目标切换延迟(秒) "beam_segments": 20, // 激光分段数(用于弯曲效果) "glow_intensity": 1.5 // 光晕强度}
核心逻辑:
1. 子弹生成 → 锁定第一个目标2. 持续链接阶段(laser_duration秒): a. 每帧更新激光渲染: - 起点 = 子弹发射位置 - 终点 = 当前目标位置 - 创建连续的光束特效 b. 伤害判定(damage_interval间隔): - 如果目标存活 → 造成伤害 - 如果目标死亡 → 等待switch_target_delay秒,切换到下一个目标 c. 目标切换: - 在max_targets范围内寻找新目标 - 优先选择最近的敌人 - 激光快速切换到新目标3. 激光结束 → 子弹销毁
激光特效实现:
1. 基础光束: - 从起点到终点绘制半透明矩形/圆柱体 - 颜色 = laser_color - 宽度 = laser_width2. 光晕效果: - 在光束周围添加多层光晕 - 每层颜色更浅,宽度更大 - 透明度逐渐降低3. 核心高亮: - 在光束中心绘制更亮的核心线 - 宽度 = laser_width × 0.3 - 颜色更亮(alpha = 1.0)4. 动态效果: - 宽度轻微脉动: width = base_width × (1 + 0.1 × sin(time × 10)) - 透明度轻微闪烁 - 可以添加粒子从目标点飞向起点5. 击中点特效: - 在目标位置产生击中光圈 - 持续产生粒子(火花、烟雾) - 光圈大小随伤害间隔脉冲
目标切换逻辑:
1. 当前目标死亡时: - 等待 switch_target_delay 秒 - 在范围内搜索新目标2. 新目标选择: - 优先级1: 最近的敌人 - 优先级2: 血量最低的敌人 - 优先级3: 标记目标(如果有) - 排除: 已打击过的目标(可选)3. 切换动画: - 激光先收缩到起点(0.2秒) - 快速伸展到新目标(0.1秒) - 继续造成伤害
视觉表现:
持续的光束连接起点和目标
光束有明显的光晕和高亮核心
击中点持续产生火花和粒子
目标切换时激光快速切换
激光颜色和宽度可有轻微脉动
注意事项:
激光不应受物理碰撞影响
需要确保激光始终连接起点和目标
建议添加持续伤害的视觉反馈(如目标发光)
激光持续时间不宜过长,避免视觉疲劳
切换目标时需要平滑过渡
4.4 直线弹道 (Linear Trajectory)
适用场景: 火焰射手基础技能、常规投射物技能
参数定义:
{ "trajectory_type": "linear", "speed": 8.0, // 飞行速度(单位/秒)}
核心逻辑:
1. 子弹生成: - 位置 = 发射点 - 方向 = 指向初始目标方向 - 速度 = speed2. 每帧更新: a. 碰撞检测: - 检测是否击中目标/障碍物 - 击中后触发相应机制(分裂/弹射/穿透)3. 销毁条件: - 击中目标且无剩余机制 - 超出战场边界 - 生存时间超时
视觉表现:
沿直线飞行(或追踪目标飞行)
建议添加尾迹粒子特效
击中时产生爆炸/闪光特效
注意事项:
直线弹道是最基础的弹道形式
可以与所有机制组合
建议为高速子弹添加运动模糊效果
4.5 追踪弹道
参数定义:
{ "trajectory_type": "track", "speed": 8.0, // 飞行速度(单位/秒) "delay": 0.5, // 延迟追踪时间(单位/秒) "homing_strength": 0.5, // 追踪强度(0-1) "rotation_speed": 2.0 // 转向速度(度/帧)}
核心逻辑:
1. 子弹生成: - 位置 = 发射点 - 方向 = 指向初始目标方向 - 速度 = speed2. 每帧更新: a. 如果开启追踪(homing = true): - 计算当前方向到目标方向的角度差 - 根据homing_strength和rotation_speed调整方向 - max_rotation_per_frame = rotation_speed - actual_rotation = angle_diff × homing_strength - actual_rotation = clamp(actual_rotation, -max_rotation_per_frame, max_rotation_per_frame) - 新方向 = 原方向 + actual_rotation b. 更新位置: - 新位置 = 原位置 + 方向 × speed × delta_time c. 碰撞检测: - 检测是否击中目标/障碍物 - 击中后触发相应机制(分裂/弹射/穿透)3. 销毁条件: - 击中目标且无剩余机制 - 超出战场边界 - 生存时间超时
视觉表现:
追踪目标飞行
建议添加尾迹粒子特效
击中时产生爆炸/闪光特效
追踪模式时转向应平滑
注意事项:
可以与所有机制组合
追踪强度不宜过大,避免子弹"粘"在目标上
建议为高速子弹添加运动模糊效果
4.6 弹道形式对比
| 弹道类型 | 适用场景 | 特点 | 推荐机制 |
|---|---|---|---|
| 抛物线 | 火焰射手、熔岩炮手 | 有明显高度变化,视觉冲击强 | 分裂、穿透 |
| 闪电链 | 雷电射手、弹射技能 | 瞬间链接,快速切换,视觉华丽 | 弹射、无衰减 |
| 激光 | 持续伤害技能 | 持续链接,伤害稳定 | 无、持续时间 |
| 直线 | 基础投射物 | 简单直接,易于理解 | 所有机制 |
| 追踪 | 简单直接,易于理解 | 所有机制 |
五、子弹生命周期
5.1 完整状态机
[出生状态] ↓ (生成子弹)[飞行状态] ↓ (击中目标) ↓ (击中障碍物) ↓ (距离达标) ↓ (超时/越界)[命中判定] [折射判定] [停留判定] [销毁] ↓ ├─ 有分裂? → [分裂状态] → 分裂子弹进入[飞行状态] ├─ 有弹射? → [弹射状态] → 弹射数-1 → 回到[飞行状态] ├─ 有穿透? → [穿透状态] → 穿透数-1 → 回到[飞行状态] └─ 无机制 → [销毁]
5.2 子弹数据结构
{ "bullet_id": "bullet_fireball_001", "owner_id": "hero_flame_shooter", // 运动参数 "position": {"x": 0, "y": 0, "z": 0}, "direction": {"x": 0.5, "y": 0.866, "z": 0}, "speed": 8.0, "lifetime": 5.0, "spawn_time": 1234567890, // 伤害参数 "base_damage": 100, "current_damage": 100, "damage_type": "fire", // 机制状态 "mechanics": { "split": { "enabled": true, "count": 2, "used": false, "range": 2.5, "damage_ratio": 0.5, "child_bullet_id": null }, "bounce": { "enabled": true, "count": 3, "used": 0, "range": 3.0, "damage_decay": 0.7, "decay_mode": 1, "tracking": true, "priority_target_type": 0 }, "penetrate": { "enabled": true, "count": 1, "used": 0, "damage_decay": 0.8, "decay_mode": 1 }, "reflect": { "enabled": false, "count": 0, "used": 0, "angle_offset": 0, "bullet_speed": 1.0, "damage_decay": 1.0 }, "stay_return": { "enabled": false, "state": "flying", // flying, staying, returning "stay_distance": 4.0, "traveled_distance": 0, "stay_duration": 2.0, "stay_start_time": 0, "return_speed": 2.0, "return_damage_mode": 0, "return_target": "caster", "origin_position": null, "caster_id": null } }, // 标记 "tags": ["fire", "burst"], "hit_targets": [], // 已击中的目标列表 "current_target": null, // 当前追踪的目标 "parent_bullet_id": null // 父子弹ID(用于追踪分裂来源)}
5.3 时间线示例
T=0.0s: 子弹生成,位置(0,0,0),速度8.0T=0.5s: 飞行距离4.0格,击中敌人A - 伤害=100,命中敌人A - [P1] 分裂: 产生2个子弹B和C,各50伤害 - 母子弹销毁T=0.6s: 子弹B击中敌人D - 伤害=50,命中敌人D - [P2] 弹射: 弹射次数2→1,飞向敌人ET=0.7s: 子弹C击中敌人F - 伤害=50,命中敌人F - [P3] 穿透: 穿透次数1→0,继续飞行T=0.8s: 子弹B击中敌人E - 伤害=35(衰减),命中敌人E - [P2] 弹射: 弹射次数1→0,飞向敌人GT=0.9s: 子弹B击中敌人G - 伤害=24(衰减),命中敌人G - 弹射次数=0,销毁T=1.0s: 子弹C击中墙壁 - [P4] 折射: 折射次数3→2,反弹T=1.5s: 子弹C击中敌人H - 伤害=40,命中敌人H - 穿透次数=0,销毁总计: 5次命中,累计伤害=249
六、子弹复合机制处理规则
6.1 机制叠加原则
| 规则 | 说明 | 示例 |
|---|---|---|
| 优先级决定触发顺序 | 击中时按P1→P2→P3顺序判断 | 有分裂优先分裂,无分裂才判断弹射 |
| 触发后状态继承 | 子弹继续飞行时,保留未触发的机制 | 弹射后仍可穿透 |
| 分裂子弹独立 | 分裂后的子弹是独立实体 | 分裂子弹不受母子弹弹射次数限制 |
| 次数独立计数 | 每个子弹独立统计机制次数 | 弹射次数归零后,分裂子弹仍可弹射 |
| 伤害衰减独立 | 每个子弹独立计算伤害衰减 | 分裂子弹伤害衰减不影响其他子弹 |
6.2 典型组合配置建议
组合A: 高频率分裂弹射 (火焰射手爆气)
{ "split_count": 3, "split_damage_ratio": 0.5, "bounce_count": 1, "bounce_damage_decay": 0.8, "bounce_tracking": true}// 效果: 1击分裂为3,每个再弹射1次 → 最多6次命中
组合B: 高穿透AOE (冰霜射手Roguelike)
{ "split_count": 2, "split_damage_ratio": 0.3, "penetrate_count": 2, "penetrate_damage_decay": 0.8, "penetrate_after_split": true}// 效果: 击中后分裂,每个穿透2次 → 适合直线敌人队列
组合C: 全场连锁闪电 (雷电射手Roguelike)
{ "bounce_count": 5, "bounce_range": 4.0, "bounce_damage_decay": 0.0, // 无衰减 "bounce_tracking": true, "bounce_priority_target_type": 1 // 优先标记目标}// 效果: 5次弹射无衰减,优先击杀标记目标
组合D: 返回型飞镖 (特殊英雄技能)
{ "split_count": 0, "bounce_count": 0, "penetrate_count": 2, "penetrate_damage_decay": 1.0, "stay_return": { "enabled": true, "stay_distance": 5.0, "stay_duration": 1.5, "return_speed": 2.0, "return_damage_mode": 0, "return_target": "caster" }}// 效果: 飞出5格停留1.5秒,返回时穿透造成伤害
6.3 核心需求说明
6.3.1 机制特性需求
分裂机制的作用范围
需求: 分裂只针对母子弹触发
规则: 分裂数量只需判断一次(不论分裂数量最终叠加了多少次)
弹射与穿透的优先级
需求: 弹射与穿透可以共存
规则: 弹射优先级高于穿透。弹射完毕后,子弹会沿着最后一次弹射的飞行轨迹继续进行穿透判断
折射与机制次数的关系
需求: 折射不占用其他机制的次数
规则: 折射不属于与角色单位碰撞后的触发机制,因此不会占用弹射、分裂、穿透的次数
停留返回机制的打断条件
需求: 明确停留返回的打断条件
规则: 停留返回只会被子弹存活时长打断。其他子弹机制(弹射、分裂、穿透等)同理
配置要求: 在配置时,会给子弹赋予较长的存活时间
性能优化需求
需求: 支持大量子弹场景
实现: 由程序员团队负责性能优化实现
弹射目标选择规则
需求: 明确弹射目标的选择逻辑
规则: 弹射优先选择未被击中的目标
6.3.2 特殊情况处理需求
情况1: 分裂与弹射的执行顺序
场景: 母子弹分裂后是否进行弹射
需求: 当存在分裂机制时,母子弹不会进行弹射(分裂后母子弹销毁)。分裂子弹才会进行弹射次数判断
说明: 有分裂机制存在时,母子弹分裂后才会进行弹射,分裂子弹独立进行弹射次数判断
情况2: 穿透后是否还可以弹射
场景: 弹射与穿透的复合机制
需求: 弹射优先级高于穿透,第一次命中触发弹射而非穿透
说明: 弹射完毕后,子弹会沿着最后一次弹射的飞行轨迹进行穿透判断
情况3: 折射与弹射/穿透的关系
场景: 折射机制与其他机制的组合
需求: 折射不属于与角色单位碰撞后的触发机制,所以不会占用弹射、分裂、穿透的次数
说明: 折射只对障碍物有效,与弹射/穿透互不冲突
情况4: 停留返回期间的碰撞判定
场景: 停留返回机制与其他机制的交互
需求: 停留返回只会被子弹存活时长打断,其他子弹机制同理
说明: 因此在配置时,会给子弹赋予较长的存活时间
七、子弹性能优化策略
7.1 弹道池管理
| 优化项 | 说明 | 预期效果 |
|---|---|---|
| 对象池 | 子弹对象复用,避免频繁GC | 减少内存分配 |
| 预加载 | 提前创建常用子弹模板 | 减少初始化时间 |
| 分级池 | 按机制复杂度分级池化 | 高效利用资源 |
| 自动扩容 | 动态调整池大小 | 适应不同负载 |
7.2 数量限制
| 场景 | 子弹上限 | 说明 |
|---|---|---|
| 同屏子弹总数 | 100 | 防止卡顿 |
| 单技能子弹数 | 20 | 防止单一技能过于强力 |
| 分裂子弹层数 | 3 | 禁止无限分裂 |
| 弹射链条长度 | 10 | 防止弹射循环 |
7.3 计算优化
| 优化项 | 说明 | 预期效果 |
|---|---|---|
| 空间划分 | 网格/四叉树加速碰撞检测 | 减少检测次数 |
| 目标缓存 | 缓存附近目标列表 | 减少寻路计算 |
| 延迟更新 | 非实时更新的状态延迟处理 | 降低帧率影响 |
| LOD | 远距离子弹简化特效 | 降低渲染负载 |
| 批处理 | 同类型子弹统一处理 | 提升CPU效率 |
7.4 视觉优化
| 优化项 | 说明 | 预期效果 |
|---|---|---|
| 粒子复用 | 粒子系统对象池 | 减少渲染开销 |
| 特效LOD | 远距离简化特效 | 降低GPU负载 |
| 合并绘制 | 同类型子弹合并绘制 | 减少DrawCall |
| 遮挡剔除 | 不可见子弹不渲染 | 节省GPU资源 |
| 延迟特效 | 非关键特效延迟渲染 | 平滑帧率 |
十三、buff类型
爆气:区分爆气buff类型
点燃:buff持续期间,间隔触发施法者攻击力百分比火焰伤害
击退:直线向后击退N
眩晕:无法行动,包括移动和攻击
禁足:无法移动,但能攻击
属性增减
加速:移动速度+N%
减速:移动速度-N%
攻击力增加:攻击力+N%
攻击力减少:攻击力-N%
技能冷却增加:技能冷却+N%
技能冷却减少:技能冷却-N%
最大血量增加:最大血量+N%,需要处理buff结束后,对象血量恢复
最大血量减少:最大血量-N%,需要处理buff结束后,对象血量恢复
施加火系/冰系/电系伤害增加:火系/冰系/电系伤害+N% 各分3个枚举
施加火系/冰系/电系伤害减少:火系/冰系/电系伤害-N% 各分3个枚举
受到火系/冰系/电系伤害增加:火系/冰系/电系伤害+N% 各分3个枚举
受到火系/冰系/电系伤害减少:火系/冰系/电系伤害-N% 各分3个枚举
十四、目标排序
攻击力最高:范围内,攻击力最高的目标
攻击力最低:范围内,攻击力最低的目标
血量最高:范围内,最大血量最高的目标
血量最低:范围内,最大血量最低的目标
十五、新增技能机制
新增召唤事件
召唤物出现范围:施法者朝向的半圆内随机取点,配置半径
召唤物AI暂时只处理与怪物AI一样,刷出后走直线根据技能范围停下攻击目标
召唤物生成后根据怪物一样,影响胜利结算,母体死亡不影响召唤物
召唤物新增npc表,配置预制体,属性继承比例(照搬领主的配置,下图已删除多余字段)
事件参数
NpcID
召唤数量
召唤物特效:每个召唤物位置触发
召唤间隔:配置0,表示同时生成
召唤范围半径
召唤范围的中心点选择:施法者位置、目标位置
vThir0
| ID | Model | Duration | AtkPercentage | HpPercentage | DefPercentage | MoveSpeed | Skill | CarryingBuffID |
|---|---|---|---|---|---|---|---|---|
| int | string | int | int | int | int | int | (list#sep=|),int | (list#sep=|),int |
| id | Npc预制体名称 | 持续时间,毫秒,-1表示无限 | 攻击力继承百分比,除10000 | 血量继承百分比,除10000 | 防御值继承百分比,除10000 | 移动速度(除10000) | 技能数组 | 自带buffID数组 |
| 410 | _Npc01 | 3000 | 1000 | 1000 | 1000 | 0 | 30410 | |
| 411 | _Npc01 | 6000 | 1800 | 1800 | 1800 | 0 | 30411 | |
| 412 | _Npc01 | 9000 | 3200 | 3200 | 3200 | 0 | 30412 | |
| 413 | _Npc01 | 12000 | 5400 | 5400 | 5400 | 0 | 30413 | |
| 414 | _Npc01_2 | 15000 | 9300 | 9300 | 9300 | 0 | 30414 | |
| 510 | _Npc02 | -1 | 10000 | 10000 | 10000 | 80000 | ||
| 710 | _Npc710 | 3600 | 10000 | 10000 | 10000 | 0 | 715 | |
| 711 | _Npc711 | 3600 | 10000 | 10000 | 10000 | 0 | 716 | |
| 712 | _Npc711 | 3600 | 10000 | 10000 | 10000 | 0 | 717 | |
| 713 | _Npc711 | 3600 | 10000 | 10000 | 10000 | 0 | 718 | |
| 22031 | _Npc22031 | -1 | 500 | 500 | 500 | 16000 | 20050 |
设计中的具体未决点
机制库“最大血量最高”排序与D3/红品指定“当前血量最高”并不等同:每个技能必须使用其明确口径。停留可打断的早期建议被同源§6.3限定为仅存活时长打断。分裂层数3与不递归冲突以上文具体英雄规则约束。召唤物是否参与胜负、死亡清理与来源归属须按玩法/技能指定;元素卡派生物不占英雄位、无阻挡、不得伪装成英雄伤害。
来源
飞书Mp3ydiJWQoTlmmx2tcUc8jRpndg的机制库、M5FZdu9G0oSEvOxHkFjcv8QhnRe英雄技能;当前红品及D3规则。本页没有新增测试用例。