武器射击系统还原(二):沿原版机制重建无人机的跟随、索敌与攻击

玩家移动,无人机跟随;敌人进入攻击范围,无人机转向开火;弹药耗尽,再返回背包补给。这段循环在画面中很容易辨认,实现时却涉及不同的数据和状态:背包保存挂载与补给关系,飞行实体持续更新位置,武器决定能否发射,目标选择还要响应死亡、遮挡和状态变化。

整体原型计划见《PVE 射击原型——对 AI 辅助开发管线的一次实证验证》。该计划确定了项目的验证目标和框架选择;本文继续实现其中的自主武器部分,分析六种无人机的配置、机制与 UE 接入。上一篇《武器射击系统还原(一):沿原版机制重建 TPS 相机、准星与发射流程》讨论玩家手持武器;这一篇转向无人机,沿配置、飞行、索敌、发射与补给展开。当前成果仍在 UE5.7 Lyra 独立原型中验证,尚待合入项目版本。

现有原型可以切换激光、突击步枪、机枪、喷火、毒气和电击六种无人机。全文使用两段合集视频,六段独立型号视频统一记为“型号视频 A–F”。下文区分原版配置与计算、UE 场景适配和验证场设置,按配置、跟随、接敌、选敌与发射的顺序展开,最后用同一次步枪运行核对空弹返航与补给。六型能够完成各自的演示流程,不代表原游戏全部导航、动画、特效和伤害系统已经恢复。

视频 1:六种无人机的 TPS 演示。每种型号来自独立运行,按章节连接;1920×1080、30 fps,全程原速。有限弹药类型保留耗尽、返航、补给和再次攻击,激光与电击展示攻击及无敌人后的跟随。逐帧渲染后编码不构成实时性能测试。

文章目录
运行截图 1:TPS 激光场景约 1.533 秒。右上角保留型号、攻击与目标血量;占位机体和验证球靶用于检查行为,不代表原版模型。
运行截图 1:TPS 激光场景约 1.533 秒。右上角保留型号、攻击与目标血量;占位机体和验证球靶用于检查行为,不代表原版模型。

一、背包、飞行实体与挂载武器

画面中的无人机由背包、飞行实体和挂载武器共同驱动,配置与运行状态分别归这三类对象管理。

背包与持有者建立关系,提供停靠位置和补给上下文。飞行实体记录位置、速度、目标与行为状态。挂载武器保存发射节拍、弹药或燃料、随机状态,以及在途弹丸或粒子。切换无人机型号时,验证面板会重置相应状态;普通开火、松开或短暂遮挡则不能沿用同样的重置逻辑。

图 1:对象职责示意。背包、飞行实体与武器分别保存挂载补给、运动决策和发射状态。
图 1:对象职责示意。背包、飞行实体与武器分别保存挂载补给、运动决策和发射状态。

同一个父行为可以接不同的武器。例如,激光与电击使用同一类父行为,但发射后端分别是持续光束和分段传播的电弧。突击步枪与机枪共享另一类父行为,射速、弹量、散布和初速却不同。喷火、毒气则采用各自的接敌与资格分支,不能仅替换粒子颜色。

型号 行为侧的主要区别 发射后端 当前补给方式
激光 跟随、选敌、转向与光束请求 预热后持续光束 正式演示未启用实验热循环
突击步枪 跟随位置上的角度与距离检查 逐发散布、弹道积分 运行总量 30 发(29+1),耗尽后返航补给
机枪 同类父行为,独立武器参数 逐发散布、弹道积分 运行总量 45 发(44+1),停靠后装填 2.5 秒
喷火 接近目标、单独的站位几何 选定发射器的粒子出生与运动 80 单位燃料耗尽后补给
毒气 独立候选权重及状态排除 独立粒子配置 100 单位燃料耗尽后补给
电击 同类跟随行为,独立传播算法 电弧根查询、子段与分裂 无限弹药,不走空弹返航

容量、射速等参数的含义取决于读取它们的计算阶段。表中激光的“未启用实验热循环”仅描述本次正式演示;原机制仍包含热量处理。

配置进入运行前,需要确认资源身份及覆盖关系。父资源定义行为,子资源定义武器;原始默认值与运行时修正分别记录。本文列出的参数对应已核对的有限配置范围,没有据此推断所有升级和装备修正。

图 2:当前 UE 更新顺序示意。运动、扫描与行为、机体旋转、武器和接触反馈依次更新;缓存状态进入下一步。
图 2:当前 UE 更新顺序示意。运动、扫描与行为、机体旋转、武器和接触反馈依次更新;缓存状态进入下一步。

一次更新中,“有候选”“有攻击请求”“武器通过资格检查”“实际生成弹体”和“发生碰撞”属于不同结果。面板显示正在攻击,不能替代实际命中检查;命中计数增加也不能说明伤害、燃烧或毒气状态已经接通。后文的视频和验证表均按这几个阶段说明范围。

以步枪无人机追踪配置的使用路径

选中步枪时,当前 UE 原型按型号索引取得已整理好的父行为与子武器配置。父行为控制对应的候选、进入和退出规则,子武器配置提供弹体类型、容量、射速和初速,散布宽度则由独立的散布数据读取。当前实现使用已整理的 C++ 配置,不是在每次开火时重新解析原资源文件,也没有实现原版完整资源加载器。

配置的读取与状态的初始化需要区分。当前运行容量三十发由原匣内二十九发与膛内状态换算得到,并非原始匣量字段直接为三十。初始化时将运行总量写入剩余弹量,之后每发减少的是运行状态,容量本身不变。机枪同理,原匣内四十四发与膛内状态对应当前运行总量四十五发。备用匣初值为六,补给时减少备用匣状态;重新读取配置不应把它恢复为六。

数据 来源与读取时机 使用结果 需要持续保存的内容
父行为类别 型号配置;行为检查时选择对应分支 候选评分、距离角度与退出规则 当前目标、行为状态与扫描时钟
运行容量 30 发(29+1)、备用匣初值 6 已整理的运行配置;重置时初始化 当前弹量与备用匣状态 射击后余额、已经消耗的匣数
640 RPM 武器配置;发射后计算下个间隔 0.09375 秒的节拍增量 剩余计时,而非每帧从零开始
完整角宽 2/2 mrad、模式 0 散布配置;每发读取 本次发射方向 索引随机状态,连续推进两次
初速 900 m/s 武器配置;弹体生成时读取 初始速度向量 每颗弹体的位置、速度与寿命
装填时间 0 秒 型号配置;已停靠且需补给时读取 补给检查的时长条件 缺弹标记、装填计时和备用匣余额
玩家、目标与视角基底 UE 场景查询;对应更新阶段采样 跟随点、角度、距离和发射基准 缓存引用与有效性,不能永远使用旧位置
图 3:配置使用路径。静态配置、初始化写入、每次发射与跨步状态分别标出。
图 3:配置使用路径。静态配置、初始化写入、每次发射与跨步状态分别标出。

