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

news2024/9/20 10:46:37

在上一篇文章中,我们实现了新的功能,现在可以创建多个普通攻击动画,并且可以根据你所使用的普通攻击动画,设置不同的攻击位置。比如,你使用武器,那么攻击位置需要从武器上获取,如果你没有持有武器,使用双手攻击,那么,需要从双手中的某一只去获取攻击位置。
在这一篇文章中,我们增加一个新的敌人,它没有武器,靠双手攻击,我们给它两个攻击动画,一个是左手攻击,另一个是右手攻击,来测试我们之前实现的功能是否隐藏了某些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时,完全溶解掉
在这里插入图片描述
将材质设置给食尸鬼蓝图,它没有武器,所以我们不需要设置武器
在这里插入图片描述
运行查看击杀后,是否溶解效果正确
在这里插入图片描述

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

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

相关文章

保存图片奇怪的bug

今天发现一个奇怪的bug 这个的dpi是100de ,但是我取完切片之后,发现这个结果就变了

温度传感器十大品牌

温度传感器品牌排行榜-十大热电偶品牌-热敏电阻品牌排行-Maigoo品牌榜

西门子学习笔记11 - PTO脉冲指令的使用

1、使用指令前的设置 1、打开一个脉冲发生器,并启用 2、选择使用PTO(脉冲A和方向B) 3、硬件设置输出 4、这样前期的准备工作就完成了 2、指令的使用 1、添加指令CTRL_PTO 2、配置如下 3、方向控制程序如下 4、最后进行测试即可

专业的数字雕刻和绘图软件Pixologic ZBrush 2024.0.4

Pixology ZBrush是一款专业的数字雕刻和绘图软件,适用于Windows、Linux和Mac OS。 皮克斯学ZBrush允许您使用可定制的画笔实时塑造、纹理和绘制虚拟粘土,从而提供即时反馈。当您使用皮克斯学ZBrush时,您可以访问世界各地艺术家使用的相同工具。 下面是一些特点和好处的像素…

【设计模式】结构型设计模式之 从IO流设计思想来看装饰器模式

介绍 装饰器模式也称为包装模式(Wrapper Pattern) 是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。 装饰器模式的核心是功能扩展,使用装饰器模式可以透…

Java | Leetcode Java题解之第142题环形链表II

