100. UE5 GAS RPG 显示范围魔法的攻击范围

在这一篇里,我们将制作一个范围魔法,释放魔法时,我们将在鼠标拾取位置绘制一个魔法光圈,用于显示技能释放时攻击的范围,然后再次点击可以释放技能。

创建贴花类

魔法范围标识的光圈,我们采用贴花实现,首先我们创建一个类,用于作为这种类型的贴花的基类,贴花是组件对象,我们需要创建一个基于Actor的类,用于挂载贴花组件。
在这里插入图片描述
命名
在这里插入图片描述
在类里增加一个贴花组件

UCLASS()
class RPG_API AMagicCircle : public AActor
{GENERATED_BODY()public:	AMagicCircle();virtual void Tick(float DeltaTime) override;//魔法光环法阵贴花UPROPERTY(VisibleAnywhere, BlueprintReadOnly)TObjectPtr<UDecalComponent> MagicCircleDecal;
protected:virtual void BeginPlay() override;
};

在构造函数里,初始化贴花,并附加到根组件上

AMagicCircle::AMagicCircle()
{PrimaryActorTick.bCanEverTick = true;MagicCircleDecal = CreateDefaultSubobject<UDecalComponent>("MagicCircleDecal");MagicCircleDecal->SetupAttachment(GetRootComponent());
}

编译代码,创建一个基于贴花类的蓝图
在这里插入图片描述
在贴花组件上设置贴花材质
在这里插入图片描述
我们可以设置贴花组件范围缩放,来设置贴花的显示范围,注意,贴花会基于x轴的方向贴到表面,所以,如果想让贴花贴到地面,我们需要x轴垂直到地面。
在这里插入图片描述
将其放置到场景内查看效果。
在这里插入图片描述

实现贴花的显示隐藏以及跟随鼠标移动

接下来,我们要实现贴花的显示隐藏,由于贴花需要跟随鼠标移动,鼠标移动拾取是在PlayerController里实现的,我们将其实例放到PlayerController类里。

在PlayerController里,我们增加两个属性,用于设置贴花的类,并在需要显示时,设置保存贴花实例的属性,并增加一个更新贴花位置的函数,在帧回调里调用。

	//创建奥数光圈使用的类UPROPERTY(EditDefaultsOnly)TSubclassOf<AMagicCircle> MagicCircleClass;//存储魔法光圈的属性,不需要暴露给蓝图UPROPERTY()TObjectPtr<AMagicCircle> MagicCircle;void UpdateMagicCircleLocation() const; //每一帧调用,更新魔法光圈的位置

增加两个public函数,用于玩家角色类调用显示和隐藏贴花

	//显示魔法光圈 并设置光圈贴花材质UFUNCTION(BlueprintCallable)void ShowMagicCircle(UMaterialInterface* DecalMaterial);//隐藏魔法光圈UFUNCTION(BlueprintCallable)void HideMagicCircle() const; 

在显示贴花时,我们将在实例不存在的情况下创建一个,并修改它的材质。
在隐藏时,我们将贴花销毁掉。

void ARPGPlayerController::ShowMagicCircle(UMaterialInterface* DecalMaterial)
{if(!IsValid(MagicCircle)) MagicCircle = GetWorld()->SpawnActor<AMagicCircle>(MagicCircleClass);//设置贴花材质if(DecalMaterial != nullptr){MagicCircle->MagicCircleDecal->SetMaterial(0, DecalMaterial);}
}void ARPGPlayerController::HideMagicCircle() const
{if(IsValid(MagicCircle)) MagicCircle->Destroy();
}

接着就是更新贴图的位置,如果贴花实例存在,我们将鼠标拾取的位置设置给贴花

void ARPGPlayerController::UpdateMagicCircleLocation() const
{if(IsValid(MagicCircle)){MagicCircle->SetActorLocation(CursorHit.ImpactPoint);}
}

并在每一帧更新里去调用更新贴花位置
在这里插入图片描述
接下来,我们在PlayerController里设置贴花的类
在这里插入图片描述
在playerController里编写一些测试节点,测试贴花是否能够正确显示隐藏
在这里插入图片描述
接着运行测试效果
在这里插入图片描述
我们想让贴花能够自动旋转,先在贴花里,将组件设置为蓝图可视
在这里插入图片描述
然后在贴花类里的帧回调设置基于x轴旋转,每一帧修改,贴花会自己旋转起来。
在这里插入图片描述
这个贴花的显示隐藏不应该是PlayerController的功能,所以,我们将在玩家角色类增加对应的函数。为了方便后续调用,我们将其作为角色接口的函数,后面只需要通过接口调用即可。
我们在player interface里增加两个函数,用于显示和隐藏贴花

