问题标签 [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 投票
1 回答
1176 浏览

c# - Unity - C# - NullReferenceException:对象引用未设置为对象的实例

编辑

我的问题不同(我认为..),因为最后一张图片允许我将 GameObject 设置为通信消息和通信消息。但是,在播放时,它会立即重置为无(文本)和无(按钮)。我不知道为什么会发生这种情况或如何解决这个问题!


我知道这个问题被广泛讨论,但我仍然无法解决这个问题。我希望有人可以为我提供解决方案。

我有的

我正在与Unity 的资产Behavior Designer合作。我正在制作行为树,并且在使用行为树引用时出现了问题。

首先,我的行为树是这样的:

行为树 - 搜索门

它搜索前门。如果找到它,它会朝它移动并与玩游戏的人交流。

这以前有效,但现在我将此行为树放在行为树参考中,如下所示:

行为树参考

当我双击引用时,会显示第一张图片。但是,哪里出错了,是这样的:

人工指令

问题

这是第一张图片中的人工指令节点。它不加载通信消息和通信按钮。当我加载相应的按钮时,它会在播放场景时立即重置。当我在 Behavior Tree Reference 中加载此行为时发生了这种情况,而当我从原始树自身播放此行为时,问题并未发生。

任何想法可能导致此问题以及如何解决此问题?

来自 HumanInstructions 的代码

0 投票
1 回答
258 浏览

neural-network - 编写智能游戏机器人

我正在参加一个编程竞赛,目标是编写一个可以玩特定游戏的机器人。游戏的目标是获得一定数量的积分。您控制多艘飞艇,您可以四处移动,捕获岛屿并导航携带宝藏的无人机。您与一个对手比赛,回合同时发生,并且有时间限制。您可以在一回合内移动多艘船和无人机。您可以使用 Python、Java 或 C# 对您的机器人进行编程。确切的细节无关紧要,只是每艘船每轮大约有 15 个选项(移动和射击),总体而言,每轮大约有 10000 个不同的选项(飞艇运动和射击的不同配置) 直到现在我参加了这个比赛天真,并且没有做任何特别聪明的事情(例如,如果靠近敌人,射击)。我已经阅读了极小极大算法,我真的很想在这里应用它(或类似的东西),你可以假设我可以判断一个状态的值。我的问题是每一回合都有大量的选择——这会产生一个巨大的分支因素,让我无法深入。

问题 1:有没有更好、更适用的方法来解决这个问题?也许是深度学习或类似的东西?问题2:有没有办法最小化分支因子?我已经阅读了有关 alpha-beta 和类似算法的信息,但似乎没有任何作用。

任何帮助将非常感激

0 投票
1 回答
116 浏览

design-patterns - 对人工智能感到困惑

我真的对人工智能很感兴趣,但我很困惑;我读了这篇文章:

https://gamedevelopment.tutsplus.com/tutorials/finite-state-machines-theory-and-implementation--gamedev-11867

它将复杂的 AI 算法分解为简单的 FSM,但不是应该学习的 AI,在本文中,从状态到状态的转换是简单的条件,我看不到这个 IA 应该学习的地方,这种转换是硬编码的,为什么作者称它为AI?

与行为树相同,它基本上是相同的概念但不同的、独立的状态集合,例如这篇文章:

http://blog.renatopp.com/2014/09/24/implementing-a-behavior-tree-part-1/

我认为唯一能学习的是神经网络,或者不是?

神经网络是人工智能,人工智能是神经网络,还是不一样?

我认为 AI 是一个“类别”,而神经网络是一个更具体的 AI

0 投票
3 回答
1879 浏览

lua - 我可以使用 Lua 的 require 来设置调用文件的环境吗?

有没有办法调用requireLua 文件,并让模块设置调用它的文件的环境?例如,如果我有一个定义函数RootSequence在表中定义的 DSL(域特定语言),我是否可以setfenv(1, dslEnv)在模块中有类似的东西允许我像全局变量一样访问这些函数?

我想到的目标是使用行为树 DSL,使我的定义文件看起来像这样(或尽可能接近):

不必明确地将Root,Sequence和 和Leaf明确地纳入范围,也不必对 . 之类的名称进行限定behaviortrees.Sequence

简而言之,我试图使定义文件尽可能干净,没有任何多余的行使树定义混乱。

0 投票
2 回答
1227 浏览

go - 从golang中父母的实现方法调用孩子的方法

我正在尝试在 go 中实现一个行为树,并且我正在努力解决它的组合功能。基本上,我需要Tick()在下面实现来调用由它嵌入的位置定义的方法。

这里是behavior.go

这是Behavior嵌入的结构:

让这个例子有意义的更多文件:

和这个:

这是它的用法示例:

我期待树通过打印这个来正常滴答作响:

但相反,我得到:

谁能帮我解决这个问题?

编辑:添加了一些额外的文件来说明问题。另外,我不明白反对票。我有一个诚实的问题。我只应该问对我有意义的问题吗?

0 投票
2 回答
1369 浏览

planning - 人工智能中的分层任务网络(HTN)

我无法理解 HTN 是什么。我相信我们希望将计划的所有小动作分​​解为更高级别的计划。

例如:

“乘坐巴士”是“去巴士”、“买票”、“坐下”等的HLA。

我错了吗?希望有一个简单的解释。

0 投票
2 回答
875 浏览

tree - 行为树和取消正在运行的事件

我在实现我的行为树时遇到问题。我想我了解基础知识,但我被正在运行的事件所困扰,特别是如何停止它们(或者更确切地说如何不停止它们)

假设以下简单树:

序列中的所有节点都是运行时间较长的动作,因此返回运行状态直到完成。

假设舞蹈是真的,角色会跳舞,这很好。现在talk_to_lady 为真,这意味着角色应该去那里与她交谈。虽然该任务确实具有更高的优先级并且我确实希望它发生,但我仍然希望让角色在移动到talk_to_lady while 循环之前完成当前的舞蹈节点(即动画)(尽管可能有其他情况我会不想等)。

我的解决方案是让树在 dance_move 动作上调用 Abort() 方法,但如果这返回运行状态,它将忽略 talk 动作,直到 dance_move 动作返回成功或失败。此外,如果树中较高优先级的事件是另一个动作而不是 while 节点,则它可能已经做出了可能干扰 dance_move 动作的状态更改。

我是否遗漏了什么,或者有没有我没有读过的解决方案?

0 投票
1 回答
78 浏览

model - 在 UE4 中按照某些移动模型移动角色

使用虚幻引擎 4,我想让游戏中的一些背景演员(人类、车辆)按照布朗模型、随机航点模型、随机高斯马尔可夫模型等移动模型移动,以便它们的速度、位置和加速度发生变化随着时间的推移是明确定义和沟通的。

有什么好的资源我可以参考,或者有人可以解释或指导我吗(可行性/过程/结果)

PS:我对使用 Unreal 进行游戏开发非常陌生。

提前致谢!

0 投票
1 回答
390 浏览

c# - 行为树:如何/何时在叶节点上返回“运行”状态?

我已经实现了一个简单的行为树算法,我打算在 Unity 项目中使用它。它主要按我的预期工作,除了我无法正确使用它,这可能是由于我的一些误解造成的。我的问题如下:

如果一个叶子节点需要很长时间才能完成,例如一个使游戏单元遵循特定路径的动作,这意味着叶子节点当前处于“运行”状态。但是,如果我返回状态,我将无法再运行该函数的其余部分,这意味着我无法到达目的地。

所以我的问题是:告诉我的树叶节点正在运行的正确方法是什么?

这是我在 ActionNode 课上得到的:

如果你需要查看其他类,都是基于这篇文章。为了保持线程清洁而链接它。

至于动作示例,请考虑以下内容:

我想知道的是,如果 WalkToTarget 需要很长时间,我该如何返回“运行”状态?

我已经阅读了许多关于该主题的不同文章,但我似乎无法掌握这些状态背后的确切概念。例如,我了解如何判断 Sequence 或 Selector 节点正在运行。

我脑海中闪过的唯一想法是,我会将剩余路径存储在我的敌人类的一个变量中,并在每个游戏更新滴答声中调用该方法,但我觉得这只是糟糕的编码。

叶节点是否应该在任何给定时刻返回“运行”?如果是这样,在哪些情况下会发生这种情况?任何例子将不胜感激!

0 投票
0 回答
96 浏览

c++ - BTSK 顶部的 C++ 行为树代码表示 Behavior() : m_eStatus(BH_INVALID) {} 是什么意思?

我是 C++ 编程新手,一直在研究 Behavior Tree Starter Kit 以构建新的 AI 框架。我很难理解行为树入门工具包代码。鉴于此用于游戏 AI 行为树的 C++ 代码,顶部的代码部分(似乎正在设置初始状态或其他内容)是什么意思?什么是虚拟作品?

这是完整的代码,也是什么virtual Status update() = 0;意思: