UE5 GAS开发P41-43 永久效果,去除永久效果,伤害区域,EnumClass,开始重叠与结束重叠事件

这一部分学习了怎么创建一个伤害性的地形(火焰地形,毒沼泽等都可以用这个方式创建)

AuraEffectActor.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameplayEffect.h"
#include "AbilitySystem/AuraAbilitySystemComponentBase.h"
#include "Components/SphereComponent.h"
#include "GameFramework/Actor.h"
#include "GameplayEffectTypes.h"
#include "AuraEffectActor.generated.h"

class UGameplayEffect;
class UAbilitySystemComponent;

UENUM(BlueprintType)
enum class EEffectApplicationPolicy : uint8 { ApplyOnOverlap,ApplyOnEndOverlap,DoNotApply  };

UENUM(BlueprintType)
enum class EEffectRemovePolicy : uint8 { RemoveOnEndOverlap,DoNotRemove  };

UCLASS()
class MYGAS_API AAuraEffectActor : public AActor
{
   GENERATED_BODY()
   
public:    
   // Sets default values for this actor's properties
   AAuraEffectActor();
   
protected:
   // Called when the game starts or when spawned
   virtual void BeginPlay() override;

   UFUNCTION(BlueprintCallable)
   void ApplyEffectToTarget(AActor* TargetActor, TSubclassOf<UGameplayEffect> GameplayEffectClass);

   UFUNCTION(BlueprintCallable)
   void OnOverlap(AActor* TargetActor);

   UFUNCTION(BlueprintCallable)
   void OnEndOverlap(AActor* TargetActor);
   
   UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="Applied Effects")
   TSubclassOf<UGameplayEffect> InstantGameplayEffectClass;

   UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="Applied Effects")
   EEffectApplicationPolicy  InstantEffectApplicationPolicy = EEffectApplicationPolicy::DoNotApply;
      
   UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="Applied Effects")
   TSubclassOf<UGameplayEffect> DurationGameplayEffectClass;

   UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="Applied Effects")
   EEffectApplicationPolicy  DurationEffectApplicationPolicy = EEffectApplicationPolicy::DoNotApply;
   
   UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="Applied Effects")
   TSubclassOf<UGameplayEffect> InfiniteGameplayEffectClass;

   UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="Applied Effects")
   EEffectApplicationPolicy  InfiniteEffectApplicationPolicy = EEffectApplicationPolicy::DoNotApply;

   UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="Applied Effects")
   EEffectRemovePolicy InfiniteEffectRemovePolicy = EEffectRemovePolicy::RemoveOnEndOverlap;

   TMap<FActiveGameplayEffectHandle , UAbilitySystemComponent*> ActiveEffectHandles;
private:
   
};

AuraEffectActor.cpp

 // Fill out your copyright notice in the Description page of Project Settings.


#include "Actor/AuraEffectActor.h"

#include "AbilitySystemBlueprintLibrary.h"
#include "AbilitySystemComponent.h"
#include "AbilitySystemInterface.h"
#include "AbilitySystem/AuraAbilitySystemComponentBase.h"
#include "AbilitySystem/AuraAttributeSet.h"
#include "Components/StaticMeshComponent.h"

 // Sets default values
AAuraEffectActor::AAuraEffectActor()
{
 // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
   PrimaryActorTick.bCanEverTick = false;
   SetRootComponent(CreateDefaultSubobject<USceneComponent>("SceneRoot"));
}

 // Called when the game starts or when spawned
void AAuraEffectActor::BeginPlay()
{
   Super::BeginPlay();
 
}

