Files
esengine/extensions/cocos/cocos-ecs/enemy-ai.bt.json
2025-06-24 19:34:37 +08:00

214 lines
6.9 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"nodes": [
{
"id": "root",
"type": "root",
"name": "敌人AI根节点",
"description": "敌人AI行为树的根节点控制敌人的所有行为逻辑。包含攻击、追击和巡逻三种主要行为模式。",
"children": [
"main-selector"
]
},
{
"id": "main-selector",
"type": "selector",
"name": "主要行为选择器",
"description": "选择器节点:按优先级执行子节点(攻击>追击>巡逻)。这确保敌人在有目标时优先战斗,没有目标时进行巡逻。",
"children": [
"attack-behavior",
"chase-behavior",
"patrol-behavior"
]
},
{
"id": "attack-behavior",
"type": "conditional-decorator",
"name": "攻击行为",
"description": "条件装饰器:只有当发现目标且距离足够近时才进行攻击。这确保敌人只在有效攻击范围内战斗。",
"children": [
"attack-sequence"
],
"condition": {
"type": "blackboard-value-comparison",
"properties": {
"variableName": "hasTarget",
"compareOperator": "equals",
"compareValue": true
}
}
},
{
"id": "attack-sequence",
"type": "sequence",
"name": "攻击序列",
"description": "序列节点:按顺序执行攻击相关的所有步骤,确保攻击逻辑的完整性。",
"children": [
"set-attack-state",
"attack-cooldown-check",
"perform-attack",
"reset-attack-cooldown"
]
},
{
"id": "set-attack-state",
"type": "set-blackboard-value",
"name": "设置攻击状态",
"description": "黑板赋值节点:将敌人状态设置为'attacking',便于其他系统了解敌人当前行为。"
},
{
"id": "attack-cooldown-check",
"type": "conditional-decorator",
"name": "攻击冷却检查",
"description": "条件装饰器检查攻击冷却是否结束。只有冷却时间为0时才能执行攻击防止过于频繁的攻击。",
"children": [
"attack-action"
],
"condition": {
"type": "blackboard-value-comparison",
"properties": {
"variableName": "attackCooldown",
"compareOperator": "lessEqual",
"compareValue": 0
}
}
},
{
"id": "attack-action",
"type": "event-action",
"name": "执行攻击",
"description": "事件动作节点:触发实际的攻击事件,造成伤害并播放攻击动画和音效。"
},
{
"id": "perform-attack",
"type": "log-action",
"name": "攻击日志",
"description": "日志动作节点记录攻击行为用于调试和监控敌人AI的行为表现。"
},
{
"id": "reset-attack-cooldown",
"type": "set-blackboard-value",
"name": "重置攻击冷却",
"description": "黑板赋值节点设置攻击冷却时间为1.5秒,控制攻击频率,避免过于频繁的攻击。"
},
{
"id": "chase-behavior",
"type": "conditional-decorator",
"name": "追击行为",
"description": "条件装饰器:当发现目标但距离较远时进行追击。这是攻击和巡逻之间的中间状态。",
"children": [
"chase-sequence"
],
"condition": {
"type": "blackboard-value-comparison",
"properties": {
"variableName": "hasTarget",
"compareOperator": "equals",
"compareValue": true
}
}
},
{
"id": "chase-sequence",
"type": "sequence",
"name": "追击序列",
"description": "序列节点:执行追击相关的行为,包括状态设置、移动和冷却更新。",
"children": [
"set-chase-state",
"move-to-target",
"update-attack-cooldown"
]
},
{
"id": "set-chase-state",
"type": "set-blackboard-value",
"name": "设置追击状态",
"description": "黑板赋值节点:将敌人状态设置为'chasing',表示正在追击目标。"
},
{
"id": "move-to-target",
"type": "event-action",
"name": "向目标移动",
"description": "事件动作节点:触发移动事件,让敌人朝目标方向移动。移动速度比巡逻时更快。"
},
{
"id": "update-attack-cooldown",
"type": "math-blackboard-operation",
"name": "更新攻击冷却",
"description": "数学运算节点:减少攻击冷却时间,让敌人在追击过程中为下次攻击做准备。"
},
{
"id": "patrol-behavior",
"type": "sequence",
"name": "巡逻行为",
"description": "序列节点:当没有目标时执行巡逻行为。这是敌人的默认行为,确保敌人始终在活动。",
"children": [
"patrol-sequence"
]
},
{
"id": "patrol-sequence",
"type": "sequence",
"name": "巡逻序列",
"description": "序列节点:执行完整的巡逻循环,包括状态设置、移动和等待。",
"children": [
"set-patrol-state",
"patrol-move",
"patrol-wait"
]
},
{
"id": "set-patrol-state",
"type": "set-blackboard-value",
"name": "设置巡逻状态",
"description": "黑板赋值节点:将敌人状态设置为'patrolling',表示正在巡逻。"
},
{
"id": "patrol-move",
"type": "event-action",
"name": "巡逻移动",
"description": "事件动作节点:触发巡逻移动事件,让敌人在预设的巡逻路径上移动。"
},
{
"id": "patrol-wait",
"type": "wait-action",
"name": "巡逻等待",
"description": "等待动作节点在巡逻点停留2秒模拟敌人观察周围环境。这让巡逻看起来更自然。"
}
],
"blackboard": [
{
"name": "currentState",
"type": "string",
"value": "idle",
"description": "敌人的当前状态idle、attacking、chasing、patrolling用于状态跟踪和AI调试",
"group": "状态"
},
{
"name": "hasTarget",
"type": "boolean",
"value": "false",
"description": "是否发现了有效目标,决定敌人是否应该从巡逻切换到追击模式",
"group": "目标"
},
{
"name": "attackCooldown",
"type": "number",
"value": "0",
"description": "攻击冷却倒计时控制攻击频率0表示可以攻击大于0表示正在冷却",
"group": "战斗"
},
{
"name": "lastKnownTargetPosition",
"type": "string",
"value": "0,0",
"description": "最后已知的目标位置,用于敌人在失去目标后继续搜索一段时间",
"group": "目标"
}
],
"metadata": {
"name": "behavior-tree",
"created": "2025-06-24T03:38:29.653Z",
"version": "1.0",
"exportType": "clean"
}
}