UE5近战对抗系统Tutorial

文章目录

    • BP_Character 组合攻击
    • Notify State 检测攻击
    • BP_Character 攻击反馈
    • BP_Character 生命系统
    • BP_Character 死亡效果
    • BP_Character 武器系统
    • BP_Enemy 初始化和行为树

在这里插入图片描述

BP_Character 组合攻击

首先我们获取攻击动画,在这里使用的是 Easy Combo Buffering 的攻击动画

将动画导出为文件,然后导入动画文件,得到动画序列如下

动画重定向到 Quinn 模型上,得到动画序列,然后创建攻击动画的 Montage

首先要明白的是,一般人物在攻击过程中,其是不会发生移动的,所以我们需要开启 EnableRootMotionForce Root Lock

通过下面操作可以进行批量操作

开启 EnableRootMotionForce Root Lock

目前攻击动画准备完毕,现在为动画添加 Input 输入,Input 的添加方式有两种,一种是使用 Input Mapping Context,这种较为简单,创建一个 Input Action 然后 map 一个输入就可以

第二种是通过 Project Settings 添加 Input,首先在 window 下面找到 Project Setting

然后找到 Input 中的 Action Mapping 添加动作,这里使用鼠标左键作为攻击输入

现在有了动画和输入,现在进入 BP_Character 蓝图,该蓝图位置存储在 Game Mode 的 Default Pawn Class 中

打开 BP_Character 蓝图,使用 Play_Montage 连接 Input 和 动画

这里的 Retriggerable Delay 教程中说要设置为最长的动画时间长一点点,在这里好像除了放慢了一下速度好像并没有什么效果

光这样还不行,我们需要在动画与动画之间的衔接处使用 Montage 的 AnimNotify 方法设置 IsAttacking 为 Fasle 表示动画可以衔接,这里设置通知事件为 AttackingAgain

在所有 Montage 中都设置完毕后,我们回到 ABP_Quinn,去调用通知事件 AttackingAgain

这样组合攻击处理完毕!

Notify State 检测攻击

由于攻击是一个过程,如果我们使用上一步的 Montage notify 只有一帧的时间进行检测,这里使用 notify state 进行攻击检测

在 Blueprint 文件夹下面创建一个 AnimNotifyState,命名为 ANS_HitDetection

然后进入 Montage 动画里面,使用 Add Notify State 添加 ANS_HitDetection

将所有的 Montage 都处理完毕后,我们回到 ANS_HitDetection 中添加 Received Notify Tick

在函数蓝图中实现如下功能

其中蓝色框中的 Hit Detect 是定义在 BP_Character 中的一个函数,接下来我们实现这个函数,这里 Radius 一般设置为25就好,这里要注意的是 Select 的 Count Attack 比默认的多 1

实现完毕后得到效果如下

BP_Character 攻击反馈

在上一步中我们的攻击反馈是直接消失,我们想让人物播放攻击动画代替直接消失,这里的动画我们从 mixamo 中导入

从 mixamo 中分别导入两个 前方受击动画和后方受击动画,将其导入到 UE5 中然后重定向

在攻击检测 HitDetect 函数中,我们直接使用 Apply DamageEvent AnyDamage 来对受击人物执行攻击反馈

首先我们通过两个 Character 的前向向量的点积的正负值来判断受击方向是 Front 还是 Back 赋值给 IsForward

然后根据 IsForward 来选取前向动画列表还是后向动画列表,然后随机播放 Montage

BP_Character 生命系统

首先在 BP_Character 中添加两个变量,Health 和 MaxHealth,都设置为100

然后在 Blueprint 文件夹中创建 Widget Blueprint

Widget Blueprint Designer 设置如下,记得 Anchors要设置为居中

然后对 Progress Percent 进行绑定,由于这里我们不能够导入变量,所以我们最好设置两个变量

这样 Widget Blueprint 设置完毕,接下来我们回到 BP_Character 中进行设置,首先添加一个 Widget Blueprint

然后给 Widget 绑定 Widget Class,调整 Widget 的 Location 位置

然后这里要注意将 Space 转化为 Screen,如果是 World 的情况,血条会像纸片绑在人物身上

回到 EventGraph 中,在 Event BeginPlay 事件后面添加

这一步还只是让 Character 有了血条,我们在 Character 中设置一个 UpdateHealth 函数,在每次收到伤害时更新 Health

这样 Character 就有了血条了

但是这里的血条并不会根据人物的大小变化而变化,同时发现前面的 Character 血条并没有满血,其原因是因为在 Character 中失败了,没有获取到控制权导致初始化失败

在 Cast Failed 处连接 Widget 初始化

得到如下效果

这里可以发现攻击了多次,是 Notify State 导致的,每检测到一次就会收到一次伤害,所以在 Event AnyDamage 中 我们设置一个变量 IsBeAttacking 来判断是否正在被攻击

