Unreal 5 实现丧尸追逐攻击功能

news2024/11/24 7:56:27

要实现让丧尸能够智能的追逐玩家,我们需要用到ue封装的ai行为树来实现。基础相关的请查看:Unreal Engine 5.1 AI行为树基础入门,来学习一下如何使用ai行为树来实现一个简单的追逐功能。这一篇就是基于这个基础上进行了优化,实现了声音的震慑玩家,以及对玩家的攻击。

创建丧尸蓝图

创建丧尸蓝图,需要添加模型,创建动画蓝图,还要根据速度设置的动画混合空间,实现idle到移动的效果。这些之前说过,这里不再赘述。
接下来看一下在丧尸里面添加的一些方法
创建了一个咆哮函数,这个函数会在可以执行咆哮动画时,会将移动速度设置为0,播放咆哮蒙太奇。然后将蒙太奇的播放时间传出,这个函数会在ai行为树中调用,在可以咆哮时,去执行,不能咆哮,则直接进行追逐。
在这里插入图片描述
增加了追逐函数,追逐函数内根据是否第一次追逐,设置一个音效播放,并将其添加到了角色身上,跟随角色播放,具有立体空间感。
在这里插入图片描述
并增加了清除追逐音效的函数,在无法看到玩家时,将清除掉追逐音效的组件。
在这里插入图片描述
增加修改移动速度事件,巡逻速度要慢一些,发现玩家修改为奔跑速度。奔跑速度再一个范围内随机一个速度,然丧尸之间的速度也不同。
在这里插入图片描述
增加巡逻状态的设置,设置巡逻速度,然后清除追逐玩家时的音效,并增加一个定时器,在一定时间以后,重置咆哮相关变量,再次看见玩家,还会声音震慑,增加清除咆哮定时器,巡逻时间不够的话,无法重置咆哮。
在这里插入图片描述

AI控制器的实现

先看一下AI 控制器的修改后的逻辑,将自身的所有者存储了下来
在这里插入图片描述
在AI控制器里面,我们还是通过视觉感知,进行玩家角色拾取
在这里插入图片描述
如果能够拾取到玩家,则将黑板的值设置为true,如果拾取未成功,则创建一个定时器,延迟一段时间去设置黑板值的变动,这样还可以防止AI行为树的频繁变动。
在这里插入图片描述
看到玩家时,将黑板看到玩家的值设置为true,然后清除定时器,主要是为了防止逻辑出现错误。
在这里插入图片描述
在视觉拾取时没有看到,则使用定时器,由于视觉拾取只有在有变动时,才会触发这个定时器,相当于两秒内都未拾取到玩家,才会变更黑板的值,注意那里是Reset重置咆哮,在巡逻时,可以重新设置定时器。这样逻辑就变成了进入巡逻时,有设置重置定时器的权限,巡逻时,可以设置一次重置定时器,未达到时间,重置定时器就会被清除,达到时间,重置定时器触发事件,重新定时器。这里的逻辑比较复杂,请大家注意。
在这里插入图片描述

AI行为树的更新

在这里插入图片描述
ai行为树这里,还是标准的两个选择,看到玩家就进入追逐玩家序列,看不到玩家,就去巡逻。
在看到玩家后,将会先进行语言上的恐吓,或者后面实现招呼小伙伴们一起攻击玩家(后面有可能会去实现)。然后才去追逐玩家,这个触发序列只能触发一次,但是会在巡逻一定时间后重置。
BTT_咆哮 任务就是调用丧尸的咆哮,函数内会根据条件运行
在这里插入图片描述
BTT_追逐玩家会先调用丧尸的追逐玩家函数,里面主要实现的是追逐是的追逐音效。然后朝向玩家追逐的AI MoveTo,然后到达玩家身边时,清除追逐音效,因为,在玩家身边,丧尸会进行攻击,到时候会有攻击音效,就不需要追逐音效了。
在这里插入图片描述

实现丧尸攻击

实现攻击,首先实现攻击动画,这里我们使用了随机序列播放器,可以增加多个动画,然后动画蓝图会随机用其中一个攻击,然后和基础的移动动画混合,只混合上半身,下半身还是使用默认的。
在这里插入图片描述
使用变量布尔混合,如果不攻击,则不会播放动画。
在这里插入图片描述
在动画蓝图的事件图表里面去获取丧尸蓝图的变量设置动画蓝图的变量
在这里插入图片描述
接下来,只要我们在丧尸蓝图中实现变量的设置,就可以实现丧尸的攻击了。
在丧尸蓝图中,首先呢判断是否能够看到玩家,这里需要在AI控制器中获取黑板的变量
在这里插入图片描述
然后 按通道进行球体追踪,查看角色是否在丧尸的前方
在这里插入图片描述
这里我们新创建了一个通道为角色通道,这个通道是专门为角色的,只会判断角色追踪,需要在角色网格体上面,将碰撞预设设置为阻挡,才能追踪到
在这里插入图片描述
然后对拾取到的角色进行判断
在这里插入图片描述
接着判断丧尸的动画蓝图是否为需要使用的动画蓝图
在这里插入图片描述
任何失败的情况下,都将不会设置为攻击状态
在这里插入图片描述
在可以攻击时,设置可以攻击变量,修改旋转方式,使用控制器控制,然后设置焦距为玩家(设置旋转和设置焦距,这两个是相辅相成的,控制器控制朝向,然后控制器焦距玩家,丧尸攻击时可以一直朝向相机)
在这里插入图片描述

