开放世界玩家载具驾驶 P11:追逐、逃逸与动态控制权——任务如何改变一辆车的驾驶约束

上一篇:开放世界玩家载具驾驶 P10:驾驶、瞄准与车内战斗——一辆车如何同时处理移动与交互

P10 讨论了驾驶、瞄准和车内武器交互如何在同一辆持续运行的车辆上并行存在。P11 进一步处理追逐场景:当任务要求车辆接近目标、阻截目标、保持距离或逃离威胁时,路线、驾驶策略和控制源如何在不重建车辆的前提下发生变化?

引言:追逐开始时,车辆运行时并没有被替换

追逐运行时总图

设想一辆车辆正在城市道路上巡航。它拥有当前路线、驾驶任务、速度状态、座位关系、车辆能力和交通约束。任务事件突然出现:一辆目标车辆需要被拦截,或玩家需要摆脱追捕,或一名乘员要求驾驶者保持接近距离以完成车内交互。

从玩家视角看,场景似乎只发生了一件事:车辆开始追逐,或者车辆开始逃逸。运行时需要并行处理多组变化:目标位置持续变化,原路线可能失效,接近距离需要重新估计,驾驶策略可能从保守巡航转为高风险操作,车内战斗可能继续存在,任务脚本还可能在某个时刻要求阻截、减速、驶离或等待。

如果系统把这些变化压缩成一个“追逐开关”,车辆就会迅速失去连续性。原有路线可能被直接清空,驾驶任务可能被销毁,车内武器可能失去执行入口,任务结束后也无法恢复原来的驾驶状态。另一种极端做法是让追逐任务直接写入油门、转向和刹车,这又会越过 P3 的命令契约、P6 的驾驶策略和 P8 的物理执行边界。

因此,P11 关注的重点并非“如何让车辆追上目标”,而是:

追逐任务如何改变路线、距离和行为约束,同时保留车辆原有的身份、执行栈和可恢复性。

追逐属于高层运行时模式。它可以重新解释目标、路线和策略,但车辆原有的运行时仍然负责路线、局部目标、执行器和物理反馈。逃逸遵循相同的组织原则,只是目标从缩短距离转为扩大距离、进入安全区域或维持脱离条件。

本篇只讨论任务侧的追逐、逃逸和动态控制权。P10 已经讨论车内瞄准与武器交互;P12 将讨论网络、回放、LOD 与玩家离开后的世界延续。这里不会把追逐写成物理控制器,也不会把任务脚本直接等同于最终驾驶命令。

一、追逐场景改变的不是车辆身份,而是运行时约束

生命周期轴与追逐姿态轴

一辆普通车辆进入追逐前已经拥有状态

车辆开始追逐之前,至少存在以下状态:

  • 当前车辆实体及其持久身份;
  • 驾驶者、乘员与座位关系;
  • 当前驾驶命令来源;
  • 正在执行的路线或局部目标;
  • 当前速度、方向、损伤和物理反馈;
  • 任务阶段与任务目标;
  • 车内交互、武器或表现层状态。

追逐任务的进入不应把这些状态全部归零。它首先需要判断哪些状态继续有效,哪些状态需要被暂时覆盖,哪些状态必须转换为追逐语义。

例如,原来的导航目标可能是“到达某个地点”,而追逐目标变成了“保持与目标车辆的相对距离”。路线服务仍然可以继续提供道路和路口信息,但路线持有者不再只围绕固定终点推进。驾驶策略也不再只依据道路速度限制,而需要同时考虑目标方向、目标速度、阻截机会、碰撞风险和任务许可。

追逐由此形成一组局部约束:

目标约束进入车辆执行

这里的“重解释”停留在任务与策略层。追逐任务提供目的和约束,车辆运行时再将其交给路线、策略、避让和执行器层处理。

追逐生命周期中可以存在多种当前姿态

源代码阅读中,不能把所有追逐都归结为“朝目标移动”。追逐任务通常需要在多种姿态之间切换:

  • 接近:当前距离过大,优先缩短间距;
  • 跟随:已经进入合理范围,维持相对位置;
  • 阻截:预测目标路线并尝试占据目标前方的可达位置;
  • 并行靠近:与目标保持侧向关系,为车内交互或观察提供条件;
  • 冲撞:在任务和策略允许时,以车辆接触改变目标状态;
  • 逃逸:目标从“被追逐对象”转为需要摆脱的威胁,车辆追求距离、安全区域或警戒解除。

脱离属于当前活跃姿态结束后的过渡结果,后续可能重新接入、搜索、等待或退出。

这些姿态不必对应完全独立的底层驾驶系统。较合理的职责划分是:高层追逐任务选择姿态,低层车辆任务执行接近、跟随或局部运动。

追逐生命周期需要独立的进入与退出条件

追逐模式不能只由一个布尔值控制。进入条件可能包括:目标仍然有效、任务仍然允许追逐、当前驾驶者仍然具有车辆控制资格、车辆具备继续运动的能力、目标与车辆之间存在可用的空间关系。退出条件也需要独立判断:目标失效、任务完成、车辆严重失控、目标不可达、追逐超时、驾驶者离车或任务切换。

因此,追逐生命周期至少需要维护:

  • 进入来源;
  • 当前目标及目标版本;
  • 当前姿态;
  • 目标距离与相对速度;
  • 当前控制源;
  • 允许的激进行为;
  • 退出原因;
  • 可恢复的上一状态。

追逐结束时,系统不能只清除一个模式标志。它还需要决定:原路线是否恢复,任务是否改写,驾驶策略是否回退,车内交互是否继续,车辆是否进入等待或安全状态。

从运行时角度看,应将两条轴分开维护:

  • 任务生命周期轴:进入 → 分析 → 活跃 → 等待、搜索或恢复 → 重新活跃 → 退出;
  • 当前追逐姿态轴:接近、跟随、阻截、侧向靠近、冲撞或逃逸;
  • 中断条件:目标丢失、路线不可用、局部不可达、车辆卡住、能力不足、控制源变化或任务撤销。

目标丢失和车辆卡住属于中断条件,不与阻截、冲撞处于同一层级。它们会使当前姿态暂停、降级或重新选择,而不必然终止追逐生命周期。

二、追逐任务的所有权与状态机

追逐任务的权限模型

以下“追逐父任务”“汽车追逐包装层”“目标级协调层”和“分析阶段”均为本文依据源码结构、创建关系、调用关系与清理路径所作的职责化称呼,并不等同于源码中的唯一类名或固定层级。能够直接观察到的创建、替换、写入和清理关系,与跨文件归纳出的职责,以及面向目标引擎的迁移设计,分别陈述。

追逐策略层负责监督与选择

GTA5 相关源码材料中,车辆追逐通常位于多个任务层和车辆运动包装层之间。可以观察到一种职责分布:上层追逐任务维护目标关系和当前高层姿态;载具专用包装层根据车辆类型、几何关系和能力条件,将该姿态转换为可执行的路线请求、局部目标或低层任务组合。

追逐任务不直接写入方向、油门或制动。它承担动态监督职责:

  • 观察目标和车辆状态;
  • 计算相对距离、方向和速度关系;
  • 判断当前姿态是否仍然适用;
  • 为底层任务选择新的目标点或距离约束;
  • 处理失败、卡住、过近、过远和退出条件;
  • 与车内战斗、脚本事件和车辆能力交换状态。

底层运动任务则负责更加具体的工作:道路跟随、局部接近、速度控制、车辆避让和最终执行。追逐层不能因为需要“更激进”就绕过这些机制。

追逐任务与车辆任务的关系

可以将一辆参与追逐的汽车抽象为以下链条:

追逐父任务组织车辆执行

父任务不一定直接创建所有子任务,也可能根据车辆类型和目标状态进入不同分支。汽车、船、直升机、飞机和潜艇可以共享追逐的目标语义,但各自的执行包装层不同。P11 只需要明确这个职责边界,不提前展开 P8 中各类执行器的控制律。

多辆追逐车辆不能各自独立选择位置

多车追逐还有一个单车系统没有的问题:多个追逐者同时接近同一个目标时,如果每辆车都选择“距离目标最近的点”,它们会聚集在同一位置,互相阻挡,甚至把目标和彼此都困住。

因此,可以从多追逐者共享目标、相对偏移和位置冲突问题中抽象出一层目标级协调职责。它不负责驾驶每辆车,而是维护:

  • 当前追逐者集合;
  • 哪辆车承担主要接近;
  • 哪些车辆处于侧翼或后方位置;
  • 每辆车期望的相对偏移;
  • 追逐者之间的角色轮换;
  • 目标变化后的重新分配。

这个协调层的输出仍然是相对位置、目标偏移或追逐姿态,不是油门、转向和刹车。它把多车关系压缩成每辆车可以消费的局部约束。

分析阶段是追逐运行时的策略中心

高层追逐任务通常包含开始、分析、接近、正常追逐、激进行为、回退和结束等阶段,而不是进入追逐后长期运行单一子任务。

其中最重要的是分析阶段。每次运行时更新,系统都需要重新确认目标关系、道路与空间、车辆能力和任务约束四组状态。它们共同决定当前可解释的追逐姿态,而不是直接生成底层驾驶控制量。

分析阶段的状态关系

分析阶段不应直接替代底层任务,而应选择下一种可解释的追逐姿态。

接近距离不是固定数值

追逐距离会随目标速度、道路曲率、车辆类型、任务策略和当前姿态变化。固定距离只适合非常简单的跟随场景,在开放世界交通中容易产生两种问题:距离过远时车辆无法形成压力,距离过近时车辆频繁碰撞或失去可控性。

追逐系统可以将理想距离拆成多个部分:

  • 基础追逐距离;
  • 目标速度带来的前向补偿;
  • 当前车辆制动能力带来的安全余量;
  • 路口和车道变化带来的几何余量;
  • 车内战斗或观察所需的侧向空间;
  • 任务指定的阻截或保持距离约束。

最终传递给车辆任务的可能只是一个期望偏移或局部目标。距离策略本身不应直接写入底层物理位置。

正常追逐与激进行为之间需要间隔

冲撞、阻截、急转和侧向并行等激进行为不能每帧都触发。高层追逐任务通常需要维护激进行为的间隔、失败次数、挫败度或最近一次行为结果。

这类机制解决的是行为节奏问题:

  • 激进行为被禁止时,回到正常跟随;
  • 行为刚刚失败时,不立即重复同一动作;
  • 长时间无法接近时,提高激进行为的选择概率;
  • 行为成功后,清除临时压力并重新评估距离;
  • 车辆受损或空间不足时,撤销激进行为资格。

这不是单纯的随机选择。它把任务状态、几何条件和车辆能力组合成一组有时间连续性的策略约束。

阻截不是把目标点放到目标当前位置

如果追逐者只追逐目标车辆当前坐标,车辆会不断追赶目标已经经过的位置。阻截需要使用目标速度、道路方向和可达性推断目标未来会经过的区域,再选择一个追逐车辆可能提前占据的位置。

这个位置还要经过道路和车辆能力过滤:目标点是否位于可行驶区域,追逐车辆是否能在合理时间到达,接近过程中是否会穿越不可用区域,抵达后是否仍然有足够的转向和制动空间。阻截因此属于策略层和路线/局部目标层的协作,不是一个简单的坐标加法。

冲撞是被约束的车辆交互

冲撞看似直接,实际上同时受到多种条件约束:

  • 当前车辆相对目标的速度和方向;
  • 目标车辆的损伤与任务状态;
  • 道路宽度和周围交通;
  • 追逐者是否具备足够的控制和恢复能力;
  • 任务是否允许改变目标状态;
  • 当前激进行为是否处于冷却或间隔期。

冲撞任务可以请求“形成接触机会”,但不能保证物理系统一定产生指定结果。接触事实、损伤事实和任务结果仍然由后续状态层分别确认。P9 负责损伤与失控恢复;P11 只讨论冲撞作为追逐策略如何被选择和撤销。

侧向靠近服务于多种交互目标

侧向靠近不只为了射击。它可能用于观察、喊话、护送、并行编队、阻止目标变道或为乘员交互提供空间。

侧向靠近任务需要同时维护:

  • 与目标的侧向偏移;
  • 与目标的纵向相对速度;
  • 车辆之间的碰撞余量;
  • 目标是否仍然处于可交互状态;
  • 乘员或车载武器是否仍具备交互资格。

因此,侧向靠近不能被简化成“追逐任务加一个偏移量”。它是一个具有自身进入、维持、失败和退出条件的局部姿态。

追逐的起点不只来自一种事件

开放世界中的追逐可能由多种来源触发:任务脚本指定目标,犯罪事件建立嫌疑关系,警察调度系统分配响应单位,目标车辆触发逃逸反应,或者某个已有任务将车辆转入追踪状态。这些来源的目标相似,但它们携带的约束并不相同。

脚本任务可能已经拥有明确的阶段、目标和结束条件;警察调度更关心资源分配、响应类型和警员角色;环境事件可能只有目标实体和一组反应参数;玩家触发的追逐则可能需要保留玩家当前驾驶命令。若所有来源都直接创建同一种追逐任务,任务上下文会在进入阶段被压平,后续就无法判断追逐为什么开始、谁可以结束、哪些行为被允许。