得到效果如下

BP_Character 死亡效果

同样的这里从 mixamo 中下载死亡动画,这里下载了两个,一个是向前倒地一个是向后倒地,重定向创建 Montage 之后,我们可以通过 Montage 中的 Montage Sections 来循环倒地动画避免动画又突然站起来

然后在BP_Character 中修改两处地方

得到的效果如下,这里要注意不要开启 RootMotion,不然到不了地就飞起来了

BP_Character 武器系统

这里我们从 OpenGameArt 中下载一个剑的模型,网站:Lowpoly Sword | OpenGameArt.org

首先创建一个材质来处理贴图,控制一下 Metallic 和 Roughness

处理完毕后,我们回到 Sword 的 Static Mesh 中创建两个 Sockets

创建完毕之后我们将这个网格体移动到 Character 中去处理

处理完毕后,我们需要修改 Hit Detect 中的检测距离,修改攻击范围

得到效果如下

BP_Enemy 初始化和行为树

首先利用 BP_Character 创建一个子类作为敌人 BP_Enemy

这里为了让敌人和我们自身有不同之处,我们可以修改 BP_Enemy 的 Materials 的颜色

这里先复制一下原来的 Meterials

勾选 tint 给他设置为红色

然后我们就可以得到一个红色的人

做了一些变异之后,我们可以开始我们的行为树的创建,首先右键创建两个AI Asset:分别是Behavior Tree 和 Blackboard,分别命名为 BT_Enemy 和 BB_Enemy

然后在 Behavior Tree 中 配置 Blackboard

在这里创建三个 Task,其中 Move To 是 自带的 Task,其他两个是 BTTask_GetPlayerLocation 和 BTTask_Attack

首先配置 BTTask_GetPlayerLocation,这个任务是需要获得玩家的位置,要注意使用 Set Blackboard Value as Object 将 Character 丢出去,并设置一个 key 命名为 Player

在外面的 Blackboard 中我们需要设置一个 actor 对象来接受这个 Character

然后在 Behavior Tree 中设置 Player 为 Player

同时我们也把 Move To 也设置为 Player

在设置 BTTask_Attack 事件之前,我们需要在 BP_Character 中创建两个时间,一个是 Attack 一个是 Death

Attack的蓝图如下

Death的蓝图如下

然后配置 BTTask_Attack 事件

得到效果如下

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

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

相关文章

聊聊JSON

引言 JSON的概念 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,但独立于语言,这意味着它可以被许多编程语言轻松解析。JSON的简洁性和易读性使其成为Web开发中数据交换的…

掌握 NumPy:高效数组处理综合指南(第 2/2 部分)

照片由 兹比内克布里瓦尔 on Unsplash 一、介绍 欢迎来到我关于 NumPy 的教程的第二部分!之前,我们已经介绍了以下列表中的前 7 章。现在在这篇文章中,我们将从第 8 章一直到第 14 章。 Numpy 安装数组初始化Numpy 数组限制计算速度和内存使用…

量子计算:1 从薛定谔的猫开始

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

