如果觉得不会做,就多做几次就好了,之前参加比赛匆匆各种百度课程,虽然功能实现了但是行为树逻辑乱七八糟,昨天本来跟着中文文档做了一遍但发现莫名其妙AI 就是不动,于是又看了视频,最后二者整合起来,自己感觉很不错,哈哈~总之整理一下吧,有需要的大家可以看一下。

1. 准备工作

(1).AI使用UE4第三人称模板复制了一份

(2)然后,重命名为EnemyCharacter后 打开蓝图
(3)在内容了浏览器里新建一个控制器,右键BluePrintClass ,z最下面AllClasses 中搜索AIController,选择后重命名为EnemyContrlloer 这个东西是之后把AI联系起来的关键。

(4)打开EnemyCharacter 这个AI角色蓝图,删除EventGraph里所有逻辑,因为我们不需要对AI进行手动控制,同时删除组件里面的摄像机部分。最后将右侧细节面板中Pawn栏目下的AIController Class选为我们刚才新建的EnemyController.
到此准备工作完成,接下来正式建行为树、黑板等。

2.创建黑板Blackboard和状态Enumeration

黑板相当于AI的大脑
artificial intelligence —blackboard,命名为BB_Enemy

打开BB_Enemy 里面通过添加KEY来设置跟踪的内容 在detail里面选择内容的类型和他的父类
(1).object类型的父类为actor的key—命名:EnemyActor(这个是指对于AI 的敌人,也就是玩家)

(2)vector类型的key,用来记录AI不追逐玩家时可以移动到的关卡位置,命名:PatrolLocation
(3)enum类型的key,用来规划AI不同状态 命名为:State

这里,至此我们目前需要的黑板的数值都建立完毕,接着我们可以先建立一个Enumeration 存储State状态,命名为:AIState

(4)打开AIState ,添加两个状态Idle 和combat(此时不用截图了)
记得在黑板里的State的细节面板,勾选好EnumStype

3.创建行为树

.行为树BehaviorTree–数据可视流
★★★★行为树 会从左到右和自上而下执行,因此节点的排列很重要
▶将行为树和黑板链接起来:新建行为树BT_Enemy并打开,右侧AI栏目下选择你的BB_Enemy黑板,通常此时默认就是这个。

(1)从root 下拖拽选择selector 命名为:AIRoot(默认的Root:可用于配置行为树的属性并指定它所使用的黑板资源,而这个selector的root是行为树真正的“根”,它将在子分支之间切换)
接下来我们需要添加一个服务,点击后默认打开,我们需要重命名:BTS_Vision,这是判断AI是否看到玩家,我们这么想,AI无非就看到玩家追逐,没看到随机点巡逻。接下来我们进行该服务的蓝图逻辑编写。至此你终于可以写蓝图逻辑 了。


(2)打开BTS_Enemy
首先我们找到Event ReceiveTickAI这个事件,然后添加事件内容。首先我们需要一个条件判断是否玩家在AI视野范围内,那么通常这个范围应该在AI前方的扇形区域,故而我们需要规范出这个区域,先规范出距离差:获取玩家的位置减去AI的位置(向量有方向,所以注意减数和被减数)然后Normalize归一化 ,距离有了以后,我们需要告诉AI 是他的正前方位置左右55度方向上的玩家被感知,详细见图。(其中dot属于向量部分,我搜索了一篇文章供参考:
链接奉上请自行点击)

[Nornalize:归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。
归一化的目的简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。]


(3)后面连接是判断语句,也就是Branch分支,条件就是我们刚写的上面的逻辑,如果条件成立,也就是AI感知到了玩家,那么我们将对黑板里的数值(object 和 state进行更新)
需要建立两个公共变量 EnemyActor和State 名字对应之前黑板里的变量名方便使用,其类型均为:Blackboard Key SelectorStructor.

如下图连接:

(4)此时基本BTS_Enemy写完,我们来到行为树,给AIRoot添加该服务(注意服务里对应都勾选好,截图里面State笔者当时马虎了,造成后面AI一直跟着我,太可怕了~)

注意右侧细节面板对应选择好:

然后下面添加任务Move To

(5)下面我们行为树需要调用起来,那就是打开我们之前说的关键的蓝图控制器EnemyController:
如图:
到此,你可以测试了。你会发现你的AI很恐怖的一直追随你。

4.AI追逐和跟丢目标

(1)首先我们考虑,AI 看到我们后要转向我们,然后追我们,这个行为肯定和他巡逻的时候是不一样的,所以我们需要修改AI 的Max Walking Speed 的数值,你可以直接修改,也可以写一个函数方法。
写函数会比较规范,我们下面打开EnemyCharacter 新建一个函数UpdateWalkintSpeed.编译后给他一个输入值 UpdateSpeed,然后引脚set max walkingspeed ,修改这个函数的对象为组件最下面的characterMovemnet
如图
(2)然后打开行为树,我们需要在AIRoot下面添加一个sequence ,然后给Sequence添加装饰器,也就是一个判断的条件,如图添加黑板装饰器

(3)新建一个task :BTT_ChasePlayer用来设置追逐速度,请看图吧


然后继续添加我们刚才新建的一个任务追逐速度的任务BTT_Enemy 和move to 如图:记得把BTT_ChasePlayer里速度自己按需求该数值。
这里是这样的:AI 先进行一个状态选择,因为我们没有写巡逻,所以只有战斗状态一条分支,当AI感知到玩家后,先转向玩家,然后更新速度,最后跑向玩家,一旦玩家逃出AI的追逐范围,AI又变成闲置状态。

