GenericAISystem 常见问题

GAIS_Cover
YuewuDev

作者

YuewuDev

创建时间: 2026年10月12日更新时间: 2026年10月12日

目录

GenericAISystem 常见问题

回答 GenericAISystem 接入、配置、扩展和排错阶段最容易误解的问题。

文档为什么拆成核心功能、操作、参数和扩展?

GAIS 的配置面比较大。如果每个功能页都列参数,会造成重复和漂移。现在核心功能页讲边界,操作页讲任务,参数页集中查字段,扩展页集中查二开入口。

我应该从哪个类开始扩展命令?

先从 UGAIS_CommandDefinition 开始。需要同一命令多个变体时用 UGAIS_MultiVariantCommandDefinition;只有 Tactical Assignment 产出 GAIS.CommandIntent.* 这类战术语义时,才需要配置 Unit 的 CommandIntentMappings 或实现 IGAIS_CommandIntentResolver。

Tactical Assignment 是命令系统的必经入口吗?

不是。玩家输入、UI、脚本和普通 AI 都可以直接构造具体命令并交给 CommandSystem。Tactical Assignment 适合 AI 需要自动判断“谁去对哪个目标承担哪类战术任务”时使用,它产出 Command Intent,再由 Unit 或 resolver 解析成具体命令。

Stack 和 Queue 为什么都需要?

Stack 解决控制权:当前是 Unit 自己的 AI、小队行为,还是顶层 Command 覆盖。Queue 解决执行序列:一个已经决定的行为如何拆成可追加、可替换、可等待完成的任务。复杂项目里,两者分开能避免把所有分支塞进同一颗 StateTree。

为什么 Tactical Assignment 有候选但不下发命令?

常见原因是 IntentTag 无法解析为命令、Filter 过严、命令的 CanObey/IsValidTarget 失败,或 Allocator 因目标容量拒绝。先看 战术分配系统,再按 排错流程 排查。

Movement Intent 会直接移动单位吗?

不会。它是小队生成的建议移动状态。真正写入 CharacterMovement、Mover、GMS 或自定义移动系统,需要 UGAIS_UnitMovementIntentDriver 或项目侧消费逻辑。

我已有队伍系统,还需要 TeamAgent 吗?

不一定。项目已有真源时,优先自定义 UGAIS_ProjectPolicy,让 GAIS 查询项目队伍系统。TeamAgent 适合项目没有现成队伍系统,或希望 GAIS 提供真源的场景。

为什么 Shipping 构建没有 slot-score 解释?

slot assignment 诊断受 GAIS_SQUAD_SLOT_ASSIGNMENT_WITH_DIAGNOSTICS 控制,Shipping/Test 中关闭是预期行为。公开文档可以说明诊断含义,但不应要求 Shipping 暴露这些调试结构。

为什么客户端调用 Server... 后没有变化?

先检查网络所有权。CommandSystem、SquadComponent 或 FormationComponent 所在 Actor 需要由调用客户端拥有,或存在支持调用的 Owner 链。对服务端/AI 拥有的 Actor,应从客户端 PlayerController 发项目 RPC,再由服务端验证授权并调用 GAIS 权威入口。