题目: 题解: public class Solution {public ListNode detectCycle(ListNode head) {if (head null) {return null;}ListNode slow head, fast head;while (fast ! null) {slow slow.next;if (fast.next ! null) {fast fast.next.next;} else {ret…

Qt qtpropertybrowser使用实例(1)

属性界面实例&#xff1a; 代码如下&#xff1a; #include <QDate> #include <QLocale> #include "qtpropertymanager.h" #include "qtvariantproperty.h" #include "qttreepropertybrowser.h" int main(int argc, char *argv[]) {…

LLM大语言模型(十六):最新开源 GLM4-9B 本地部署,带不动,根本带不动

目录 前言 本机环境 GLM4代码库下载 模型文件下载&#xff1a;文件很大 修改为从本地模型文件启动 启动模型cli对话demo 慢&#xff0c;巨慢&#xff0c;一个字一个字的蹦 GPU资源使用情况 GLM3资源使用情况对比 前言 GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 …

VUE + nodejs实战

BVDN搭建 D: cd nodejs ::npm install bootstrap ::npm install jquery ::npm install popper.js ::npm install vue npm install vue-router pauseapp.html <!DOCTYPE html> <!DOCTYPE html> <html> <head><!--bootstrap--><link rel"…

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation 引言 本文前作 VDM 已经推导出了扩散模型可以将优化 ELBO 作为目标函数。然而现在 FID &#xff08;也就是感知质量&#xff09;最好的模型还是用的其他目标函数&#xff08;如 DDPM 的噪声预…

Mysql使用中的性能优化——索引数对插入操作性能的影响

表的索引可以给数据检索提升效率&#xff0c;但是也给表的增删改操作带来代价。本文我们将关注&#xff0c;索引数量对INSERT操作的影响。 结论 索引数的新增会造成INSERT操作效率下降&#xff0c;约每增一个索引会降低10%效率。 实验数据 可以看到0个索引的效率是7个索引效…

【Linux】 安装rz 和sz

在 Linux 系统中&#xff0c;rz 和 sz 是两个用于在本地计算机与远程计算机之间安全传输文件的命令行工具。它们是 lrzsz 包的一部分&#xff0c;通常用于通过 SSH 连接传输文件。 打开终端&#xff1a; 首先&#xff0c;打开你的 CentOS 机器上的终端。 执行sz 提示下面信息…

【数据结构(邓俊辉)学习笔记】图05——优先级搜索

文章目录 0. 概述1. BAG2. ADT 0. 概述 学习下优先级搜索 1. BAG 优先级搜索是非常广义的&#xff0c;概况来说&#xff0c;无论DFS 还是BFS从逻辑上来都属于这种搜索。 回忆下什么叫搜索或者遍历&#xff0c;对于像图这种数据结构里的元素逐一的没有重复的也没有遗漏的对它们…

开发uniapp 小程序时遇到的问题

1、【微信开发者工具报错】routeDone with a webviewId XXX that is not the current page 解决方案: 在app.json 中添加 “lazyCodeLoading”: “requiredComponents” uniapp的话加到manifest.json下的mp-weixin 外部链接文章&#xff1a;解决方案文章1 解决方案文章2 &qu…

vs2019 c++20规范 全局函数 ref 及模板类 reference_wrapper<_Ty> 的源码分析

这是个引用&#xff0c;可以包裹一个对象&#xff0c;相当于引用该对象&#xff0c;而不是在作为函数形参时产生值传递。因为模板 reference_wrapper<_Ty> 其实是封装了该对象的地址。下面以图示形式给出其重要的成员函数。模板其实都差不多&#xff0c;跟人也一样&#…

使用Redis的优势以及会引发的问题

优势 ①使用redis代表着高性能还有高并发&#xff0c;高性能很好理解&#xff0c;redis会缓存我们访问的数据。他是基于内存的&#xff0c;第一次访问数据库我们可能需要800ms&#xff0c;但是访问后如果使用redis进行缓存&#xff0c;第二次乃至后面访问相同的数据就只需要去…

Flutter基础 -- Dart 语言 -- 进阶使用

目录 1. 泛型 generics 1.1 泛型使用 1.2 泛型函数 1.3 构造函数泛型 1.4 泛型限制 2. 异步 async 2.1 异步回调 then 2.2 异步等待 await 2.3 异步返回值 3. 生成器 generate &#xff08;了解&#xff09; 3.1 同步生成器 sync* 使用 sync* 的场景 总结 3.2 异…

软件项目调研三部曲(调研计划,调研大纲,调研报告)原件获取

软件项目详细调研的目的是依据项目合同的要求&#xff0c;能够通过在客户现场&#xff0c;并通过访谈的方式&#xff0c;尽可能的了解客户的需求和业务现状&#xff0c;包括客户涉及到的业务部门的岗位设置、岗位职责、工作内容、工作流程、管理难点以及通过实施信息化系统的期…

Silanna UV光荣推出了一款革命性的高功率远紫外线LED

这款令人瞩目的光源&#xff0c;拥有令人震撼的235nm波长&#xff0c;并被巧妙地封装在紧凑的6.8mm结构中&#xff0c;其魅力与实力兼具。 今年六月&#xff0c;在苏格兰圣安德鲁斯大学举行的盛大2024年远紫外科学和技术国际大会&#xff08;ICFUST&#xff09;上&#xff0c;S…

深度剖析AI机会,数字人智能对话系统:未来的人机交互新范式

Datawhale干货 作者&#xff1a;邓恺俊&#xff0c;Datawhale成员 随着人工智能时代的到来&#xff0c;大模型的技术日新月异&#xff0c;我们不仅仅满足于文字之间的交互&#xff0c;希望能够有更近一步的交流。既然现在文字已经能够很好的模拟人类了&#xff0c;那随之而来的…