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.rhkb.cn/news/448389.html

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

相关文章

测试200个用户在10秒之内同时访问百度的网页

右键添加->线程->线程组 得到下面的截图 线程数&#xff1a;就是模仿用户并发的数量&#xff0c;Ramp-up:运行线程的总时间&#xff0c;单位是秒&#xff0c;循环次数&#xff1a;就是每个线程循环多少次。 现在的线程数是200&#xff0c;就是相当于有200个用户&#xff…

Internet Download Manager下载器2025绿色版带你飞一般的下载体验

Internet Download Manager下载器&#xff1a;带你飞一般的下载体验 &#x1f31f; **极速下载&#xff0c;秒变大神&#xff01;** 兄弟姐妹们&#xff0c;还在为龟速的下载速度抓狂吗&#xff1f;&#x1f620; 今天要给大家安利一款神奇的下载神器——Internet Download Ma…

Linux升级openssl版本

Linux升级openssl版本 服务器编译依赖库检查 $ yum -y install gcc gcc-c make libtool zlib zlib-devel版本检测 $ openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 $ ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013下载openssl 地址&#xff1a;https://www.o…

Linux的hadoop集群部署

1.hadoop是一个分布式系统基础架构,主要解决海量数据额度存储与海量数据的分析计算问题 hdfs提供存储能力,yarn提供资源管理能力,MapReduce提供计算能力 2.安装 一:调整虚拟机内存,4G即可 二:下载安装包 网址:https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.4.0/…

Java知识巩固(五)

目录 基本数据类型 基本类型和包装类型的区别&#xff1f; 自动装箱与拆箱了解吗?原理是什么&#xff1f; 为什么浮点数运算的时候回邮精度丢失的风险&#xff1f; 如何解决浮点数运算的精度丢失问题&#xff1f; 超过 long 整型的数据应该如何表示&#xff1f; 基本数据…

javaWeb项目-Springboot+vue-车辆管理系统功能介绍

本项目源码&#xff08;点击下方链接下载&#xff09;&#xff1a;java-springbootvue车辆管理系统设计与实现源码(项目源码-说明文档)_若依检车管理系统资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm…

Sentinel最全笔记,详细使用步骤教程清单

一、Sentinel的基本功能 1、流量控制 流量控制在网络传输中是一个常用的概念&#xff0c;它用于调整网络包的发送数据。然而&#xff0c;从系统稳定性角度考虑&#xff0c;在处理请求的速度上&#xff0c;也有非常多的讲究。任意时间到来的请求往往是随机不可控的&#xff0c;…

SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)

TOC 问题背景 从零开始学springcloud微服务项目 注意事项&#xff1a; 约定 > 配置 > 编码IDEA版本2021.1这个项目&#xff0c;我分了很多篇章&#xff0c;每篇文章一个操作步骤&#xff0c;目的是显得更简单明了controller调service&#xff0c;service调dao默认安装ngi…

python项目实战——下载美女图片

python项目实战——下载美女图片 文章目录 python项目实战——下载美女图片完整代码思路整理实现过程使用xpath语法找图片的链接检查链接是否正确下载图片创建文件夹获取一组图片的链接获取页数 获取目录页的链接 完善代码注意事项 完整代码 import requests import re import…

2023年“网络建设与运维”广西省赛试题复盘

2023年“网络搭建与应用”省赛试题复盘 第一部分&#xff1a;网络搭建及安全部署项目 &#xff08;500分&#xff09; 一、竞赛内容分布 “网络搭建与应用”竞赛共分二个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;网络搭建及安全部署项目 第二部分&#xff1a;服…

什么是Qseven?模块电脑(核心板)规范标准简介二

1.概念 Qseven是一种通用的、小尺寸计算机模块标准&#xff0c;适用于需要低功耗、低成本和高性能的应用。 Qseven模块电脑&#xff08;核心板&#xff09;采用230Pin金手指连接器 2.Qseven的起源 Qseven最初是由Congatec、SECO、MSC三家欧洲公司于2008年发起&#xff0c;旨在…

简单聊聊 限流算法

计数器 计数器算法&#xff0c;是在一个时间间隔内&#xff0c;比如一分钟内&#xff0c;对请求进行计数&#xff0c;然后将计数值和设置的最大值进行比较&#xff0c;如果超过了最大值&#xff0c;进行限流处理&#xff0c;拒绝请求。 他的优点是&#xff1a;算法简单&#…

OpenAI持续open,meta prompt开源

目录 前言 提示&#xff08;Prompts&#xff09; Playground中的元提示借鉴了OpenAI提示工程最佳实践和用户的实际经验。 模式&#xff08;Schemas&#xff09; 自描述模式 -元模式。 虽然OpenAI目前使用元提示和模式&#xff0c;但将来可能会集成更先进的技术&#xff0c…

仓库管理系统有哪些功能?

上一篇&#xff0c;我们向大家介绍了一下仓库管理是什么&#xff0c;仓库管理操作流程有哪些&#xff0c;仓库管理系统又有哪些基本功能&#xff0c;那么接下来这篇文章&#xff0c;我们会详细介绍一下仓库管理系统各个功能是如何运作&#xff0c;是怎样解决企业中碰到的难题的…

mysql查看和修改默认配置

1.查看最大连接数 SELECT max_connections; 或者 SHOW VARIABLES LIKE max_connections;2.查看当前连接的客户端 SHOW PROCESSLIST;2.临时设置最大连接数 SET GLOBAL max_connections 500;3.临时设置连接客户端交互超时时间 SET GLOBAL interactive_timeout 1800;4.永久生…

HJ2 计算某字符出现次数

代码&#xff08;首刷自解 2024年10月16日&#xff09; #include <iostream> using namespace std;int main() {string input;getline(cin, input);char target;cin >> target;char t2;if (target > a && target < z) {t2 target (A - a);} else …

华为---Super VLAN简介及示例配置

目录 1. Super VLAN技术产生背景 2. Super VLAN概念 3. Super VLAN应用场景 4. Super VLAN工作原理 5. Super-VLAN主要配置命令 6. Super-VLAN主要配置步骤 7. 示例配置 7.1 示例场景 7.2 网络拓扑 7.3 配置代码 7.4 代码解析 7.5 测试验证 1. Super VLAN技术产生背…

低空产业园搭建技术详解

低空产业园的搭建技术是一个复杂而系统的工程&#xff0c;涉及多个方面的技术和策略。以下是对低空产业园搭建技术的详细解析&#xff1a; 一、规划与设计 1. 总体规划&#xff1a;低空产业园的规划需要结合地方经济发展、产业基础、政策导向等因素&#xff0c;制定科学合理的…

Meta Llama 3强势来袭:迄今最强开源大模型,性能媲美GPT-4

前言 Meta的最新语言模型Llama 3已经发布&#xff0c;标志着在大型语言模型&#xff08;LLM&#xff09;领域的一次重大突破&#xff0c;其性能在行业内与GPT-4相媲美。此次更新不仅提升了模型的处理能力和精确性&#xff0c;还将开源模型的性能推向了一个新的高度。 Hugging…

java在线招投标|评标|竞标|单一采购|邀标|评审专家|采购软件源码

​功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…