问题标签 [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 回答
1473 浏览

xna - 游戏 AI - 行为树

您如何为游戏制作强大的 AI/脚本系统?

1)对于所有 NPC/环境/实体,您是否给他们一个单独的单一行为树(等等。巡逻行为、盟友行为、供应商行为、门行为)?如果屏幕上有 500 个单元,我应该对树进行完整传递(从根 -> 节点/动作开始)还是应该对所有单元进行 1 节点进度?

2)我在 update() 函数中做 AI 逻辑...但我听说有些游戏有独立的 AI 线程,有什么想法吗?

3)我想知道如何将我的游戏划分为部分/章节...我是否使用一个简单的变量 (EVENT="Mission 3") 来表示玩家的过往情况,并使其全部成为线性的?然后在上面的树中使用变量?

0 投票
4 回答
1090 浏览

haskell - Haskell 中的行为树

我听说 Haskell 中存在树实现的策略,但我还没有找到任何关于良好行为树替代方案的信息。

我的目标:给定一个表示状态的元组,将该元组提供给行为节点树的最佳模式是什么,每个行为节点都根据元组返回忙/错误/已完成/正在运行。该行为也可能改变元组(导致状态改变)。

嵌套节点可以根据其父节点的策略执行。例如,如果子节点返回“错误”,则不会评估更多子节点。另一种策略是即使返回错误状态也执行所有子节点。

我希望这是有道理的!

0 投票
1 回答
2264 浏览

artificial-intelligence - 行为树中的状态类动作

根据我对行为树的理解,每个行为都应该是一个简短的面向目标的动作,可以在几次迭代中完成。

例如,下面是行为树的图像:

在此处输入图像描述

现在让我们假设Drive To Enemy行为在树中需要多次迭代。因此,在每次通过Drive To Enemy时都会调用它,因为它现在处于运行状态。

问题是如果附近有敌人,我想呼叫Evade Enemy。考虑到Drive To Enemy总是被调用,我从来没有机会调用Evade Enemy可能应该被称为 Avoid Enemy)。

  • 无论当前正在运行什么动作,我都应该遍历 Tree EACH通道吗?
  • 我会以正确的方式解决这个问题吗?
  • 处理这种行为的正确方法是什么?
0 投票
3 回答
632 浏览

swift - 在 swift 子类 copy() 中可以这样做吗?

请注意,超级副本已实现,并且 SubClassType 不会向超级类类型添加任何属性,只会修改其功能。真的问,因为当我为行为树添加对 NSCopying 的支持时,我就这样输入了它,并且很惊讶抱怨者(编译器)没有生我的气。在这一点上,我对树结构的了解如此之深,还没有准备好进行测试,但有点想看看它是否可以工作。我是不是在想这个问题?

0 投票
2 回答
146 浏览

c# - AI中枚举器的替代方案

我正在开发一个多人游戏的服务器,该游戏必须控制数千个在世界各地运行的生物。每个生物都有一个带有心跳方法的 AI,如果玩家在附近,每隔几毫秒/秒就会调用一次,这样他们就可以做出反应。

目前,人工智能使用枚举器作为“例程”,例如

它们从“状态方法”中调用,这些方法在 foreachs 中调用,在心跳中产生,因此您在每个滴答声中都回到同一个位置。

自然也必须在循环中调用例程,因为否则它们不会执行。但由于我不是编写这些 AI 的人,而是不一定是程序员的新手,所以我在服务器启动之前预编译 AI(简单的 .cs 文件)。这给了我这样的 AI 脚本:

替换Do为迭代例程调用的 foreach 。

我真的很喜欢这种设计,因为 AI 易于理解,但功能强大。这不是简单的状态,但也不难理解/编写行为树。

现在到我实际的“问题”,我不喜欢Do包装器,我不喜欢预编译我的脚本。但是我想不出没有循环的任何其他方法来实现它,由于冗长和要编写这些脚本的人的技能水平,我想隐藏它。

我希望有一种方法可以在没有显式循环的情况下调用例程,但这是不可能的,因为我必须从 state 方法中让步。

而且我不能使用 async/await,因为它不符合我所依赖的 tick 设计(AI 可能非常复杂,老实说,我不知道如何使用 async 来实现它)。另外,我只是交易Do()await并没有太大的改进。

所以我的问题是:谁能想到摆脱那个循环包装器的方法?我愿意使用其他可以用作脚本的.NET语言(在服务器启动时编译它们),如果有一种以某种方式支持它的话。

0 投票
1 回答
157 浏览

wpf - 如何使用 WPF 构建行为树编辑器?

我们将使用 WPF 开发一个行为树编辑器。但是,我们对 WPF 完全陌生。如何生成代表树节点的形状组件,并且组件应该能够响应鼠标事件,如鼠标右键单击。

你对此有什么建议吗?

0 投票
1 回答
108 浏览

c# - 想开始统一,需要一些关于如何统一的基本想法——fy我的一些课堂想法

这是我的存储库,特别是技能系统类。我主要在 XNA 中工作,这些类可以很好地工作。

这些课程还没有完成,它们是根据上一篇文章的一些说明改进我以前的游戏的概念

我了解 Unity 的 ESC(实体组件系统)方法,并且我知道 GameObject 是什么以及组件如何工作的基础知识。

我编写的类管理诸如对单位的影响之类的东西,以及它们是如何应用的。

流程是:Behavior-> Effect->Ability

例如,IBehavior是行为的接口。

我有几个抽象类: ActivatableBehavior它是所有单个 proc 行为的抽象
TogglableBehavior,显然,可切换行为
LimitedTimeBehavior是定时行为的基础。
同样,我有DurationBehaviorTickBasedBehavior并且从LimitedTimeBehavior.

像这样的东西如何在 Unity 中实现?

如果有帮助,我的游戏应该相当简单,Little Fighter 2风格,基于服务器客户端等等......

如果这个问题太宽泛和/或不够清楚,请说出缺少的内容,我会尝试添加它!

0 投票
2 回答
107 浏览

java - 在 Java 中,如何创建一个在每个实例中方法都不同的类?

我正在开发一个基本的游戏 AI,我正在尝试使用一个名为Transition.

现在,Transition看起来像这样:

我想要做的是在每个Transition实例的方法getNextNode中指定逻辑。例如,某些转换将始终返回相同的,而其他转换可能会基于随机数生成器或其他逻辑返回多个节点之一。Node

我知道我可以通过创建一个继承自我Transition想要的每个行为的类来实现这一点,然后获取这些类的实例,如下所示:

作为一个主要在 Javascript 中工作的 Java 新手,这感觉很笨拙。创建一个我知道我只会实例化一次的新类感觉它应该是不必要的,特别是因为我可能要定义很多转换。有没有更好的方法可以定义我的转换如何工作?

0 投票
1 回答
1154 浏览

c++ - 在不使用 Blue Print 的情况下检索行为树

0 投票
1 回答
33 浏览

data-structures - 如何存储一组行为规则?

我有这个想法来创建一个玩家创建一个机器人并定义其行为的游戏。然后机器人被送到一个开放的世界(一个非常简单的世界)并且必须尽可能长时间地生存。

目前我正在尝试找出正确的数据格式,我将在其中存储行为定义。有什么建议吗?

行为应该被定义为一组简单的条件和动作。我正在考虑某种树结构,其中内部节点将是条件,而叶子将代表动作,但是我很难提出一些实际可用的东西。

非常感谢!