每次型号重置还会清理该验证实例的粒子、电弧、计时器与部分适配历史,并把索引随机种子设为一。这个初值是可重复测试的 UE 输入,不构成原游戏随机种子所有权已恢复的结论。普通两发之间不重置种子,否则每发都会重复序列的第一组样本。

发射时钟也保留余量。当前武器步先从计时器减去固定步长;满足资格、计时到期后,一次调用最多生成一发实弹,再向计时器增加间隔。资格不满足时,负计时被拉回零,避免停火时间积累成恢复后的一批补发。它与“每次发射后直接设为完整间隔”或 while 循环补发全部过期事件均有区别。这是当前 UE 后端的发射时钟更新方式,验证范围不包含完整的原调用调度。

检查 640 RPM 是否实际生效,需要沿发射流程核对:本步选择的后端、请求有效性、计时器、随机状态,以及弹体生成后的积分与碰撞。面板数值只反映其中的配置输入。

一次 UE 更新怎样串联这些对象

当前接入先处理已有飞行状态的运动目标与实际位移,再以更新后的位置检查候选和攻击条件,随后更新机身转向,最后进入对应武器后端。这是当前 UE 调用点的顺序,不能直接写成原引擎完整 World 的统一顺序。

顺序会影响输入的时效。例如,本步扫描刚换了目标,前面的运动阶段已经使用旧目标或原跟随点;新接敌站位要在之后的更新中参与飞行。状态切换也保留本步开始时的分支:本步由跟随进入锁定,并不等于又在同一步完整执行锁定、攻击和退出全部路径。

当前阶段 读取的主要状态 本阶段写入的结果
飞行与挂载 既有行为状态、目标、位置与速度 本步位置、飞行目标、停靠进度
扫描与行为 本步位置、缓存目标、扫描时钟、资格输入 新目标、行为转换、期望朝向与请求
机身转向 保存的朝向、角速度、期望水平角 本步朝向及下一步角速度
武器执行 当前请求、状态、目标、弹量与通道 弹丸、粒子、电弧或光束及消耗
后续反馈 物理命中与验证目标生命 生命变化、失效标记及之后的扫描输入

本步最终显示的朝向,不一定是本步攻击资格检查时使用的朝向。 攻击资格计算发生在机身转向更新之前,所以本步转向完成不保证资格也已按新朝向重算。当前武器后端还会检查通道与目标有效性,但它不能替代全部朝向资格。调试时应同时保存检查时的朝向和最终显示朝向,避免从一张已经转正的画面反推同一步必定允许开火。

上一篇的玩家手持武器由输入、相机目标和 Ability 提交驱动;无人机则由自主候选、行为状态与持续武器对象驱动。弹道、散布等数学模块可以共用,目标来源、随机状态归属和发射资格仍需要分别连接。

二、跟随点的构造与更新

跟随目标由视角基底构造

早期画面中,部分无人机几乎只在玩家上方升降,水平移动很弱。当时构造目标点时只取玩家位置再加高度,漏掉了正常视角分支中的水平项。错误出在目标点输入,不能靠提高飞行速度修正。

当前恢复的跟随目标包含玩家位置、视角右方向、前方向和高度。用几何符号表示:

Pfollow = Powner + side × Right + 1 m × Forward + height × Up

上式描述当前已恢复的对应分支,其中前向项为 1 米,不外推为所有姿态和飞行状态的通用值。一个正常分支的侧向距离约为 2.5 米,高度约为 2.9 米;另一姿态分支使用约 1.5 米和 2.6 米,另有额外增加 1 米高度的条件。肩侧改变侧向符号。各分支保留原有区别,其对应的具体角色动作尚未确认。

如果玩家沿视角转向,Right 与 Forward 也会变化。即使玩家站在原地,跟随点仍可绕玩家改变位置。只看无人机到玩家的距离,无法判断跟随是否正确;需要同时画出目标点,比较它与实际飞行位置。

图 4:跟随几何教学。侧向、前向与高度分别参与目标点;右下区分原分支高度与验证场覆盖值。
图 4:跟随几何教学。侧向、前向与高度分别参与目标点;右下区分原分支高度与验证场覆盖值。

本轮验证将默认跟随高度覆盖为玩家 Actor 原点上方 1.5 米。这是明确的 UE 展示覆盖值,并非原版默认高度。Actor 原点也不能自动解释为脚底:切换参考点会改变同一高度数值在画面中的位置。

运行截图 2:独立顶视激光场景约 8.133 秒。两靶已变灰,机体回到移动玩家附近;单帧说明空间位置,持续跟随仍需查看原片与状态记录。
运行截图 2:独立顶视激光场景约 8.133 秒。两靶已变灰,机体回到移动玩家附近;单帧说明空间位置,持续跟随仍需查看原片与状态记录。

目标点、速度和实际位置分开更新

跟随点只是运动目标,实体位置还要按距离计算速度。已恢复分支在两米内逐渐减速,在约六厘米的到达范围内返回零速度:

当 d ≤ 2 m:speed = ((d − 0.05) / 1.95) × 6
当 d > 2 m:speed = 6
当 d ≤ 0.06 m:speed = 0

这组关系只描述对应跟随调用的标量输出。返航另有速度曲线,喷射接敌也有自己的处理,不能把六米每秒写成全部状态的恒定速度。

取教学距离一米,跟随速度约为 2.923 米每秒;距离两米时为六米每秒。六厘米附近的停止条件还会截断线性表达式。移植时需要保留比较关系,不能把负值区间外推成反向飞行。

UE 适配另外平滑跟随偏移,并限制加减速。它平滑的是相对玩家的偏移,不是玩家的世界位置:

Offset = Pfollow − Powner
alpha = 1 − exp(−dt / τ)
OffsetNext = OffsetOld + alpha × (Offset − OffsetOld)
Goal = Powner + OffsetNext

当前跟随偏移使用 τ=0.12 秒,接敌目标平滑使用 0.18 秒。这样玩家平移能立即传给目标,转动视角引起的偏移变化则逐渐过渡。两者均为 UE 工程选择;它们改善响应,不提供与原运动轨迹逐位相同的结论。

