From f60bf869a1d64e754b355eb075178bf41319b079 Mon Sep 17 00:00:00 2001 From: gongxh Date: Thu, 18 Sep 2025 16:49:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=86=85=E7=BD=AE=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E7=9A=84=E6=8F=8F=E8=BF=B0=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/behaviortree/BTNode/Action.ts | 12 ++---------- src/behaviortree/BTNode/Composite.ts | 18 +++++------------- src/behaviortree/BTNode/Decorator.ts | 14 +++++++------- 3 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/behaviortree/BTNode/Action.ts b/src/behaviortree/BTNode/Action.ts index ec93d7b..c831871 100644 --- a/src/behaviortree/BTNode/Action.ts +++ b/src/behaviortree/BTNode/Action.ts @@ -17,11 +17,7 @@ export abstract class LeafNode extends BTNode { * 次数内,返回RUNNING * 超次,返回SUCCESS */ -@BT.ClassAction("WaitTicks", { - name: "等待次数", - group: "基础行为节点", - desc: "等待指定次数后返回成功", -}) +@BT.ClassAction("WaitTicks", { name: "次数等待节点", group: "基础行为节点", desc: "指定次数后返回成功, 否则返回执行中" }) export class WaitTicks extends LeafNode { @BT.prop({ type: BT.ParamType.int, description: "最大等待次数", defaultValue: 0, step: 1 }) private _max: number; @@ -50,11 +46,7 @@ export class WaitTicks extends LeafNode { * 时间等待节点 时间(秒) * 时间到后返回SUCCESS,否则返回RUNNING */ -@BT.ClassAction("WaitTime", { - name: "等待时间", - group: "基础行为节点", - desc: "等待指定时间(秒)后返回成功", -}) +@BT.ClassAction("WaitTime", { name: "时间等待节点", group: "基础行为节点", desc: "等待指定时间(秒)后返回成功, 否则返回执行中" }) export class WaitTime extends LeafNode { @BT.prop({ type: BT.ParamType.float, description: "等待时间(秒)", defaultValue: 0, step: 0.01 }) private _max: number; diff --git a/src/behaviortree/BTNode/Composite.ts b/src/behaviortree/BTNode/Composite.ts index b9f834e..e92ec25 100644 --- a/src/behaviortree/BTNode/Composite.ts +++ b/src/behaviortree/BTNode/Composite.ts @@ -21,7 +21,7 @@ export abstract class Composite extends BTNode { * * 遇到 RUNNING 返回 RUNNING 下次从该节点开始 */ -@BT.ClassComposite("Selector", { name: "选择节点", group: "基础组合节点", desc: "选择节点" }) +@BT.ClassComposite("Selector", { name: "选择节点", group: "基础组合节点", desc: "子节点从左到右执行, 子节点状态: 成功则选择成立, 失败继续下一个, 执行中则返回执行中, 下次从该节点开始" }) export class Selector extends Composite { public override _initialize(global: IBlackboard, branch: IBlackboard): void { super._initialize(global, branch); @@ -57,7 +57,7 @@ export class Selector extends Composite { * * 遇到 RUNNING 返回 RUNNING 下次从该节点开始 */ -@BT.ClassComposite("Sequence", { name: "顺序节点", group: "基础组合节点", desc: "顺序节点" }) +@BT.ClassComposite("Sequence", { name: "顺序节点", group: "基础组合节点", desc: "子节点从左到右执行, 子节点状态: 成功则继续下一个, 失败则停止迭代返回失败, 执行中返回执行中, 下次从该节点开始" }) export class Sequence extends Composite { public override _initialize(global: IBlackboard, branch: IBlackboard): void { super._initialize(global, branch); @@ -90,7 +90,7 @@ export class Sequence extends Composite { * 并行节点 从上到下执行 全部执行一遍 * 返回优先级 FAILURE > RUNNING > SUCCESS */ -@BT.ClassComposite("Parallel", { name: "并行节点", group: "基础组合节点", desc: "同时执行所有子节点,全部成功才返回成功" }) +@BT.ClassComposite("Parallel", { name: "并行节点", group: "基础组合节点", desc: "同时执行所有子节点, 子节点状态: 任意失败则失败 > 任意执行中则执行中 > 全部成功则成功" }) export class Parallel extends Composite { public tick(dt: number): Status { let result = Status.SUCCESS; @@ -112,11 +112,7 @@ export class Parallel extends Composite { * 随机选择一个子节点执行 * 返回子节点状态 */ -@BT.ClassComposite("RandomSelector", { - name: "随机选择节点", - group: "基础组合节点", - desc: "随机选择一个子节点执行", -}) +@BT.ClassComposite("RandomSelector", { name: "随机选择节点", group: "基础组合节点", desc: "随机选择一个子节点执行, 返回子节点状态" }) export class RandomSelector extends Composite { private _totalWeight: number = 0; private _weights: number[] = []; @@ -168,11 +164,7 @@ export class RandomSelector extends Composite { * 并行节点 从上到下执行 全部执行一遍 * 返回优先级 SUCCESS > RUNNING > FAILURE */ -@BT.ClassComposite("ParallelAnySuccess", { - name: "并行任意成功", - group: "基础组合节点", - desc: "同时执行所有子节点,任意一个成功即返回成功", -}) +@BT.ClassComposite("ParallelAnySuccess", { name: "并行任意成功节点", group: "基础组合节点", desc: "任意一个成功则成功 > 任意一个执行中则执行中 > 全部失败则失败" }) export class ParallelAnySuccess extends Composite { public tick(dt: number): Status { let result = Status.FAILURE; diff --git a/src/behaviortree/BTNode/Decorator.ts b/src/behaviortree/BTNode/Decorator.ts index e35e917..3e9ce61 100644 --- a/src/behaviortree/BTNode/Decorator.ts +++ b/src/behaviortree/BTNode/Decorator.ts @@ -40,7 +40,7 @@ export abstract class ConditionDecorator extends Decorator { * 第一个Child Node节点, 返回 FAILURE, 本Node向自己的Parent Node也返回 SUCCESS * 第一个Child Node节点, 返回 SUCCESS, 本Node向自己的Parent Node也返回 FAILURE */ -@BT.ClassDecorator("Inverter", { name: "反转器", group: "基础装饰节点", desc: "反转子节点的执行结果,成功变失败,失败变成功" }) +@BT.ClassDecorator("Inverter", { name: "结果反转节点", group: "基础装饰节点", desc: "反转子节点的执行结果, 成功变失败, 失败变成功, 执行中保持不变" }) export class Inverter extends Decorator { public tick(dt: number): Status { const status = this.children[0]!._execute(dt); @@ -61,7 +61,7 @@ export class Inverter extends Decorator { * 规定时间内, 根据Child Node的结果, 本节点向自己的父节点也返回相同的结果 * 超时后, 直接返回 FAILURE */ -@BT.ClassDecorator("LimitTime", { name: "时间限制器", group: "基础装饰节点", desc: "限制子节点执行时间,超时返回失败" }) +@BT.ClassDecorator("LimitTime", { name: "时间限制节点", group: "基础装饰节点", desc: "限制时间内返回子节点状态, 超时后返回失败" }) export class LimitTime extends Decorator { @BT.prop({ type: BT.ParamType.float, description: "最大时间(秒)", defaultValue: 1 }) protected _max: number = 1; @@ -96,7 +96,7 @@ export class LimitTime extends Decorator { * 必须且只能包含一个子节点 * 次数超过后, 直接返回失败; 次数未超过, 返回子节点状态 */ -@BT.ClassDecorator("LimitTicks", { name: "次数限制器", group: "基础装饰节点", desc: "限制子节点执行次数,超过次数返回失败" }) +@BT.ClassDecorator("LimitTicks", { name: "次数限制节点", group: "基础装饰节点", desc: "子节点成功, 次数+1, 限制次数内返回子节点状态, 超过限制次数返回失败" }) export class LimitTicks extends Decorator { @BT.prop({ type: BT.ParamType.int, description: "最大次数", defaultValue: 1 }) protected _max: number = 1; @@ -130,7 +130,7 @@ export class LimitTicks extends Decorator { * 子节点是成功或失败,累加计数 * 次数超过之后返回子节点状态,否则返回 RUNNING */ -@BT.ClassDecorator("Repeat", { name: "重复节点", group: "基础装饰节点", desc: "重复执行子节点指定次数" }) +@BT.ClassDecorator("Repeat", { name: "重复节点", group: "基础装饰节点", desc: "子节点成功或失败次数+1, 重复执行指定次数" }) export class Repeat extends Decorator { @BT.prop({ type: BT.ParamType.int, description: "重复次数", defaultValue: 1, min: 1 }) protected _max: number = 1; @@ -167,7 +167,7 @@ export class Repeat extends Decorator { * * 子节点成功 计数+1 */ -@BT.ClassDecorator("RepeatUntilFailure", { name: "重复直到失败", group: "基础装饰节点", desc: "重复执行子节点直到失败或达到最大次数" }) +@BT.ClassDecorator("RepeatUntilFailure", { name: "重复直到失败", group: "基础装饰节点", desc: "子节点成功则次数+1, 限制次数内返回执行中, 重复执行子节点直到子节点返回失败, 超过限制次数返回失败" }) export class RepeatUntilFailure extends Decorator { @BT.prop({ type: BT.ParamType.int, description: "最大重试次数", defaultValue: 1, min: 1 }) protected _max: number = 1; @@ -205,7 +205,7 @@ export class RepeatUntilFailure extends Decorator { * * 子节点失败, 计数+1 */ -@BT.ClassDecorator("RepeatUntilSuccess", { name: "重复直到成功", group: "基础装饰节点", desc: "重复执行子节点直到成功或达到最大次数" }) +@BT.ClassDecorator("RepeatUntilSuccess", { name: "重复直到成功", group: "基础装饰节点", desc: "子节点失败则次数+1, 限制次数内返回执行中, 重复执行子节点直到子节点返回成功, 超过限制次数返回失败" }) export class RepeatUntilSuccess extends Decorator { @BT.prop({ type: BT.ParamType.int, description: "最大重试次数", defaultValue: 1, step: 1 }) protected _max: number = 1; @@ -240,7 +240,7 @@ export class RepeatUntilSuccess extends Decorator { /** * 权重装饰节点 */ -@BT.ClassDecorator("WeightDecorator", { name: "权重装饰器", group: "基础装饰节点", desc: "权重装饰节点" }) +@BT.ClassDecorator("WeightDecorator", { name: "权重装饰节点", group: "基础装饰节点", desc: "根据权重随机选择子节点执行, 用于随机选择节点的子节点" }) export class WeightDecorator extends Decorator { @BT.prop({ type: BT.ParamType.int, description: "权重", defaultValue: 1, step: 1 }) private _weight: number;