64. UE5 RPG 创建新的双手攻击怪物

在上一篇文章中,我们实现了新的功能,现在可以创建多个普通攻击动画,并且可以根据你所使用的普通攻击动画,设置不同的攻击位置。比如,你使用武器,那么攻击位置需要从武器上获取,如果你没有持有武器,使用双手攻击,那么,需要从双手中的某一只去获取攻击位置。
在这一篇文章中,我们增加一个新的敌人,它没有武器,靠双手攻击,我们给它两个攻击动画,一个是左手攻击,另一个是右手攻击,来测试我们之前实现的功能是否隐藏了某些bug。而且还能回忆一下之前是如何创建一个敌人的所有数据的。

创建角色蓝图和动画蓝图

首先,创建一个新的文件夹,新的怪物是食尸鬼所以我们新的文件夹取名Ghoul
在这里插入图片描述
所有的敌人都是继承于敌人蓝图基类,我们基于它创建子蓝图类
在这里插入图片描述
相应的,我们也需要一个动画蓝图子蓝图
在这里插入图片描述
使用的骨架选择食尸鬼的骨架
在这里插入图片描述
将创建的这两个蓝图拖入到Ghoul文件夹中
在这里插入图片描述
打开蓝图,设置食尸鬼的模型
在这里插入图片描述
然后修改它的朝向和位置,注意蓝色箭头,那是正前方的方向,我们再适当修改一下胶囊体
在这里插入图片描述
在动画蓝图这里,我们需要设置它的混合控件,就是角色根据速度改变移动的动画
在这里插入图片描述
我们右键新建一个混合控件
在这里插入图片描述
选择食尸鬼的骨架
在这里插入图片描述
改名为BS_Ghoul_IdleRun,用来设置混合待机和移动的混合空间
在这里插入图片描述
打开设置一个速度的水平坐标
在这里插入图片描述
把动画拖入进入,按Shift键,可以吸附到固定位置,按ctrl可以查看过渡效果,按ctrl+alt键可以查看混合的比例。
在这里插入图片描述
按照之前的做法把平滑设置为4,这样行为树切换的时候,也不会显得很生硬。
在这里插入图片描述
创建完成,设置到食尸鬼的动画蓝图内
在这里插入图片描述
然后将修改后的动画蓝图设置给角色蓝图
在这里插入图片描述

制作角色使用蒙太奇

我们将角色使用蓝图和动画蓝图制作完成以后,下一步就是制作角色使用的攻击蒙太奇和受击蒙太奇
在这里插入图片描述
创建蒙太奇在动画身上创建即可
在这里插入图片描述
我们先创建受击蒙太奇,将其命名为AM_HitReact_Ghoul
在这里插入图片描述
按照之前的做法,不需要额外制作其它内容,设置上去
在这里插入图片描述
对于攻击动画蒙太奇,我们需要添加骨骼插槽,来用于获取攻击时的伤害范围,我们要打开它的骨骼,然后在骨骼需要的位置添加插槽
在这里插入图片描述
在左右手上添加一个插槽
在这里插入图片描述
如果感觉位置有问题,还可以调整插槽的位置,这样我们就有了获取攻击范围的骨骼插槽位置了。
在这里插入图片描述
我们创建攻击左右手的两个蒙太奇
在这里插入图片描述
攻击动画必须要设置支持根运动
在这里插入图片描述
按照之前的做法,我们需要添加两个事件,一个是Motion Wraping攻击旋转朝向的事件,另一个是对攻击造成伤害的通知。(这里有个小技巧,你如果在拖拽范围的时候,需要实时查看动作,可以按住shift键,动画会跟随你的拖拽进行移动)
在这里插入图片描述
MotionWarping的设置还是老一套,只修改朝向,事件为FacingTarget
在这里插入图片描述
通知这里是我们之前写的标签通知,这里修改Tag即可
在这里插入图片描述
蒙太奇创建完成,我们就可以设置角色的攻击蒙太奇,它可以增加两个,分别是左右手的攻击
在这里插入图片描述

其它注意事项

有些我们直接从敌人基类继承过来的,实际上需要我们注意的,虽然我们修改成了默认值
角色类型我们设置为战士
在这里插入图片描述
添加AI行为树
在这里插入图片描述
添加转向MotionWarping组件,和设置事件,这些都是我们在敌人基类实现的
在这里插入图片描述
修改移动速度,我们在角色基类代码里面,将BaseWalkSpeed修改为可蓝图更改

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Combat")
	float BaseWalkSpeed = 250.f; //当前角色的最大移动速度

然后在蓝图中修改移动速度
在这里插入图片描述
还有就是敌人的标签,用于区分敌我
在这里插入图片描述
角色的旋转,我们默认设置的是旋转朝向运动方向,这里还可以调整旋转速率
在这里插入图片描述
记得关闭使用控制器控制旋转
在这里插入图片描述

一些需要处理的问题