转向先保留角速度,再计算本步偏转

无人机转向也有持续状态。当前恢复的模式 6 使用约 360°/秒的速率配置,以及约 150°/秒²的加减速参数。前者是目标速率范围,后者决定角速度怎样逐步改变;它们不能读成“每帧转 360°”,也不能用单个旋转插值系数替代。

计算先取得期望水平角与当前水平角之差,并把差值绕回对应角度范围。若已有角速度在本步足以跨过剩余角度,或减速关系要求提前制动,就进入减速分支。正常加速分支则限制角速度变化,并在近目标处限制期望速率,避免一步越过目标。

普通加速分支:
  ωdesired = sign(error) × rate
  必要时限制 ωdesired,使它本步不跨过剩余角度
  ωnext = ω + clamp(ωdesired − ω, −accel × dt, accel × dt)
  turnStep = gain × ωnext × dt
  最后将 turnStep 限制在剩余角度范围内

上式只列出普通加速分支,完整函数还包括条件覆盖和减速处理。减速分支对本步输出和后续角速度采用不同的更新次序,合并为统一的 Lerp 会改变计算结果。

取静止角速度、足够大的转向误差、gain=1,以及 dt=1/60 秒的教学输入,第一步角速度约增至 2.5°/秒,本步转角约为 0.04167°。它说明起步存在角速度建立过程,不给出某个移动目标的完整追踪耗时。

以期望水平角突然变到 90°、初始水平角与角速度均为零为教学条件,保持 dt=1/60 秒、gain=1,前十二步仍处于普通加速分支。把状态连续保存,可得到下表;数值转成角度并按显示精度整理。

固定步 累计时间 本步更新后的角速度 本步偏转 累计水平偏转
1 0.016667 s 2.5°/s 0.041667° 0.041667°
2 0.033333 s 5°/s 0.083333° 0.125°
3 0.05 s 7.5°/s 0.125° 0.25°
6 0.10 s 15°/s 0.25° 0.875°
12 0.20 s 30°/s 0.50° 3.25°
图 5:连续转向教学。角速度逐步建立,再积分为偏转;图中只画前十二步普通加速,不代表完整转向耗时。
图 5:连续转向教学。角速度逐步建立,再积分为偏转;图中只画前十二步普通加速,不代表完整转向耗时。

第十二步的 3.25°来自此前各步累积,不能用最后一次角速度乘总时间替代。角速度随后是否继续增加,还取决于剩余误差与减速条件;上表不能按线性规律外推到目标对齐。跟随偏移的平滑、机身角速度和喷口俯仰各有输入,画面中的缓慢转动需要按这几层分别排查。

这组教学演算根据已读代码和指定初态计算,未调用原函数,也未采样 UE 录像。移植结果与原机制的符合程度由限定输入下的专门对照验证,教学表不计入验收案例。

飞行方向还要单独处理。对应飞行转向函数从当前速度构造朝向,从当前位置到运动目标构造期望朝向,完成方向混合后再乘标量速度。用位置直线插值替代这条方向链,即使端点相同,中途轨迹也会不同。当前调用的混合输入约 0.9,不应重新解释为“0.9 秒到达”。

机身水平转向、飞行速度方向和武器喷口方向因此需要分别记录。喷口俯仰修复采用明确的 UE 姿态输入,并没有修改模式 6 的水平转向规则。直接放宽开火角度阈值会改变攻击资格,并掩盖喷口方向缺少俯仰的问题。

运行截图 3:独立 TPS 激光场景约 8.133 秒。灰色目标仍可见,面板显示目标失效后的等待状态;该图与顶视图来自不同运行。
运行截图 3:独立 TPS 激光场景约 8.133 秒。灰色目标仍可见,面板显示目标失效后的等待状态;该图与顶视图来自不同运行。

三、跟随与接敌使用不同的空间目标

喷火和毒气需要接近敌人,不能始终停留在玩家肩侧等待目标走近。对应分支沿敌人到玩家的水平连线选择攻击站位,同时计算高度。

设敌人位置为 T,玩家位置为 O,水平距离为 Dxy,分类对应的站位半径为 R:

k = R / Dxy
Gx = Tx + (Ox − Tx) × k
Gy = Ty + (Oy − Ty) × k
Gz = Tz + (Oz − Tz) × k + height

这式在有效场景输入、水平距离足够大时使用。距离接近零或场景不可用的分支采用保护处理,不能直接除零。

图 6:喷射站位几何教学。半径约束 XY,Z 继续使用同一比例及高度项。
图 6:喷射站位几何教学。半径约束 XY,Z 继续使用同一比例及高度项。

未知分类使用三米半径,已恢复的其他分类对应四、八或十二米。分类来自目标查询结果,并非面板中的武器型号。验证球靶没有完整原分类;十二米半径的示例只解释站位几何,不用于判断敌人体型。

高度独立参与计算。三米表示水平半径,不是三维球面距离;Z 还包含玩家与敌人的高度差以及默认约 2.5 米的附加项。教学例子中,若玩家与敌人同高,站位位于敌人朝玩家方向三米、上方 2.5 米;实际飞行距离由当前位置到这个目标点决定。

站位生成后,喷射仍需通过无人机到敌人的距离、朝向与通道检查。例如,十五米内的目标仍可能因角度不满足而无法开火,朝向正确时也可能被障碍阻挡。这些条件分别检查,便于定位输入错误。

旧版本曾出现喷一次便停止的问题。水平机身方向被用作真实喷口方向,缺少俯仰输入,随后角度检查阻止继续发射。修复在 UE 中为喷口提供明确的俯仰适配,保留原距离与角度条件。这项修复接入了所需的姿态输入,原武器动画仍未恢复;当前占位机体不用于验证原版喷口姿态。

运行截图 4:顶视喷火场景约 1.567 秒。真实粒子、机体、敌人与玩家共同显示接敌站位;此时燃料已消耗,完整持续性由下方型号视频展示。
运行截图 4:顶视喷火场景约 1.567 秒。真实粒子、机体、敌人与玩家共同显示接敌站位;此时燃料已消耗,完整持续性由下方型号视频展示。

四、索敌需要资格、评分与持续状态

候选分数由多个条件相乘

无人机的选敌依据包含距离以外的条件。已恢复候选计算包含角度、距离、当前目标关系、目标分类查询,以及若干场景资格输入。部分字段的完整玩法含义尚未确认,下文只解释已验证的计算职责,不将其推定为具体敌人类型。

