问题标签 [behavior-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
732 浏览

unity3d - 使用行为树进行玩家移动的想法有多好?

我用 Unity 开发游戏。现在我实现了一个玩家跑酷(运动)系统,所以我尝试选择能够帮助我长期保持架构清洁并轻松添加新状态的模式。我尝试使用状态机模式,但我意识到它越来越多。

所以我放弃了这个解决方案,决定使用行为树模式。但现在我开始注意到,这种架构越来越深入,并行状态的条件变得难以控制。我认为这不是创建玩家跑酷(运动)系统的最佳方式。

所以我的问题是:有没有更好的方法来创建玩家移动系统?使用行为树有多难?也许行为树中有我没有注意到的陷阱?我正在寻找能够让我按条件执行并行状态(或模拟)并且易于维护的架构。

我的原型现在看起来是这样的(不要注意获取密钥,这只是一个快速的架构计划):

0 投票
0 回答
43 浏览

c++ - Unreal Engine 4.26.1 - 随机化行为树并通过 BP 或 C++ 创建行为树

我想随机化树内的节点以创建随机树,并且我还想在运行时通过 BP/C++ 逐个节点创建树的节点。我正计划使用遗传编程使树木进化。但这似乎无法通过 BP 实现。如果这是真的,我想知道是否有办法使用 C++ 来做到这一点,以及是否有办法做到这一点。我完全不了解 UE 中的 C++,但我已经非常了解 C++。

0 投票
0 回答
24 浏览

python - 如何从 py_trees 库中的非主线程调用 setup() 方法?

我正在从 POST 请求中调用py_trees.trees.BehaviourTree()的setup()方法(这会将我转移到非主线程),但出现以下错误:

如何在不传输主线程中的setup()方法的情况下处理这个问题?

此处提供了完整的跟踪:

0 投票
3 回答
100 浏览

python - 获取每个节点的最大树深度

假设我们有一棵树,每个节点可以有多个孩子,而孩子可以有更多的孩子等等。

以这棵树为例:

节点 1 的深度 = 0(根)

节点 1.1、1.2、1.3 的深度 = 1,依此类推

对于每个节点,我想计算它可以达到的最大深度。例如,最大节点 1。深度为 3(树的深度与节点 1.2.1.1 一样深)。而节点 1.3 最大深度 = 1(子树达到节点 1.3.1 的深度)

现在我可以做的是创建一个函数,它接受一个子树并计算到最深的节点,然后返回深度值。但这需要为每个节点调用该函数,这对我来说似乎非常低效。

我想一次性创建树并计算最大深度。

我保持代码非常简单,因为我的函数包含许多其他操作(例如在我从头开始构建树时生成新的孩子,但为了简单起见,我省略了这些部分)。但基本上,我会像这样遍历树:

但是,当我这样做时,我无法达到外部节点的最新 max_depth 值,只能在最里面的节点内达到(因为这是递归)。所以这将计算:节点 1 最大深度 = 0,节点 1.2 最大深度 = 1,节点 1.2.1 最大深度 = 2 等等。实际上是相反的。

那么,也许我需要在这里使用全局变量?

编辑 - 我的功能的更详细版本

0 投票
0 回答
21 浏览

unity3d - 如何在 Unity 中处理带有行为树的动画?

我正在使用流体行为树库在 Unity 中实现 AI,我想知道如何使用 BT 处理动画。

我正在构建一个可以与玩家互动的角色,所以当玩家按下特定键时,它应该停止做任何正在做的事情,并通过播放适当的动画来做出反应。动画在动画控制器中设置。问题是我找不到如何检测动画是否完成以便继续树的其余部分的方法。我读过动画和BT应该分开,但我真的无法想象如何做到这一点。

所以这是我的问题:Unity 中设置的行为树应该如何处理动画?如何正确执行 BT 并在需要时完整执行动画?