更稳定的入口需要先建立事件快照:

  • 事件来源;
  • 目标实体;
  • 目标关系,例如嫌疑人、护送对象或逃逸对象;
  • 任务阶段;
  • 允许的追逐姿态;
  • 是否允许车内武器交互;
  • 是否允许玩家保留局部控制;
  • 追逐结束后的接续任务。

追逐任务消费的是这组上下文,而不是直接读取某个全局“追逐中”标记。上下文可以随任务阶段更新,但每次更新都需要保留来源和版本,避免旧事件重新激活已结束的追逐。

警察响应链与车辆追逐不是同一层

警察场景尤其容易把调度、命令和车辆追逐混为一个系统。从相关源码的职责分布可以抽象出一种分层关系:警察调度侧产生订单或响应意图,警察任务侧解释当前订单,车辆追逐任务再负责具体的追踪姿态和底层车辆行为。

这条链可以抽象为:

事件与调度进入追逐行动

调度服务不需要知道每辆车当前采用哪种转向或避让方式;车辆追逐层也不应该重新实现警察订单的资源分配。中间的警察任务承担“当前警员如何解释订单”的职责,并在步行响应、车辆响应、搜索、战斗、等待、逮捕和追逐等分支之间选择;这些分支在本文中只用于说明调度、个体任务和车辆追逐并不处于同一层。

这种分层还解释了为什么同一目标可以同时拥有多个追逐者。调度层决定资源是否加入,个体任务决定该单位当前的响应姿态,本文所称目标级协调职责则负责避免所有单位都选择同一个局部位置。

驾驶者与乘员的追逐分流

车辆中的驾驶者和乘员并不共享完全相同的任务分支。驾驶者必须维持车辆运动、路线和追逐姿态;乘员可能负责瞄准、射击、观察或等待进入某个交互窗口。

当驾驶者失去资格、离车或被任务替换时,乘员任务也不能简单继续使用旧车辆关系。系统需要重新判断:

  • 是否有其他乘员可以成为驾驶者;
  • 车辆是否进入等待或停靠状态;
  • 乘员是否继续执行车内战斗;
  • 当前追逐是否转为步行、等待或结束;
  • 原有目标和路线是否仍然有效。

这是一组角色关系与车辆任务之间的交接,不是驾驶者字段的简单替换。P1 讨论座位关系和驾驶接管,P4 讨论控制源释放与恢复;P11 只关注追逐运行时如何消费这些关系变化。

三、逃逸:独立的目标关系与结束条件

逃逸与恢复路径

逃逸不是追逐的负号

把目标方向反过来并不足以构成逃逸。追逐的目标是缩小相对距离或占据有利位置,逃逸的目标可能是扩大距离、离开警戒区域、保持不可见、抵达安全点或等待任务条件解除。

逃逸任务需要重新解释多个上层目标:

  • 目标不再是追逐对象的当前位置;
  • 路线不再只追求最短到达,而要考虑暴露风险和脱离方向;
  • 驾驶策略可能提高风险容忍度,但不能忽略车辆能力;
  • 局部避让的权重可能改变;
  • 任务脚本可能允许短时偏离导航路线;
  • 目标消失不一定意味着逃逸成功。

逃逸因此仍然需要一个持续的状态判断,而不是一次性设置“逃跑”标记。

逃逸条件需要可观测、可恢复

逃逸系统至少需要区分:

  • 当前仍在威胁范围内;
  • 已暂时脱离视线;
  • 已达到安全距离;
  • 已抵达安全区域;
  • 任务要求继续保持低暴露;
  • 追踪者仍可通过其他信息源恢复目标;
  • 车辆已因损伤或阻挡进入恢复流程。

其中“目标暂时不可见”不等于“追逐已经结束”。目标服务、任务服务和追逐控制器需要各自维护事实,最后由任务规则决定是否改变状态。

逃逸路线可能主动保留不确定性

一个过于直接的逃逸路线会让追踪方容易预测。作为迁移模型,逃逸路线可以在多个候选目标之间选择,临时改变目的地,绕行高风险路口,或在车辆仍然可控的情况下延迟最终路线提交。原版是否采用候选安全点、风险字段或延迟路线提交,需要更多调用关系验证。

这不意味着路线系统负责策略。路线系统只提供候选道路和可执行路径;逃逸策略决定什么时候请求新路线、什么时候保留局部方向、什么时候将任务目标改为安全点。P5 的路线生命周期仍然是基础设施,P11 只是改变路线请求的来源和约束。

四、动态控制权与车内交互交接

父任务、载具包装层与执行器

追逐任务不会总是直接获得最高权限

在一辆正在运行的车辆上,可能同时存在玩家输入、AI 驾驶任务、任务脚本和恢复任务。P12 的回放路径可以复用同一追逐与命令契约,但不作为本篇的本地控制源并列讨论。追逐事件出现后,系统不能简单宣布“追逐任务优先级最高”,因为不同职责拥有不同范围:任务可以改变目标并提交路线请求,玩家仍然可以控制局部驾驶,AI 可以在玩家未接管时提交运动命令,恢复任务则可能在车辆失控时暂时限制输入。

更准确的模型应区分职责、请求资格、命令提交和状态有效性:

职责 主要维护者或确认者
追逐目标关系与当前姿态 追逐父任务
路线请求资格 追逐任务提交请求,P5 路线持有层维护生命周期
驾驶命令提交 当前有效来源,经 P4 仲裁并按 P3 契约提交
约束或否决资格 任务规则、交通、P7 几何、P9 能力和 P8 执行器在自身范围内确认
跨网络状态有效性 P12

追逐任务可以拥有追逐目标关系,并成为路线请求的临时来源;它不因此拥有 P5 的路线生命周期,也不自动成为驾驶命令来源。任务约束需要通过仲裁和命令契约限制玩家输入,不能直接修改物理结果。当前目标、路线和命令版本是否有效,也不等同于跨网络状态权威。

追逐中的玩家控制需要保留局部空间

如果任务完全覆盖玩家输入,玩家会感觉车辆只是播放任务动画;如果任务完全不干预玩家,追逐目标、路线和任务结果又无法保持一致。更稳定的方式是区分控制层级:

  • 任务控制目标与路线约束;
  • 玩家或 AI 提交局部驾驶意图;
  • 车辆策略根据风险和交通约束解释命令;
  • 执行器根据车辆能力产生运动;
  • 任务消费运动、距离和目标反馈。

例如任务可以要求“保持追逐目标有效”,但不指定每一帧的方向盘角度;也可以要求“到达阻截区域”,同时保留玩家在局部道路中的操控权。只有在剧情强制、驾驶者失去资格或恢复状态等明确条件下,任务才需要暂时关闭或限制玩家命令窗口。

动态控制权需要处理迟到请求

追逐状态变化往往跨越多个更新周期:目标查询先返回,路线搜索随后返回,底层执行器又在之后确认当前目标点是否可达。在此期间,玩家可能换座、任务可能结束、车辆可能受损,或者另一个控制源已经接管。

为显式表达源码中分散的有效性条件,本文在迁移模型中将追逐请求组织为带有上下文的结果:

  • 控制源;
  • 目标实体和目标版本;
  • 追逐状态或交互代次;
  • 车辆与驾驶者关系;
  • 路线请求序号;
  • 生成请求时的车辆能力快照。

提交前重新验证这些条件,可以拒绝已经过期的阻截点、旧路线或旧控制源命令。追逐系统的可靠性,取决于迟到请求能否被挡在新的状态边界之外。

车内战斗继续消费自己的状态

P10 已经说明,车内战斗拥有独立的交互意图、目标服务、武器资格和结果反馈。追逐进入后,这些状态不应被父任务粗暴清除。

追逐任务可以改变:

  • 目标车辆或目标实体;
  • 允许的攻击模式;
  • 追逐距离和侧向关系;
  • 车辆速度或路线约束;
  • 任务对误伤和攻击区域的限制。

但车内武器任务仍然需要自己判断座位、武器、目标、冷却、炮塔姿态和车辆能力。追逐层提供上下文,不直接替代交互执行层。

损伤状态可能改变追逐姿态

车辆受损后,追逐任务不能只读取一个整体健康值。P9 已确认的损伤状态可以转化为转向、制动和推进能力限制。对于具备独立车载武器部件模型的载具,还可能产生武器或炮塔能力受限;是否由原版独立维护,需要结合 P10 的部件状态调用点继续确认。

追逐策略需要依据这些能力重新选择姿态:

  • 仍具备接近能力时保持普通追逐;
  • 转向受限时放弃阻截,改为跟随或等待;
  • 速度不足时放弃冲撞,转为保持目标关系;
  • 武器关闭但车辆仍可行驶时继续追逐;
  • 车辆严重失控时退出追逐并进入恢复任务。

能力变化不应直接销毁追逐任务。任务需要决定是暂停、降级、改写目标,还是结束并将结果交回更高层事件系统。

脚本任务只提供事件与阶段约束

追逐事件常常来自任务脚本。脚本可以指定目标、允许行为、结束条件和阶段转换,但脚本不应绕过车辆运行时,直接修改每个子系统的内部状态。

一个更清晰的职责分布是:

  • 脚本提供事件、目标和阶段约束;
  • 追逐父任务解释这些约束;
  • 路线层提供可达路径;
  • 策略层选择驾驶姿态;
  • 执行器提交车辆运动;
  • 车内交互层提交瞄准和武器请求;
  • 结果事实反馈给任务与表现层。

这样,任务脚本可以要求“目标进入某个区域后结束追逐”,但不需要知道车辆当前由哪一个局部运动任务执行。

五、源码阅读结论:追逐是监督层,不是低层驾驶器

目标关系的三层结构

从状态和创建关系观察职责

阅读追逐相关代码时,不应只寻找名为 Chase 的类,然后把它当作完整驾驶系统。更可靠的入口是观察四类证据:

  1. 哪个对象保存追逐状态和目标关系;
  2. 哪个对象创建、替换和清理下层车辆任务;
  3. 哪个对象接收目标距离、速度和几何反馈;
  4. 哪个对象最终写入车辆控制量或物理输入。

在这组材料中,可以抽象出多层职责:

  • 车辆追逐父任务维护更宽的驾驶、攻击、跟随、等待和退出分支;
  • 汽车追逐包装层负责实现接近、正常追逐、阻截、冲撞、旋转干扰和侧向靠近等姿态的汽车专用解释;
  • 目标级协调职责维护多追逐者对同一目标的偏移分配;
  • 低层车辆任务维护道路跟随、局部接近和控制执行;
  • 车内战斗任务负责瞄准、开火、武器模式和乘员交互;
  • 车辆智能运行时提供目标、路线、能力和车辆状态的持续入口。

这些名称是公开文章中的职责化称呼,不代表源码中的唯一类名。源码结构、调用关系和运行时职责需要分开陈述。

汽车、船和飞行载具的追逐并不共享同一套控制律

追逐目标和控制姿态可以跨载具共享,但执行解释不同:

载具类型 共享的追逐语义 专用的执行解释
汽车 接近、跟随、阻截、冲撞 道路图、车道、转向、制动与车辆接触
接近、绕行、侧向压迫 水面路线、水动力、岸线与水域可达性
直升机 跟踪、盘旋、俯冲、脱离 三维目标、升力、姿态与高度约束
飞机 截获、跟踪、规避、脱离 飞行路径、转弯半径、速度与高度
潜艇 接近、搜索、脱离 水下路径、深度、可见性与水域限制

共享的是目标关系和任务阶段,不是运动控制方程。载具专用包装层负责把父任务已经选择的姿态转换为各载具类型可以理解的中间约束,再由类型专用执行器解释。

目标偏移、理想距离与可达位置

追逐中的“目标位置”至少有三种含义:目标实体当前的位置、追逐任务希望车辆占据的位置,以及低层执行器当前可以接近的位置。三者不能直接混用。

目标实体的位置用于描述世界事实;理想追逐位置由任务和策略根据相对速度、方向、目标姿态与队形关系计算;可达位置则需要经过道路、空间、车辆类型和即时障碍过滤。追逐包装层通常负责把前两者转换为可消费的局部目标,低层运动任务再根据自身约束判断是否能够执行。

这个区别可以解释许多常见现象:车辆看起来一直朝目标方向行驶,却没有直接撞向目标;多辆车辆围绕目标形成不同距离;目标突然转弯时追逐车辆先改变路线,再逐步调整局部方向;阻截动作失败后车辆回到普通跟随,而不是继续沿着已经失效的预测点行驶。

理想位置还需要考虑相对坐标系。对于目标车辆,目标前方、后方、左侧和右侧属于随目标朝向变化的局部方向,而不是固定的世界方向。目标级协调职责可以为不同车辆分配局部偏移,例如一辆车位于后方保持压力,另一辆车尝试侧向占位,第三辆车保持较远距离等待下一次进入。偏移仍需在目标状态和当前车辆状态有效时,才能转换为可执行位置。

目标预测不能替代目标事实

为了追逐移动目标,系统可能根据目标速度和方向预测未来位置。预测结果只是一项策略输入,不是新的目标事实。目标一旦改变速度、转向或路线,旧预测就可能失效;如果目标进入不可见区域,预测也不能证明目标仍然存在。

为显式表达源码中分散的有效性条件,本文在迁移模型中将预测位置组织为带有生成上下文的结果:

  • 预测所依据的目标版本;
  • 目标最后一次确认的位置和速度;
  • 预测时间范围;
  • 目标所在的道路或空间层;
  • 当前追逐者使用的路线和车辆能力;
  • 预测有效期。

提交局部目标时,需要重新检查预测上下文。如果目标版本已经变化,或者车辆已经跨越到新的道路关系,旧预测应当被拒绝或重新计算。这也是目标服务、路线服务和追逐策略需要分开的原因:目标事实负责回答“目标现在是什么状态”,预测策略负责回答“车辆可以怎样提前接近”。

多追逐者协调的核心是分配职责,不是分配控制量

目标级协调器不应把每辆车当成一台独立的自动驾驶器。它更适合维护追逐角色:主追逐者、侧翼追逐者、阻截候选、后方观察者或等待替补。角色变化后,协调器更新的是相对偏移、优先级和姿态许可,车辆自身仍然需要通过自己的路线、策略与执行器完成运动。

这种职责分配还需要处理追逐者的生命周期:

  • 新车辆加入时,不能立即抢占已经稳定的主追逐位置;
  • 主追逐者受损或被阻挡时,需要释放其角色;
  • 目标改变方向时,侧翼位置可能变成不可达;
  • 追逐者离开世界或切换任务时,需要注销成员关系;
  • 追逐结束时,协调器必须清理所有临时偏移。

如果协调器只保留一个“当前追逐车辆列表”,而不记录角色和偏移的有效期,多车追逐很容易在目标变化后继续使用旧队形。

追逐行为的结果必须回写为事实

追逐层提出冲撞、阻截或侧向靠近请求后,不能直接把请求当作成功。下层任务可能拒绝请求,车辆可能无法到达位置,物理系统可能产生不同的接触结果,目标也可能在执行前已经离开。

因此至少要区分以下几类事实:

  • 已提交追逐姿态:高层任务已经提出接近、跟随、阻截或冲撞意图;
  • 下层任务已接受:路线或车辆任务确认当前请求具备执行资格;
  • 车辆开始执行:执行器已经消费局部目标或控制约束;
  • 几何关系达到要求:车辆与目标之间的距离、方向或相对位置达到阶段条件;
  • 物理接触已经发生:物理系统确认碰撞、冲撞或其他接触事实;
  • 目标状态已经改变:目标的速度、位置、能力或任务状态发生了可观察变化;
  • 任务条件已经满足:追逐阶段获得了可以推进、切换或结束的结果。

这些事实之间存在时间差。追逐任务可以根据“开始执行”更新内部阶段,但只有目标、物理和任务结果分别确认后,才能决定是否进入下一阶段。把一个请求的返回值直接当成整条追逐链的最终结果,会让阻截、冲撞和逃逸在异步更新中产生错误的提前完成。

六、环境接缝、失败与诊断

迟到请求与结果事实
损伤、能力与控制反馈

追逐车辆不能脱离共享道路世界

追逐场景最容易诱发另一种错误:为了保证目标不丢失,让追逐车辆忽略红绿灯、车道、行人、路障和其他车辆。这样可以在短时演示中得到“追得上”的结果,却会破坏开放世界交通运行时。车辆的路线、道路优先级和局部避让仍然属于共享世界状态,追逐任务只能调整这些状态的权重和目标。

追逐车辆可能被允许:

  • 提高通过路口的紧迫度;
  • 缩短跟车距离;
  • 在任务允许时使用不同的车道选择;
  • 对目标方向的偏离给予更高容忍度;
  • 在阻截阶段提前请求目标前方的道路位置。

但这些变化仍需要经过交通和车辆能力过滤。信号相位、道路封闭和交通队列仍然作为世界事实存在。追逐策略可以在任务许可下降低对红灯或普通通行规则的服从成本,但不能把封闭道路、碰撞几何和车辆能力限制改写成可行空间。追逐层可以请求“尽快接近”,而不是直接命令车辆穿越不可用空间。

目标关系与道路关系需要保持分离

目标实体的位置通常是连续变化的,道路关系则由路网、车道、路口和区域数据解释。目标可能位于道路之外、横穿路口、驶入停车区域或短时脱离可追踪道路。追逐任务需要判断:继续以目标实体为中心追踪,还是先通过道路系统重新接入一个可行驶的局部目标。

如果把目标坐标直接作为车辆目的地,车辆可能尝试穿越建筑、逆向驶入车道或在目标已经离开后持续追向旧位置。更稳定的流程是:

目标事实变成可达追逐位置

目标服务提供实体事实,路线层提供道路解释,追逐策略决定采用当前目标、预测目标还是阻截位置。三层结果可能在同一帧内不同步,因此需要用版本和有效期保护提交阶段。

路口和交通密度会改变追逐姿态

在直路上,追逐者可能以保持距离为主;接近复杂路口时,阻截和冲撞的风险都会增加。交通密度升高后,侧向靠近可能比高速接近更危险,追逐策略可能暂时放弃激进行为,先保持目标关系并等待道路重新打开。

路口不是单纯的空间障碍。它还包含通行权、信号相位、车辆队列和可供阻截的车道结构。追逐任务可以要求路线层优先选择某条道路,但不能绕过路口所有权。P5 的导航生命周期和交通运行时提供可用路线,P11 通过目标与姿态约束消费它们。

追逐交通中的“被迫等待”与任务压力

车辆在追逐中停在红灯、车流或路障前,并不一定表示任务失败。运行时需要区分正常等待、局部阻塞和真正卡住。正常等待期间,追逐状态可以保持,目标事实继续更新,距离策略也可以根据目标变化进行调整。局部阻塞持续时间超过阈值后,系统再决定是否换道、改路线或进入恢复。

这也是追逐体验中压力感的来源之一:任务目标仍然有效,但底层世界暂时不允许直接推进。任务不会因为每个物理瞬间都无法前进就立刻接管车辆,而是通过策略和路线层寻找下一次可执行机会。

追逐失败必须能够解释

“没有追上目标”不是一个足够的诊断结果。调试系统需要能够区分:目标事实过期、路线搜索未返回、路线返回但不可达、局部目标被拒绝、车辆能力不足、控制源没有提交资格、追逐姿态被任务撤销,或目标已经完成其他状态转换。

可观察的追逐快照可以包括:

  • 当前追逐事件与目标版本;
  • 当前姿态及进入时间;
  • 理想距离、实际距离和相对速度;
  • 当前目标偏移和有效期;
  • 路线请求序号与局部目标版本;
  • 当前驾驶命令来源;
  • 车辆能力快照;
  • 最近一次姿态切换原因;
  • 最近一次下层任务接受或拒绝结果;
  • 退出原因和下一控制源。

这类快照不要求暴露源码中的私有类名。它记录的是责任和生命周期,能够帮助判断问题属于目标层、追逐策略、路线层、执行器还是物理反馈。

日志不应只记录最后状态