就是我们在触发攻击后就结束了技能,其实在某些情况下,它还没有把动画播放完成,所以,我们将触发事件后结束技能事件节点删除
在这里插入图片描述
因为我们在蒙太奇结束时,调用了触发结束技能
在这里插入图片描述

处理敌我不分的问题

我们现在还没有实现判断攻击的角色是否为友军,所以,我们接下来要实现这个功能。
要实现这个功能不难,我们之前在角色身上设置的定义标签,可以以此来实现此功能,我们可以在蓝图中,使用ActorHasTag来判断攻击到的敌人是否包含此标签来规避伤害到友军
在这里插入图片描述
如果在蓝图中实现这个功能会连成盘丝洞,所以,我们在代码中实现它,在蓝图函数库中创建一个函数,用于传入两个Actor判断它们是否为友军,我们增加一个函数,用于判断双方是否为敌对势力,这里我们修改成BlueprintPure,让其成为没有引脚的静态函数。

	//获取双方是否为敌对势力
	UFUNCTION(BlueprintPure, Category="RPGAbilitySystemLibrary|GameplayMechanics")
	static bool IsNotFriend(AActor* FirstActor, AActor* SecondActor);

接下来在实现中,如果第一个Actor含有Player标签,那么需要判断第二个角色不包含Player标签,那么它们就是敌人。我们这种后续还可以扩展,比如增加更多的势力,可以在这里更新。

bool URPGAbilitySystemBlueprintLibrary::IsNotFriend(AActor* FirstActor, AActor* SecondActor)
{
	if(FirstActor->ActorHasTag("Player"))
	{
		return !SecondActor->ActorHasTag("Player");
	}

	if(FirstActor->ActorHasTag("Enemy"))
	{
		return !SecondActor->ActorHasTag("Enemy");
	}

	return false;
}

在攻击技能蓝图中,增加判断是否为敌对势力
在这里插入图片描述

添加溶解材质

我们还需要添加死亡时,敌人尸体溶解掉的效果,按照之前的创建方式
材质这里修改成Masked模式
在这里插入图片描述
将溶解节点拷贝进来,连上自发光和Mask的线,注意,基础材质要保证它是正常渲染的。

在这里插入图片描述
然后基于材质创建一个材质实例
在这里插入图片描述
在材质实例里面修改溶解的开始和结束,这样,方便一个参数修改溶解
在这里插入图片描述
调整完成,Dissolve在0时,是正常显示
在这里插入图片描述
保证调整Dissolve数值为1时,完全溶解掉
在这里插入图片描述
将材质设置给食尸鬼蓝图,它没有武器,所以我们不需要设置武器
在这里插入图片描述
运行查看击杀后,是否溶解效果正确
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《精通ChatGPT:从入门到大师的Prompt指南》第2章:Prompt的基本概念

2.1 什么是Prompt 在了解和使用ChatGPT的过程中,理解和掌握Prompt的概念是至关重要的。Prompt可以简单地定义为一段指令或请求,它向AI模型提供了生成特定回应或行为所需的初始信息。具体而言,Prompt是用户与AI系统之间的桥梁,通过…

MatrixOne→MatrixOS:矩阵起源的创业史即将用“AI Infra”和“AI Platform”书写新章程

在数字化浪潮的推动下,MatrixOne的故事就像一部科技界的创业史诗,它始于一个简单而宏伟的梦想——构建一个能够支撑起新一代数字世界的操作系统。想象一下,在AIGC时代,数据流动如同“血液”,算法运转如同“心跳”&…

【Neo4j】Windows11使用Neo4j导入CSV数据可视化知识图谱

Windows11使用Neo4j导入CSV数据可视化知识图谱 序1. 安装JDK21(1)下载(2)安装(3)环境配置 2. 安装Neo4j(1)下载(2)解压安装(3)环境配置…

国货美妆品牌站上C位,抖音618大促期间相关产品销量同比增长53%

每年618大促时期是各类美妆产品销售旺季。近两年,爱美人士的囤货清单里出现越来越多国货美妆品牌。 据《2023年中国化妆品年鉴》,去年国内美妆市场总体规模达7972亿元,其中,国货市场份额达到50.4%,首次超越外资品牌。…

Cloudpods 强大的多云管理平台部署

简介 Cloudpods 是一款简单、可靠的企业IaaS资源管理软件。帮助未云化企业全面云化IDC物理资源,提升企业IT管理效率。 Cloudpods 帮助客户在一个地方管理所有云计算资源。统一管理异构IT基础设施资源,极大简化多云架构复杂度和难度,帮助企业…

遗址博物馆ar互动展示软件提供丰富的趣味化体验

在自然博物馆的每一个角落,都隐藏着大自然的奥秘与魅力。为了让每一位参观者都能深入体验、探索这些奥秘,我们引入了前沿的AR技术,为您带来一场前所未有的沉浸式自然之旅。 步入博物馆,您手中的AR相机将成为您的更佳向导。自然博物…

「动态规划」如何求最小路径和?

64. 最小路径和https://leetcode.cn/problems/minimum-path-sum/description/ 给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。 输入:…

短视频矩阵源码----如何做正规开发规则分享:

一、什么是SaaS化服务技术开发? (短视频矩阵系统是源头开发的应该分为3个端口---- 总后台控制端、总代理端口,总商户后台) SaaS是软件即服务(Software as a Service)的缩写。它是一种通过互联网提供软件应…

jvm学习笔记(二) ----- 垃圾回收

GC 一、判定对象是否是垃圾1.引用计数法2.可达性分析算法 二、垃圾回收算法1.标记清除2.标记整理3. 复制4. 分代垃圾回收1.尝试在伊甸园分配2.大对象直接晋升至老年代3.多次存活的对象4.老年代连续空间不足,触发 Full GC 链接: jvm学习笔记(一) ----- JAVA 内存 链接…

Android存储空间不足?试试这8个快速解决方案!

在当今的科技时代,Android智能手机已成为我们日常生活的重要组成部分,因为它们保存着我们大量的关键数据。然而,随着我们的使用模式不断扩大,手机内部存储的可用性经常变得有限。手机存储空间不足不仅会损害设备的功能和响应能力&…

代码随想录第27天|贪心算法part1

455.分发饼干 先给孩子和饼干排序&#xff0c;每次选取一个最大的饼干给一个最大胃口的孩子&#xff0c;直到饼干分完或者遍历完孩子 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(…

django ORM model update常规用法

Django ORM&#xff08;对象关系映射&#xff09;提供了一种强大而直观的方式&#xff0c;通过Python类和方法与数据库交互。在Django模型中更新记录是一个常见的任务&#xff0c;可以通过多种方式完成。以下是一些常见的更新记录的方法&#xff1a; 1. 更新单条记录 使用 sa…

ORA-12519 TNS:no appropriate service handler found

问题描述 jdbc连接Oracle失败&#xff0c;报错日志如下&#xff1a; Listener refused the connection with the following error: ORA-12519, TNS:no appropriate service handler found The Connection descriptor used by the client was:192.9.100.217:7001:wcm 问题分…

解决Nginx出现An error occurred问题

每个人遇到Nginx的An error occurred情况可能都不一样&#xff08;见图1&#xff09;&#xff0c;Nginx造成该错误的原因&#xff1a; 1. 我在配置域名解析成IP时&#xff0c;没有把所有解析配置都修改&#xff0c;见图2&#xff1a;解析 *.hanxiaozhang.xyz 配置的是新IP地…

Python 机器学习 基础 之 【常用机器学习库】 scikit-learn 机器学习库

Python 机器学习 基础 之 【常用机器学习库】 scikit-learn 机器学习库 目录 Python 机器学习 基础 之 【常用机器学习库】 scikit-learn 机器学习库 一、简单介绍 二、scikit-learn 基础 1、安装 scikit-learn 2、导入 scikit-learn 3、数据准备 4、数据分割 5、训练模…

将web项目打包成electron桌面端教程(二)vue3+vite+ts

说明&#xff1a;我用的demo项目是vue3vitets&#xff0c;如果是vue2/cli就不用往下看啦&#xff0c;建议找找其他教程哦~下依赖npm下载不下来的&#xff0c;基本换成cnpm/pnpm/yarn就可以了 一、项目准备 1、自己新创建一个&#xff0c;这里就不过多赘述了 2、将需要打包成…

[matlab]折线图之多条折线如何绘制实心圆作为标记点

使用MarkerFaceColor是标记点填充的颜色&#xff0c;b&#xff0c;表示blue&#xff0c;蓝色 plot(x, a, d--, MarkerFaceColor, b); % 绘制仿真结果的曲线如果一张图多条曲线那么每条曲线需要单独调用一次plot&#xff0c;每个plot间用hold on 连接 plot(x, a, d--, MarkerF…

sick0s1.1 靶机实战

sick0s1.1 信息收集 nmap存活及端口&#xff1a; nmap服务扫描&#xff1a; web 80和8080都没有开放&#xff0c;&#xff0c;无法访问&#xff0c;gobuster等工具也跑不了&#xff0c;访问一下3128试试 根据端口服务扫描也能得知这是个http的代理服务器&#xff0c;&#x…

6.6SSH的运用

ssh远程管理 ssh是一种安全通道协议&#xff0c;用来实现字符界面的远程登录。远程复制&#xff0c;远程文本传输。 ssh对通信双方的数据进行了加密 用户名和密码登录 密钥对认证方式&#xff08;可以实现免密登录&#xff09; ssh 22 网络层 传输层 数据传输的过程中是加密的 …

js解析成语法树以及还原

const {parse} require("babel/parser"); const traverse require("babel/traverse").default; const generator require("babel/generator").default;// 1.定义要处理的代码 const jscode function square(n) {return n * n; };// 2.使用ba…