这里多加了一个转向,我们就还需要在enemyCharacter里面勾选。


最后注意把StateIsCombat这个Sequece设置为Self.此时就真正实现了AI追着你跑和跟丢后静置了。

之后会继续写AI巡逻,今日宝宝实在累啦,休息啦~~~
那个normalize我还百度到一个视频,大家想看就看吧视频点击

UE4 AI行为树(一)AI追逐玩家相关推荐

  1. 游戏ai 行为树_游戏AI –行为树简介

    游戏ai 行为树 游戏AI是一个非常广泛的主题,尽管有很多资料,但我找不到能以较慢且更易理解的速度缓慢介绍这些概念的东西. 本文将尝试解释如何基于行为树的概念来设计一个非常简单但可扩展的AI系统. 什 ...

  2. ue4蓝图和ai的区别_UE4 AI教程

    距离上一次免费发布了UE4移动端模板:地址:连接,然后拆分了AI模块,今天来单独的把UE4里面AI的逻辑来讲一讲,这个视频配合工程,来讲一讲AI的制作原理,我们理解原理后,其实制作起来就非常简单. 这 ...

  3. ue4蓝图和ai的区别_UE4 AI基础

    本文只是介绍AI使用到的基础组件的作用的理论介绍,对你马上能上手操作制作一个AI用处不大.请读者注意, AIPawn/AICharacter/AI角色AI角色,就是AI的角色蓝图 与玩家操控的角色一样 ...

  4. 谈一谈游戏AI - 行为树

    不要用过去的成绩看未来,而是要用未来的眼睛看现在. 郑重说明:本文适合对游戏开发感兴趣的小白初学者,本人力图将事物用简单的语言表达清楚,但水平有限,能力一般,文章如有错漏之处,还望批评指正. 在本系列 ...

  5. AI行为树的基础运作原理

    欢迎捉虫! 之前我研究了一下基于switch case语句的FSM状态机的使用,后来遇到了很多问题. 比如当角色的行为很多时,代码结构相当混乱(你需要考虑每一种状态之间的联系). 所以,当角色的行为愈 ...

  6. 人工智能_游戏AI –行为树简介

    人工智能 游戏AI是一个非常广泛的主题,尽管有很多材料,但我找不到能以较慢,更易理解的速度缓慢引入这些概念的东西. 本文将尝试解释如何基于行为树的概念来设计一个非常简单但可扩展的AI系统. 什么是AI ...

  7. 游戏AI - 行为树Part2:框架

    上次提到,行为树可以让代码更加模块化,也可以提高重用性.这次我们就来看看一个行为树框架是什么样的. 如果你对行为树比较陌生,可以先浏览一下游戏AI - 行为树Part1:简介. 关键词 在展开之前,我 ...

  8. 人类惨败 OpenAI轻取Dota战队 AI为什么总是吊打游戏玩家

    关注网易智能,聚焦AI大事件,读懂下一个大时代! 在刚刚秀完可以像人手一样抓取和操纵物体的Dactyl 机械手系统之后,OpenAI迎来又一次令人瞩目的人机大战. 这是家在2015年由马斯克等诸多硅谷 ...

  9. Tianchi发布最新AI知识树!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 来源:Tianchi,方向:AI内容 近期Tianchi开放了9大训练营 ...

最新文章

  1. Debian/Ubuntu--blade安装与使用
  2. java 班级号_Java 学校班级回忆录网站管理系统
  3. 深度丨全球14家顶尖 AI 产业巨头深度学习实力及战略分析
  4. ExpressQuantumGrid.Suite.v6.30 在Delphi 7中的安装 收藏
  5. java 保护内存操作的方法
  6. python如何实时查询oracle_python针对Oracle常见查询操作实例分析
  7. Rocket - decode - 最小项与最大项
  8. matlab中mod(10 3),matlab的rem()和mod()函数
  9. 产品设计体会(8007)产品经理的主要职责
  10. 数据面最流行的工具包dpdk的前世-现在和未来
  11. win7共享wifi之bat文件
  12. 机器学习中的正则化项(L1, L2)的理解
  13. nmn对身体有用吗,nmn修复效果怎么样,其中的原理你要知道
  14. 微信头像存储mysql数据库
  15. goahead实现文件下载功能实例详解
  16. 「GoTeam 招聘时间」星图比特 后端开发工程师(上海)
  17. 【前端练习】根据JSON数据页面动态形成表格
  18. 天线系统的定义、性能参数、天线种类及馈线系统
  19. 虚拟大师VMOS_Pro_官方ROM离线VIP包及APK安装包
  20. HJT212标准C语言,HJT212-2005污染源在线自动监控(监测)系统数据传输标准().pdf

热门文章

  1. 【mac】查找字体路径
  2. 计算机作业批改反思,作业批改心得_教学反思.doc
  3. 对抗性自动编码器系列--对抗自动编码器AAE的原理及实现-从任意随机数重建手写数字
  4. win10系统下安装theano+lasagne
  5. 唐诗宋词学习·126~130节
  6. 前端学习--实现二维码识别功能
  7. Django——mako的配置与使用方法
  8. python中seq是什么_python seq
  9. springboot整合freemarker出现空指针异常的解决办法
  10. 树莓派用网线连接笔记本IP地址无法连通解决办法