追逐问题往往发生在两个更新周期之间。若只记录“当前状态=追逐”,就无法知道车辆此前是否正在阻截、目标版本是否已经变化、旧路线是否迟到返回。更可靠的日志需要记录关键变更事件:

  • 目标确认、目标失效和目标重新发现;
  • 追逐姿态进入、拒绝和退出;
  • 路线请求创建、替换和清理;
  • 多追逐者加入、分配和注销;
  • 车辆能力下降和恢复;
  • 控制源释放、接管和回滚;
  • 任务结果提交与后续状态选择。

每个事件携带版本、来源和时间,才能重建连续的追逐过程。时间字段用于识别迟到请求和错误覆盖,而非单纯记录回放画面。

可观测性还能保护源码推断边界

当文章从源码结构抽象出“追逐父任务”“载具专用包装层”和“低层运动任务”时,验证重点应放在可观察职责上:谁创建子任务,谁修改目标偏移,谁处理失败,谁清理协调器关系,谁最终提交车辆命令。

如果只依赖类名,很容易把一个包装层误写成底层执行器,或把一个通用子任务误写成追逐专用控制器。运行时快照和调用关系能够帮助文章保持诚实分级:源码直接显示的行为、跨文件推断出的职责,以及目标引擎中的迁移设计分别陈述。

追逐层的验收问题

一个可复用的追逐运行时至少应该能够回答:

  • 目标是谁,目标状态何时失效;
  • 当前处于接近、跟随、阻截、冲撞、等待还是逃逸;
  • 谁维护追逐目标关系,谁获得路线请求资格;
  • 谁仍然拥有驾驶命令提交权;
  • 多辆追逐车如何避免争抢同一位置;
  • 目标消失时是等待、重搜、重规划还是结束;
  • 车辆受损后哪些追逐姿态仍然有效;
  • 车内武器如何与追逐姿态保持独立;
  • 追逐任务结束后哪些路线、策略和控制源可以恢复;
  • 迟到的目标、路线和执行请求如何被拒绝。

这些问题比“追逐速度是多少”更能说明系统是否具备开放世界运行时的连续性。

目标丢失、不可达与追逐失败

目标暂时丢失不等于任务失败

城市环境会频繁遮挡目标:目标车辆进入建筑背后,驶入隧道,穿过交叉路口,受到交通实体遮挡,或因流式加载暂时缺少完整空间信息。目标服务首先需要更新目标事实,而不是立即把追逐结果标记为失败。

目标丢失可以进入多个局部状态:

  • 短时保持最后有效位置;
  • 按目标速度预测搜索区域;
  • 继续沿当前道路追踪;
  • 请求新的路线或局部目标;
  • 进入搜索或盘旋状态;
  • 在超时后结束追逐。

不同任务对这些状态的处理不同。警察追捕可能允许短时搜索和重新发现;护送任务可能要求继续前往目标预计出现的位置;玩家任务可能直接显示目标丢失并等待重新确认。目标服务提供的是事实和有效性,任务层决定这些事实如何改变任务阶段。

目标不可达需要区分几何失败和任务失败

车辆无法抵达目标,可能是道路图暂时未加载、目标位于错误的交通层、目标进入水域或建筑内部、追逐车辆被障碍物卡住,也可能是目标本身已经不再允许被追逐。把这些情况统一为“无法追上”会让恢复路径过于粗糙。

可以将失败原因分为:

  1. 信息不可用:目标或道路数据暂时缺失,需要等待或重查;
  2. 路线不可用:当前路线被阻断,需要重规划或改变目标点;
  3. 局部执行失败:车辆卡住、转向受限或无法脱离障碍;
  4. 能力不足:车辆速度、转向或损伤状态不再支持当前追逐姿态;
  5. 任务不再允许:阶段切换、目标完成或脚本撤销追逐;
  6. 目标关系失效:目标离开世界、被替换或不再是当前事件对象。

前两类通常可以触发重查或重规划,第三类可能需要局部恢复,第四类需要降低策略要求,第五类需要结束或交接,第六类则需要重新建立目标关系。任务层保留失败原因,后续系统才能决定恢复动作。

卡住检测不是简单的低速判断

车辆低速可能是正常等待红灯、避让交通、准备转向或追逐目标暂时减速。只有低速并不能证明车辆卡住。更可靠的卡住判断需要组合:

  • 一段时间内的位置变化;
  • 当前速度和加速度;
  • 当前局部目标是否发生推进;
  • 前方和侧向碰撞探测;
  • 当前路线是否仍然可达;
  • 是否处于交通规则或任务允许的等待状态;
  • 车辆是否在重复提交同一方向请求。

当这些条件同时满足时,追逐层才需要考虑恢复:放宽局部目标、重新接入道路、切换到另一条接近姿态、撤销激进行为,或者回退到更高层任务。

动态参数与驾驶个性

追逐任务会修改风险权重,但不应重建驾驶个性

P6 已经将驾驶个性的核心计算抽象为一组按需策略查询职责。驾驶者默认值、任务阶段、失败记忆和缓存状态仍可能由调用方或上下文维护,不能据此断言原版不存在管理对象或跨帧缓存。追逐进入后,通常只需要改变策略查询的输入与有效期,不必重建驾驶者身份或整套驾驶状态。

例如追逐任务可以提高接近优先级、缩短可接受的距离范围、允许更激进的变道,或在目标即将消失时增加对局部风险的容忍度。策略计算器仍然只输出参数,最终是否执行仍然取决于路线、避让、车辆能力和物理接缝。

这一区分很重要:追逐状态是任务生命周期,驾驶个性是行为调制。前者可以暂时改变后者的输入,后者不应该反过来拥有任务结束或控制源迁移的权力。

激进驾驶需要能力门槛

追逐中的速度、接近距离和冲撞意图都需要经过车辆能力过滤。车辆受到损伤、轮胎失效、发动机受限或转向异常时,原本允许的激进行为可能应当被撤销。

可以将能力门槛写成消费关系:

追逐意图经过能力许可

能力查询不需要了解追逐任务的全部内部状态;追逐策略也不需要读取每个物理部件的详细字段。P9 的损伤层输出可消费的能力结果,P11 根据这些结果调整姿态。

追逐节奏来自状态持续时间

如果每个追逐决策都只看当前帧,车辆会频繁地在接近、阻截和跟随之间跳转。稳定的追逐任务需要为每种姿态保留最小持续时间、冷却窗口或失败记忆。

这些状态不必暴露为玩家可见的 UI,但会影响行为连续性:

  • 进入接近后,不能因一帧距离变化立即切换到冲撞;
  • 阻截失败后,需要等待新的几何条件;
  • 目标短时丢失时,保留搜索窗口;
  • 逃逸刚刚成功时,不能立即重新进入追逐;
  • 任务撤销时,所有临时姿态必须有明确的退出路径。

