214 lines
6.9 KiB
JSON
214 lines
6.9 KiB
JSON
|
|
{
|
|||
|
|
"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"
|
|||
|
|
}
|
|||
|
|
}
|