赞
踩
行为树设计器是为每个人(程序员、艺术家、设计师)设计的行为树实现。行为设计器提供了强大的 API,使您可以轻松创建新任务。它提供了直观的可视化编辑器和广泛的第三方集成,使创建复杂的人工智能成为可能,而无需编写一行代码。
本指南将概述行为设计器的各个方面。如果您刚刚开始使用行为树,我们有一个“行为树基础知识”。
Behavior Tree Basics: What is a Behavior Tree? [PuLuwzgYB4g]
此页面还提供了行为树的快速概述。使用行为设计器,您不需要了解底层行为树实现,但最好了解一些关键概念,例如任务类型(操作、复合、条件和装饰器)。
当您第一次打开行为设计器时,您将看到以下窗口:
行为设计器中有四个部分。从下面的屏幕截图中,第 1 部分是图形区域。您将在其中创建行为树。第 2 部分是属性面板。您可以在属性面板中编辑行为树的特定属性、添加新任务、创建新变量或编辑任务参数。第3部分是行为树操作工具栏。您可以使用下拉框选择现有行为树或添加/删除行为树。最后一部分,即第 4 部分,是调试工具栏。您可以在此面板中启动/停止、单步执行和暂停 Unity。此外,您甚至在开始执行树之前就会看到树的错误数量。
第 1 部分是您将要使用的行为设计器的主要部分。在本部分中,您可以创建新任务并将这些任务排列到行为树中。首先,您首先需要添加一个行为树组件。行为树组件将充当您刚刚开始创建的行为树的管理器。您可以通过右键单击图形区域并单击“添加行为树”或单击第 3 部分操作区域中“锁定”旁边的加号按钮来创建新的行为树组件。
添加行为树后,您就可以开始添加任务。通过右键单击图形区域或单击第 2 部分(属性面板)中的“任务”选项卡来添加任务。还可以通过按空格键并打开快速任务搜索窗口来添加新任务:
添加任务后,您将看到以下内容:
除了您添加的任务之外,还会添加条目任务。入口任务充当树的根。这就是入门任务的唯一目的。序列任务有错误,因为它没有子任务。一旦添加了孩子,错误就会消失。现在我们已经添加了第一个任务,让我们添加更多任务:
您可以通过从序列任务的底部拖动到选择器任务的顶部来连接序列和选择器任务。对其余任务重复此过程。如果您犯了错误,您可以选择一个连接并使用删除键将其删除。您还可以通过单击任务并拖动它来重新排列任务。
行为设计器将以深度优先的顺序执行任务。您可以通过将任务拖动到同级任务的左侧/右侧来更改任务的执行顺序。从上面的截图来看,任务将按以下顺序执行:
序列A、选择器A、序列B、动作A、动作B、动作C、选择器B、动作D、动作E
现在我们已经创建了一个基本的行为树,让我们修改其中一项任务的参数。选择 ActionC 节点以在属性面板中显示检查器。在这里可以看到我们可以重命名任务,设置任务为即时任务,或者输入任务注释。此外,我们可以修改任务类包含的所有公共变量。这包括分配在行为设计器中创建的变量。在我们的例子中,唯一的公共变量是旋转速度。我们设置参数的值将在行为树中使用。
属性面板中还有其他三个选项卡:变量、任务和行为。变量面板允许您创建在任务之间共享的变量。有关更多信息,请查看变量主题。任务面板列出了您可以使用的所有可能的任务。这与右键单击并添加任务时找到的列表相同。此列表是通过搜索从操作、复合、条件或装饰器任务类型派生的任何类来创建的。最后一个面板(行为面板)显示您首次创建行为树时添加的行为树组件的检查器。有关每个选项的作用的更多详细信息,请参见“行为组件概述”页面。
行为设计器窗口中的最后一个部分是操作工具栏。操作工具栏主要用于选择行为树以及添加/删除行为树。以下操作被标记:
行为树是许多游戏中使用的流行人工智能技术。Halo 2 是第一个使用行为树的主流游戏,在Halo 2 中如何使用行为树的详细描述发布后,行为树开始变得更受欢迎。行为树是许多不同人工智能技术的组合:分层状态机、调度、规划和动作执行。它们的主要优点之一是易于理解并且可以使用可视化编辑器创建。有人甚至会说它们是现代人工智能的基石:
在最简单的层面上,行为树是任务的集合。有四种不同类型的任务:动作、条件、复合和装饰器。动作任务可能是最容易理解的,因为它们以某种方式改变游戏的状态。条件任务测试游戏的某些属性。例如,在下面的树中,AI 代理有两个条件任务和两个动作任务。前两个条件任务检查特工视野内是否有敌人,然后确保特工有足够的子弹来发射武器。如果这两个条件都成立,则将运行两个操作任务。其中一个动作任务是射击武器,另一个任务是播放射击动画。当您形成不同的子树时,行为树的真正威力就会发挥作用。两个射击动作可以形成一棵子树。如果早期的条件任务之一失败,则可以创建另一个子树来执行一组不同的动作任务,例如逃离敌人。您可以将子树分组在一起以形成高级行为。
复合任务是包含子任务列表的父任务。从上面的示例中,复合任务被标记为顺序和并行。序列任务运行每个任务一次,直到所有任务都运行完毕。它首先运行条件任务来检查敌人是否在视线范围内。如果敌人在视线范围内,那么它将运行条件任务来检查代理是否还剩下子弹。如果代理有足够的子弹,那么将运行并行任务来射击武器并播放射击动画。序列任务一次执行一个子任务,而并行任务则同时执行其所有子任务。
最后一种任务是装饰器任务。装饰器任务是一项只能有一个子任务的父任务。它的功能是以某种方式修改子任务的行为。在上面的示例中,我们没有使用装饰器任务,但如果您想阻止任务过早运行(称为中断任务),您可能需要使用装饰器任务。例如,代理可能正在执行诸如收集资源之类的任务。然后,它可以执行一个中断任务,如果附近有敌人,该任务将停止资源收集。装饰器任务的另一个示例是重新运行其子任务 x 次的装饰器任务,或者装饰器任务不断运行子任务直到成功完成。
到目前为止,我们遗漏的主要行为树主题之一是任务的返回状态。您可能有一项需要超过一帧才能完成的任务。例如,大多数动画不会在一帧内开始和结束。此外,条件任务需要一种方法来告诉其父任务条件是否为真,以便父任务可以决定是否应该继续运行其子任务。这两个问题都可以使用任务状态来解决。任务处于三种不同状态之一:正在运行、成功或失败。在第一个示例中,只要拍摄动画正在播放,拍摄动画任务就具有运行的任务状态。确定敌人是否在视线范围内的条件任务将在一帧内返回成功或失败。
Behaviour Designer 采用了所有这些概念,并将其封装在一个易于使用的界面中,其 API 类似于 Unity 的 MonoBehaviour API。行为设计器在标准安装中包含许多复合类和装饰器类。动作和条件任务更加特定于游戏,因此包含的任务并不多,但示例项目中有很多示例。可以通过扩展其中一种任务类型来创建新任务。此外,还创建了许多视频,以使学习行为设计师尽可能简单。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。