这个行为树给我恶心的都想吐,我用的是4.24,跟着官网做达不到那个效果,跟着视频做也达不到那个效果,跟我弄的非常不耐烦,最后终于在今天整出来了。有的地方用了一下我自己的逻辑。//诸位依靠教程的,一定得自己动脑思考,锻炼独立编码的能力,不要“过度”依赖教程,要学会举一反三

我用的是第三人称模板

OK,我来给你从1讲到8,其中一个没啥用

首先第一个,是行为树里面的一个服务,

ps:若不知道行为树服务是什么的话参考官方文档:https://docs.unrealengine.com/zhCN/Engine/ArtificialIntelligence/BehaviorTrees/BehaviorTreesOverview/index.html

里面的逻辑我当你说一下,获取玩家坐标,AI坐标,玩家到AI坐标相减画一条线,最后合一,好像叫什么Nor......,我们就记他Nor,这个是合一向量的,

之后去前方坐标,Forward,这两个东东点乘,也就是dot,然后去反余弦值,判定,是否在55°角之内,设一个if分支

如果是,则说明看见玩家了,采用追逐(Attack),如果没有,采用不追逐(Idle)

ps:若不知道点乘:https://blog.csdn.net/kebu12345678/article/details/80724336    这个博客可以参考一下。

第二个,黑板,节点:TargetActor,Object类型,底下要设为Actor;枚举类型:目的是定义AI攻击还是不攻击(巡逻),两种状态,Idle,Attack,均为枚举类型

那么第一个蓝图,行为树服务蓝图就可以设置黑板值了,蓝图SetBlackBoardASObject,新建一个变量,类型为BlackBoardKey,名字TagetActor,把它和蓝图SetBlackBoardASObject键值连上,还有个Object就是GetPlayerCharacter,我是凭记忆写的不一定正确,把它和Object连上。

设置枚举,SetBlackBoardAsEnum,枚举在黑板上确认使用上图第5个,也就是AI_Enum,枚举选项选择那个Attack,不是idle。因为已经发现玩家了,应该是攻击

忘了说了第一个一开始调用的是 事件 Tick AI,我是凭记忆写的,每秒更新AI,

在if那个false分支上,重复上面的,调用Idle,好像还有个事件,再次调用AI,好像是A打头的,事件  A......   AI......

在那里再调用一遍SetBlackBoardAsEnum 值为Idil

在这里设置速度,因为我是默写,所以把思路写下来:

首先先GetMovementComponent,castToMoveComponentCharacter,SetMaxWalkSpeed,

我头疼就头疼在这儿,因为我一设置单独的速度task,或者函数,寻路就不成功,所以我把它给设置到服务里了。

这个是行为树,我追逐玩家和巡逻的行为树,

第4个,控制蓝图,一定要把AIcharacter类里面的AI控制改为这个我们新建的AI控制,我这个是AI_Controller,设置的话在组件图标中最上面的,细节面板应该能看到,第8个就是我的character,我把第三人称那个给拷贝了一份,然后清空里面的事件。摄像机和弹簧臂我都给删了。

控件蓝图需要写一个EventBegin,就是默认三个事件中的最上面的那个,让RunBehaviourTree与他连接。

别忘了把BehaviourTree设置为我们新建的Tree,我这个是AI_BT,蓝图节点有选项的,选择我们建的蓝图就可以了

第6个巡逻,我不写了,太累了,上图讲一下重点。

主要用到MoveToLocation,移动到坐标,下面的三个是检测移动成没成功,成功后,FinishExcute结束事件,我觉得没有必要,直接一个结束事件得了

ReceiveExcuteAI,这个节点是此任务运行时,就是行为树指到到你这个任务时出发的,上面4个是设置速度的,那个GetRandomLocation...的是获取随机坐标,

我直接用ActorLocation。

上面那个树节点MoveTo是移动到,选择器上的装饰器设置如下:

开发一定要自己动脑,不要“过度”依赖教程

后记:Nav...mesh打头的在编辑器界面左面搜索,这个是路径追踪,让它覆盖游戏中的所有物体,然后按下P键即可设置完毕,设置完是绿色的。

