主题
GameCore.AISystem
AIThinkTree 仅服务端
命名空间 GameCore.AISystem
csharp
public class AIThinkTree : TagComponent, IGameObject<GameDataAIThinkTree>, IGameObject, IThinkerStaggered构造函数
AIThinkTree 仅服务端
csharp
protected internal AIThinkTree(IGameLink<GameDataAIThinkTree> link, Entity host)属性
IsEnabled 仅服务端
csharp
public bool IsEnabled { get; }Gets whether the AI is currently enabled (not disabled by any reason)
IsUserDisabled 仅服务端
csharp
public bool IsUserDisabled { get; }Gets whether the AI is disabled by user
IsFollowDisabled 仅服务端
csharp
public bool IsFollowDisabled { get; }Gets whether the AI is temporarily disabled by Follow mode
IsDeathDisabled 仅服务端
csharp
public bool IsDeathDisabled { get; }Gets whether the AI is disabled due to death
CombatState 仅服务端
csharp
public CombatState CombatState { get; set; }RetreatPoint 仅服务端
csharp
public ScenePoint? RetreatPoint { get; }WaveAI 仅服务端
csharp
public WaveAI? WaveAI { get; }WaveCache 仅服务端
csharp
public GameDataWaveAI WaveCache { get; }Walkable 仅服务端
csharp
public Walkable? Walkable { get; set; }Attack 仅服务端
csharp
public AbilityExecute? Attack { get; }ScanRange 仅服务端
csharp
public float ScanRange { get; }FocusTarget 仅服务端
csharp
public Entity? FocusTarget { get; set; }The target that the AI is focusing on. Persist during the combat.
ScanTargetThisTick 仅服务端
csharp
public Entity? ScanTargetThisTick { get; set; }The target that the AI scanned this tick. Reset every tick.
DefaultTarget 仅服务端
csharp
public Entity? DefaultTarget { get; }DefaultApproachRange 仅服务端
csharp
public float DefaultApproachRange { get; }LeashCenter 仅服务端
csharp
public ITarget? LeashCenter { get; }Leash 仅服务端
csharp
public float Leash { get; }Link 仅服务端
csharp
public IGameLink<GameDataAIThinkTree> Link { get; }Cache 仅服务端
csharp
public GameDataAIThinkTree Cache { get; }StaggeredCount 仅服务端
csharp
public int StaggeredCount { get; }方法
AddDefaultAI 仅服务端
csharp
public static AIThinkTree? AddDefaultAI(Unit unit)DisposeManaged 仅服务端
csharp
protected override void DisposeManaged()Enable 仅服务端
csharp
public void Enable()Enable AI thinking (user control)
Disable 仅服务端
csharp
public void Disable()Disable AI thinking (user control)
EnterCombatInit 仅服务端
csharp
public void EnterCombatInit()CombatClearUp 仅服务端
csharp
public void CombatClearUp()CombatInitThisTick 仅服务端
csharp
public void CombatInitThisTick()ClearUpAIOrders 仅服务端
csharp
public void ClearUpAIOrders(bool includeUnInterruptible = false)ClearUpAcquiredAIOrders 仅服务端
csharp
public void ClearUpAcquiredAIOrders()Scan 仅服务端
csharp
public Entity? Scan(float? rangeOverride = null, bool? ignoreLeash = false)MoveTo 仅服务端
csharp
public CmdResult MoveTo(Entity target, float? range = null)MoveToPosition 仅服务端
csharp
public CmdResult MoveToPosition(ScenePoint position)AttackTarget 仅服务端
csharp
public CmdResult AttackTarget(Entity target)AttackOrMoveTo 仅服务端
csharp
public CmdResult AttackOrMoveTo(Entity target)IsCasting 仅服务端
csharp
public bool IsCasting()判断AI单位是否正在施法中,用于AI行为决策。
返回: 如果单位正在施法则返回true,否则返回false。
备注
施法判断标准: 只考虑非自动获取的指令(忽略自动施法和连续施法) 指令阶段必须达到Preswing或更后阶段 不包含Approach和WaitForCooldown阶段 设计原理: Approach阶段:单位仍在移动,可以被其他行为打断,不算真正的"施法" WaitForCooldown阶段:单位在等待技能冷却,此时AI可以进行其他决策(如移动、观察) Preswing及之后:单位已开始施法动作,应该专注完成当前技能,避免AI行为冲突 注意:当前执行顺序为 Approach → WaitForCooldown → Preswing → Cast → Channel → Backswing
CanCast 仅服务端
csharp
public CmdResult CanCast(IGameLink<GameDataAbilityActive> abilityLink, Entity target)Cast 仅服务端
csharp
public CmdResult Cast(IGameLink<GameDataAbilityActive> abilityLink, Entity target, bool isAcquired = false)Issues an AI cast command using the ability data's default recast setting.
abilityLink— The active ability data link to cast.target— The target entity for the cast command.isAcquired— Whether the command should be treated as an acquired AI command.
返回: The result of issuing the cast command.
备注
This overload is intended for script authors who do not want to decide recast behavior at the call site. It adds DoRecast only when points to aGameDataAbilityExecute with AcquireSettings.Recast enabled.
Cast 仅服务端
csharp
public CmdResult Cast(IGameLink<GameDataAbilityActive> abilityLink, Entity target, bool isAcquired, bool doRecast)Issues an AI cast command with explicit recast behavior.
abilityLink— The active ability data link to cast.target— The target entity for the cast command.isAcquired— Whether the command should be treated as an acquired AI command.doRecast— Whether to addDoRecastto the issued command.
返回: The result of issuing the cast command.
备注
Use this overload when custom AI logic needs to force or suppress continuous casting independently of AcquireSettings.Recast. Runtime recast safety checks still apply before another order is issued.
AIThinkTreeExtension 仅服务端
命名空间 GameCore.AISystem
csharp
public static class AIThinkTreeExtension方法
GetComponent 仅服务端
csharp
public static AIThinkTree? GetComponent<TComponent>(this Entity entity) where TComponent : AIThinkTreeWaveAI 仅服务端
命名空间 GameCore.AISystem
csharp
public class WaveAI : DisposableObject, IThinkerStaggered, IGameObject<GameDataWaveAI>, IGameObject构造函数
WaveAI 仅服务端
csharp
public WaveAI(IGameLink<GameDataWaveAI> link)初始化 WaveAI 的新实例
link— 包含群体AI数据的数编 Link 对象
属性
Leader 仅服务端
csharp
public Entity? Leader { get; }The leader of the wave AI, used as reference for route initialization and spacing.
EffectiveCombat 仅服务端
csharp
public bool EffectiveCombat { get; }当前生效的战斗开关。优先取运行时覆盖值。
WaveTarget 仅服务端
csharp
public ITarget? WaveTarget { get; set; }The target that the wave should move toward or protect. If not set, defaults to Leader.
StaggeredCount 仅服务端
csharp
public int StaggeredCount { get; }Think every 60 frames (approximately 2 seconds)
Link 仅服务端
csharp
public IGameLink<GameDataWaveAI> Link { get; }Cache 仅服务端
csharp
public GameDataWaveAI Cache { get; }方法
SetHuntTargets 仅服务端
csharp
public void SetHuntTargets(params Entity[] targets)指定追杀目标列表(可选覆盖)。Hunt 模式下每个成员独立选择距自己最近的有效目标。 不调用此方法时,Hunt 模式自动遍历敌方 Player.Units 选择目标。
SetHuntTargets 仅服务端
csharp
public void SetHuntTargets(IEnumerable<Entity> targets)ClearHuntTargets 仅服务端
csharp
public void ClearHuntTargets()清除显式追杀目标,回退到自动模式(遍历敌方 Player.Units)。
SetCombatEnabled 仅服务端
csharp
public void SetCombatEnabled(bool? enabled)动态启用或禁用战斗。设为 null 恢复为配置默认值。
SwitchConfig 仅服务端
csharp
public void SwitchConfig(IGameLink<GameDataWaveAI> newConfig)切换到新的配置。用于行为转换(路线完成后)或运行时动态切换。
Add 仅服务端
csharp
public void Add(Entity entity)Add a entity to the wave AI
Remove 仅服务端
csharp
public void Remove(Entity entity)Remove a entity from the wave AI
StartThinking 仅服务端
csharp
public void StartThinking()Start the wave AI thinking
StopThinking 仅服务端
csharp
public void StopThinking()Stop the wave AI thinking
SetRoute 仅服务端
csharp
public void SetRoute(IEnumerable<Vector2> points, bool? enableCombat = null)从 Vector2 坐标列表设置路线。自动使用 Leader 所在 Scene。 覆盖 GameDataWaveAIPatrol.Route 中的静态配置。
points— 路径点列表。enableCombat— 可选:覆盖战斗开关。false = 沿路线行军不战斗。null = 保持当前设置。
SetRoute 仅服务端
csharp
public void SetRoute(IEnumerable<ScenePoint> points, bool? enableCombat = null)从 ScenePoint 列表设置路线。
points— 路线点列表。enableCombat— 可选:覆盖战斗开关。
SetRoute 仅服务端
csharp
public void SetRoute(Scene scene, int placedLineId, bool? enableCombat = null)从场景中已放置的 PlacedLine 设置路线。
scene— 场景。placedLineId— PlacedLine ID。enableCombat— 可选:覆盖战斗开关。
SetRoute 仅服务端
csharp
public void SetRoute(params Vector2[] points)params 快捷方式。
ClearRoute 仅服务端
csharp
public void ClearRoute()清空路线。Patrol 模式将无法工作直到重新设置路线。
ResumeRouteFromNearest 仅服务端
csharp
public void ResumeRouteFromNearest()从路线上距离 Leader 最近的路径点恢复巡逻。 适用于脱战回归后继续沿路线移动。
AppendRoutePoint 仅服务端
csharp
public void AppendRoutePoint(Vector2 point)在路线末尾追加一个路径点。如果路线已完成(Once 模式),追加后自动恢复。
ReverseRoute 仅服务端
csharp
public void ReverseRoute()反转当前路线方向。
DisposeManaged 仅服务端
csharp
protected override void DisposeManaged()事件
OnRoutePointReached 仅服务端
csharp
public event Action<WaveAI, int>? OnRoutePointReached到达路线上的某个路径点时触发。参数: (WaveAI, 路径点索引)。
OnRouteCompleted 仅服务端
csharp
public event Action<WaveAI>? OnRouteCompleted完成整条路线时触发(PatrolMode.Once)。
OnWaveEliminated 仅服务端
csharp
public event Action<WaveAI>? OnWaveEliminated波次内所有单位被消灭时触发(在 AutoDisposeOnEmpty 检查之前)。
GameDataAINode 双端
命名空间 GameCore.AISystem.Data
csharp
public abstract class GameDataAINode : GameDataCategory<GameDataAINode>, IGameDataCategory<GameDataAINode>, IGameData<GameDataAINode>, IGameData构造函数
GameDataAINode 双端
csharp
public GameDataAINode(GameLink<GameDataAINode, GameDataAINode> link)GameDataAINode 双端
csharp
public GameDataAINode(IGameLink<GameDataAINode> link)方法
Think 仅服务端
csharp
public abstract CmdResult Think(AIThinkTree thinkTree)GameDataAINodeCustom 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeCustom : GameDataAINode, IGameData<GameDataAINodeCustom>, IGameData自定义 AI 节点,通过代码注入实现自定义逻辑。
构造函数
GameDataAINodeCustom 双端
csharp
public GameDataAINodeCustom(GameLink<GameDataAINode, GameDataAINodeCustom> link)GameDataAINodeCustom 双端
csharp
public GameDataAINodeCustom(IGameLink<GameDataAINodeCustom> link)属性
Link 双端
csharp
public new IGameLink<GameDataAINodeCustom> Link { get; }Func 仅服务端
csharp
public Func<AIThinkTree, CmdResult> Func { get; set; }方法
Think 仅服务端
csharp
public override CmdResult Think(AIThinkTree thinkTree)GameDataAINodeParallel 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeParallel : GameDataAINode, IGameData<GameDataAINodeParallel>, IGameData并行节点 同时执行所有子节点,根据成功/失败策略决定整体结果
备注
执行逻辑: 同时执行所有子节点(不考虑执行顺序) 根据成功策略和失败策略决定整体结果 即使某些子节点失败,其他子节点仍会继续执行 成功策略: RequireOne:任意一个子节点成功即返回成功 RequireAll:所有子节点都成功才返回成功 失败策略: RequireOne:任意一个子节点失败即返回失败 RequireAll:所有子节点都失败才返回失败 使用场景: 同时监听多个条件(如血量低 OR 敌人接近) 并行执行多个独立的AI行为 同时尝试多种策略 复合条件检查(如移动 AND 攻击) 与其他节点的区别: GameDataAINodeSelect:顺序尝试,任一成功就停止 GameDataAINodeSequence:顺序执行,任一失败就停止 GameDataAINodeParallel:并行执行,根据策略决定结果
构造函数
GameDataAINodeParallel 双端
csharp
public GameDataAINodeParallel(GameLink<GameDataAINode, GameDataAINodeParallel> link)GameDataAINodeParallel 双端
csharp
public GameDataAINodeParallel(IGameLink<GameDataAINodeParallel> link)属性
Nodes 双端
csharp
public List<IGameLink<GameDataAINode>?> Nodes { get; set; }子节点列表 所有节点将同时执行,不考虑列表顺序
SuccessPolicy 双端
csharp
public ParallelPolicy SuccessPolicy { get; set; }成功策略 决定什么情况下并行节点返回成功
FailurePolicy 双端
csharp
public ParallelPolicy FailurePolicy { get; set; }失败策略 决定什么情况下并行节点返回失败
Link 双端
csharp
public new IGameLink<GameDataAINodeParallel> Link { get; }方法
Think 仅服务端
csharp
public override CmdResult Think(AIThinkTree thinkTree)执行并行节点逻辑 同时执行所有子节点,根据成功/失败策略决定整体结果
thinkTree— AI思考树实例
返回: 根据成功策略和失败策略,以及子节点执行结果决定的最终结果
GameDataAINodeSelect 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeSelect : GameDataAINode, IGameData<GameDataAINodeSelect>, IGameData选择节点 任意一个子节点返回Ok则返回Ok,否则返回错误
构造函数
GameDataAINodeSelect 双端
csharp
public GameDataAINodeSelect(GameLink<GameDataAINode, GameDataAINodeSelect> link)GameDataAINodeSelect 双端
csharp
public GameDataAINodeSelect(IGameLink<GameDataAINodeSelect> link)属性
Nodes 双端
csharp
public List<IGameLink<GameDataAINode>?> Nodes { get; set; }子节点列表,按顺序尝试执行,任一成功即返回成功。
Link 双端
csharp
public new IGameLink<GameDataAINodeSelect> Link { get; }方法
Think 仅服务端
csharp
public override CmdResult Think(AIThinkTree thinkTree)GameDataAINodeSequence 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeSequence : GameDataAINode, IGameData<GameDataAINodeSequence>, IGameData序列节点 依次执行所有子节点,所有子节点都返回Ok才返回Ok,任何一个失败则立即返回错误
备注
执行逻辑: 按顺序执行每个子节点 如果某个子节点返回失败,立即停止执行并返回该错误 只有当所有子节点都成功时,才返回成功 使用场景: 实现"先A然后B然后C"的顺序逻辑 组合多个必须按顺序完成的动作 例如:扫描敌人 → 设置焦点 → 施法攻击 与Select节点的区别: GameDataAINodeSelect:任意一个成功就返回成功(OR逻辑) GameDataAINodeSequence:所有节点都必须成功才返回成功(AND逻辑)
构造函数
GameDataAINodeSequence 双端
csharp
public GameDataAINodeSequence(GameLink<GameDataAINode, GameDataAINodeSequence> link)GameDataAINodeSequence 双端
csharp
public GameDataAINodeSequence(IGameLink<GameDataAINodeSequence> link)属性
Nodes 双端
csharp
public List<IGameLink<GameDataAINode>?> Nodes { get; set; }子节点列表 按照列表顺序依次执行,所有节点都必须成功
Link 双端
csharp
public new IGameLink<GameDataAINodeSequence> Link { get; }方法
Think 仅服务端
csharp
public override CmdResult Think(AIThinkTree thinkTree)执行序列节点逻辑 依次执行所有子节点,任何一个失败就立即返回失败
thinkTree— AI思考树实例
返回: 所有子节点都成功时返回 Ok, 任何子节点失败时返回该子节点的错误结果
GameDataAINodeValidate 双端
命名空间 GameCore.AISystem.Data
csharp
public abstract class GameDataAINodeValidate : GameDataAINode, IGameData<GameDataAINodeValidate>, IGameData带验证条件的 AI 行为节点基类,先验证条件再执行行为
构造函数
GameDataAINodeValidate 双端
csharp
public GameDataAINodeValidate(GameLink<GameDataAINode, GameDataAINodeValidate> link)GameDataAINodeValidate 双端
csharp
public GameDataAINodeValidate(IGameLink<GameDataAINodeValidate> link)属性
Link 双端
csharp
public new IGameLink<GameDataAINodeValidate> Link { get; }Validators 仅服务端
csharp
public Func<AIThinkTree, CmdResult>? Validators { get; set; }方法
Actions 仅服务端
csharp
public abstract CmdResult Actions(AIThinkTree thinkTree)Validate 仅服务端
csharp
public CmdResult Validate(AIThinkTree thinkTree)Think 仅服务端
csharp
public override CmdResult Think(AIThinkTree thinkTree)GameDataAINodeValidateAttack 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateAttack : GameDataAINodeValidate, IGameData<GameDataAINodeValidateAttack>, IGameData验证节点:对目标发起普攻。若目标超出射程,会自动接近目标再攻击(除非单位无法移动)。
构造函数
GameDataAINodeValidateAttack 双端
csharp
public GameDataAINodeValidateAttack(GameLink<GameDataAINode, GameDataAINodeValidateAttack> link)GameDataAINodeValidateAttack 双端
csharp
public GameDataAINodeValidateAttack(IGameLink<GameDataAINodeValidateAttack> link)属性
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateAttack> Link { get; }Target 仅服务端
csharp
public Func<AIThinkTree, Entity?>? Target { get; set; }方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)GameDataAINodeValidateAttackOrMoveTo 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateAttackOrMoveTo : GameDataAINodeValidate, IGameData<GameDataAINodeValidateAttackOrMoveTo>, IGameData验证节点:尝试攻击目标,若攻击指令无法创建(如无有效攻击技能)则改为向目标移动。
构造函数
GameDataAINodeValidateAttackOrMoveTo 双端
csharp
public GameDataAINodeValidateAttackOrMoveTo(GameLink<GameDataAINode, GameDataAINodeValidateAttackOrMoveTo> link)GameDataAINodeValidateAttackOrMoveTo 双端
csharp
public GameDataAINodeValidateAttackOrMoveTo(IGameLink<GameDataAINodeValidateAttackOrMoveTo> link)属性
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateAttackOrMoveTo> Link { get; }Target 仅服务端
csharp
public Func<AIThinkTree, Entity?>? Target { get; set; }方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)GameDataAINodeValidateCast 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateCast : GameDataAINodeValidate, IGameData<GameDataAINodeValidateCast>, IGameData验证节点:对目标施放技能。若目标超出施法距离,会自动接近目标再施放(除非单位无法移动)。
构造函数
GameDataAINodeValidateCast 双端
csharp
public GameDataAINodeValidateCast(GameLink<GameDataAINode, GameDataAINodeValidateCast> link)GameDataAINodeValidateCast 双端
csharp
public GameDataAINodeValidateCast(IGameLink<GameDataAINodeValidateCast> link)属性
Ability 双端
csharp
public IGameLink<GameDataAbilityActive>? Ability { get; set; }指定要施放的技能;为空时自动从可用技能中随机选择。
IsAcquired 双端
csharp
public bool IsAcquired { get; set; }是否为获取型施法(自动施法/重施法行为)。
DoRecast 双端
csharp
public bool? DoRecast { get; set; }是否启用重施法,技能冷却结束后自动再次施放。 为 null 时从技能的 AcquireSettings.Recast 读取。
OnlyWhenReady 双端
csharp
public bool OnlyWhenReady { get; set; }只选择冷却/充能已就绪、无需接近即可施放的技能,失败时让选择节点尝试移动分支。 默认 false,保留自动接近和允许入队等待冷却的行为。
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateCast> Link { get; }Target 仅服务端
csharp
public Func<AIThinkTree, Entity?>? Target { get; set; }方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)GameDataAINodeValidateCombatMove 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateCombatMove : GameDataAINodeValidate, IGameData<GameDataAINodeValidateCombatMove>, IGameData战斗间隙向目标靠近。放在选择节点的就绪施法分支之后,保持攻击优先。 移动到期望距离后停止;再次超过启步距离才移动,避免在边界反复起步。
构造函数
GameDataAINodeValidateCombatMove 双端
csharp
public GameDataAINodeValidateCombatMove(GameLink<GameDataAINode, GameDataAINodeValidateCombatMove> link)GameDataAINodeValidateCombatMove 双端
csharp
public GameDataAINodeValidateCombatMove(IGameLink<GameDataAINodeValidateCombatMove> link)属性
Enabled 双端
csharp
public bool Enabled { get; set; }是否主动靠近。固定阵地单位可设为 false。默认 true。
RangeRatio 双端
csharp
public float RangeRatio { get; set; }未指定 Range 时,期望距离为主攻击射程的此比例。默认 0.7。
HysteresisRatio 双端
csharp
public float HysteresisRatio { get; set; }启步距离相对期望距离的额外比例。默认 0.1,即超过期望距离的 110% 才启步。
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateCombatMove> Link { get; }Target 仅服务端
csharp
public Func<AIThinkTree, Entity?>? Target { get; set; }目标公式;为空时使用 DefaultTarget。
Range 仅服务端
csharp
public Func<AIThinkTree, float>? Range { get; set; }期望交互距离公式。为空时使用 DefaultApproachRange * RangeRatio。
方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)GameDataAINodeValidateFocus 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateFocus : GameDataAINodeValidate, IGameData<GameDataAINodeValidateFocus>, IGameDataAI节点:设置焦点目标 用于AI系统中设置或清除当前的焦点目标。焦点目标通常用于AI的持续关注和决策。
备注
目标处理: 如果指定了目标,将该目标设置为AI的焦点目标 如果目标为空,将清除当前的焦点目标(设置为null) 这种设计允许AI在不同情况下灵活地管理注意力 使用场景: 设置优先攻击目标 标记需要持续关注的敌人 清除过期或无效的焦点目标
构造函数
GameDataAINodeValidateFocus 双端
csharp
public GameDataAINodeValidateFocus(GameLink<GameDataAINode, GameDataAINodeValidateFocus> link)GameDataAINodeValidateFocus 双端
csharp
public GameDataAINodeValidateFocus(IGameLink<GameDataAINodeValidateFocus> link)属性
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateFocus> Link { get; }Target 仅服务端
csharp
public Func<AIThinkTree, Entity?>? Target { get; set; }获取焦点目标的函数 如果返回null,将清除当前焦点目标;如果返回有效实体,将设置为新的焦点目标。
方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)执行焦点设置操作
thinkTree— AI思考树实例
返回: 始终返回 Ok,因为焦点设置操作总是可以执行的, 无论是设置新目标还是清除现有目标。
备注
该方法的执行逻辑: 通过 Target 函数获取目标实体 如果没有指定 Target 函数,使用 DefaultTarget 将获取的目标(可能为null)设置为 FocusTarget 返回成功结果 注意:即使目标为null也被视为成功操作,因为这代表"清除焦点目标"的有效指令。
GameDataAINodeValidateMoveTo 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateMoveTo : GameDataAINodeValidate, IGameData<GameDataAINodeValidateMoveTo>, IGameData验证节点:移动到目标单位附近。
构造函数
GameDataAINodeValidateMoveTo 双端
csharp
public GameDataAINodeValidateMoveTo(GameLink<GameDataAINode, GameDataAINodeValidateMoveTo> link)GameDataAINodeValidateMoveTo 双端
csharp
public GameDataAINodeValidateMoveTo(IGameLink<GameDataAINodeValidateMoveTo> link)属性
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateMoveTo> Link { get; }Target 仅服务端
csharp
public Func<AIThinkTree, Entity?>? Target { get; set; }Range 仅服务端
csharp
public Func<AIThinkTree, float>? Range { get; set; }方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)GameDataAINodeValidateMoveToPoint 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateMoveToPoint : GameDataAINodeValidate, IGameData<GameDataAINodeValidateMoveToPoint>, IGameData验证节点:将单位移动到场景中的指定坐标点。
备注
与 GameDataAINodeValidateMoveTo 不同,本节点移动到固定坐标而非实体目标, 适用于巡逻路线、航点导航或移动到战略位置。
构造函数
GameDataAINodeValidateMoveToPoint 双端
csharp
public GameDataAINodeValidateMoveToPoint(GameLink<GameDataAINode, GameDataAINodeValidateMoveToPoint> link)GameDataAINodeValidateMoveToPoint 双端
csharp
public GameDataAINodeValidateMoveToPoint(IGameLink<GameDataAINodeValidateMoveToPoint> link)属性
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateMoveToPoint> Link { get; }Target 仅服务端
csharp
public Func<AIThinkTree, ScenePoint?>? Target { get; set; }Function that returns the target point to move to.
方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)GameDataAINodeValidateScan 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAINodeValidateScan : GameDataAINodeValidate, IGameData<GameDataAINodeValidateScan>, IGameData验证节点:在范围内扫描敌人,写入 AIThinkTree.ScanTargetThisTick。
备注
注意本节点的扫描范围(Range)与 AIThinkTree.ScanRange (战斗外 Out-Of-Combat 扫描使用)是两套独立的值。当本节点作为 CombatBehaviorTree 的子节点使用时,覆盖 Range 等于改变了"战斗内"的扫描范围 —— 若设置得比战斗外扫描范围更小, 会出现"战斗外能扫到、进入战斗后立刻扫不到 → AI 站桩"的现象。
构造函数
GameDataAINodeValidateScan 双端
csharp
public GameDataAINodeValidateScan(GameLink<GameDataAINode, GameDataAINodeValidateScan> link)GameDataAINodeValidateScan 双端
csharp
public GameDataAINodeValidateScan(IGameLink<GameDataAINodeValidateScan> link)属性
IgnoreLeash 双端
csharp
public bool IgnoreLeash { get; set; }扫描时是否忽略组队栓绳距离限制。
RetainTarget 双端
csharp
public bool RetainTarget { get; set; }优先保留合法的 FocusTarget,找不到时才搜索新目标;搜索成功后写入 FocusTarget。 保留目标必须存活、同场景、可见并通过 ScanFilters 和追击边界检查。默认 false。
Link 双端
csharp
public new IGameLink<GameDataAINodeValidateScan> Link { get; }RetentionRange 仅服务端
csharp
public Func<AIThinkTree, float>? RetentionRange { get; set; }已交战目标的保持距离,按中心距离计算。为空时使用本节点搜敌距离的 1.5 倍。 只在 RetainTarget 开启时生效,不扩大新目标的搜敌范围。 没有移动组件的单位最多保持到搜敌距离,避免锁定无法追击的圈外目标。
TargetSorts 仅服务端
csharp
public ContextualPriorityComparer<AIThinkTree, Entity>? TargetSorts { get; set; }本节点选择新目标时使用的比较函数列表,按顺序比较,前一项返回 0 才继续下一项。 可按距离、血量或其他自定义条件排序;排序本身不会过滤候选目标。
备注
为 null 时使用 GameDataAIThinkTree.ScanSorts 的标签优先级。 显式配置后完全使用本列表,不自动追加标签排序;自定义函数可读取 thinkTree.Cache.ScanSorts 自行组合。 空列表表示不排序;比较结果相同或未配置任何排序时保留场景搜索结果的顺序。 RetainTarget 开启且旧目标仍合法时直接保留目标,不执行排序。
Range 仅服务端
csharp
public Func<AIThinkTree, float>? Range { get; set; }本次扫描使用的范围(世界单位)。
备注
为 null 时回落到 AIThinkTree.ScanRange。该值优先使用 ScanRange,未配置时再按攻击范围与 WaveAI 扫描上下限计算。 显式赋值时请确保返回值至少能覆盖"攻击距离 + 期望的最大追击距离": 如果该值小于 AI 实际期望接近的距离,GameDataAINodeValidateCast 拿不到 DefaultTarget 就直接返回 InvalidTarget, 不会触发自动接近,AI 表现为"看得见但不动"。
方法
Actions 仅服务端
csharp
public override CmdResult Actions(AIThinkTree thinkTree)GameDataAIThinkTree 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataAIThinkTree : GameDataCategory<GameDataAIThinkTree>, IGameDataCategory<GameDataAIThinkTree>, IGameData<GameDataAIThinkTree>, IGameDataAI 思考树配置,定义单位的战斗行为逻辑。
备注
"战斗外"和"战斗内"使用两套独立的扫描机制: 战斗外由框架直接用 AIThinkTree.ScanRange 轮询, 由 ScanFilters 决定哪些目标算敌人。未配置 ScanRange 时, 扫描范围按 Math.Clamp(Attack.Range, WaveCache.MinimalScanRange, WaveCache.MaximalScanRange) 计算。 战斗内完全由 CombatBehaviorTree 子树驱动。子树里的 GameDataAINodeValidateScan 节点可以独立设置 Range, 实际生效的"战斗内扫描范围"以那个节点为准,与 AIThinkTree.ScanRange 可能不一致。 这种不对称如果配置不慎(战斗内 Range 小于战斗外)会出现"战斗外扫到、进战斗立刻丢目标 → AI 站桩"的现象。
构造函数
GameDataAIThinkTree 双端
csharp
public GameDataAIThinkTree(GameLink<GameDataAIThinkTree, GameDataAIThinkTree> link)GameDataAIThinkTree 双端
csharp
public GameDataAIThinkTree(IGameLink<GameDataAIThinkTree> link)属性
ScanFilters 双端
csharp
public TargetFilterComplex ScanFilters { get; set; }扫描目标时的过滤条件,用于筛选可攻击的敌方单位。 默认:第一组过滤可见的敌方 Unit(排除物品和无敌),第二组过滤可见的敌方建筑(排除无敌)。
ScanSorts 双端
csharp
public List<UnitFilter>? ScanSorts { get; set; }默认的单位标签优先级,用于 AIThinkTree.Scan 方法以及未配置 TargetSorts 的搜索节点。 按列表顺序比较目标是否具有对应标签,例如 [Hero, Unit] 表示英雄优先,其次普通单位。
备注
所有标签匹配情况相同时视为同优先级,不追加距离或血量比较,保留搜索结果的相对顺序。 为 null 或空列表时保留场景搜索结果的顺序。 GameDataAINodeValidateScan 的 TargetSorts 为 null 时使用本配置; 显式配置比较函数或空列表时完全覆盖本配置,自定义函数可读取 thinkTree.Cache.ScanSorts 自行组合。 战斗外扫描只判断是否存在敌人,不使用本配置排序。
CombatBehaviorTree 双端
csharp
public IGameLink<GameDataAINode>? CombatBehaviorTree { get; set; }进入战斗后执行的 AI 行为树根节点。
备注
通常是一个 GameDataAINodeSequence(依次执行 Scan、Cast 等子节点)。 子树里的 GameDataAINodeValidateScan.Range 决定了"战斗内扫描范围", 该值与类级注释里描述的 AIThinkTree.ScanRange("战斗外"扫描)相互独立。 自定义子树时,建议 GameDataAINodeValidateScan.Range 保持为 null 以回落到 AIThinkTree.ScanRange,避免"战斗外扫到 → 进战斗丢目标 → AI 站桩"。
PreserveAcquiredCasting 双端
csharp
public bool PreserveAcquiredCasting { get; set; }自动重施法进入前摇及后续阶段时也暂停行为树,并保持战斗计时,避免移动决策中断攻击。 默认 false,沿用仅保护非自动获取施法的行为。
ScanRange 仅服务端
csharp
public Func<AIThinkTree, float>? ScanRange { get; set; }单位的搜敌范围。为 null 时沿用默认规则: Math.Clamp(Attack.Range, WaveCache.MinimalScanRange, WaveCache.MaximalScanRange); 没有攻击能力时使用 WaveCache.MinimalScanRange。
备注
该值同时用于战斗外扫描,以及未显式设置 Range 时的战斗内扫描。
方法
CreateAI 仅服务端
csharp
public virtual AIThinkTree CreateAI(Entity host)GameDataWaveAI 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataWaveAI : GameDataCategory<GameDataWaveAI>, IGameDataCategory<GameDataWaveAI>, IGameData<GameDataWaveAI>, IGameData波次 AI 配置基类。直接使用时表示守卫行为(以 WaveTarget 为锚点)。 跟随和巡逻行为使用对应子类型 GameDataWaveAIFollow 和 GameDataWaveAIPatrol。
构造函数
GameDataWaveAI 双端
csharp
public GameDataWaveAI(GameLink<GameDataWaveAI, GameDataWaveAI> link)GameDataWaveAI 双端
csharp
public GameDataWaveAI(IGameLink<GameDataWaveAI> link)属性
AutoDisposeOnEmpty 双端
csharp
public bool AutoDisposeOnEmpty { get; set; }当所有单位被移除时,是否自动销毁该波次 AI。默认 true。
InCombatMinimalDuration 双端
csharp
public TimeSpan InCombatMinimalDuration { get; set; }进入战斗后最少持续时长,避免频繁切换状态。默认 2 秒。
MinimalApproachRange 双端
csharp
public float MinimalApproachRange { get; set; }接近目标时的最小距离,单位不会靠得更近。默认 200。
MinimalScanRange 双端
csharp
public float MinimalScanRange { get; set; }扫描目标的最小范围。默认 500。
MaximalScanRange 双端
csharp
public float MaximalScanRange { get; set; }扫描目标的最大范围。默认 1000。
CombatLeash 双端
csharp
public float CombatLeash { get; set; }战斗时单位与重置点的最大距离,超出后不再追击。默认 1500。
CombatResetRange 双端
csharp
public float CombatResetRange { get; set; }单位与重置点的最大距离,超出后会返回重置点。默认 1800。
WaveLeash 双端
csharp
public float? WaveLeash { get; set; }组队 AI 中,成员与领队的最大距离(栓绳)。
EnableLinkedAggro 双端
csharp
public bool EnableLinkedAggro { get; set; }是否启用联动仇恨,组内单位共享仇恨。
EnableCombat 双端
csharp
public bool EnableCombat { get; set; }是否在扫描到敌人时尝试进入战斗。
WaveLeashSquared 双端
csharp
public double? WaveLeashSquared { get; }CombatLeashSquared 双端
csharp
public double CombatLeashSquared { get; }CombatResetRangeSquared 双端
csharp
public double CombatResetRangeSquared { get; }方法
CreateWaveAI 仅服务端
csharp
public virtual WaveAI CreateWaveAI()Creates a new WaveAI instance with this configuration.
GameDataWaveAIFollow 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataWaveAIFollow : GameDataWaveAI, IGameData<GameDataWaveAIFollow>, IGameData跟随模式配置:持续跟随 WaveTarget 实体,带滞后控制防止振荡。
构造函数
GameDataWaveAIFollow 双端
csharp
public GameDataWaveAIFollow(GameLink<GameDataWaveAI, GameDataWaveAIFollow> link)GameDataWaveAIFollow 双端
csharp
public GameDataWaveAIFollow(IGameLink<GameDataWaveAIFollow> link)属性
HysteresisFactor 双端
csharp
public float HysteresisFactor { get; set; }跟随滞后系数,防止在 MinimalApproachRange 边界震荡。 从 WaveAI 切换到 AIThinkTree 时,阈值变为 MinimalApproachRange * 本值。默认 0.7。
MinControlDuration 双端
csharp
public float MinControlDuration { get; set; }每个 AI 系统最少控制时长(秒),防止在 WaveAI/AIThinkTree 间快速振荡切换。默认 1.5。
Link 双端
csharp
public new IGameLink<GameDataWaveAIFollow> Link { get; }GameDataWaveAIHunt 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataWaveAIHunt : GameDataWaveAI, IGameData<GameDataWaveAIHunt>, IGameData追杀模式配置:每个成员独立追杀距自己最近的敌方目标。 默认自动遍历敌方 Player.Units 选择目标,可通过 WaveAI.SetHuntTargets 显式指定。
构造函数
GameDataWaveAIHunt 双端
csharp
public GameDataWaveAIHunt(GameLink<GameDataWaveAI, GameDataWaveAIHunt> link)GameDataWaveAIHunt 双端
csharp
public GameDataWaveAIHunt(IGameLink<GameDataWaveAIHunt> link)属性
ReacquireRangeFactor 双端
csharp
public float ReacquireRangeFactor { get; set; }重新追击的距离系数,防止在 MinimalApproachRange 边界震荡。 AIThinkTree 接管后,目标距离需 > MinimalApproachRange / 本值 才会重新交回 WaveAI 追击。 取值范围 (0, 1]:值越小,外侧缓冲越宽(AIThinkTree 保有更久的控制权)。默认 0.7(约 +43% 缓冲)。
MinControlDuration 双端
csharp
public float MinControlDuration { get; set; }每个 AI 系统最少控制时长(秒),防止在 WaveAI/AIThinkTree 间快速振荡切换。默认 1.5。
HuntFilters 双端
csharp
public TargetFilterComplex HuntFilters { get; set; }追杀目标过滤条件。从敌方 Player.Units 中筛选有效追杀目标。 默认:攻击 Unit 类型,排除无敌单位。
Link 双端
csharp
public new IGameLink<GameDataWaveAIHunt> Link { get; }GameDataWaveAIPatrol 双端
命名空间 GameCore.AISystem.Data
csharp
public class GameDataWaveAIPatrol : GameDataWaveAI, IGameData<GameDataWaveAIPatrol>, IGameData巡逻模式配置:沿路线巡逻,支持循环、往返、单次行军。
构造函数
GameDataWaveAIPatrol 双端
csharp
public GameDataWaveAIPatrol(GameLink<GameDataWaveAI, GameDataWaveAIPatrol> link)GameDataWaveAIPatrol 双端
csharp
public GameDataWaveAIPatrol(IGameLink<GameDataWaveAIPatrol> link)属性
Route 双端
csharp
public PlacedLineReference? Route { get; set; }巡逻路线,引用场景编辑器中放置的路线。 也可在运行时通过 SetRoute() 设置。
PatrolMode 双端
csharp
public PatrolMode PatrolMode { get; set; }路线的循环模式。默认 Loop。
RouteArrivalRange 双端
csharp
public float RouteArrivalRange { get; set; }到达路径点的判定半径,距离小于此值视为已到达。默认 100。
RouteWaitDuration 双端
csharp
public float RouteWaitDuration { get; set; }在每个路径点的停留时间(秒)。默认 0(不停留)。
RouteCompletionConfig 双端
csharp
public IGameLink<GameDataWaveAI>? RouteCompletionConfig { get; set; }PatrolMode.Once 走完路线后切换到的完整配置。 Link 指向任意 GameDataWaveAI 子类型(Guard、Follow 或另一个 Patrol)。 为 null 时不自动转换(仅触发 OnRouteCompleted 事件)。
RouteSpacing 双端
csharp
public float RouteSpacing { get; set; }行军间距:沿路线移动时单位之间的横向偏移距离。 防止有碰撞体的单位在路径点扎堆卡住。 默认 0(自动按 CollisionRadius * 2.5 计算)。
RouteArrivalRangeSquared 双端
csharp
public float RouteArrivalRangeSquared { get; }Link 双端
csharp
public new IGameLink<GameDataWaveAIPatrol> Link { get; }方法
StartWaveAI 仅服务端
csharp
public WaveAI StartWaveAI(IEnumerable<Entity> units, bool? enableCombat = null, params Vector2[] routePoints)一步到位:创建 WaveAI → 添加单位 → 设置路线 → 启动思考。
StartWaveAI 仅服务端
csharp
public WaveAI StartWaveAI(IEnumerable<Entity> units, PlacedLineReference route, bool? enableCombat = null)一步到位:创建 WaveAI → 添加单位 → 从 PlacedLineReference 设置路线 → 启动思考。
ParallelPolicy 双端
命名空间 GameCore.AISystem.Data
csharp
public enum ParallelPolicy并行节点策略枚举 定义并行节点如何处理子节点的成功/失败条件
枚举值
RequireOne— 要求一个:任意一个子节点满足条件即可RequireAll— 要求全部:所有子节点都必须满足条件
PatrolMode 双端
命名空间 GameCore.AISystem.Data.Enum
csharp
public enum PatrolMode路线的循环模式。
枚举值
Loop— 循环:到终点后回到起点继续(A→B→C→A→B→C...)。PingPong— 往返:到终点后反向走回(A→B→C→B→A→B→C...)。Once— 单次:走完一次后停止,触发 OnRouteCompleted, 可通过 RouteCompletionConfig 自动转换配置。
AIDebugger 仅服务端
命名空间 GameCore.AISystem.Debug
csharp
public static class AIDebuggerAI调试工具主类,提供统一的AI调试接口
备注
这个调试工具系统专为开发和调试阶段设计,提供以下功能:
- AI状态实时监控和可视化
- 行为树决策过程记录和分析
- 性能统计和瓶颈检测
- AI行为的实时控制和调试
- 群体AI协调状态监控
属性
Config 仅服务端
csharp
public static AIDebugConfig Config { get; set; }获取或设置全局调试配置
方法
StartDebugging 仅服务端
csharp
public static AIDebugSession StartDebugging(AIThinkTree aiThinkTree, AIDebugLevel debugLevel = AIDebugLevel.Normal)开始调试指定的AI实体
aiThinkTree— 要调试的AI思考树debugLevel— 调试级别
返回: 调试会话对象
StopDebugging 仅服务端
csharp
public static bool StopDebugging(int entityId)停止调试指定的AI实体
entityId— 实体ID
返回: 是否成功停止调试
GetDebugSession 仅服务端
csharp
public static AIDebugSession? GetDebugSession(int entityId)获取指定实体的调试会话
entityId— 实体ID
返回: 调试会话,如果不存在则返回null
LogDecision 仅服务端
csharp
public static void LogDecision(AIThinkTree aiThinkTree, GameDataAINode? node, CmdResult result, TimeSpan executionTime)记录AI决策过程
aiThinkTree— AI思考树node— 当前执行的节点result— 执行结果executionTime— 执行时间
LogStateChange 仅服务端
csharp
public static void LogStateChange(AIThinkTree aiThinkTree, CombatState oldState, CombatState newState, string reason)记录AI状态变化
aiThinkTree— AI思考树oldState— 旧状态newState— 新状态reason— 变化原因
LogWaveEvent 仅服务端
csharp
public static void LogWaveEvent(WaveAI waveAI, string eventType, string description, Entity? affectedEntity = null)记录群体AI事件
waveAI— 群体AIeventType— 事件类型description— 事件描述affectedEntity— 受影响的实体
GetPerformanceMonitor 仅服务端
csharp
public static AIPerformanceMonitor GetPerformanceMonitor()获取性能监控器
返回: 性能监控器实例
GetStateVisualizer 仅服务端
csharp
public static AIStateVisualizer GetStateVisualizer()获取状态可视化器
返回: 状态可视化器实例
GenerateDebugReport 仅服务端
csharp
public static string GenerateDebugReport()生成所有AI的调试报告
返回: 调试报告字符串
ClearAll 仅服务端
csharp
public static void ClearAll()清理所有调试数据
SetBreakpoint 仅服务端
csharp
public static void SetBreakpoint(int entityId, Func<AIThinkTree, bool> condition)设置AI的调试断点
entityId— 实体IDcondition— 断点条件
StepThink 仅服务端
csharp
public static bool StepThink(int entityId)手动触发AI的单步执行
entityId— 实体ID
返回: 是否成功触发
AIDebugSession 仅服务端
命名空间 GameCore.AISystem.Debug
csharp
public class AIDebugSession : IDisposableAI调试会话,管理单个AI实体的调试信息
构造函数
AIDebugSession 仅服务端
csharp
public AIDebugSession(AIThinkTree aiThinkTree, AIDebugLevel debugLevel)构造函数
aiThinkTree— AI思考树debugLevel— 调试级别
属性
EntityId 仅服务端
csharp
public int EntityId { get; }实体ID
DebugLevel 仅服务端
csharp
public AIDebugLevel DebugLevel { get; set; }调试级别
CreatedAt 仅服务端
csharp
public DateTime CreatedAt { get; }创建时间
CurrentState 仅服务端
csharp
public CombatState CurrentState { get; }当前状态
DecisionCount 仅服务端
csharp
public int DecisionCount { get; }决策记录数量
StateChangeCount 仅服务端
csharp
public int StateChangeCount { get; }状态变化记录数量
IsPaused 仅服务端
csharp
public bool IsPaused { get; }是否暂停
IsStepMode 仅服务端
csharp
public bool IsStepMode { get; }是否单步模式
BreakpointCount 仅服务端
csharp
public int BreakpointCount { get; }断点数量
方法
GetAI 仅服务端
csharp
public AIThinkTree? GetAI()获取AI引用
返回: AI思考树,如果已被GC则返回null
AddDecisionRecord 仅服务端
csharp
public void AddDecisionRecord(AIDecisionRecord record)添加决策记录
record— 决策记录
AddStateChange 仅服务端
csharp
public void AddStateChange(AIStateChangeRecord record)添加状态变化记录
record— 状态变化记录
GetDecisionHistory 仅服务端
csharp
public List<AIDecisionRecord> GetDecisionHistory(int count = 0)获取决策历史
count— 获取数量,默认全部
返回: 决策记录列表
GetStateHistory 仅服务端
csharp
public List<AIStateChangeRecord> GetStateHistory(int count = 0)获取状态变化历史
count— 获取数量,默认全部
返回: 状态变化记录列表
SetBreakpoint 仅服务端
csharp
public string SetBreakpoint(Func<AIThinkTree, bool> condition, string name = "")设置断点
condition— 断点条件name— 断点名称
返回: 断点ID
RemoveBreakpoint 仅服务端
csharp
public bool RemoveBreakpoint(string breakpointId)移除断点
breakpointId— 断点ID
返回: 是否移除成功
GetBreakpoints 仅服务端
csharp
public List<AIBreakpoint> GetBreakpoints()获取所有断点
返回: 断点列表
Pause 仅服务端
csharp
public void Pause()暂停AI执行
Resume 仅服务端
csharp
public void Resume()恢复AI执行
EnableStepMode 仅服务端
csharp
public void EnableStepMode()切换到单步模式
StepExecute 仅服务端
csharp
public void StepExecute()执行单步
GenerateReport 仅服务端
csharp
public string GenerateReport()生成会话报告
返回: 会话报告字符串
Dispose 仅服务端
csharp
public void Dispose()释放资源
WaveAIDebugExtensions 仅服务端
命名空间 GameCore.AISystem.Debug
csharp
public static class WaveAIDebugExtensions为WaveAI添加调试扩展方法
方法
GetMemberCount 仅服务端
csharp
public static int GetMemberCount(this WaveAI waveAI)获取群体AI的成员数量
waveAI— 群体AI实例
返回: 成员数量
GetMembers 仅服务端
csharp
public static IReadOnlyCollection<Entity> GetMembers(this WaveAI waveAI)获取群体AI的所有成员
waveAI— 群体AI实例
返回: 成员实体列表
AIBreakpoint 仅服务端
命名空间 GameCore.AISystem.Debug.Data
csharp
public class AIBreakpointAI断点条件
构造函数
AIBreakpoint 仅服务端
csharp
public AIBreakpoint()属性
Id 仅服务端
csharp
public string Id { get; set; }断点ID
Name 仅服务端
csharp
public string Name { get; set; }断点名称
Condition 仅服务端
csharp
public Func<AIThinkTree, bool> Condition { get; set; }断点条件函数
IsEnabled 仅服务端
csharp
public bool IsEnabled { get; set; }是否启用
HitCount 仅服务端
csharp
public int HitCount { get; set; }触发次数
MaxHits 仅服务端
csharp
public int MaxHits { get; set; }最大触发次数(0表示无限制)
CreatedAt 仅服务端
csharp
public DateTime CreatedAt { get; set; }创建时间
LastHitAt 仅服务端
csharp
public DateTime? LastHitAt { get; set; }最后触发时间
方法
ShouldTrigger 仅服务端
csharp
public bool ShouldTrigger(AIThinkTree aiThinkTree)是否应该触发
aiThinkTree— AI思考树
返回: 是否应该触发
AIDebugConfig 仅服务端
命名空间 GameCore.AISystem.Debug.Data
csharp
public class AIDebugConfigAI调试工具的配置类
构造函数
AIDebugConfig 仅服务端
csharp
public AIDebugConfig()属性
EnableDecisionLogging 仅服务端
csharp
public bool EnableDecisionLogging { get; set; }是否启用决策日志记录
EnableStateLogging 仅服务端
csharp
public bool EnableStateLogging { get; set; }是否启用状态变化日志记录
EnableWaveLogging 仅服务端
csharp
public bool EnableWaveLogging { get; set; }是否启用群体AI日志记录
EnablePerformanceMonitoring 仅服务端
csharp
public bool EnablePerformanceMonitoring { get; set; }是否启用性能监控
LogLevel 仅服务端
csharp
public AIDebugLevel LogLevel { get; set; }调试日志级别
MaxDecisionRecords 仅服务端
csharp
public int MaxDecisionRecords { get; set; }最大保存的决策记录数
MaxStateChangeRecords 仅服务端
csharp
public int MaxStateChangeRecords { get; set; }最大保存的状态变化记录数
PerformanceWindowSeconds 仅服务端
csharp
public int PerformanceWindowSeconds { get; set; }性能统计的采样窗口大小(秒)
PauseOnBreakpoint 仅服务端
csharp
public bool PauseOnBreakpoint { get; set; }是否在断点处暂停AI执行
EnableVisualization 仅服务端
csharp
public bool EnableVisualization { get; set; }是否启用可视化调试
VisualizationUpdateInterval 仅服务端
csharp
public int VisualizationUpdateInterval { get; set; }可视化更新频率(毫秒)
SlowExecutionThresholdMs 仅服务端
csharp
public double SlowExecutionThresholdMs { get; set; }慢执行警告阈值(毫秒)
AutoDetectPerformanceIssues 仅服务端
csharp
public bool AutoDetectPerformanceIssues { get; set; }是否自动检测AI性能问题
方法
CreateDefault 仅服务端
csharp
public static AIDebugConfig CreateDefault()创建默认配置
返回: 默认配置实例
CreateDetailed 仅服务端
csharp
public static AIDebugConfig CreateDetailed()创建详细调试配置
返回: 详细调试配置实例
CreatePerformanceOptimized 仅服务端
csharp
public static AIDebugConfig CreatePerformanceOptimized()创建性能优化配置
返回: 性能优化配置实例
AIDebugLevel 仅服务端
命名空间 GameCore.AISystem.Debug.Data
csharp
public enum AIDebugLevelAI调试级别枚举
枚举值
Minimal— 最小调试信息Normal— 普通调试信息Detailed— 详细调试信息Verbose— 完整调试信息(包含所有细节)
AIDecisionRecord 仅服务端
命名空间 GameCore.AISystem.Debug.Data
csharp
public class AIDecisionRecordAI决策记录
构造函数
AIDecisionRecord 仅服务端
csharp
public AIDecisionRecord()属性
Timestamp 仅服务端
csharp
public DateTime Timestamp { get; set; }记录时间戳
EntityId 仅服务端
csharp
public int EntityId { get; set; }实体ID
NodeType 仅服务端
csharp
public string NodeType { get; set; }节点类型名称
NodeInfo 仅服务端
csharp
public string NodeInfo { get; set; }节点详细信息
Result 仅服务端
csharp
public CmdResult Result { get; set; }执行结果
ExecutionTime 仅服务端
csharp
public TimeSpan ExecutionTime { get; set; }执行时间
CombatState 仅服务端
csharp
public CombatState CombatState { get; set; }当前战斗状态
FocusTarget 仅服务端
csharp
public Entity? FocusTarget { get; set; }焦点目标
ScanTarget 仅服务端
csharp
public Entity? ScanTarget { get; set; }扫描到的目标
Position 仅服务端
csharp
public ScenePoint Position { get; set; }实体位置
AdditionalInfo 仅服务端
csharp
public Dictionary<string, object> AdditionalInfo { get; set; }附加信息
IsSuccess 仅服务端
csharp
public bool IsSuccess { get; }是否成功执行
方法
GetSummary 仅服务端
csharp
public string GetSummary()获取简要描述
返回: 简要描述字符串
IsSlowExecution 仅服务端
csharp
public bool IsSlowExecution(double thresholdMs)是否为慢执行
thresholdMs— 阈值(毫秒)
返回: 是否为慢执行
AIPerformanceStats 仅服务端
命名空间 GameCore.AISystem.Debug.Data
csharp
public class AIPerformanceStatsAI性能统计记录
构造函数
AIPerformanceStats 仅服务端
csharp
public AIPerformanceStats()属性
TotalDecisions 仅服务端
csharp
public long TotalDecisions { get; set; }总决策次数
SuccessfulDecisions 仅服务端
csharp
public long SuccessfulDecisions { get; set; }成功决策次数
FailedDecisions 仅服务端
csharp
public long FailedDecisions { get; set; }失败决策次数
AverageExecutionTime 仅服务端
csharp
public double AverageExecutionTime { get; set; }平均执行时间(毫秒)
MaxExecutionTime 仅服务端
csharp
public double MaxExecutionTime { get; set; }最大执行时间(毫秒)
MinExecutionTime 仅服务端
csharp
public double MinExecutionTime { get; set; }最小执行时间(毫秒)
SlowExecutions 仅服务端
csharp
public long SlowExecutions { get; set; }慢执行次数
SuccessRate 仅服务端
csharp
public double SuccessRate { get; }成功率
FailureRate 仅服务端
csharp
public double FailureRate { get; }失败率
SlowExecutionRate 仅服务端
csharp
public double SlowExecutionRate { get; }慢执行率
方法
Reset 仅服务端
csharp
public void Reset()重置统计数据
GetReport 仅服务端
csharp
public string GetReport()获取性能报告
返回: 性能报告字符串
AIStateChangeRecord 仅服务端
命名空间 GameCore.AISystem.Debug.Data
csharp
public class AIStateChangeRecordAI状态变化记录
构造函数
AIStateChangeRecord 仅服务端
csharp
public AIStateChangeRecord()属性
Timestamp 仅服务端
csharp
public DateTime Timestamp { get; set; }记录时间戳
EntityId 仅服务端
csharp
public int EntityId { get; set; }实体ID
OldState 仅服务端
csharp
public CombatState OldState { get; set; }旧状态
NewState 仅服务端
csharp
public CombatState NewState { get; set; }新状态
Reason 仅服务端
csharp
public string Reason { get; set; }变化原因
Position 仅服务端
csharp
public ScenePoint Position { get; set; }实体位置
TargetPosition 仅服务端
csharp
public ScenePoint? TargetPosition { get; set; }目标位置(如撤退点)
LeaderPosition 仅服务端
csharp
public ScenePoint? LeaderPosition { get; set; }领袖位置
StateDuration 仅服务端
csharp
public TimeSpan? StateDuration { get; set; }状态持续时间
方法
GetSummary 仅服务端
csharp
public string GetSummary()获取简要描述
返回: 简要描述字符串
AIWaveEventRecord 仅服务端
命名空间 GameCore.AISystem.Debug.Data
csharp
public class AIWaveEventRecord群体AI事件记录
构造函数
AIWaveEventRecord 仅服务端
csharp
public AIWaveEventRecord()属性
Timestamp 仅服务端
csharp
public DateTime Timestamp { get; set; }记录时间戳
WaveId 仅服务端
csharp
public int WaveId { get; set; }群体ID
EventType 仅服务端
csharp
public string EventType { get; set; }事件类型
Description 仅服务端
csharp
public string Description { get; set; }事件描述
LeaderId 仅服务端
csharp
public int? LeaderId { get; set; }领袖ID
MemberCount 仅服务端
csharp
public int MemberCount { get; set; }成员数量
AffectedEntityId 仅服务端
csharp
public int? AffectedEntityId { get; set; }受影响的实体ID
方法
GetSummary 仅服务端
csharp
public string GetSummary()获取简要描述
返回: 简要描述字符串
AIDebugExample 仅服务端
命名空间 GameCore.AISystem.Debug.Examples
csharp
public static class AIDebugExampleAI调试工具使用示例
备注
这个示例展示了如何在实际项目中使用AI调试工具系统。 包括基本设置、高级调试技术和性能监控的最佳实践。
方法
BasicUsageExample 仅服务端
csharp
public static void BasicUsageExample(Unit unit)基础使用示例 - 开始调试一个AI实体
unit— 要调试的单位
AdvancedDebuggingExample 仅服务端
csharp
public static void AdvancedDebuggingExample(IEnumerable<Unit> units)高级调试示例 - 详细监控和分析
units— 要调试的单位列表
PerformanceMonitoringExample 仅服务端
csharp
public static void PerformanceMonitoringExample()性能监控示例
VisualizationExample 仅服务端
csharp
public static void VisualizationExample(int entityId)可视化调试示例
entityId— 实体ID
WaveAIDebuggingExample 仅服务端
csharp
public static void WaveAIDebuggingExample(WaveAI waveAI)群体AI调试示例
waveAI— 群体AI
AutomatedTestingExample 仅服务端
csharp
public static void AutomatedTestingExample(AIThinkTree aiThinkTree)自动化测试和验证示例
aiThinkTree— AI思考树
RealTimeMonitoringExample 仅服务端
csharp
public static void RealTimeMonitoringExample()实时监控和报告示例
AINodeDebugDecorator 仅服务端
命名空间 GameCore.AISystem.Debug.Examples
csharp
public static class AINodeDebugDecoratorAI行为树节点的调试装饰器示例
备注
展示如何为行为树节点添加调试功能
方法
ExecuteWithDebug 仅服务端
csharp
public static CmdResult ExecuteWithDebug(this GameDataAINode node, AIThinkTree aiThinkTree, Func<CmdResult> originalThink)为AI节点执行添加调试装饰
node— AI节点aiThinkTree— AI思考树originalThink— 原始Think方法
返回: 执行结果
AIPerformanceMonitor 仅服务端
命名空间 GameCore.AISystem.Debug.Monitor
csharp
public class AIPerformanceMonitor : IThinkerAI性能监控器,统计和监控AI系统的性能数据
构造函数
AIPerformanceMonitor 仅服务端
csharp
public AIPerformanceMonitor()构造函数
方法
RecordDecision 仅服务端
csharp
public void RecordDecision(AIDecisionRecord decision)记录决策数据
decision— 决策记录
GetStatistics 仅服务端
csharp
public AIPerformanceStats GetStatistics()获取全局性能统计
返回: 全局性能统计
Think 仅服务端
csharp
public void Think(int delta)思考器更新方法
delta— 时间间隔
Clear 仅服务端
csharp
public void Clear()清理所有统计数据
EntityPerformanceStats 仅服务端
命名空间 GameCore.AISystem.Debug.Monitor
csharp
public class EntityPerformanceStats : AIPerformanceStats实体性能统计
构造函数
EntityPerformanceStats 仅服务端
csharp
public EntityPerformanceStats()属性
EntityId 仅服务端
csharp
public int EntityId { get; set; }方法
Update 仅服务端
csharp
public void Update(AIDecisionRecord decision)NodePerformanceStats 仅服务端
命名空间 GameCore.AISystem.Debug.Monitor
csharp
public class NodePerformanceStats : AIPerformanceStats节点性能统计
构造函数
NodePerformanceStats 仅服务端
csharp
public NodePerformanceStats()属性
NodeType 仅服务端
csharp
public string NodeType { get; set; }方法
Update 仅服务端
csharp
public void Update(AIDecisionRecord decision)GetSummary 仅服务端
csharp
public string GetSummary()AIStateVisualizer 仅服务端
命名空间 GameCore.AISystem.Debug.Visualizer
csharp
public class AIStateVisualizer : IThinkerAI状态可视化器,用于生成AI状态的可视化表示
构造函数
AIStateVisualizer 仅服务端
csharp
public AIStateVisualizer()构造函数
方法
UpdateVisualization 仅服务端
csharp
public void UpdateVisualization(AIThinkTree aiThinkTree)更新AI的可视化数据
aiThinkTree— AI思考树
GenerateTextVisualization 仅服务端
csharp
public string GenerateTextVisualization(int entityId)生成AI状态的文本可视化
entityId— 实体ID
返回: 可视化文本
GenerateOverview 仅服务端
csharp
public string GenerateOverview()生成所有AI的状态概览
返回: 状态概览文本
GenerateWaveVisualization 仅服务端
csharp
public string GenerateWaveVisualization(WaveAI waveAI)生成群体AI的可视化
waveAI— 群体AI
返回: 群体可视化文本
GenerateDecisionPathVisualization 仅服务端
csharp
public string GenerateDecisionPathVisualization(int entityId, int maxRecords = 20)生成行为树执行路径的可视化
entityId— 实体IDmaxRecords— 最大记录数
返回: 执行路径可视化
Think 仅服务端
csharp
public void Think(int delta)思考器更新方法
delta— 时间间隔
Clear 仅服务端
csharp
public void Clear()清理所有可视化数据
AIVisualizationData 仅服务端
命名空间 GameCore.AISystem.Debug.Visualizer
csharp
public class AIVisualizationDataAI可视化数据
构造函数
AIVisualizationData 仅服务端
csharp
public AIVisualizationData()属性
EntityId 仅服务端
csharp
public int EntityId { get; set; }LastUpdateTime 仅服务端
csharp
public DateTime LastUpdateTime { get; set; }CombatState 仅服务端
csharp
public CombatState CombatState { get; set; }Position 仅服务端
csharp
public Vector2 Position { get; set; }FocusTarget 仅服务端
csharp
public int? FocusTarget { get; set; }ScanTarget 仅服务端
csharp
public int? ScanTarget { get; set; }RetreatPoint 仅服务端
csharp
public Vector2? RetreatPoint { get; set; }LeaderEntity 仅服务端
csharp
public int? LeaderEntity { get; set; }WaveMemberCount 仅服务端
csharp
public int WaveMemberCount { get; set; }AttackRange 仅服务端
csharp
public float AttackRange { get; set; }ScanRange 仅服务端
csharp
public float ScanRange { get; set; }CanWalk 仅服务端
csharp
public bool CanWalk { get; set; }IsCasting 仅服务端
csharp
public bool IsCasting { get; set; }HasWaveInfo 仅服务端
csharp
public bool HasWaveInfo { get; set; }方法
Update 仅服务端
csharp
public void Update(AIThinkTree aiThinkTree)更新可视化数据
aiThinkTree— AI思考树
CombatState 双端
命名空间 GameCore.AISystem.Enum
csharp
public enum CombatState枚举值
OutOfCombatInCombatRetreatingLeashing