对于对应普通候选分支,角度权重在 0°、45°、180°处分别为 1、0.8、0.6,区间按已恢复曲线插值。距离权重在五、十、三十、四十米处分别为 1、0.9、0.8、0.6。多个权重与资格乘积共同构成分数:

Score = Eligibility × AngleWeight × DistanceWeight
        × CurrentTargetWeight × ClassificationFactors × HelperFactors

上式概括各因子的作用。完整实现仍保留逐项乘法次序、保护分支和辅助查询结果,不能仅凭该式重写全部流程。同样的最终乘积,不足以证明上游查询采用了同一数据。

图 7:候选计算示意。资格为零时候选失效;部分低权重只降低分数,并不直接禁止发射。
图 7:候选计算示意。资格为零时候选失效;部分低权重只降低分数,并不直接禁止发射。

普通分支中,当前目标关系的权重可以提高持续性,但后续 UE 稳定策略另有保持时间和切换阈值。二者不能合称为原版“锁敌时间”。距离权重与武器开火距离也有不同职责:某个候选仍有正分,不代表它此刻满足射击距离。

喷射分支使用另一组与持有者距离有关的曲线:五米以内为一,二十米降至 0.7,二十一米到零;退出相关曲线则在二十一至二十二米从零增到一。候选降低与退出请求并非同一条件,更不能直接解释成超过二十一米立即停靠背包。

距离、角度与分类共同约束开火

配置表中的三十米不是一个孤立的“攻击范围”。突击步枪和机枪对应分支先要求:五米内角度不超过十度,或者三十米内角度不超过四度;随后还要通过与目标分类查询有关的精细条件。

对应分支 基础距离与角度条件 还需满足的条件
激光 / 电击父行为 距离不超过 20 m,角度不超过 90° 有效目标及各自武器请求、节拍与服务条件
步枪 / 机枪父行为 5 m 内 ≤10°,或 30 m 内 ≤4° 分类查询决定进一步的角度与近距条件
喷火 距离不超过 15 m,角度不超过 30° 目标有效、发射与燃料条件
毒气 距离不超过 15 m,角度不超过 30° 还读取状态 42 / 43,不与喷火统一处理

当前验证适配为实弹分支提供分类查询结果为真的输入;其精细条件允许五度以内,或者十米内十五度以内。最终结果是两层条件的交集。例如教学距离十二米、角度三度可以通过这部分数值检查,十二米、六度不能通过基础条件;四米、八度可通过该分类输入下的近距分支。其他分类输入的精细条件更严,不能从这三个例子推广到全部敌种。

距离取无人机当前位置与目标之间的距离,与玩家到目标的距离、弹丸最大飞行距离分别定义。单位转换后的平方距离参与比较:十五米对应 225 m²,三十米对应 900 m²。若把平方距离字段直接当米数读取,会错误扩大范围。

这些例子只检查距离、角度和给定分类输入。目标死亡、通道遮挡、燃料耗尽或未到发射时刻,仍可阻止实际发射。视频中的近距摆位用于观察机制,不将验证场的六至九米目标布置当成原版武器范围。

两个候选的评分与切换示例

下面以实弹无人机的普通候选分支构造一组教学输入,单独观察角度、距离和当前目标权重。A 是当前目标,B 是新候选;两者的其他资格与曲线因子均设为一,不触发排除。对应输入中,两个分类许可项为真,降低权重与排除项为假,两项辅助角度输入均为 180°。这些是教学演算的指定输入,不是对真实敌人完整状态的采样。

B 固定为距离六米、评分角度零度,角度权重为一,距离权重为 0.98;作为新候选,当前目标关系权重为 0.7,所以:

ScoreB = 1 × 0.98 × 0.7 = 0.686

第一组中,A 在十二米、评分角度三十度。角度权重约 0.866667,距离权重 0.89,当前目标权重为一:

ScoreA = 0.866667 × 0.89 × 1 ≈ 0.771333

B 虽然更近,分数仍低于 A,不需要额外的 UE 保持策略就会继续选择 A。第二组让 A 的评分角度和距离改变,B 开始略微领先;这时才需要区分原候选选择与 UE 稳定策略。

教学组 A 的评分输入:角度 / 距离 A 得分,约 B 得分 B/A,约 当前目标仍满足保持资格时的结果
一 30° / 12 m 0.771333 0.686 0.889 A 得分更高
二 60° / 20 m 0.661111 0.686 1.038 B 略高,但未超过 1.35 倍,UE 继续保持 A
三 175° / 29 m 0.488963 0.686 1.403 保持期结束后,B 可达到切换优势条件
图 8:候选数值教学。比较得分、0.75 秒保持期与 1.35 倍切换条件,不把它们合并成一个权重。
图 8:候选数值教学。比较得分、0.75 秒保持期与 1.35 倍切换条件,不把它们合并成一个权重。

第三组仍需满足前提:A 存活、可见、分数为正,通过保持策略使用的距离与状态资格,并且经过四十五步保持期。当前实现为了只检查范围与状态,在这项保持资格检查中显式使用零角度;实际开火角度仍由行为阶段另算。因此第三组可以解释换目标判定,不能用来宣称 175° 时允许射击。

若 A 死亡、隐藏或资格失效,则不进入上述保持比较,直接使用重新扫描的结果。若 B 某项资格为零,即使距离更近,最终乘积也为零;不能把例子中的 0.686 当成固定优先级。三组是按公式构造的独立输入,不是同一段视频的三次测量。

毒气状态过滤不能推广给喷火

当前恢复的毒气分支在进入、候选计算和退出时读取状态 42、43。有效状态会影响资格或权重。喷火没有完全相同的排除规则,因此两者不能用一个定时换目标函数替代。

UE 适配用明确标签提供这些状态输入,已进行显式状态条件验证。但正式演示中的命中没有因此自动完成原版状态施加、持续与消退。这些状态的自然产生过程尚未补全,具体玩法含义也未确认,本文保留编号,不将其解释为中毒、混乱或免疫。

生命状态则是验证场已接通的反馈。目标归零后变灰、停止运动,退出碰撞与选敌;当前目标死亡会在本步触发扫描,不必等原计划的下次扫描时间。灰色球仍可见,是为了观察状态变化,不代表仍可命中。

UE 保持策略与原分数分开

为减少相近候选之间反复跳动,UE 增加保持条件:当前目标必须仍有效、可见、分数为正且通过对应距离和状态资格;在此前提下,先保持四十五个固定步,之后挑战者需要超过当前分数的 1.35 倍才切换。

当前目标有效时:
  elapsedSteps < 45 → 保持
  challengerScore ≤ currentScore × 1.35 → 保持
否则按当前候选结果选择

六十赫兹下,四十五步为 0.75 秒。这是 UE 策略,不改变原候选分数;目标死亡、隐藏、失效、分数归零或超出资格时,也不应被保持时间强行留住。

图 9:目标更新时序。有效目标的保持与失效后的立即重选走不同路径。
图 9:目标更新时序。有效目标的保持与失效后的立即重选走不同路径。

遮挡同样需要区分目标引用与新发射。当前通道受阻时立即阻止新的发射,短暂保留目标以便恢复或调整位置。普通保留为 0.35 秒;存在可达局部射击位置时可延长到 1.2 秒。因此,保留时长需要结合局部站位搜索的结果判断。

这些条件约束的是本次发射请求,已经生成的弹丸、粒子和电弧分支有各自的生命周期。停止新发射不等于把在途对象立即删除,也不构成绝对无友伤的保证。

五、移动避障与射击站位是两项检查

移动约束保持实体不穿过障碍

当前 UE 移动先形成目标速度,再限制单步速度变化。加速度上限使用 24 米每秒平方:

vNext = vOld + clampLength(vDesired − vOld, aMax × dt)

喷射接敌另用制动距离限制期望速度:

vBrake = sqrt(2 × aMax × distance)

制动式按当前距离提供上限,不能与原跟随速度公式混成同一条恢复结果。实际源码在 UE 厘米单位中计算,公式在此统一用米;每个平方项也要同步换算。

图 10:移动教学。期望速度、加速度限制和碰撞约束分别作用;六厘米到点请求仍先经过加速度限制。
图 10:移动教学。期望速度、加速度限制和碰撞约束分别作用;六厘米到点请求仍先经过加速度限制。

一次回归发现,到点范围内直接把最终速度清零,绕过了前面的加速度限制。修复改为在六厘米范围内将期望速度设为零,再进行同样的限幅。自由飞行沿保留的速度状态减速;发生碰撞时,强制停止仍由独立的空间约束处理。

空间检查使用半径三十二厘米的球体扫掠。低障碍可以产生不高于原目标两米的局部越障点;高墙或天花板继续阻挡。实际移动到碰撞处后,还会沿接触平面尝试滑动。已注册验证靶在导航查询中被忽略,不表示武器碰撞也忽略敌人。

这套处理属于局部避障。低墙测试的结论不覆盖初始穿透、复杂凹角及任意迷宫中的全局寻路。

移动可达性与射击通道

射击站位搜索围绕原跟随或接敌目标生成侧向与升高候选。侧向偏移为 ±1.5、±3 米,升高为零、一、两米;组合后检查距离资格、射线、带宽度的射击通道和移动可达性。

候选成本为当前位置到候选点的距离平方,加上升高量平方。它倾向于较近、较低的可行点,并优先复用已成功的偏移,避免左右摇摆。这些都是当前 UE 搜索策略,不属于原版全局导航恢复。

图 11:局部射击站位示意。中心射线、机体通道和射击通道分别检查,原目标持续有效时才搜索。
图 11:局部射击站位示意。中心射线、机体通道和射击通道分别检查,原目标持续有效时才搜索。

早期测试中,中心射线勉强擦过墙角,于是系统接受了一个位置。无人机实际停止时仍在六厘米到达误差内,射线再次受阻,移动完成也没有恢复开火。修复为未来射击通道增加二十厘米几何余量,并检查 Pawn 对象,避免把“单条射线通过”当成稳健的射击位置。

候选目的地到持有者不超过二十米,是这个 UE 局部搜索的限制,不能推广成所有原飞行状态的最大离玩家距离。关闭攻击、召回或目标死亡时,会清理当前战术位置;原喷射分支的持有者退出曲线仍单独执行。

六、六种武器的发射算法

突击步枪与机枪:逐发采样,再推进弹道

两种实弹无人机在同一发射接口中读取各自配置。突击步枪为 640 RPM、当前运行总量 30 发、初速 900 米每秒;机枪为 660 RPM、当前运行总量 45 发、初速 1000 米每秒。两者采用各自的配置,不能因为名称与上一篇的玩家手持武器相似,就直接复用那份参数。

interval = 60 / RPM
步枪:60 / 640 = 0.09375 s
机枪:60 / 660 ≈ 0.090909 s

当前核对的默认完整角宽分别为横向/纵向 2/2 mrad 和 16/16 mrad,模式为零;mrad 为毫弧度,公式输出的偏角以弧度表示。两个宽度进入相同形式的径向采样,但数值范围不同。每发推进索引随机状态两次,不推进另一份全局随机状态。

r = U²
φ = 2πV
θx = 0.0005 × WidthX × r × cosφ
θy = 0.0005 × WidthY × r × sinφ
图 12:逐发计算教学。射击时钟、两次随机采样与弹道状态分别保留;短曳光只是显示。
图 12:逐发计算教学。射击时钟、两次随机采样与弹道状态分别保留;短曳光只是显示。

在同一教学样本 U=0.5、V=0 下,步枪横向偏角为 0.00025 弧度,机枪为 0.002 弧度。这里只比较相同随机输入下的角偏差,不代表一次真实射击恰好取到这些随机数,也不能据此估算整个动态靶场的弹着范围。

发射方向乘以对应初速后,进入弹道积分与场景扫掠。散布、速度和碰撞分开保留,便于判断误差来自哪里。已核对的实验将动态修正保持为中性值,覆盖两种配置共 2304 个方向向量。校验脚本对每个向量的三个分量计算绝对差,再取所有分量中的最大值,报告约为 1.1921×10⁻⁷。这是无量纲方向分量差,不是弧度夹角或三维欧氏距离。脚本比较 C++ 文本输出与限定输入下的原机制执行记录,不是直接比较原始 float32 位模式;这不是完整动态姿态修正、原种子所有权或整个发射调用链逐位一致的证明。

画面也出现过误导:每步弹道用持久长线绘制,900 米每秒在六十赫兹下单步约十五米,连续段很容易看成激光。后续改为短暂、碰撞截断的曳光脉冲,当前源码将曳光脉冲长度限制为最多约八十厘米,显示寿命约五十毫秒;实弹命中点的调试显示为二十五毫秒。它属于 UE 表现适配,没有降低物理初速或延长射击间隔。

除发射日志外,还需检查编码后的曳光是否可辨认,以及发射间隔中是否保留不显示曳光的帧。媒体检查以最终成片为准。