void AAuraEffectActor::ApplyEffectToTarget(AActor* TargetActor, TSubclassOf<UGameplayEffect> GameplayEffectClass)
{
   //这里是使用 UAbilitySystemBlueprintLibrary 内的静态函数,在指定的Target上查找并返回UAbilitySystemComponent
   UAbilitySystemComponent* TargetASC =  UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor);
   if(TargetASC==nullptr) return;

   check(GameplayEffectClass);
   //创建了一个游戏效果的内容句柄,提供游戏效果的信息
   FGameplayEffectContextHandle TargetASCContext =TargetASC->MakeEffectContext();
   //把自己作为游戏效果的源对象,确保AbilitySystem可以识别到自己
   TargetASCContext.AddSourceObject(this);
   //这里创建了一个游戏效果规范,GameplayEffectClass 是要应用的游戏效果的类,1.0f 是游戏效果的初始生命周期倍率,TargetASCContext 是游戏效果的上下文. 调用 MakeOutgoingSpec 函数,将会根据提供的参数创建一个游戏效果规范
   const FGameplayEffectSpecHandle EffectSpecHandle = TargetASC->MakeOutgoingSpec(GameplayEffectClass,1.0f,TargetASCContext);
   const FActiveGameplayEffectHandle ActiveGameplayEffectHandle =  TargetASC->ApplyGameplayEffectSpecToSelf(*EffectSpecHandle.Data.Get());

   const bool bIsInfinite = EffectSpecHandle.Data.Get()->Def.Get()->DurationPolicy == EGameplayEffectDurationType::Infinite;
   if(bIsInfinite)
   {
      ActiveEffectHandles.Add(ActiveGameplayEffectHandle,TargetASC);
   }
}

void AAuraEffectActor::OnOverlap(AActor* TargetActor)
{
    if(InstantEffectApplicationPolicy == EEffectApplicationPolicy::ApplyOnOverlap)
    {
      ApplyEffectToTarget(TargetActor,InstantGameplayEffectClass);
    }
    if(DurationEffectApplicationPolicy == EEffectApplicationPolicy::ApplyOnOverlap)
    {
     ApplyEffectToTarget(TargetActor,DurationGameplayEffectClass);
    }
    if(InfiniteEffectApplicationPolicy == EEffectApplicationPolicy::ApplyOnOverlap)
    {
     ApplyEffectToTarget(TargetActor,InfiniteGameplayEffectClass);
    }
}

void AAuraEffectActor::OnEndOverlap(AActor* TargetActor)
{
    if(InstantEffectApplicationPolicy == EEffectApplicationPolicy::ApplyOnOverlap)
    {
     ApplyEffectToTarget(TargetActor,InstantGameplayEffectClass);
    }
    if(DurationEffectApplicationPolicy == EEffectApplicationPolicy::ApplyOnOverlap)
    {
     ApplyEffectToTarget(TargetActor,DurationGameplayEffectClass);
    }
    if(InfiniteEffectApplicationPolicy == EEffectApplicationPolicy::ApplyOnOverlap)
    {
     ApplyEffectToTarget(TargetActor,InfiniteGameplayEffectClass);
    }
    if(InfiniteEffectRemovePolicy == EEffectRemovePolicy::RemoveOnEndOverlap)
    {
        //获取到目标角色的能力组件
        UAbilitySystemComponent* TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor);
        if(!IsValid(TargetASC)) return;
        //创建了一个储存移除游戏效果句柄的数组 HandlesToRemove
        TArray<FActiveGameplayEffectHandle> HandlesToRemove;
        //遍历 ActiveEffectHandles 数组
        for(TTuple<FActiveGameplayEffectHandle, UAbilitySystemComponent*> HandlePair:ActiveEffectHandles)
        {
             // 当 TargetASC 内有 HandlePair.Value的值的时候
             if(TargetASC == HandlePair.Value)
             {
                 // 移除 HandlePair 的效果
                 TargetASC->RemoveActiveGameplayEffect(HandlePair.Key, 1);
                 //把这个效果放在 HandlesToRemove 中
                 HandlesToRemove.Add(HandlePair.Key);
             }
        }
        // 遍历 HandlesToRemove 内的每一个元素
        for(auto& Handle : HandlesToRemove)
        {
             // 在 ActiveEffectHandles 这个数组内移除
             ActiveEffectHandles.FindAndRemoveChecked(Handle);
             
        }
    }
 }
 
      

