用途
该技能用于指导 Godot 4.x 项目中寻路与移动意图 AI 的实现,典型场景包括 RTS 单位选择与指挥、编队移动、目标获取与追击、战斗状态以及人群局部避障。其核心主张是把寻路、移动、选择、指令、瞄准、战斗和局部避障当作独立系统,通过明确接口交接,而不是混在一个脚本里。
主要能力
资料给出的能力覆盖:
- 检查 project.godot 的 Godot 特性/版本标签,并在有兼容可执行文件时确认运行时版本。
- 检查导航区域、多边形、TileSet 导航数据、链接、障碍、地图、层以及现有 NavigationAgent2D 设置。
- 检查单位根节点、碰撞形状、队伍、组/注册表、选择 UI、输入动作、摄像机变换、战斗 API 与暂停行为。
- 搜索直接写入位置、move_and_slide()、目标更新、物理查询和导航服务器调用,识别当前由哪个脚本负责移动。
- 保留现有场景继承与命令接口;在项目支持时,新碰撞单位优先采用 CharacterBody2D 加 NavigationAgent2D。
- 区分以下模型:导航地图描述可通行多边形与链接;NavigationAgent2D 请求并推进路径但不移动父节点;CharacterBody2D 负责碰撞感知移动与最终速度;静态几何体归入烘焙或瓦片提供的导航数据;避障只修改期望速度,不改变路径也不理解物理碰撞;选择决定命令接收者,命令设定意图,AI 执行意图;战斗射程、视线、冷却与队伍规则不属于寻路。
- 严格网格移动或低成本网格代价用 AStarGrid2D;连续多边形可行走空间用导航地图与代理。
使用方式
资料给出的实施流程为:
- 定义移动约束:单位半径、速度、停止距离、合法地形、静态/动态障碍与预期单位数量。
- 先构建一张有效地图:用 NavigationPolygon 编写 NavigationRegion2D,或使用已检查的 TileSet 导航数据;在加入 AI 前验证调试几何体。
- 等待同步:导航服务器变更通常要到后续物理更新才可用,不要假设 _ready() 中查询的路径有效。
- 实现一个单位和一个静态目的地:每个物理 tick 调用一次 get_next_path_position(),直到导航结束。
- 添加明确指令:移动指令清除攻击意图;攻击指令拥有有效敌对目标;停止/取消清除两者。
- 在 UI 之后添加选择:使用 _unhandled_input() 或等价事件路由,避免游戏逻辑吞掉 Control 处理的点击。
- 添加目标/战斗状态:按计时器或注册表事件获取目标,节流重寻路追击,进入射程后停止,按游戏时间冷却攻击,目标离开或死亡时安全恢复。
- 仅在需要处启用避障:连接 velocity_computed,提交期望速度,并通过物理体应用返回的安全速度。
- 规模测试:验证不可达目标、窄通道、对向流、编队、目标死亡、暂停与最大预期人群。
文档还给出指令与 AI 规则:命令使用全局位置;设计允许时把地面点击投影到合法目的地,否则明显拒绝不可达命令;移动目标仅在移动超过阈值或重寻路间隔过去后更新路径,避免每帧赋值 target_position 造成路径抖动;选中单位保存在带类型的集合中并移除失效/释放条目;多单位移动分配不同编队槽位而非同一坐标;接受攻击命令时与造成伤害前都验证队伍与目标存活;攻击节奏与扫描使用游戏 delta 或 Timer;用获取/脱离迟滞避免目标在单一半径处反复切换;按计时器扫描或维护注册表,不要每帧为每个单位搜索整个场景。
避障规则包括:avoidance_enabled 有成本,只为人群中活跃移动者启用;代理 max_speed 至少等于提交的期望速度;radius 仅描述避障尺寸,路径间隙来自导航几何与烘焙设置,不同体型可能需要不同地图;从默认值向下调整 neighbor_distance、max_neighbors 与时间视野;避障层/掩码独立于物理与导航层;通过 CharacterBody2D.move_and_slide() 回传安全速度,让物理成为最终屏障;RVO 可能把单位推离路径甚至推出可导航多边形,需保持合理的 path_max_distance 并测试地图边界。
适用场景
适合 Godot 4.x 中需要 RTS 式单位选择与指挥、编队移动、目标获取与追击、战斗状态、人群避障的项目,以及需要排查单位不移动、抖动、切角、避障返回零速度、点击穿透 UI、目标死亡崩溃、人群停滞等问题的开发场景。
限制
资料未提供该技能的具体安装方式、依赖版本范围、收费或价格信息、性能基准数据与支持的平台列表,这些内容暂未提供。文档中的规则属于实现指导,不构成对特定项目可直接套用的保证;实际效果需按文档的验证门自行测试。