Behavior-Tree-Syntax-Compiler
所属分类:自动编程
开发工具:GDScript
文件大小:7841KB
下载次数:0
上传日期:2021-11-07 05:43:42
上 传 者:
sh-1993
说明: Godot引擎的行为树语法编译器。
(A Behavior Tree Syntax compiler for Godot Engine.)
文件列表:
.DS_Store (6148, 2021-11-07)
BT1.tscn (2464, 2021-11-07)
LICENSE (1077, 2021-11-07)
PrintTest.bts (4, 2021-11-07)
PrintTest.tscn (1939, 2021-11-07)
PrintTest2.bts (0, 2021-11-07)
PrintTest2.tscn (951, 2021-11-07)
TestScene.gd (1063, 2021-11-07)
TestScene.tscn (2496, 2021-11-07)
addons (0, 2021-11-07)
addons\.DS_Store (6148, 2021-11-07)
addons\naive_behavior_tree (0, 2021-11-07)
addons\naive_behavior_tree\.DS_Store (6148, 2021-11-07)
addons\naive_behavior_tree\behavior_tree (0, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\.DS_Store (6148, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes (0, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\.DS_Store (6148, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\BTNode.gd (1939, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\BehaviorTree.gd (2195, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\actions (0, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\actions\BTAction.gd (1375, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\actions\BTActionFail.gd (99, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\actions\BTActionRandomTimer.gd (444, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\actions\BTActionSuccess.gd (105, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\actions\BTActionTimer.gd (328, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites (0, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTComposite.gd (406, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTCompositeDynamicGuardSelector.gd (1240, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTCompositeParallel.gd (3300, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTCompositeRandomSelector.gd (190, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTCompositeRandomSequence.gd (191, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTCompositeSelector.gd (596, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTCompositeSequence.gd (598, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\composites\BTCompositeSingle.gd (2244, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\decorators (0, 2021-11-07)
addons\naive_behavior_tree\behavior_tree\classes\decorators\BTDecorator.gd (668, 2021-11-07)
... ...
# 一个行为树编译器
输入行为树定义脚本,输出PackedScene并保存到项目文件中
## 介绍
本项目行为树节点部分参考 。
编译器部分为自己研发,所以会有很多bug。。。
希望有人能帮忙测试,以便使其能够实际应用。
一下使用`BTS`表示行为树脚本。
## 语法
```
line = [[indent] [guardableTask] [comment]]
guardableTask = [guard [...]] task
guard = '(' task ')'
task = name [param:value [...]] | subtreeRef
```
## 行为树节点
### BTNode
所有行为树节点都继承自此节点
### BehaviorTree
用于存放根节点,可设置`agent`,以便在子节点中获取:`tree.agent`。
可以设置为自己的游戏实体对象。
### BTAction
表示一个动作,自定义节点应该继承自该节点。
示例:
```
tool
extends BTAction
export(String) var msg:String
#----- Methods -----
func execute():
print(msg)
return SUCCEEDED
```
需要重载`execute()`函数以便实现自定义功能。
函数中可访问`tree`来得到行为树,`tree.agent`可得到自定义的游戏实体对象。
返回`SUCCEEDED`表示该动作完成了,`FAILED`表示该动作失败了,`RUNNING`表示该动作正在执行。
可以使用`yield`来实现等待信号。
一个使用来`yield`实现的定时器:
```
tool
extends BTAction
export(float) var wait:float = 1
#----- Methods -----
func execute():
print('wait for 1 sec')
yield(get_tree().create_timer(wait), "timeout")
print('wait for 2 sec')
yield(get_tree().create_timer(2), "timeout")
print('wait for 3 sec')
yield(get_tree().create_timer(3), "timeout")
print('done.')
return SUCCEEDED
```
## 示例
```
# 注释
import alias: "path/to/your/custom/behavior/tree/node.gd" # 导入自定义节点
import dead?: "path/to/your/custom/behavior/tree/node.gd" # 导入自定义节点,标识符可以使用问号
subtree name: xxx # 定义子树,第一个节点为根节点,缩进表示节点的父子关系
parrallel orchestrator: JOIN # 后面为参数,':'左边为参数名,右边为表达式,可包含函数,表达式在编译时执行求值
alias
alias
tree # 必须仅包含1个树,第一个节点为根节点,缩进表示父子关系
sequence
$xxx # 引用子树
(dead?) alias # 使用'dead?'作为护卫节点
```
```
#
# 小狗的行为树
#
import 叫:"res://dog/bt/BarkTask.gd"
import 摇摆:"res://dog/bt/CareTask.gd"
import 标记:"res://dog/bt/MarkTask.gd"
import 走:"res://dog/bt/WalkTask.gd"
subtree name: 摇摆树
parallel # 并行
摇摆 次数: 3 # 摇摆3次
alwaysFail # 总是失败
res://dog/bt/RestTask' # 休息
tree
selector # 选择
$摇摆树 # 引用子树
sequence # 顺序
叫 次数: rand_rangei(1, 1)
走
"res://dog/bt/BarkTask" # 直接使用字符串也行
标记
```
## BTS中的内建节点
```
# Actions
fail # Always fail
success # Always success
timer wait: 1.0 # Wait for 1 sec.
# Composites
dynamic_guard_selector # Choose a child to run at a time by guard check that succeeded.
parallel policy: SEQUENCE/SELECTOR orchestrator: RESUME/JOIN # Run all children at a time with the policy and orchestrator applied.
selector # Choose a child to run in order.
random_selector
sequence # Run children one by one in order.
random_sequence
# Decorators - wrap the result of a child.
always_fail
always_succeed
invert
random success_posibility: 0.5 # Has a chance of 0.5 to run the child.
repeat times: 1 # Repeat the child for 1 time.
until_fail # Run child until it fail.
until_success # Run child until it scceeded.
```
## 许可证
MIT
## 其他
B站地址:https://space.bilibili.com/15155009
爱发电主页:https://afdian.net/@raiix
欢迎赞助支持哟~
蘩的游戏开发交流QQ群:8372***758
来分享你刚编的游戏创意或者展现你的游戏开发技术吧~
近期下载者:
相关文件:
收藏者: