行为树节点参数添加复合类型参数,更新demo

This commit is contained in:
gongxh
2025-09-18 22:51:27 +08:00
parent f60bf869a1
commit 50e29feeb8
7 changed files with 141 additions and 171 deletions

View File

@@ -1,138 +1,8 @@
{ {
"bt-tree1": [
{
"id": "1759488688188_qejfcso50",
"className": "Selector",
"parameters": {},
"children": [
"1759488707759_2bmdm1fqt",
"1759488725107_v8u160t95",
"1759488737637_axpz9aqaz",
"1759482034741_cf3mqaqdj"
]
},
{
"id": "1759479318405_bptb8ltcp",
"className": "LimitTime",
"parameters": {
"_max": 2
},
"children": [
"1758089736854_t55n54hkh"
]
},
{
"id": "1759479295671_jflit2ek8",
"className": "LimitTime",
"parameters": {
"_max": 2
},
"children": [
"1758089659917_vjumiu9hy"
]
},
{
"id": "1758089659917_vjumiu9hy",
"className": "BTAnimation",
"parameters": {
"_name": "walk",
"_loop": true
},
"children": []
},
{
"id": "1758089736854_t55n54hkh",
"className": "BTAnimation",
"parameters": {
"_name": "run",
"_loop": true
},
"children": []
},
{
"id": "1758089757615_dp9tw9ka1",
"className": "BTAnimation",
"parameters": {
"_name": "jump",
"_loop": false
},
"children": []
},
{
"id": "1759478407706_w30m4btux",
"className": "BTAnimation",
"parameters": {
"_name": "idle",
"_loop": true
},
"children": []
},
{
"id": "1759481172259_xou25wj2n",
"className": "BTConditionRandom",
"parameters": {
"_value": 0.3
},
"children": []
},
{
"id": "1759481282875_5orqavi5y",
"className": "BTConditionRandom",
"parameters": {
"_value": 0.4
},
"children": []
},
{
"id": "1759481307863_ja6q4q9bz",
"className": "BTConditionRandom",
"parameters": {
"_value": 0.3
},
"children": []
},
{
"id": "1759482034741_cf3mqaqdj",
"className": "LimitTime",
"parameters": {
"_max": 3
},
"children": [
"1759478407706_w30m4btux"
]
},
{
"id": "1759488707759_2bmdm1fqt",
"className": "Sequence",
"parameters": {},
"children": [
"1759481172259_xou25wj2n",
"1759479295671_jflit2ek8"
]
},
{
"id": "1759488725107_v8u160t95",
"className": "Sequence",
"parameters": {},
"children": [
"1759481282875_5orqavi5y",
"1759479318405_bptb8ltcp"
]
},
{
"id": "1759488737637_axpz9aqaz",
"className": "Sequence",
"parameters": {},
"children": [
"1759481307863_ja6q4q9bz",
"1758089757615_dp9tw9ka1"
]
}
],
"bt-tree2": [ "bt-tree2": [
{ {
"id": "1757930589538_qisfksbwz", "id": "1758206972710_bhxebhy7o",
"className": "MemSequence", "className": "Sequence",
"parameters": {}, "parameters": {},
"children": [ "children": [
"1758090634327_mf36nwkdt" "1758090634327_mf36nwkdt"
@@ -142,6 +12,17 @@
"id": "1758090634327_mf36nwkdt", "id": "1758090634327_mf36nwkdt",
"className": "Selector", "className": "Selector",
"parameters": {}, "parameters": {},
"children": [
"1758206988178_55b7kk5va"
]
},
{
"id": "1758206988178_55b7kk5va",
"className": "BTAnimation",
"parameters": {
"_name": "",
"_loop": false
},
"children": [] "children": []
} }
] ]

View File

@@ -7,6 +7,33 @@
import { sp } from "cc"; import { sp } from "cc";
import { BT } from "./Header"; import { BT } from "./Header";
@BT.ClassAction("BTTestNode", { name: "嵌套数据测试节点", group: "测试", desc: "测试节点" })
export class BTTestNode extends BT.LeafNode {
@BT.prop({
type: BT.ParamType.object,
properties: {
x: { type: BT.ParamType.int, min: 0 },
y: { type: BT.ParamType.int, min: 0 }
}
})
position: { x: number, y: number };
// 对象数组参数
@BT.prop({
type: BT.ParamType.array,
itemType: BT.ParamType.object,
itemProperties: {
name: { type: BT.ParamType.string },
value: { type: BT.ParamType.int }
}
})
configs: Array<{ name: string, value: number }>;
public tick(): BT.Status {
return BT.Status.SUCCESS;
}
}
@BT.ClassAction("BTAnimation", { name: "播放动画", group: "动画", desc: "通过动画名播放动画,播放完成后返回成功" }) @BT.ClassAction("BTAnimation", { name: "播放动画", group: "动画", desc: "通过动画名播放动画,播放完成后返回成功" })
export class BTAnimation extends BT.LeafNode { export class BTAnimation extends BT.LeafNode {
@BT.prop({ type: BT.ParamType.string, description: "动画名" }) @BT.prop({ type: BT.ParamType.string, description: "动画名" })
@@ -54,7 +81,7 @@ export class BTConditionRandom extends BT.Condition {
private _value: number = 0.5; private _value: number = 0.5;
public isEligible(): boolean { public isEligible(): boolean {
return Math.random() > this._value; return Math.random() < this._value;
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "bt-tree1", "name": "bt-tree2",
"description": "", "description": "这是一个描述",
"nodes": [ "nodes": [
{ {
"id": "1759488688188_qejfcso50", "id": "1759488688188_qejfcso50",
@@ -8,23 +8,46 @@
"name": "选择节点", "name": "选择节点",
"position": { "position": {
"x": -60, "x": -60,
"y": -240 "y": -200
}, },
"parameters": {}, "parameters": {},
"children": [ "children": [
"1759488707759_2bmdm1fqt", "1759488707759_2bmdm1fqt",
"1759488725107_v8u160t95", "1759488725107_v8u160t95",
"1759488737637_axpz9aqaz", "1759488737637_axpz9aqaz",
"1759482034741_cf3mqaqdj" "1759482034741_cf3mqaqdj",
"1758190139303_t5o7vv3ak"
], ],
"alias": "根选择节点" "alias": "根选择节点"
}, },
{
"id": "1758190139303_t5o7vv3ak",
"className": "BTTestNode",
"name": "嵌套数据测试节点",
"position": {
"x": 440,
"y": -80
},
"parameters": {
"position": {
"x": 10,
"y": 20
},
"configs": [
{
"name": "hahaa",
"value": 1
}
]
},
"children": []
},
{ {
"id": "1759479318405_bptb8ltcp", "id": "1759479318405_bptb8ltcp",
"className": "LimitTime", "className": "LimitTime",
"name": "时间限制器", "name": "时间限制器",
"position": { "position": {
"x": -60, "x": -120,
"y": 40 "y": 40
}, },
"parameters": { "parameters": {
@@ -39,7 +62,7 @@
"className": "LimitTime", "className": "LimitTime",
"name": "时间限制器", "name": "时间限制器",
"position": { "position": {
"x": -340, "x": -400,
"y": 40 "y": 40
}, },
"parameters": { "parameters": {
@@ -54,7 +77,7 @@
"className": "BTAnimation", "className": "BTAnimation",
"name": "播放动画", "name": "播放动画",
"position": { "position": {
"x": -340, "x": -400,
"y": 160 "y": 160
}, },
"parameters": { "parameters": {
@@ -68,8 +91,8 @@
"className": "BTAnimation", "className": "BTAnimation",
"name": "播放动画", "name": "播放动画",
"position": { "position": {
"x": -60, "x": -120,
"y": 200 "y": 160
}, },
"parameters": { "parameters": {
"_name": "run", "_name": "run",
@@ -82,8 +105,8 @@
"className": "BTAnimation", "className": "BTAnimation",
"name": "播放动画", "name": "播放动画",
"position": { "position": {
"x": 220, "x": 160,
"y": 60 "y": 40
}, },
"parameters": { "parameters": {
"_name": "jump", "_name": "jump",
@@ -96,7 +119,7 @@
"className": "BTAnimation", "className": "BTAnimation",
"name": "播放动画", "name": "播放动画",
"position": { "position": {
"x": 360, "x": 300,
"y": 40 "y": 40
}, },
"parameters": { "parameters": {
@@ -110,7 +133,7 @@
"className": "BTConditionRandom", "className": "BTConditionRandom",
"name": "随机条件节点", "name": "随机条件节点",
"position": { "position": {
"x": -480, "x": -540,
"y": 40 "y": 40
}, },
"parameters": { "parameters": {
@@ -123,7 +146,7 @@
"className": "BTConditionRandom", "className": "BTConditionRandom",
"name": "随机条件节点", "name": "随机条件节点",
"position": { "position": {
"x": -200, "x": -260,
"y": 40 "y": 40
}, },
"parameters": { "parameters": {
@@ -136,7 +159,7 @@
"className": "BTConditionRandom", "className": "BTConditionRandom",
"name": "随机条件节点", "name": "随机条件节点",
"position": { "position": {
"x": 80, "x": 20,
"y": 40 "y": 40
}, },
"parameters": { "parameters": {
@@ -149,11 +172,11 @@
"className": "LimitTime", "className": "LimitTime",
"name": "时间限制器", "name": "时间限制器",
"position": { "position": {
"x": 360, "x": 300,
"y": -80 "y": -80
}, },
"parameters": { "parameters": {
"_max": 3 "_max": 2
}, },
"children": [ "children": [
"1759478407706_w30m4btux" "1759478407706_w30m4btux"
@@ -165,7 +188,7 @@
"className": "Sequence", "className": "Sequence",
"name": "顺序节点", "name": "顺序节点",
"position": { "position": {
"x": -400, "x": -480,
"y": -80 "y": -80
}, },
"parameters": {}, "parameters": {},
@@ -180,7 +203,7 @@
"className": "Sequence", "className": "Sequence",
"name": "顺序节点", "name": "顺序节点",
"position": { "position": {
"x": -120, "x": -200,
"y": -80 "y": -80
}, },
"parameters": {}, "parameters": {},
@@ -188,14 +211,14 @@
"1759481282875_5orqavi5y", "1759481282875_5orqavi5y",
"1759479318405_bptb8ltcp" "1759479318405_bptb8ltcp"
], ],
"alias": "奔跑动画分支" "alias": "奔跑动画"
}, },
{ {
"id": "1759488737637_axpz9aqaz", "id": "1759488737637_axpz9aqaz",
"className": "Sequence", "className": "Sequence",
"name": "顺序节点", "name": "顺序节点",
"position": { "position": {
"x": 160, "x": 80,
"y": -80 "y": -80
}, },
"parameters": {}, "parameters": {},
@@ -297,11 +320,18 @@
"targetNodeId": "1758089757615_dp9tw9ka1", "targetNodeId": "1758089757615_dp9tw9ka1",
"sourcePointType": "child", "sourcePointType": "child",
"targetPointType": "parent" "targetPointType": "parent"
},
{
"id": "conn_1758204108181_90iaioyvg",
"sourceNodeId": "1759488688188_qejfcso50",
"targetNodeId": "1758190139303_t5o7vv3ak",
"sourcePointType": "child",
"targetPointType": "parent"
} }
], ],
"canvasScale": 1.0252718826976899, "canvasScale": 1.0006385665653545,
"canvasOffset": { "canvasOffset": {
"x": 540.227707847, "x": 584.9936143343465,
"y": 428.7616100108487 "y": 498.99074078480237
} }
} }

View File

@@ -3,12 +3,12 @@
"description": "", "description": "",
"nodes": [ "nodes": [
{ {
"id": "1757930589538_qisfksbwz", "id": "1758206972710_bhxebhy7o",
"className": "MemSequence", "className": "Sequence",
"name": "记忆顺序节点", "name": "顺序节点",
"position": { "position": {
"x": -60, "x": 80,
"y": -280 "y": -320
}, },
"parameters": {}, "parameters": {},
"children": [ "children": [
@@ -20,25 +20,49 @@
"className": "Selector", "className": "Selector",
"name": "选择节点", "name": "选择节点",
"position": { "position": {
"x": 20, "x": -80,
"y": -80 "y": -220
}, },
"parameters": {}, "parameters": {},
"children": [
"1758206988178_55b7kk5va"
],
"alias": "是的发放是的发放"
},
{
"id": "1758206988178_55b7kk5va",
"className": "BTAnimation",
"name": "播放动画",
"position": {
"x": -20,
"y": -40
},
"parameters": {
"_name": "",
"_loop": false
},
"children": [] "children": []
} }
], ],
"connections": [ "connections": [
{ {
"id": "conn_1758090635620_zajj5r8g0", "id": "conn_1758206976733_208tneycs",
"sourceNodeId": "1757930589538_qisfksbwz", "sourceNodeId": "1758206972710_bhxebhy7o",
"targetNodeId": "1758090634327_mf36nwkdt", "targetNodeId": "1758090634327_mf36nwkdt",
"sourcePointType": "child", "sourcePointType": "child",
"targetPointType": "parent" "targetPointType": "parent"
},
{
"id": "conn_1758206989897_46hw88z7h",
"sourceNodeId": "1758090634327_mf36nwkdt",
"targetNodeId": "1758206988178_55b7kk5va",
"sourcePointType": "child",
"targetPointType": "parent"
} }
], ],
"canvasScale": 1.139190980775211, "canvasScale": 1.139190980775211,
"canvasOffset": { "canvasOffset": {
"x": 266.1539154489914, "x": 549.4323607689915,
"y": 608.1811503312816 "y": 698.6185343759718
} }
} }

View File

@@ -5,7 +5,7 @@
"version": "3.8.6" "version": "3.8.6"
}, },
"dependencies": { "dependencies": {
"kunpocc-behaviortree": "^0.1.0", "kunpocc-behaviortree": "^0.1.1",
"ts-node": "^10.9.2" "ts-node": "^10.9.2"
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "kunpocc-behaviortree", "name": "kunpocc-behaviortree",
"version": "0.1.0", "version": "0.1.1",
"description": "行为树", "description": "行为树",
"main": "./dist/kunpocc-behaviortree.cjs", "main": "./dist/kunpocc-behaviortree.cjs",
"module": "./dist/kunpocc-behaviortree.mjs", "module": "./dist/kunpocc-behaviortree.mjs",

View File

@@ -11,7 +11,9 @@ export namespace BT {
int = "number", int = "number",
float = "float", float = "float",
string = "string", string = "string",
bool = "boolean" bool = "boolean",
object = "object",
array = "array"
} }
/** /**
@@ -46,6 +48,12 @@ export namespace BT {
min?: number, min?: number,
/** 最大值 */ /** 最大值 */
max?: number, max?: number,
/** 对象属性定义 - 仅当type为object时使用 */
properties?: { [key: string]: Omit<ParameterInfo, "name"> };
/** 数组元素类型 - 仅当type为array时使用 */
itemType?: ParamType;
/** 数组元素对象定义 - 仅当type为array且itemType为object时使用 */
itemProperties?: { [key: string]: Omit<ParameterInfo, "name"> };
} }
/** /**