//显示魔法光圈,并设置魔法光圈的贴花材质UFUNCTION(BlueprintNativeEvent, BlueprintCallable)void ShowMagicCircle(UMaterialInterface* DecalMaterial = nullptr);//隐藏魔法光圈UFUNCTION(BlueprintNativeEvent, BlueprintCallable)void HideMagicCircle();

玩家角色类继承PlayerInterface接口,我们直接覆写

	virtual void ShowMagicCircle_Implementation(UMaterialInterface* DecalMaterial) override;virtual void HideMagicCircle_Implementation() override;

并实现对应的函数,函数内获取到PlayerController并调用对应的函数

void ARPGHero::ShowMagicCircle_Implementation(UMaterialInterface* DecalMaterial)
{if(ARPGPlayerController* RPGPlayerController = Cast<ARPGPlayerController>(GetController())){RPGPlayerController->ShowMagicCircle(DecalMaterial);}
}void ARPGHero::HideMagicCircle_Implementation()
{if(ARPGPlayerController* RPGPlayerController = Cast<ARPGPlayerController>(GetController())){RPGPlayerController->HideMagicCircle();}
}

将PlayerController里的测试节点删除,在玩家角色蓝图里增加使用接口函数调用,并修改一个贴花测试修改材质的函数。
在这里插入图片描述
我们设置一个新的贴花,并将颜色修改掉,运行查看效果即可。
在这里插入图片描述

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

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

相关文章

利用飞腾派进行OpenCV开发

实验目标&#xff1a; 完成飞腾平台OpenCV开发。 实验大纲&#xff1a; Mat数据结构加载、显示、保存图像读写像素RGB图像分离彩色图转灰度图 Mat数据结构 Mat是一个类&#xff0c;由两个数据部分组成&#xff1a;矩阵头(大小,通道,数据类型等)和数据块(像素 值)。创建示例…

SQL Server-导入和导出excel数据-注意事项

环境&#xff1a; win10&#xff0c;SQL Server 2008 R2 之前写过的放在这里&#xff1a; SqlServer_陆沙的博客-CSDN博客 https://blog.csdn.net/pxy7896/category_12704205.html 最近重启ASP.NET项目&#xff0c;在使用sql server导出和导入数据时遇到一些问题&#xff0c;特…

SDRAM控制器的设计与验证(野火学习笔记)

SDRAM发展至今已历经五代&#xff0c;具有单位存储量大、高数据带宽、读写速度快、价格相对便宜等优点。同时&#xff0c;作为内存条中不可缺少的有一部分&#xff0c;SDRAM在计算机领域也占有一席之地。 &#xff08;SDRAM的内容以及操作时序比较复杂&#xff0c;本文已经尽可…

计算机毕业设计Python+大模型知识图谱中华古诗词可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析 PyTorch Tensorflow LSTM

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 开发技术&#xff1a; 前端…

Web前端-JavaScript书写位置

一、JavaScript介绍 1.JavaScript 是什么? 是一种运行在客户端(浏览器)的编程语言&#xff0c;实现人机交互效果。 2.作用 &#xff08;1&#xff09;网页特效(监听用户的一些行为让网页作出对应的反馈) &#xff08;2&#xff09;表单验证(针对表单数据的合法性进行判断…

大语言模型训练

大语言模型训练 1.两大问题2.并行训练2.1数据并行2.2模型并行2.3张量并行2.4混合并行 3.权重计算3.1浮点数3.2混合精度训练3.3deepspeed&#xff08;微软&#xff09;3.3.1 ZeRO3.3.2ZeRO-offload 3.3总结 4.PEFT4.1Prompt TuningPrefix-tuning4.2P-tuning & P-tuning v2 5…

sentinel dashboard分布式改造落地设计实现解释(二)-分布式discovery组件

discovery discovery负责维护app/机器资料库&#xff0c;transport健康检测&#xff0c; transport上下线处理。discovery关键是分布式存储&#xff0c;后续研究一下raft&#xff0c;其复制&#xff0c;状态机&#xff0c;快照技术&#xff0c;但个人觉得&#xff0c;discover…

DBeaver连接Hive教程