基于PHP的民宿管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的民宿管理系统 一 介绍 此民宿管理系统基于原生PHP开发,数据库mysql,前端jquery.js和echarts.js。系统角色分为用户和管理员。用户可以在线浏览和预订民宿,管理员登录后台进行相关管理等。(在系统…

【python】OpenCV——Color Correction

文章目录 cv2.aruco 介绍imutils.perspective.four_point_transform 介绍skimage.exposure.match_histograms 介绍牛刀小试遇到的问题 参考学习来自 OpenCV基础(18)使用 OpenCV 和 Python 进行自动色彩校正 cv2.aruco 介绍 一、cv2.aruco模块概述 cv2.…

JAVA小知识28:FIle类文件对象

Java 中的 File 类是 java.io 包中的一个类,用于表示文件和目录路径名的抽象表示。它提供了一些方法来操作文件和目录 一、File的创建 1.1、绝对路径 绝对路径是指从文件系统的根目录开始定位文件或目录的完整路径。它通常以根目录符号开始,在 Window…

【Mac】DMG Canvas for mac(DMG镜像制作工具)软件介绍

软件介绍 DMG Canvas 是一款专门用于创建 macOS 磁盘映像文件(DMG)的软件。它的主要功能是让用户可以轻松地设计、定制和生成 macOS 上的安装器和磁盘映像文件,以下是它的一些主要特点和功能。 主要特点和功能 1. 用户界面设计 DMG Canva…

Rocky Linux 更换CN镜像地址

官方镜像列表&#xff0c;下拉查找 官方镜像列表&#xff1a;https://mirrors.rockylinux.org/mirrormanager/mirrorsCN 开头的站点。 一键更改镜像地址脚本 以下是更改从默认更改到阿里云地址 cat <<EOF>>/RackyLinux_Update_repo.sh #!/bin/bash # -*- codin…

自研地面站!自主开源无人飞行系统 Prometheus V2 版重大升级详解

自主开源无人飞行系统 Prometheus V2 相对于 Prometheus V1 在多方面做了重大的升级&#xff0c;今天我们将聊聊 Prometheus V2 的地面站升级。 地面站的重大提升 熟悉 Prometheus 的小伙伴们可能知道&#xff0c;V1 版本是没有专门的地面站的。而在 Prometheus V2 中&#x…

VERYCLOUD睿鸿股份亮相亚马逊云科技中国峰会2024

5月30日&#xff0c;为期两天的亚马逊云科技中国峰会在上海世博中心圆满落幕。 多位大咖现场分享&#xff0c;生成式AI时代的数据战略&#xff0c;企业级AI应用&#xff0c;最新技术、产品重磅发布&#xff0c;创新行业解决方案 …… 作为亚马逊云科技的生态合作伙伴&#x…

好大夫在线医生数据医生姓名科室荣誉等202406

好大夫在线医生数据医生姓名科室荣誉等 2024年6月数据&#xff0c;总共934027条数据&#xff0c;可导出为excel,csv等 好大夫在线2024-06月数据 包含简介信息&#xff01; 可见样例数据 样例数据_医生2.xlsx https://www.alipan.com/s/DBEW9MgHEPP 点击链接保存&#xff0…

易宝OA downloadfile 任意文件读取

【产品&&漏洞简述】 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台&#xff0c;具有信息管理、 流程管理 、知识管理&#xff08;档案和业务管理&#xff09;、协同办公等多种功能 易宝OA downloadfile 文件读取&#xff0c;攻击者可通过…

【单片机毕业设计选题24019】-基于STM32的安防监测灭火系统

系统功能: 1. 水泵喷水灭火功能&#xff1a;当火焰传感器监测到火焰时&#xff0c;蜂鸣器报警&#xff0c;水泵工作实现灭火。 2. 风扇功能&#xff1a;当烟雾传感器检测到CO或温度传感器检测到温度超过阈值时&#xff0c;蜂鸣器报警&#xff0c; 启动风扇进行驱散烟雾或降温…

毫秒级响应!清科优能应用 TDengine 建设虚拟电厂运营管理平台

小T导读&#xff1a;在清科优能的虚拟电厂运营管理平台建设中&#xff0c;项目初期预计涉及约一万台设备、总数据采集量达数十万&#xff0c;在数据库选择上&#xff0c;其希望能支持至少两千台设备的并发数据处理。本文介绍了清科优能的数据库选型经验以及最终应用效果&#x…

简易人工智能入门

一、监督or非监督 监督学习&#xff08;Supervised Learning&#xff09;&#xff1a;训练集有标记信息&#xff08;Y&#xff09;&#xff0c;学习方式有分类和回归 无监督学习&#xff08;Unsupervised Learning&#xff09;&#xff1a;训练集没有标记信息&#xff0c;学习…

后端实现预览pdf,mp4,图片

PDF预览 /*** pdf预览* param response*/RequestMapping(value "/preview")public void showPdf(HttpServletResponse response) {try {//String filePath this.getClass().getClassLoader().getResource("../../static/pdf/readme.pdf").getPath();Stri…

解决virtualbox虚拟机与主机之间复制粘贴

1、在VirtualBox管理器中设置共享粘贴板和拖放方向为双向 2、在存储中设置使用主机输入输出&#xff08;I/O&#xff09;缓存。 3、在存储→控制器&#xff1a;SATA→***.vdi下勾选固态驱动器 4、在虚拟机→设备→安装增强功能 如果上述操作重启虚拟机后&#xff0c;还不行&am…

【考研408计算机组成原理】数值表示和运算之快速数值转换

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 另外&#xff0c;利用了工作之余的一点点时间&#xff0c;整理了一套考研408的知识图谱&#xff0c; 我根据这一套知识图谱打造了这样一个408知识图谱问答系统 里面的每一…

【单片机毕业设计选题24018】-基于STM32和阿里云的农业大棚系统

系统功能: 系统分为手动和自动模式&#xff0c;上电默认为自动模式&#xff0c;自动模式下系统根据采集到的传感器值 自动控制&#xff0c;温度过低后自动开启加热&#xff0c;湿度过高后自动开启通风&#xff0c;光照过低后自动开启补 光&#xff0c;水位过低后自动开启水泵…

C++初学者指南第一步---11.字符串(基础)

C初学者指南第一步—11.字符串&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---11.字符串&#xff08;基础&#xff09;1. std::string2. char std::string的元素类型3. std::string字符串操作4. 字面量4.1 C风格字符串字面量4.2 "std::string 字面量"s…