迈布-----UE4AI自动巡逻与攻击的更多相关文章

  1. 分布式拒绝服务攻击 DDoS

    分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒 ...

  2. 基于Armitage的MSF自动化集成攻击实践

    基于Armitage的MSF自动化集成攻击实践 目录 0x01 实践环境 0x02 预备知识 0x03 Armitage基础配置 0x04 Nmap:Armitage下信息搜集与漏洞扫描 0x05 A ...

  3. Armitage攻击winxp——P201421410029

    实验简介 实验所属系列: 安全工具使用 实验对象:本科/专科信息安全专业 相关课程及专业: linux基础.网络安全 实验类别: 实践实验类 预备知识 Armitage基本介绍       Armit ...

  4. Linux下防御DDOS攻击的操作梳理

    DDOS的全称是Distributed Denial of Service,即"分布式拒绝服务攻击",是指击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求.耗尽目标主机资源 ...

  5. 如何配置Linux系统防火墙,以防止DDOS攻击?

    虚拟主机服务商在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等.通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长.比较彻底的解决方法是添置硬件防火墙.不过,硬件防 ...

  6. 自动化中间人攻击工具subterfuge小实验

    Subterfuge是一款用python写的中间人攻击框架,它集成了一个前端和收集了一些著名的可用于中间人攻击的安全工具. Subterfuge主要调用的是sslstrip,sslstrip 是08 ...

  7. MetaSploit攻击实例讲解------Metasploit自动化攻击(包括kali linux 2016.2(rolling) 和 BT5)

    不多说,直接上干货! 前期博客 Kali linux 2016.2(Rolling)里Metasploit连接(包括默认和自定义)的PostgreSQL数据库 Kali linux 2016.2(Ro ...

  8. 技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构

    技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构 最近几周Paloalto Networks的研究人员注意到,APT组织Wekby对美国的部分秘密机构展开了一次攻击 ...

  9. DoS攻击种类

    DoS攻击有许多种类,主要有Land攻击.死亡之ping.泪滴.Smurf攻击及SYN洪水等. 据统计,在所有黑客攻击事件中,syn洪水攻击是最常见又最容易被利用的一种DoS攻击手法. 1.攻击原理 ...

随机推荐

  1. Python算法——《算法图解》笔记

    算法目录 二分查找 大O表示法 选择排序 递归 快速排序,分而治之(D&C) 散列表——字典 广度优先搜索——BFS Dijkstra算法 贪婪算法 二分查找 # 要求list是有序表,num ...

  2. AE10.0在Visual Studio 2012下安装没有模板(转)

    转自百度经验: VS2012中丢失ArcGIS模板的解决方法 由于ArcGIS10.0(for .NET)默认是用VS2010作为开发工具的,所以在先安装VS2012后装ArcGIS10.0 桌面版及 ...

  3. 提高PHP性能效率的几个技巧!

    如何提高效率问题,往往同样的功能,不一样的代码,出来的效率往往大不一样. ● 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有ec ...

  4. 协议分层(因特网5层模型)及7层OSI参考模型

    目录 因特网5层模型及7层OSI参考模型 分层的体系结构: 应用层(软件) 运输层(软件) 网络层(硬件软件混合) 链路层(硬件) 物理层(硬件) OSI模型 表示层 会话层 封装 因特网5层模型及7 ...

  5. pymongo的基本操作和使用--练习

    1.将MongoDB注册到电脑中 安装好MongoDB之后,如何使用MongoDB呢?来到安装目录D:/MongoDB/bin会有如下列表: 其中,mongod.exe是服务端,mongo.exe是客 ...

  6. 更好一点的:Vue 利用指令实现禁止反复发送请求

    理论上可以用于任何元素,生效时会在元素上出现一个同大小的灰色蒙层(button元素会该表原生的disabled属性). /** * 当元素触发发起请求后,当发起的请求中最后一个请求的结果返回(不关心返 ...

  7. go变量

    go基础 go变量(静态) package main import "fmt" func main() { //申明变量 var zx int //变量赋值 zx=10 //输出变 ...

  8. Ubuntu中git pull远程仓库时显示403错误

    # 报错内容 fatal: unable to access 'https://git.dev.tencent.com/chendongnan/sfedu_wx.git/': The requeste ...

  9. 漫谈LiteOS之开发板-GPIO(基于GD32450i-EVAL)

    [摘要] 本文主要从GPIO的定义.工作模式.特色.工作场合.以及GD32450i-EVAL开发板的引脚.对应的寄存器以及GPIO的流水灯示例对GPIO加以介绍,希望对你有所帮助. 1定义 GPIO( ...

  10. 链接脚本(Linker Script)用法解析(二) clear_table & copy_table

    可执行文件中的.bss段和.data段分别存放未赋初值的全局变量和已赋初值的全局变量,两者的特点分别为: (1).bss段:①无初值,所以不占ROM空间:②运行时存储于RAM:③默认初值为0 (2). ...