实现丧尸脚步声

之前我们在角色蓝图中实现过脚步声,在这里使用一个新的方式,那就是蓝图函数库。
蓝图函数库相当于全局函数,可以通过右键直接获取,函数库内无法存储变量,变量的使用只能通过传入。
鼠标右键创建蓝图函数库
在这里插入图片描述
在蓝图函数库里面,我实现了两个函数,传入节点获取世界坐标,以及实现脚步声
在这里插入图片描述
获取世界坐标比较简单,只要传入一个对象组件,获取即可
在这里插入图片描述
脚步声的函数则是将世界坐标传入,然后去拾取地面坐标,获取地面物理材质类型,根据类型播放不同音效。这个在之前做角色的时候那一套。
在这里插入图片描述
然后记得在骨骼网格体下面,挂两个箭头组件,绑定一下骨骼
在这里插入图片描述
在这里插入图片描述
这样完成了以后,自定义两个事件,分别是播放左脚脚步声和右脚脚步声的
在这里插入图片描述
鼠标右键现在可以右键去调用函数库函数了,没有的话,记得编译一下蓝图。
在这里插入图片描述
最后就是这两个事件的触发,会在动画通知中触发,和之前没区别,就改了类型转换。
在这里插入图片描述

随机丧尸模型和朝向

要随机模型,肯定要有一个数组的模型去随机,先创建一个模型数组,右侧类型可以更改存储变量的类型。
在这里插入图片描述
然后从数组里面随机抽一个模型用
在这里插入图片描述
最后使用节点重新设置骨骼模型
在这里插入图片描述
随机朝向,就是修改z轴旋转,随机一个0到360度的值,重新设置Actor旋转即可。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker专题系列之十一:基于Docker安装配置Nacos

一、查找镜像 使用如下命令查找镜像库中的资源 docker search nacos二、拉取镜像 拉取最新版本的nacos镜像 docker pull nacos/nacos-server三、查看镜像文件 docker images四、创建本地数据卷目录 mkdir /usr/rdc mkdir /usr/rdc/nacos mkdir /usr/rdc/nacos/logs五、创…

qt_多人聊天

服务器 .pro QT core gui network widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket> //客户端头文件 #include <QList> //客户端容器链表 #in…

【SpringMVC】SSM整合

1&#xff0c;SSM整合 前面我们已经把Mybatis、Spring和SpringMVC三个框架进行了学习&#xff0c;今天主要的内容就是把这三个框架整合在一起完成我们的业务功能开发&#xff0c;具体如何来整合&#xff0c;我们一步步来学习。 1. 流程分析 (1) 创建工程 创建一个Maven的web…

【IE】浏览器兼容问题IE

IE11浏览器 1.安装npm i babel-polyfill -S 2.main.js引入&#xff1a; import “babel-polyfill” 3.build/webpack.base.conf.js 更改 : entry: { app: [‘babel-polyfill’, ‘./src/main.js’] } 以上操作之后IE11依旧空白&#xff0c;报错 缺少标识符 axios版本V1.1.3 …

手把手教你搭建一个vue3+ts项目(超祥/必看)

目录 一、创建vite项目 二、启动vite项目 三、处理一些配置问题 四、增加工程化插件 1、安装sass 2、安装vue-router 3、安装pinia 4、安装element-plus 5、安装axios 6、设置路径别名&#xff0c;将相对路径改为绝对路径 一、创建vite项目 1、在一个文件夹下通…

React基础教程(二):React的基本使用

React基础教程(二)&#xff1a;React的基本使用 1、HelloReact 1.1 引入react基础依赖包 注意点&#xff1a;①必须要在②之前引入 <!-- 引入react核心库--><script src"../js/react.development.js"></script><!-- 引入react-dom&…

毕业论文里引用文献率为0%的解决小技巧

快要毕业了&#xff0c;带着伤感&#xff0c;大学生们已开始加紧完成论文的编写和毕业答辩&#xff0c;祝大家都可以顺利拿到学位证书和毕业证书。 前两天&#xff0c;有位同学找我&#xff0c;咨询如何解决毕业论文里&#xff0c;引用文献率为0%的问题。 我在知网上将该论文通…

flutter创建、安装扩展包、打包apk

