【U3D】初识Behavior Designer行为树(一)

本系列文章由@萌萌的一天出品,未经博主允许不得转载。  

Behavior Designer行为树插件介绍

       Behavior Designer是U3D AssetStore上很优秀的一款插架,它在基于Behaviour
Tree相关原理的基础上拓展出了更加复杂的模块,并且运用了很强大的人工智能技术。第一个将Behaviour Tree概念应用到游戏的产品是Xbox上的《Halo 2》,之后更多的游戏开发者选择应用Behavior Tree而不是Hierarchical
FSM来控制人工智能。下面说说行为树的概念吧。

简单来说,行为树就是将所有可能发生的状态进行模块化,将状态抽象成一个个的行为,然后在每个行为之间可以增加复合节点(Composites
Node)进行每个节点之间逻辑控制,装饰节点(Decorator Node)进行子节点状态的控制,行为节点(Action Node)进行具体行为的处理,条件节点(Conditionals Node)用于判断该条件是否成立等。关于上述节点的具体内容会在之后进行详细的解释,接下来说说如何在U3D中使用Behavior Designer这款插件。

行为树插件下载方式

Behavior
Designer这款插件可以很容易得在AssetStore上搜索到,目前售价是$75,推荐商用者从官方的平台上进行购买和使用,便于今后的功能维护和持续更新等。

不过对于初学者来说,75美元可能太贵。下面放出一份1.5.5版破解版插件下载地址:

点我点我点我       提取码:hms9

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Behavior Designer行为树的简单使用

将包导入到Unity中之后,我们可以看到在菜单面板上出现了“Tools”一项,通过点击它下边的“Behavior Designer”--->

"Editor",我们就可以如下的行为树面板了。

左侧面板表示行为树中的各种节点,比如有我们之前介绍的复合节点(Composites Node)、装饰节点(Decorator
Node)、行为节点(Action Node)、条件节点(Conditionals Node)等,下级中的每一种选项都代表这不同的节点功能。

右侧面板是行为树逻辑主窗口,你添加的每一种行为都会显示在这个面板底下。当我们在游戏中选中任意一个Gameobject,之后我们可以通过右键点击面板--->点击"Add
Behavior Tree",给这个物体上添加一个行为树,此时我们会发现这个物体上也会自动挂上一个叫做Behavior Tree的脚本组件,点击"Open"可以方便快捷的打开行为树主窗口。

接下来用一个简单的例子来说明行为树是的具体创建过程,比如让一个坦克在两点之间自动巡逻。

我使用了Unity官方的一个模型场景,首先在场景中创建一个坦克,以及坦克即将要巡逻的两个点WayPoint1,WayPoint2,比如下图的方式:

点击坦克,从菜单上的“Tool”进入行为树逻辑主窗口进行行为树创建(或者直接添加BehaviorTree组件)。之后从左侧面板下找到“Patrol”(巡逻)行为,添加到主窗口,并设置相应的行为属性(移动速度,转身速度,巡逻点等)。

注意Patrol行为的说明,它是使用NavMesh进行模拟巡逻的。

所以我们需要给坦克添加NavMesh组件,并且还要对整个场景的Navigation进行烘焙。

设置完之后,我们发现坦克就可以正常的在两点之间巡逻了:

以上只是一个行为树使用的简单例子,可能新手对里面有一些东西,比如节点属性、NavMesh等不太理解,这些会在之后的博文中会做详细的解释。

总之欢迎大家能够踊跃进行讨论,欢迎各种交流指正~~~~~~~~~~~~~

时间: 2024-11-05 16:36:15

【U3D】初识Behavior Designer行为树(一)的相关文章

Behavior Designer 行为树入门

本篇教程将带领大家熟悉 行为树插件之Behavior Designer .本篇教程不会出现过多的代码,故也适合策划学习.你将学习到一种新的动画与AI的解决方案使即使用Behavior Designer来设计动画的播放逻辑与AI的行为逻辑, 如果你用过PlayerMaker那么再好不过了,你可以Behavior Designer当作是PlayerMaker的强化版但有不同于PlayerMaker.当然我不是在这里推崇这种插件,而是了解另一种设计思路.当然在现在国内对于Behavior Design

