行为树节点参数添加复合类型参数,更新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": [
{
"id": "1757930589538_qisfksbwz",
"className": "MemSequence",
"id": "1758206972710_bhxebhy7o",
"className": "Sequence",
"parameters": {},
"children": [
"1758090634327_mf36nwkdt"
@@ -142,6 +12,17 @@
"id": "1758090634327_mf36nwkdt",
"className": "Selector",
"parameters": {},
"children": [
"1758206988178_55b7kk5va"
]
},
{
"id": "1758206988178_55b7kk5va",
"className": "BTAnimation",
"parameters": {
"_name": "",
"_loop": false
},
"children": []
}
]

View File

@@ -7,6 +7,33 @@
import { sp } from "cc";
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: "通过动画名播放动画,播放完成后返回成功" })
export class BTAnimation extends BT.LeafNode {
@BT.prop({ type: BT.ParamType.string, description: "动画名" })
@@ -54,7 +81,7 @@ export class BTConditionRandom extends BT.Condition {
private _value: number = 0.5;
public isEligible(): boolean {
return Math.random() > this._value;
return Math.random() < this._value;
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -11,7 +11,9 @@ export namespace BT {
int = "number",
float = "float",
string = "string",
bool = "boolean"
bool = "boolean",
object = "object",
array = "array"
}
/**
@@ -46,6 +48,12 @@ export namespace BT {
min?: 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"> };
}
/**