创建GE_FireArea和BP_FireArea

FireArea需要把Applied Effects设置喂Apply Overlay

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

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

相关文章

【navicat】oracle library is not loaded 问题复现和解决方案

问题原因&#xff1a;客户端oci版本安装错误&#xff0c;navicat需要64位的oci,但是使用32位的oci。 解决方案&#xff1a;官网下载64位oci进行配置。本次演示的解决多了splplus&#xff0c;其实不必要安装也能运行。 首先判断是否数据库已经打开 尝试使用splplus连接数据库 1…

GDPU 算法分析与设计 天码行空5

一、【实验目的】 &#xff08;1&#xff09;熟悉动态规划算法的基本思想. &#xff08;2&#xff09;理解动态规划算法中子问题的划分和递推方程设计的基本方法. &#xff08;3&#xff09;熟悉矩阵链乘法的基本思想并编程实现。 二、【实验内容】 输入:矩阵链Ai…j的输入为…

美国站群服务器的国际网络环境在全球的影响力?

美国站群服务器的国际网络环境在全球的影响力? 美国站群服务器如何通过其技术优势和网络基础设施&#xff0c;塑造国际网络环境并对全球产生影响力? 在当今数字化时代&#xff0c;美国站群服务器在国际网络环境中扮演着至关重要的角色。作为全球互联网发展的领导者之一&…

在Windows 11中NotePad3的安装和配置详细教程

&#x1f4dd; 在Windows 11中NotePad3的安装和配置详细教程 文章目录 &#x1f4dd; 在Windows 11中NotePad3的安装和配置详细教程摘要引言正文1. NotePad3简介 &#x1f4d8;2. 安装前的准备工作 &#x1f6e0;️ 我已经给大家准备了一份安装包&#xff0c;微信搜索公众号&am…

K8S 部署和访问 Kubernetes 仪表板(Dashboard)

文章目录 部署 Dashboard UI浏览器访问登陆系统 Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中&#xff0c;也可以对容器应用排错&#xff0c;还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览…

推荐一款国内超级好用的低代码平台+商业开源低代码MES

一、低代码平台是什么&#xff1f; 低代码平台是一种应用程序&#xff0c;它为编程提供图形用户界面&#xff0c;从而以极快的速度开发代码&#xff0c;减少传统编程工作。 这些工具有助于快速开发代码&#xff0c;最大限度地减少手工编码的工作量。这些平台不仅有助于编码&a…

网络通信安全

一、网络通信安全基础 TCP/IP协议简介 TCP/IP体系结构、以太网、Internet地址、端口 TCP/IP协议简介如下&#xff1a;&#xff08;from文心一言&#xff09; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff0…

基础环境:wsl2安装Ubuntu22.04 + miniconda

服务器相关信息&#xff1a; Thinkpad p1 gen5 64G 2T 3080ti&#xff0c;自带的有nvidia-smi显卡驱动。使用wsl2安装Ubuntu22.04 miniconda目标&#xff1a;安装gpu版本的PyTorch2.1.2&#xff08;torch2.1.2/cu117 torchvision0.16.2/cu117&#xff09; 处理器 12th Gen I…

【Linux-进程状态】

文章目录 1.进程状态1.运行状态2.阻塞状态3.挂起 2.Linux系统中的进程状态1.前台进程和后台进程深度睡眠 2.停止状态3.僵尸状态和死亡状态&#xff08;孤儿进程&#xff09; 1.进程状态 想要理解进程状态&#xff0c;我们要先看看课本中的进程有哪些状态。 进程状态用大白话说…

云渲染一张图多少钱

使用云渲染渲染一张效果图的价格没法确定多少钱一张&#xff0c;云渲染一张图的价格会受到多个因素的影响&#xff0c;如云渲染平台的定价策略、所选的渲染配置、优惠政策以及你提交的场景任务等。因此&#xff0c;无法给出确切的单一价格。 不同的云渲染平台会有不同的定价模…