这也是为什么追逐任务更接近一个监督状态机,而不是一组每帧重新计算的独立函数。

七、任务结束与控制权回收

退出与清理

追逐结束的原因必须保留

追逐可以因为目标被捕获、目标逃脱、任务完成、目标失效、车辆失控、时间耗尽、脚本撤销或玩家控制权变化而结束。不同结束原因决定不同的后续关系:

  • 目标被拦截后,车辆可能进入停靠、逮捕或车内交互;
  • 目标逃脱后,任务可能转为搜索、报告或返回巡逻;
  • 车辆失控后,需要进入 P9 的恢复路径;
  • 玩家接管后,AI 追逐命令可能释放,但任务目标仍然保留;
  • 脚本撤销后,临时路线和策略约束必须清理;
  • 任务超时后,车辆可能恢复普通导航或等待状态。

如果所有结果都只写成“追逐结束”,后续系统无法知道应当恢复哪一组状态。结束原因因此是任务结果的一部分,而不是调试日志中的附加信息。

追逐临时覆盖了什么,结束时就需要恢复什么

追逐期间可能被临时修改的内容包括:

  • 当前目标关系;
  • 路线请求来源;
  • 局部目标生成规则;
  • 速度和距离策略;
  • 激进行为许可;
  • 车内武器交互约束;
  • 摄像机、音频和表现状态;
  • AI 或脚本的命令提交资格。

这些内容不一定都需要恢复为进入追逐前的精确值。有些状态在追逐期间已经产生了新的事实,例如车辆损伤、路线偏移、目标关系变化和任务阶段推进。恢复的目标是重新建立一个有效的运行时状态,而不是回滚世界时间。

玩家接管不会自动抹掉任务目标

当玩家在追逐期间进入车辆,P1 和 P4 的原则仍然适用:玩家获得当前阶段的命令提交权,但不必然成为任务目标的所有者。任务可以继续要求车辆追踪某个目标,玩家则在任务约束允许的范围内驾驶。

相反,当玩家离开追逐车辆时,AI 是否恢复也不能只由 Driver = null 决定。系统需要重新确认座位关系、当前任务、车辆能力和目标有效性,再决定是恢复 AI 追逐、进入安全等待、继续导航、交给脚本,还是结束任务。

追逐状态的清理顺序

一个可解释的退出顺序通常包括:

  1. 关闭新的追逐事件入口;
  2. 使当前追逐请求和迟到的局部目标失效;
  3. 释放追逐层对目标、路线和激进行为的临时提交资格;
  4. 通知车内交互和表现层任务结果;
  5. 让车辆运行时选择下一控制源或恢复任务;
  6. 清理目标级协调职责中的成员关系;
  7. 记录结束原因和最终状态。

这个顺序避免了一个常见错误:追逐父任务已经结束,旧的子任务却仍然持有目标或继续提交局部命令。

八、跨载具抽象、验证与迁移边界

多追逐者协调

不能只看类名判断追逐层级

公开文章中不直接使用原始私有类名,但源码阅读仍然需要保留足够细的机制粒度。判断一个追逐任务属于哪一层,可以从以下迹象入手:

  • 它是否保存目标、理想距离和目标偏移;
  • 它是否维护追逐状态机;
  • 它是否创建低层追逐、阻截、冲撞或跟随任务;
  • 它是否把车内战斗任务并列安装到车辆控制任务中;
  • 它是否对低层任务进行持续重写;
  • 它是否向共享协调器注册和注销;
  • 它是否在清理时恢复追逐模式标志。

如果一个对象主要选择姿态、重写子任务和维护追逐模式,它更可能是追逐监督层;如果它直接消费道路、局部目标和车辆控制量,它才接近低层执行层。两者都可能被命名为“追逐”,但职责不同。

汽车追逐父任务与子任务的组合

在汽车追逐材料中,可以观察到类似以下的组合关系:


车辆追逐父任务
    ├─ 追逐策略状态机
    ├─ 追逐模式辅助与标志
    ├─ 目标和距离分析
    ├─ 激进行为调度
    └─ 子任务组合
         ├─ 普通追逐
         ├─ 阻截
         ├─ 冲撞
         ├─ 旋转干扰
         ├─ 侧向靠近
         └─ 车内战斗

这里的子任务并不代表每个分支都拥有完整车辆控制能力。多数分支继续包裹更低层的车辆运动任务,车内战斗则作为并行消费者附着在驾驶任务旁边。这个组合方式正是 P10 与 P11 的连接点:战斗和追逐可以共享车辆状态,但分别提交本领域请求。

不同载具的追逐包装层

船只追逐材料呈现出另一种变化:父层可以在追逐、侧向绕行和等待之间选择;船只追逐子任务再把相对距离和偏移交给更低层水面运动任务。水域碰撞探测、岸线探测和水上可达性判断由船只侧包装层维护,不应被汽车追逐任务直接复用。

飞机追逐包装层则负责目标未来位置、拦截几何、速度匹配和有限规避,再把修改后的目标位置、巡航速度和转弯约束交给飞行前往任务。它不直接替代飞行控制律。

这两类材料共同支持一个更一般的结论:

追逐层共享的是目标关系、姿态和生命周期;载具专用包装层负责把这些语义转换成各自可达的运动约束。

迁移到目标引擎时保留什么

P11 不进入 UE5 的具体组件和 API 设计,但可以给出迁移边界。目标运行时至少需要保留:

  • 追逐事件与目标关系的独立入口;
  • 追逐父任务与载具专用包装层的分离;
  • 底层运动任务的可替换性;
  • 多追逐者的目标级协调;
  • 目标、路线、能力和命令的版本确认;
  • 追逐失败、降级、结束和恢复的不同出口。

不要把追逐实现成一个车辆组件中的巨型更新函数。那样会把任务阶段、道路路径、策略参数、避让结果、物理反馈、车内战斗和网络状态挤在同一处,最终无法判断哪个系统有权撤销哪个请求。

更稳妥的迁移顺序是:先建立目标关系和追逐状态,再接入路线重规划,然后增加接近与跟随姿态,最后接入阻截、冲撞、车内战斗和异常恢复。每一步都要能解释目标失效、车辆受损、控制源变化和任务结束。

P11 的验证场景

单车追逐

验证车辆从普通导航进入追逐,目标关系建立后,路线和局部目标是否切换;追逐结束后,原有控制源和路线是否按结束原因恢复。

多车追逐

验证多辆车辆共同追逐同一目标时,是否形成不同相对位置;一辆车被阻挡或退出后,协调层是否释放其位置并重新分配剩余追逐者。

目标短时丢失

验证目标被建筑或交通遮挡时,车辆是否进入搜索或保持状态,而不是立即结束;超时后是否依据任务规则重新规划或结束。

