UE4中的AI行为树简单介绍
UE4引擎中可以实现简单AI的方式有很多,行为树是其中比较常用也很实用的AI控制方式,在官网的学习文档中也有最简单的目标跟踪AI操作教程,笔者在这里只作简单介绍。
AIController->和playcontroller一样,但区别于玩家控制器,AIController负责管理的是AI,也称AI控制器。
Blackboard->黑板,作用是用来标记关键值,为AI存储或者提取相关记忆。
Behavior Tree->行为树,从黑板里读取关键值,做出决定和执行。
Animation BluePrints->动画蓝图 配合行为树调用,之后详细讲。
Task->任务
Services ->常用于检查和更新黑板.
NavMeshBoundsVolume->导航
拉出NavMeshBoundsVolume,导航网格,按下P键可以看到场景变成绿色,证明构建成功。导航网格是AI行为中必不可少的,在其范围内是AI可以执行相关行为的地方,而出了这范围就无法再生效。图示中的LinkeProxy表示连接跳跃,Modifier表示修正,具体用法可以自己实验。

第二步,创建AIPawn,AIController以及行为树和黑板,任务Task等,(Task的创建是由蓝图继承Task类创建的,其他的右键创建)。

在AIController跑起行为树,并将自己创建的AIController替换到要执行的AI上。


黑板里面增加一个变量TargetLoc,用来储存AI移动的目标坐标,这里就只做AI随机行走。

Task(Idle)里面的设置,蓝图如图内解释,记得最后要执行完成函数,变量Idle是用来储存要移动的目标点坐标,储存进黑板里刚刚设置的变量TargetLoc,在行为树里用来给其他函数进行调用。

关于行为树里面的设置如下

这里说下两个节点
Selector 从左到右在其子项中运行,直到其中一个成功才返回。
Sequence 从左到右在其子项中运行,直到其中一个失败返回。
这样行为树的意思就是执行下来从左往右,先Idle执行随机目标点的储存,然后等待5S,接着进行MoveTo移动,MoveTo函数的坐标点调用使用的就是黑板里刚存储的TargetLoc

简单的Demo完成了,接着就去场景跑吧。
UE4中的AI行为树简单介绍的更多相关文章
- Python中的yield生成器的简单介绍
Python yield 使用浅析(整理自:廖 雪峰, 软件工程师, HP 2012 年 11 月 22 日 ) 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关 ...
- mysql中set和enum使用(简单介绍)
简单介绍 SET类型 在创建表时,就指定SET类型的取值范围. 属性名 SET('值1','值2','值3'...,'值n') 其中,“属性名”参数指字段的名称:“值n”参数表示列表中的第n个值,这些 ...
- Java中Synchronized的用法(简单介绍)
简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...
- java中equals以及==的用法(简单介绍)
简单介绍 equals方法是java.lang.Object类的方法 有两种用法说明: 一.对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同. 1.“==”比较两 ...
- NDK中android.mk文件的简单介绍和第三方库的调用
先贴一个样例,然后解释一下: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mydjvuapi SRC_FILE_ ...
- 网络测量中基于Sketch方法的简单介绍
Sketch介绍 为什么要用Sketch 网络流主要根据五元组.主机地址.包的大小来分类.在网络中存在各种各样的包,如果按照上述分类方法,对每一种包都分配一个计数器来储存,虽然测量准确,那么存放计数器 ...
- Python中的装饰器的简单介绍02
这篇博文转载自伯乐在线的12步轻松搞定python装饰器,重构成python3. 1. 函数 在python中,函数通过def关键字.函数名和可选的参数列表定义.通过return关键字返回值.我们举例 ...
- 【Linux】Linux中Swap与Memory内存简单介绍
背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...
- [svc]Linux中Swap与Memory内存简单介绍
swap区域是干嘛的 cpu 内存(不常用到的进程swap区) 磁盘 当内存没有可用的,就必须要把内存中不经常运行的程序给踢出去.但是踢到哪里去,这时候swap就出现了. 背景介绍 对于Linux来说 ...
随机推荐
- .Net4.5新特性:正则表达式超时介绍
“Regex” 在数据验证方面最受欢迎.考虑到您可能对“Regex”完全陌生的.请参考我介绍Regex如何运作的视频. But because of the typical parsing logic ...
- centos6安装docker,先升级系统内核
安装docker,其他的源可能导致你的内核和docker的版本不一致,需要将系统内核升级至3.x 查看当前系统版本 cat /etc/issue 查看当前内核版本 uname -r #uname -a ...
- c#基础学习(0708)之静态类
再静态类中,所包含的所有成员都是“静态成员” 不是所有的静态成员都必须卸载静态类中 静态成员时属于“类”的,不是属于具体“对象”的,所以访问静态成员的时候不能通过对象来访问(对象.属性名),只能通过“ ...
- winform 导出datagridview 到excel
数据不多可以用下面的方式方法,如果数据较大,不建议这样使用,可能会比较卡如果电脑上没有Microsoft.Office.Interop.Excel.dll去找DLL下载站下载即可 需要先导入这个dll ...
- 通过微信分享链接,后面被加上from=singlemessage&isappinstalled=1导致网页打不开
微信分享会根据分享的不同,为原始链接拼接如下参数: 朋友圈 from=timeline&isappinstalled=0微信群 from=groupmessage&isappi ...
- Oracle时间换算:日,月,周数,星期,年
http://blog.csdn.net/liangweiwei130/article/details/37930383 Oracle时间换算,留做记号!
- 手把手教你写一个java的orm(一)
写之前的说明 其实吧. 这个东西已经写好了,地址在:https://github.com/hjx601496320/JdbcPlus 这系列文章算是我写的过程的总结吧.(恩系列,说明我可能会写好久,╮ ...
- 《Programming iOS 7》读书笔记 - 窗体大小与状态栏
1.从iOS7开始,状态栏开始变为透明的,根识图占领了整个窗体,包括状态栏后面的20像素高的区域,这种样式无法被改变.iOS6的状态栏是不透明的,窗体的尺寸通常会比屏幕的尺寸要小,可以设置窗体的尺寸为 ...
- Android - Builder模式
https://github.com/simple-android-framework-exchange/android_design_patterns_analysis/tree/master/bu ...
- ZAB 算法
ZAB (Zookeeper Atomic Broadcast ) zookeeper原子消息广播协议 保证:分布式数据一致性 所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为 ...