型号视频 A:突击步枪,TPS 独立运行约 25.7 秒。完整保留首轮命中、30 发耗尽、返航补给与再次命中;等待时间未加速。

型号视频 B:机枪,顶视独立运行约 35.9 秒。当前运行总量 45 发及停靠后 2.5 秒装填采用该型号配置;与步枪不是同步双机位对比。

喷火与毒气:出生、燃料和接触分别计时

持续喷射时,燃料按时间边界扣除,而非每帧扣除。已恢复规则在首次发射,或年龄跨过 0.125 秒模余边界时扣除一单位:

Due = First
   or fmod(Age, 0.125) < fmod(Age − dt, 0.125)

每次调用最多扣一次;长步跨过多个周期也不会按跨越数量补扣。因此,把这式改写成一个累加器 while 循环会改变原逻辑。年龄的减法先按 float 进行,再进入双精度模运算,数值比较时还需保留这一顺序。

图 13:喷射节拍教学。首次扣除与模余回绕分别触发,燃料、粒子出生和接触查询不共享一个时钟。
图 13:喷射节拍教学。首次扣除与模余回绕分别触发,燃料、粒子出生和接触查询不共享一个时钟。

粒子出生使用三次随机数,依次形成初速、锥角与方位角,再按发射器年龄读取出生曲线。喷火初速范围约 28–35 米每秒,出生曲线从约 0.3667 在 0.0278 秒内升到一;毒气采用约 12–15 米每秒及另一份曲线。曲线的年龄属于发射器,并非每颗粒子都要重新等待这段时间。

喷火首帧速度范围因此约为 10.27–12.83 米每秒。毒气的曲线包含不同控制点,当前曲线求值还支持非线性分支,不能把全部资源统一按折线读取。

运动每步先更新粒子年龄,再读取阻尼曲线、缩放速度、应用轴向加速度并更新位置:

q = dampingCurve(age / life)
base = clamp((60 − damping × q) / 60, 0, 1)
v = v × base^(60dt)
vZ = vZ + acceleration × dt
pNext = p + v × dt

喷火与毒气的阻尼和轴向加速度并不相同。代码中的正负号需要结合坐标转换理解,不能只凭颜色与符号就认定完整浮力、扩散或气体物理已经恢复。

当前接入覆盖选定发射器的出生和运动数值,数量调度、部分寿命和场景碰撞仍有 UE 适配。原模型、完整火焰与毒气效果、自然状态施加和消退尚未全部接通。视频能展示持续喷射、燃料消耗和验证靶反馈,不能独立证明完整燃烧或毒气伤害系统。

型号视频 C:喷火,TPS 独立运行约 22.967 秒。观察连续粒子、燃料耗尽及补给后恢复;不验证完整燃烧伤害。

型号视频 D:毒气,顶视独立运行约 27.133 秒。展示当前发射器、燃料和验证靶反馈;没有证明原状态自然施加与消退。

电击:子分支先传播,再查询

电弧看起来可以画成一条连接所有敌人的折线,但机制中保留根节点、传播段、查询深度与分支历史。直接对所有目标做一次广度优先遍历,会改变碰撞时序和深度预算。

根节点可直接进入首次查询;非根子段先按速度传播,物理命中后再进行下一次查询。当前恢复的传播初速约三百米每秒,六十赫兹下约每步五米,最后一步按剩余距离截断。

ratio = (Chain + 1 + Bonus − Depth) / (Chain + 1 + Bonus)
range = ratio × 55 m × scale
step = min(range − travelled, |v| × dt)

若 step 不为正,进入结束路径,不允许负步长把段反向移动。分子分母来自无符号状态运算,公式只用于合法深度,不应任意外推到负预算。

图 14:电弧阶段教学。根查询与子段传播分别执行,深度在对应查询处推进。
图 14:电弧阶段教学。根查询与子段传播分别执行,深度在对应查询处推进。

查询前,非根节点增加深度,随后要求 Depth < Chain + Bonus。以 Chain=2、Bonus=0 为教学条件,根查询深度为零,后续查询到一时仍可继续,到二时停止。这条检查与范围比例的分母不同,不能因为范围尚有正值就再发出一跳。

首次最多接受一个分支,后续配置最多五个,但还要通过实际候选、距离、角度、历史和碰撞条件。分支上限不等于每次必定命中五个对象。

历史由各父节点维护,记录已接受的目标;新子节点保存 Previous,自己的历史重新清空。过滤还排除零 ID。全局 visited 会让另一分支拒绝本来允许的目标,因而改变传播树。

图 15:分支历史教学。兄弟节点分别持有历史,子节点不复制全局命中集合。
图 15:分支历史教学。兄弟节点分别持有历史,子节点不复制全局命中集合。

已有电弧数值对照覆盖 357 条输出记录,包含每步推进距离、累计传播距离和位置分量,以及 ID 过滤、深度推进、分支预算与子节点继承结果。脚本对每条记录的对应字段计算绝对差,再取全部字段中的最大值,报告约为 4.633×10⁻⁸。这里同样比较 C++ 文本输出与限定输入下的原机制执行记录;该指标混合了不同字段,不能直接称为电弧位置误差或方向误差,也不证明原始浮点位一致。该结果对应限定输入下的计算模块,不代表 UE 候选顺序、原组件槽位调度或完整物理服务一致。三靶专项检查通过真实传播与碰撞验证了深度限制;正式六型演示则另外检查自然发射请求,两项不能合写成同一次完整原运行时实验。

电击为无限弹药,本次不会通过耗尽触发返航补给。它的 12 RPM 对应五秒间隔,所以短观察窗内未连续发射并不自动是故障。检查第二目标时,也应给出足以覆盖一个发射周期的观察时间。

运行截图 5:顶视电击场景约 1.267 秒。画面显示当前放电线条和验证目标;后续分裂与深度结论取自专项数值和传播检查,不能只凭这帧证明。
运行截图 5:顶视电击场景约 1.267 秒。画面显示当前放电线条和验证目标;后续分裂与深度结论取自专项数值和传播检查,不能只凭这帧证明。

型号视频 E:电击,TPS 独立运行约 16.667 秒。展示真实放电与无敌人后的跟随;无限弹药,没有人为触发空弹返回背包。

激光:预热接通与热循环完成是两件事

激光已接入跟随、候选请求、转向、预热和光束表现。热量初始化、发射资格、返回和复位做过分段执行分析与显式实验,但自然升温、过热、返回补给和复位的完整运行闭环尚未全部接通。