1、创建APK项目 要在VSCode中创建一个Flutter应用程序&#xff0c;请按照以下步骤进行操作&#xff1a; 安装Flutter SDK&#xff1a;请确保你已经安装了Flutter SDK&#xff0c;并配置了Flutter的环境。你可以在Flutter的官方网站上找到安装和设置Flutter的详细说明。 安装V…

完美解决 RabbitMQ 可视化界面中 Overview 不显示图形的问题

&#x1f4a7; 记录一下今天遇到的 b u g \color{#FF1493}{记录一下今天遇到的bug} 记录一下今天遇到的bug&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 数据结构与算法…

VBA基础(宏编程)

VBA介绍&#xff1a; Visual Basic for Applications&#xff08;VBA&#xff09;是 VisualBasic 的一种宏语言&#xff0c;是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows 的应用程序功能&#xff0c;特别是Microsoft Office…

DolphinDB +机器学习,预测地震波形数据

1. 地震波形数据预测业务场景说明 在地震波形数据异常检测场景中&#xff0c;通常需要使用多种工具和方法来提高检测精度和鲁棒性。其中&#xff0c;FilterPicker 是一种常用的基于模板匹配的异常检测工具&#xff0c;可以实现地震波形数据的实时异常检测和定位。FilterPicker…

为什么看了那么多测试技术帖,自己都没有提升?

作为测试新手&#xff0c;最爱莫过于看各大牛发的技术贴&#xff0c;这篇很牛叉&#xff0c;那篇也很有道理&#xff0c;似乎自己看着看着也会成为高手。然而几年后&#xff0c;发现自己对专业知识的理解乱的很&#xff0c;里面更有很多自相矛盾的地方&#xff0c;这到底是哪里…

RedisSon高并发分布式锁实战

Redis高并发分布式锁实战 1.分布式场景下的synchronized失效的问题–用redis实现分布式锁 synchronized是通过monitor实现的jvm级别的锁&#xff0c;如果是分布式系统&#xff0c;跑在不同的虚拟机上的tomcat上&#xff0c;会导致synchronized无法锁住对象 ----------- 需要分…

01分数规划 易懂+例题讲解 (c++)

01分数规划 &#xff1a;01即取还是不取&#xff0c;分数即所求型式为&#xff0c;规划就是选取最好的方案。 一般情况题目给出n个物品&#xff0c;再给出每个物品的价值以及物重&#xff0c;选取k个物品&#xff0c;问你在所有可能选取的方案中&#xff0c;最大的单位价值为多…

通过零代码ETLCloud实现马帮ERP数据自动化同步

马帮ERP介绍 马帮ERP是一款云端跨境电商管理软件。与传统的ERP系统不同&#xff0c;马帮ERP专注于跨境电商领域&#xff0c;为电商企业提供一站式管理解决方案&#xff0c;包括财务管理、采购管理、进销存管理、订单管理等功能模块。该平台针对跨境电商行业特点&#xff0c;提…

MM32F3273G8P火龙果开发板MindSDK开发教程20 - freertos + letter shell 的移植

MM32F3273G8P火龙果开发板MindSDK开发教程20 - freertos letter shell 的移植 1、freertos下载 官网传送门 2、freertos移植 1、在工程目录device下新建freertos目录&#xff0c;将下载的源码source目录下的七个.c文件copy到新建的freertos目录。 2、将source/protable/G…

Word 2021入门指南:详细解读常用功能

软件安装&#xff1a;办公神器office2021安装教程&#xff0c;让你快速上手_正经人_____的博客-CSDN博客 一、 新建文档 打开Word 2021后&#xff0c;可以看到左上角的“文件”选项&#xff0c;点击它&#xff0c;在弹出的菜单中选择“新建”选项。然后可以选择空白文档或者使…

vue3+ts+vite+element plus中使用luckysheet(预览效果)

前言&#xff1a; 这两天一个项目&#xff0c;需要在页面中以excel的形式展示大量数据&#xff0c;喜欢偷懒的我果断扒拉了一堆适用于vue3的插件&#xff0c;下面简单说说我使用的luckysheet 使用&#xff1a; 一、准备一个vue3tsviteelement plus的项目 此处省略n个字。。。…

如何用 WampServer+快解析 搭建php文件管理器

基于网络&#xff0c;资源是大家最最基本的需求&#xff0c;许多网络爱好者不求利益&#xff0c;把自己收集的一些通过一些平台共享给大家&#xff0c;这就是资源共享。 资源共享程度越高&#xff0c;代表信息发展水平越高。现实工作中&#xff0c;由于用户提供的数据可能来自…

Linux基础IO - 软硬链接 | 动静态库

之前的文章中我们讲述了软硬链接中有关软连接的知识&#xff0c;本文中将继续讲述硬链接部分的知识&#xff0c;并且讲述一下动静态库的相关内容。 硬链接 硬链接本质上就是在当前目录建立一个新的文件名与指定文件inode的关系。 每当我们在当前目录下建立一个硬链接就会让文…