目标不可达

分别测试道路未加载、目标进入错误区域、车辆被障碍物卡住和车辆能力不足。验证每一种原因是否进入不同的恢复出口。

车内战斗并行

车辆持续追逐时,乘员保持瞄准或开火;追逐改变距离和方向后,车内武器是否重新确认目标和执行资格;武器失败是否只影响交互分支,不停止整辆车。

车辆损伤

碰撞后转向能力下降、速度受限或独立武器部件受限。验证追逐层是否降低姿态要求、放弃冲撞或进入恢复,而不是继续提交已经不可执行的动作。

玩家接管与离车

玩家在追逐过程中接管车辆,验证任务目标是否保留、AI 命令是否释放、玩家输入是否进入当前命令仲裁;玩家离车后,验证 AI、脚本或等待状态是否依据关系和任务恢复。

迟到请求

在路线搜索、目标查询和追逐状态切换之间制造延迟,确认旧目标点、旧路线和旧控制源请求不能覆盖新状态。

这些验证场景的重点是:每一次状态变化都有明确所有者,每一个失败都有可解释出口,每一个临时控制都能够被回收;车辆是否最终追上目标只是其中一个结果。

AI 协作复盘

本篇中,AI 的作用主要是整理跨文件的追逐任务、载具包装层、路线请求和车内交互关系,并将“姿态、生命周期、失败原因、命令提交资格”等容易混在一起的状态维度显式分开。初稿中最容易出现的误判,是把追逐父任务、载具专用包装层和低层运动任务画成固定串行层级,或把目标关系、路线请求资格和命令提交权统称为控制权。

人工复核仍然必须回到创建、写入、消费和清理路径:谁创建低层任务,谁修改目标偏移,谁确认请求结果,谁撤销迟到请求,谁在结束时清理临时关系。多追逐者协调和警察响应链中的部分职责属于跨文件抽象,仍应以调用关系和状态字段继续核验,不能仅凭职责名称升级为已确认的独立类或服务。

案例一:普通导航途中接到追逐事件

车辆原本沿导航路线驶向固定目的地。事件系统确认目标后,追逐任务建立目标关系,并请求路线层改用目标相关的道路解释。原导航任务不一定立即销毁:它可能被暂停、保存为恢复候选,或仅释放当前目标约束。追逐任务随后根据目标速度和道路关系选择接近姿态。

此时至少有三种状态同时变化:目标来源从固定地点变为实体关系,路线请求来源从导航任务变为追逐任务,驾驶策略从普通巡航变为追逐风险模型。车辆身份、座位关系、损伤状态和物理执行器并未因此重建。若目标在几秒后失效,系统可以根据任务结果选择恢复原导航、进入搜索,或结束当前事件。

案例二:追逐过程中目标突然转向

目标车辆在路口改变方向,原有预测位置和局部目标同时失效。追逐层首先更新目标事实,再判断当前追逐姿态是否仍然成立。如果原来的阻截位置已经不可达,任务需要撤销该局部请求,重新选择跟随或接近;如果道路服务返回新的候选路线,则路线持有层更新路线槽,局部跟随层再生成新的局部目标。

这个过程中,车辆可能沿旧方向继续移动一小段时间。这通常表示旧命令仍在有效期内,车辆会继续消费它,直到新的目标或路线获得确认。策略层可以对新的局部目标做平滑过渡以避免视觉上的突然反向,但平滑不能延长已经失效的目标关系。

案例三:追逐者在冲撞后失去转向能力

碰撞事实由物理系统产生,损伤层将其转换为转向能力受限。追逐任务收到能力变化后,不能继续把冲撞姿态当作有效目标。它可以选择保持距离、继续沿道路追踪、等待恢复,或将任务结果交给上层响应系统。

车内武器也可能同时受到影响,但其结果由 P10 的交互资格链独立确认。车辆仍然可以移动,不代表武器仍然可发射;武器暂时失效,也不代表追逐任务必须结束。只有当车辆运动资格、目标关系或任务阶段无法继续时,追逐才进入退出流程。

这三个案例共同说明,追逐不是一个从普通车辆切换到特殊车辆的离散动作,而是一组跨多个更新时间的关系变化。每个变化都需要有来源、有效期、消费者和恢复出口。

P11 与前后篇的边界

P10 关注驾驶与车内战斗的并行消费:驾驶维持车辆运动,乘员和武器任务提交交互请求,目标服务和执行器分别确认瞄准与发射结果。P11 在此基础上增加任务级的目标变化和追逐姿态,但不重新讨论武器生命周期。

P11 也不负责 P12 的世界延续。网络权威、回放驱动、LOD 切换和玩家离开后的实体重建,会影响追逐状态是否能够继续,但它们属于车辆跨时间和跨表现层的连续性问题。这里仅保留控制源交接、状态版本和任务恢复所需的接口边界。

P6 的驾驶个性为追逐提供风险参数,P7 的局部避让处理短时间空间冲突,P8 的执行器把可接受的命令解释为车辆运动,P9 的损伤和失控系统产生能力限制。P11 将这些结果组织到追逐任务中,但不重复实现它们。

可以用一条职责链概括前后关系:

追逐运行时完整闭环

这条链没有一个单独的“追逐控制器”拥有全部状态。追逐任务的价值在于组织关系、选择姿态并回收临时约束,而不是把其他运行时合并进自身。

结语:追逐改变的是约束,不是车辆的身份

开放世界中的追逐之所以复杂,不是因为车辆需要更快地移动,而是因为任务在运行过程中持续改变车辆对目标、路线、距离、风险和控制源的解释。

车辆仍然是一辆持续存在的车辆。它继续拥有座位、损伤、路线、执行器、物理状态和车内交互。追逐任务只是暂时成为目标关系和策略约束的组织者:它观察目标,选择姿态,协调多车,要求路线层重规划,并在失败、受损、脱离或完成时回收自己的控制范围。

逃逸也是同一套原则的反向应用。车辆不再追求接近,而是追求脱离;路线不再只服务于固定终点,而是服务于安全距离、警戒解除或任务目标。无论追逐还是逃逸,系统都需要保留状态连续性,并让每个控制源只提交自己职责范围内的请求。

追逐系统的核心,不是让车辆追上目标,而是在目标、路线、策略、交互和控制源持续变化时,仍然让车辆知道自己正在执行什么。

P10 解决了车内战斗如何与驾驶并行;P11 进一步说明任务如何在不销毁车辆运行时的情况下重写驾驶约束。若继续展开后续篇章,将只处理追逐结束后的警戒变化与事件反馈;目标丢失、任务结束和控制权恢复已在本文覆盖,P12 则负责网络、回放、LOD 与世界延续。

发表评论

了解 AI Native Game Development 的更多信息

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

继续阅读