本次正式演示关闭实验热循环,不人工制造过热。因此它用于展示当前激光攻击与无敌人后的跟随,不能标注为“自然过热返航已还原”。实验热量曲线可以辅助研究依赖,不能替代自然运行证据。

这一点也影响视频选取。四种有限弹药型号展示空弹返航;激光、电击应采用各自的无敌人跟随片段,不能为了让六段结尾一样,就统一触发召回。

型号视频 F:激光,TPS 独立运行约 8.333 秒。展示预热后的攻击与两靶死亡后的跟随;实验热循环关闭,不展示自然过热返航。

七、返航、停靠和补弹怎样连接

目标失效与缺弹返回

目标死亡或失效时,先处理重选;没有活敌人时停止新的发射,飞行目标回到玩家附近。有限弹药耗尽时,武器设置缺弹状态,再通过返回与停靠流程进入补给。

图 16:行为关系示意。目标失效通向重选或跟随,缺弹通向返航补给,手动召回单独列出。
图 16:行为关系示意。目标失效通向重选或跟随,缺弹通向返航补给,手动召回单独列出。

无敌人后的内部状态还可能保留搜索宽限。自然战斗视频中,验证靶五秒后恢复,可能在宽限结束前重新成为候选;短片不必已经显示某个指定跟随状态编号。应同时检查没有活目标、武器停射、没有接敌或缺弹请求、目标点指向玩家,以及实体确实跟随。

专项全失效测试会保持足够时间,再检查稳定跟随状态。它与自然战斗的不同输入要分别标注,不能把人为关闭目标的画面插进正常战斗,伪装成一次自然击杀过程。

运行截图 6:TPS 步枪场景约 15.5 秒,面板弹量为 0/30。此帧记录耗尽时刻,不等于已完成返航或停靠;连续过程见型号视频 A。
运行截图 6:TPS 步枪场景约 15.5 秒,面板弹量为 0/30。此帧记录耗尽时刻,不等于已完成返航或停靠;连续过程见型号视频 A。

停靠必须抵达真实挂点

返航时,路径可能经过局部避障点。到达临时路径点不等于抵达背包,完成判断必须使用真实停靠点距离。

最后的挂载插值也受碰撞约束。当前适配不仅检查四秒插值时间,还要求实际抵达挂点后才进入停靠。否则即使中途被墙阻挡,时间结束直接写入背包位置,仍然会造成明显瞬移。

运动计算、挂载相关函数的执行对照与 UE 场景绑定各有独立的验证范围。本文依据现有运行说明停靠过程,不据此宣布原动画、全部场景队列及持有者服务已经一一复现。

装填时间不包含整个返航过程

停靠后,有限弹药检查备用弹匣,再按当前配置等待装填,扣除一个备用匣并恢复容量。当前初始化六个备用匣;没有备用匣时不能无条件恢复弹量。

原记录里步枪匣内数量二十九、机枪四十四,与膛内标记共同形成 UI 总量三十和四十五。直接显示内部匣量会少一发。喷射燃料单独记录,不采用实弹的膛内计数规则。

图 17:弹药教学。匣内记录与显示总量分开,返航、挂载和装填分别计时。
图 17:弹药教学。匣内记录与显示总量分开,返航、挂载和装填分别计时。

机枪装填配置为 2.5 秒。当前步枪、喷火和毒气对应配置为零,并不表示从空弹到再次攻击耗时为零:它们仍要实际飞回、完成停靠与出动。30 fps 视频中可能看不到独立的背包等待帧,停靠与补给由运行记录确认,不额外增加等待时间来制造可见的停顿。

补给的原机制执行对照覆盖装填、备用匣扣除和属性发布的限定区间,外部库存及部分服务由测试接口提供;它没有覆盖整个函数的返回路径与自然动画请求。UE 以已确认规则连接真实返航,结论仍需保留这层服务适配。

运行截图 7:顶视机枪场景约 33.3 秒。弹量恢复为 45/45,备用匣已减少;这一帧显示补给结果,装填时长由同轮记录与连续视频确认。
运行截图 7:顶视机枪场景约 33.3 秒。弹量恢复为 45/45,备用匣已减少;这一帧显示补给结果,装填时长由同轮记录与连续视频确认。
运行截图 8:TPS 步枪场景约 23.733 秒。补给后弹量为 28/30,备用匣减少,目标再次扣血;与此前空弹截图属于同一运行。
运行截图 8:TPS 步枪场景约 23.733 秒。补给后弹量为 28/30,备用匣减少,目标再次扣血;与此前空弹截图属于同一运行。

同一次步枪运行中的攻击与补给

型号视频 A 记录了同一次 TPS 步枪运行中的选敌、射击与补给,全长 25.7 秒。表中的秒数取该次录制事件记录的相对时间,固定步编号用于核对相邻状态;它们不是机器墙钟时间。

同轮事件 时间或固定步 状态与数据变化
首次实际命中 1.367 s 命中累计 1,弹量 29/30
第一个目标死亡 固定步 238 目标 1 血量归零,保留可见,禁用碰撞
换到另一个目标 固定步 239 当前目标由 1 改为 0,先离开原攻击分支
两目标均失效 第二个在固定步 317 死亡 已有弹体反馈与之后扫描分别处理,缺弹尚未发生
第一个目标恢复 固定步 538 与死亡步相差 300,随后重新参与扫描
弹量耗尽 15.400 s 弹量 0,命中累计 30,进入缺弹返回路径
停靠并补满 22.733 s 停靠状态中恢复 30 发,备用匣从 6 减为 5
补给后实际命中 23.633 s 命中累计 31,弹量 29/30
图 18:真实步枪场景的事件时间线。首轮命中、空弹、补满和再次命中来自同一次正式录制。
图 18:真实步枪场景的事件时间线。首轮命中、空弹、补满和再次命中来自同一次正式录制;目标死亡与重选另用相邻固定步标明。

目标第一次死亡后,下一固定步就重新选择了另一目标;这个结果支持该场景下的失效重扫,不代表换靶后同一步立即再次开火。新方向仍要经过转向与资格判断。两目标都死亡的等待段也未触发缺弹返航:没有敌人与没有弹药在记录中分别出现。

恢复目标再进入候选之后,原有射击余额继续消耗,直到三十发用尽。空弹至补满约为 7.333 秒,包含返回请求的处理、真实飞行与停靠,不能把这段总时间当成配置装填时间。步枪当前装填配置为零;机枪另外有 2.5 秒,但不能用两段独立运行的总时长相减来推算该字段,因为它们的空弹位置、玩家运动和目标历史不同。