《苍穹外卖》Day11部分知识点记录(数据统计——图像报表)

一、Apache ECharts 介绍 Apache ECharts是一款基于javascript的数据可视化图标库&#xff0c;提供直观、生动、可交互、可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html 效果展示 柱形图饼图折线图 入门案例 1. 在 echart…

API安全尽释领先力,美创再获权威市场指南推荐

数字化时代&#xff0c;单位组织愈加依赖API实现系统间的数据共享和交互&#xff0c;但同时&#xff0c;因API引发的网络攻击风险也在不断升级&#xff0c;成为数据泄露的高发之地。 统计显示&#xff0c;过去的一年&#xff0c;API攻击增长已超过287%。Gartner研报预测&#x…

链动3+1模式:引领运营革命的创新之路与优势解析

在数字化浪潮的席卷之下&#xff0c;企业为寻求持续发展&#xff0c;已将商业模式创新视为核心驱动力。其中&#xff0c;链动31模式以其独特的运营理念&#xff0c;成功引领了一场革命性的运营变革&#xff0c;使得众多企业和个人在激烈的市场竞争中崭露头角。接下来&#xff0…

Docker 容器操作

容器创建 就是将镜像加载到容器的过程。 新创建的容器默认处于停止状态&#xff0c;不运行任何程序&#xff0c;需要在其中发起一个进程来启动容器。 格式&#xff1a;docker create [选项] 镜像 常用选项&#xff1a; -i&#xff1a;让容器开启标准输入 -t&#xff1a;让…

RLDRAM简介

说明 RLDRAM&#xff08;Reduced Latency DRAM&#xff0c;减少延迟动态随机访问存储器&#xff09;是一种专为解决延迟问题而设计的DRAM架构&#xff0c;主要由美光和英飞凌公司开发。它的出现主要是为了满足对更低延迟、更高带宽的SRAM市场的需求。 随着技术的不断发展&…

上位机图像处理和嵌入式模块部署(树莓派4b与mcu固件升级)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在一个系统当中&#xff0c;可能不止需要树莓派4b一个设备。有的时候还需要搭载一个mcu&#xff0c;做一些运动控制的事情。比如说&#xff0c;图像…

电脑处于局域网,怎么查询电脑公网IP

当你购买了云服务器&#xff0c;要设置安全组的时候&#xff0c;就是限制能访问你的服务器的网络IP&#xff0c;比如限制只有你的电脑能连接你的服务器 那么一般就是要就要开放服务器的22号端口&#xff0c;端口范围就是你要开放的服务器的端口&#xff0c;如上图所示授权对象就…

【JAVA】探究Java依然屹立的25个理由

1.生态系统成熟 Java 具有广泛的生态系统&#xff0c;我们可以自由选择库、构建工具和框架。 2.一次编写&#xff0c;到处运行 Java 具有跨平台特性&#xff0c;一次编写&#xff0c;到处运行。 3. 向后兼容性 Java 承诺永远向后兼容&#xff0c;非常nice。 4. JAVA强类型…

与Apollo共创生态:Apollo7周年大会自动驾驶生态利剑出鞘

前言 4月22日&#xff0c;百度Apollo在北京车展前夕举办了以“破晓•拥抱智变时刻”为主题的智能汽车产品发布会&#xff0c;围绕汽车智能化&#xff0c;发布了智驾、智舱、智图等全新升级的“驾舱图”系列产品。 1、7周年大会 自2013年百度开始布局自动驾驶&#xff0c;201…

盲人安全过马路:科技赋能,独立出行不再难

作为一位资深记者&#xff0c;我长期关注特殊群体的生活现状与科技助力下的改善举措。今天&#xff0c;我要讲述的是盲人朋友在独立出行&#xff0c;尤其是过马路时面临的挑战&#xff0c;以及一款叫做蝙蝠避障的创新辅助应用如何通过实时避障与拍照识别功能&#xff0c;显著提…