Unity中的行为树插件:Behavior Designer

外国技术人员的插件:http://www.opsive.com/assets/BehaviorDesigner 目前公司内部比较推崇的行为树插件就是这个,虽然有其他几个同类的竞品. 说一句题外话,优秀的插件总是外国人开发的,并且可以将插件开发做成一个小工作室或者个人的主要收入来源,但没看到国人有类似的作品出现. 行为树的概念出现已经很多年了,总的来说,就是使用各种经典的控制节点+行为节点进行组合,从而实现复杂的AI.目前在游戏中一般复杂的AI都可以看到行为树的身影,简单的AI可以使用状态机来实现

基于行为树的AI 与 Behavior Designer插件

优点: 0.行为逻辑和状态数据分离,任何节点都可以反复利用. 1.高度模块化状态,去掉状态中的跳转逻辑,使得状态变成一个"行为". 2."行为"和"行为"之间的跳转是通过父节点(Composite)的类型来决定的(例如sequence或者selector) .比如并行处理两个行为,在状态机里面无法同时处理两个状态. 3.通过增加控制节点的类型,可以达到复用行为的目的. Behavior trees are a combination of man

[Unity插件]Behavior Designer:制作敌人AI

一个简单的敌人AI: 当处于监视范围内,跑向玩家:当处于攻击范围内,攻击玩家:否则呆在原地.用行为树表示就是: 其中当前行为树的变量与全局变量为: 效果图: 制作简单的AI确实不需要写代码,不过配置起来确实有点麻烦了.可以根据需求,编写自定义的节点来组成复杂的AI. 当游戏需要大量的AI时,Behavior Designer确实是一个不错的选择,因为自定义的节点可以不断被重用了.

Behavior Designer中的内置消息机制

最近在用Behavior Designer,其中需要用到消息机制,看了一下行为树其中自带了这套东西 注册 Owner.RegisterEvent<string>("Message", Message); 反注册 Owner.UnregisterEvent<string>("Message", Message); 发送消息 Owner.SendEvent("Message", "Finished B Action&

Behavior Designer笔记

1.总览 Behavior Designer是一个行为树程序.他为所有人设计-程序美工策划.Behavior Designer提供很好很强大的API,允许你愉快的进行玩耍.他和PlayMaker和uScript插件完美结合,提供直观可视化编辑器类.你可以不写一行代码也能创造复杂AI. 这篇文章将为Behavior Designer所有方面进行一次总体介绍.如果你不知道啥子是行为树,现在老子就告诉你. 行为树是一种流行AI技术.许多游戏都用到,HALO2是第一款使用行为树的主流游戏.HALO2制作

Behavior Designer扩展

BehaviorManager.instance.Tick(behaviorTree); 卸载update里u3d直接卡死 = = SharedVariable直接赋值会改变他的引用关系,必须用XXX.Value赋值 = = http://www.opsive.com/assets/BehaviorDesigner/documentation.php 两种自定义Task:  Task 和 Parent Tasks 基础task流程 ( Conditional Task  和   Action T

Behavior Designer中Wait节点的坑

某一组行为放在并行节点下,并且包含Wait节点动作.当等待时间不达到时它会返回Runing 造成整个行为树阻塞 应该考虑写一个CD时间装饰器来解决此类问题,当CD时间未到返回Failure

[Unity插件]Behavior Designer:SharedVariable与GlobalVariable

设置SharedVariable与GlobalVariable: 上面的SharedV是SharedVariable,变量范围是当前行为树: 下面的GlobalV是GlobalVariable,变量范围是所有的行为树. SharedVariable与普通变量的区别: SharedVariable可以引用上面设置的变量,省去了拖拽的操作,如果同一个物体被多个节点引用,则可以将该物体设置为SharedVariable using UnityEngine; namespace BehaviorDesi