hive shell&#xff1a;通过hive shell来操作hive&#xff0c;但是至多只能存在一个hive shell&#xff0c;启动第二个会被阻塞&#xff0c;也就是说hive shell不支持并发操作。 基于JDBC等协议&#xff1a;启动hiveserver2&#xff0c;通过jdbc协议可以访问hive&#xff0c;hi…

基于SSM服装定制系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;服装类型管理&#xff0c;服装信息管理&#xff0c;服装定制管理&#xff0c;留言反馈&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xf…

git commit / push 报错 文件不存在

1. 错误信息 尝试使用 git restore --staged filename 取消暂存&#xff0c;但是报错 2. 解决方法 进入 当前仓库/.git文件夹内&#xff0c;删除 index.lock 文件 再执行 git restore --staged filename 等操作。

通过无线路由器连接三菱PLC的设置方法

1.首先设置无线路由器上网方式为DHCP&#xff08;自动获取IP地址&#xff09;。点击保存&#xff0c;然后点击更多功能 2.再点击网络设置-局域网&#xff0c;勾选DHCP服务器&#xff0c;此功能的作用是对局域网内所有设备分配IP地址。 然后保存&#xff1b; 3.再点击系统设置…

Git极速入门

git初始化 git -v git config --global user.name "" git config --global user.email "" git config --global credential.helper store git config --global --list省略(Local) 本地配置&#xff0c;只对本地仓库有效–global 全局配置&#xff0c;所有…

云计算实验1——基于VirtualBox的Ubuntu安装和配置

实验步骤 1、VirtualBox的安装 本实验使用VirtualBox-7.0.10 进行演示。对于安装包&#xff0c;大家可以前往 VirtualBox官网下载页面(https :/ / www. virtualbox.org/wiki/Downloads)下载其7.0版本安装包进行安装&#xff0c;或者直接使用QQ群的安装包VirtualBox-7.0.10-15…

给定一个正整数n随机生成n个字节即生成2n个十六进制数将其组成字符串返回secrets.token_hex(n)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 给定一个正整数n 随机生成n个字节 即生成2n个十六进制数 将其组成字符串返回 secrets.token_hex(n) [太阳]选择题 根据题目代码&#xff0c;执行的结果错误的是&#xff1f; import secrets …

对vue响应式数据的理解(vue基础,面试,源码级讲解)

首先我们要知道哪些数据可以劫持。 是否可以劫持&#xff1a; 在JavaScript等动态语言中&#xff0c;字符串和数字虽然是基本数据类型&#xff08;也称为原始数据类型&#xff09;&#xff0c;但它们可以包装成对象&#xff08;如String对象和Number对象&#xff09;进行处理。…

软件测试笔记——接口测试

文章目录 一、概念1.接口测试流程2.URL3.HTTP协议4.RESTful5.案例介绍 二、Postman1.Postman软件2.登录接口调试-获取验证码3.登录接口调试-自动关联数据4.合同上传接口-提交请求数据5.提交参数查询6.批量执行7.接口用例设计8.断言8.参数化三、案例1.项目2.课程添加3.课程列表查…

萤石云服务支持云端视频AI自动剪辑生成

萤石视频云存储及媒体处理服务是围绕IoT设备云端存储场景下的音视频采集、媒体管理、视频剪辑和分发能力的一站式、专业云服务&#xff0c;并可面向广大开发者提供复杂设备存储场景下的完整技术方案。目前该服务新增了视频剪辑功能&#xff0c;支持将视频片段在云端进行裁剪并拼…

大数据新视界 --大数据大厂之数据脱敏技术在大数据中的应用与挑战

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

智能取暖桌:以九芯电子NRK3502语音识别芯片提升用户体验

随着科技的不断发展&#xff0c;智能家居市场日益繁荣。智能取暖桌作为其中的一款产品&#xff0c;受到了广大消费者的关注。在智能取暖桌的众多创新中&#xff0c;九芯电子NRK3502语音识别芯片的融入&#xff0c;为用户体验带来了质的飞跃。 首先&#xff0c;NRK3502语音识别芯…

#每日一题#自动化 2024年10月

#每日一题#自动化 2024年10月 1、深拷贝和浅拷贝的区别是什么&#xff1f; 参考答案&#xff1a; 深拷贝是将对象本身复制给另一个对象。这意味着如果对对象的副本进行更改时不会影响原对象。在 Python 中&#xff0c;我们使用 deepcopy&#xff08;&#xff09;函数进行深拷贝…