补满后约 0.9 秒出现新的实际命中,支持这次运行中的重新出动与攻击连接。它不是通用的“无人机启动延迟”;换目标、转向、场景通道和弹丸传播均可能贡献时间。整个录像期间没有额外重置型号、注入弹药或用手动召回代替空弹返回,因此这一段可以作为自然有限弹药循环的主要展示。

面板参数与状态反馈分开显示

验证面板既提供控制输入,也显示实际运行结果。型号切换、出动、召回、仅跟随、自动攻击改变不同条件;高度设置只调整跟随参考,不应被解释为改变喷射攻击半径、原武器射程或全局导航高度。

控件或显示 当前作用 不代表什么
型号选择 选择六型配置并重置、停靠 原版完整换装动画与库存完成
仅跟随 / 自动攻击 控制是否请求自主攻击 当前帧已经通过所有发射资格
跟随高度 UE 中 100–500 cm 的参考覆盖 修改原版姿态分支和攻击几何
移动优化 平滑、加减速及局部碰撞适配 原导航的全部行为
战斗优化 目标稳定与局部射击站位适配 重写原候选评分
当前状态、弹量与命中 读取相应运行状态和计数 所有显示变化都来自同一阶段

面板打开时还需要正确处理输入归属。当前 F9 在控件操作与角色控制间切换,F8 收起面板;这属于 UE 验证工具。控件获得键盘焦点后,模式切换仍需可用,否则测试者可能误以为角色或无人机停止响应。相关输入检查与六型武器机制检查分别记录。

八、视频与日志分别验证什么

本轮正式素材包含六型号、两视角,共十二次独立场景。顶视合集约 136.367 秒,TPS 合集约 135.567 秒,均为原生 1920×1080、三十帧每秒。不同视角来自独立进程,不是同一次运行的同步双机位。

视频 2:45° 顶视完整合集,便于观察玩家、跟随点、接敌站位和返航路径。独立运行的六段按章节拼接,全程原速;不据此推断全地图导航能力或实时帧率。

早期剪辑加速了双目标死亡后的等待和空弹返航,整幅画面中的玩家也一起加速,容易使人误读为移动状态不稳定。最终版本重新录制,保留所有源帧,只做章节连接。评价速度与返航时间时,应使用这份原速素材。

验收需要把画面与同次运行的记录对应起来。有限弹药检查实际首轮命中、空弹、缺弹请求、停靠、消耗备用匣、容量恢复及二次命中。只看累计发射数超过初始容量,不能排除测试过程中直接注入弹药;本次自然循环录制在首次出动后没有额外召回、重置或补弹指令。

无限类型检查真实击杀、活目标数归零、停止新攻击和实际跟随误差。生命测试中,目标恢复经过固定六十赫兹的三百步,即五秒。五秒是 UE 验证场的恢复设置,不是原敌人的复活规则。

所谓“限定输入下的原机制执行”,是为相关计算提供明确的配置、初始状态和场景查询结果,再记录输出;C++ 数值对照则将移植实现的对应结果与这些记录比较。测试接口提供的外部依赖,会在相关章节单独说明。

证据层 本文使用它说明什么 不据此推断什么
配置与限定输入下的原机制执行 已选分支中的参数、运算和状态关系 原 World 全部服务恢复
C++ 数值对照 指定输入下的下一步状态或结果误差 所有动态输入与调度一致
UE 专项运行 遮挡、移动、目标失效和补给是否接通 任意关卡、敌种和网络环境通过
最终视频 可见攻击、飞行、停靠和恢复过程 日志全部字段可由画面直接测得
编码与文件检查 源帧、分辨率、帧数和交付身份 算法机制已经正确

下表对应正文中的六段型号视频,时长采用交付文件的编码时长。视频用于观察连续过程,精确状态和数值结论仍与同轮记录核对。

型号视频 型号与视角 片长,约 主要观察内容
A 突击步枪 · TPS 25.700 s 命中、30 发耗尽、返航补给、再次命中
B 机枪 · 45° 顶视 35.900 s 45 发消耗、返航及装填后的恢复
C 喷火 · TPS 22.967 s 接敌、持续粒子、燃料消耗与补给
D 毒气 · 45° 顶视 27.133 s 独立喷射配置、燃料与验证靶反馈
E 电击 · TPS 16.667 s 放电、目标失效与无敌人后的跟随
F 激光 · TPS 8.333 s 预热后的光束攻击、停射与跟随

表中的顶视与 TPS 片段来自不同运行,不能用同一秒数作同步对比。有限弹药循环、无敌人跟随、局部障碍专项和数值演算也分别保留各自的输入范围。

验证球靶的 HP、各武器扣血量和恢复策略均来自测试配置。喷射命中统计可以来自粒子接触次数,不等同于独立伤害次数。灰色表示当前验证目标死亡,不能解释为完整原敌人死亡动画已移植。

当前缺口集中在自然激光热闭环、原模型与完整特效、自然状态施加和消退、动态修正、完整导航及原运行时服务。已有结果支持六型机制原型的指定路径,不支持“完整还原全部无人机战斗系统”。

后续工作将继续补全这些依赖和运行路径。炮台有独立的部署、转向、供弹和目标生命周期,会在后续文章中单独展开。

与整体原型计划及上一篇的关系

整体原型计划提出项目范围与推进方法,用于组织后续原型实现与体验验证。上一篇武器还原解释玩家如何观察、瞄准和发射;本篇继续处理无人机怎样自行选择目标、运动、攻击及补给。

这三篇分别承担项目目标、玩家武器机制和自主武器实现。无人机中的散布、弹道和喷射计算沿用已经分析的机制基础,但持有者关系、目标选择和补给是本篇新增的重点。它们目前仍在独立 Lyra 原型中验证,后续合入项目时还要检查输入、动画、伤害、资源和网络状态的衔接。

AI 协作复盘

AI 协助建立配置到计算模块的对应关系、整理原生执行结果、阅读 C++ 接入点,并编排图和录像。人工查看画面后发现了日志不易暴露的问题:无人机缺少水平移动、喷射无法持续、曳光看起来像连续光束,以及加速剪辑使玩家移动也突然变快。

这些问题分别来自目标点输入遗漏、姿态输入、曳光显示时长和媒体处理。修复时,计算结果、状态记录与最终成片需要分别核对。本文按当前资料保留各实验的输入和范围,机制解释、UE 优化及验证配置也分别标明。

发表评论

了解 AI Native Game Development 的更多信息

立即订阅以继续阅读并访问完整档案。

继续阅读