[玩转UE4/UE5动画系统>技能系统(GAS)篇] 三 影响 Gameplay Effect(GE)

2023-11-09 09:31

本文主要是介绍[玩转UE4/UE5动画系统>技能系统(GAS)篇] 三 影响 Gameplay Effect(GE),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。

在这里插入图片描述
工程文件: 玩转UE4(GitHub)
在这里插入图片描述

0. 效果演示

演示视频: 技能系统 一 什么是技能系统

在本文中你将学到:

  • 攻击和受击的基本原理。
  • Gameplay Effect的基本使用。
  • 一个GAS角色通过Gameplay Effect影响另一个GAS角色。

文章目录

    • 0. 效果演示
    • 1. 概要
    • 2. 案例:用通过GE实现攻击及受击响应
      • 2.1 攻击及受击响应原理
      • 2.2 攻击:完善玩家角色的Attack技能
        • 2.2.1 Trace For Target的实现
        • 2.2.2 GE_Hit的实现
      • 2.3 受击:为NPC添加一个挨打的被动技能
        • 2.3.1 GA_OnHit技能
        • 2.3.2 为NPC角色预加载GA_OnHit技能
    • 3. 小结

1. 概要

Gameplay Effect(下文简称GE)这个词给人的第一反应酷似游戏特效,实际上翻译成影响更合适。这种影响可以是一个GAS角色施加到另一个GAS角色,也可以施加到自身。

其实GE就是GAS角色之间传递的消息。

GE是一个纯数据蓝图,有很多配置项目但不需要手写代码。所以实现一个Effect,大多数工作都集中在它的Details面板。

GE蓝图派生自GameplayEffect类,一般以GE_为前缀命名。

在这里插入图片描述
下面我们通过一个角色攻击和另一个角色受击并响应的效果,了解一下GE在GA之间的工作原理。

下文会用较多的篇幅顺便解释一下攻击和受击响应的原理,如果已经熟悉这部分内容可以选择性跳过。

2. 案例:用通过GE实现攻击及受击响应

2.1 攻击及受击响应原理

在《[玩转UE4/UE5动画系统>技能系统(GAS)篇] 二 技能 Gameplay Ability(GA)》中我们把GA_Attack实现了一半,GA_Attack被激活后播放一个挥拳的蒙太奇动画。在这个动画中并不是每一帧都能攻击对方,有效的攻击帧一般在手臂伸地最直的帧,我们会在这一帧让角色进行一个射线检测,碰撞到的对象就是攻击到的另一个角色。
在这里插入图片描述
我们在蒙太奇的这一帧上添加一个蒙太奇动画通知并命名为Hit。这个动画通知相当于一个标记,当检测到它,我们就让角色进行射线检测。

在这里插入图片描述

本实例项目中的动画素材取自虚幻官方<[中文直播]第31期|GAS插件介绍(入门篇) | 伍德 大钊>中提供的资源。

2.2 攻击:完善玩家角色的Attack技能

下图是Attack技能过程,其中1部分是上篇文章实现的,2和3是分别是射线检测和实施(传递)GE的过程。
在这里插入图片描述
攻击方的AbilitySystemComponent调用ApplyGameplayEffectToTaget将GE_Hit实施给受击方的AbilitySystemComponent。两个GAS角色都是通过AbilitySystemComponent对话的。

2.2.1 Trace For Target的实现

Trace For Target是我用C++实现的一个Blueprint Function Library,当然也可以像官方直播教程那样直接用蓝图实现。

在这里插入图片描述

#pragma once#include "CoreMinimal.h"
#include "RPGCharacterBase.h"
#include "Kismet/GameplayStatics.h"
#include "TraceFunctions.generated.h"/*** */
UCLASS()
class UTraceFunctions : public UBlueprintFunctionLibrary
{GENERATED_BODY()
public:UFUNCTION(BlueprintCallable, Category = "Trace Functions")static void TraceForTarget(const AActor* Actor,const float Distance,const EDrawDebugTrace::Type DrawDebugTrace,bool& Detected,ARPGCharacterBase*& Target);
};
#include "Library/TraceFunctions.h"
#include "Kismet/KismetMathLibrary.h"
#include "Kismet/KismetSystemLibrary.h"void UTraceFunctions::TraceForTarget(const AActor* Actor,const float Distance,const EDrawDebugTrace::Type DrawDebugTraceType,bool& Detected,ARPGCharacterBase*& Target)
{Detected = false;if(Actor != nullptr){const FVector Location = Actor->GetActorLocation();const FVector Forward = Actor->GetActorForwardVector();const FVector Start = Location;const FVector End = Start + Forward*Distance;const FRotator Orientation = UKismetMathLibrary::MakeRotFromX(Forward);TArray<TEnumAsByte<EObjectTypeQuery> > ObjectTypes;ObjectTypes.Add(static_cast<EObjectTypeQuery>(ECollisionChannel::ECC_Pawn));FHitResult Result;const TArray<AActor*> ActorsToIgnore;UKismetSystemLibrary::BoxTraceSingleForObjects(Actor,Start,End,FVector(0.0,50.0,90.0),Orientation,ObjectTypes,false,ActorsToIgnore,DrawDebugTraceType,Result,true);Target = Cast<ARPGCharacterBase>(Result.GetActor());Detected = Result.bBlockingHit&&Target!=nullptr;}
}
2.2.2 GE_Hit的实现

其实这里才是本文的重点,然而并不复杂。

GE有很多参数,每个项目具体含义大家可以参考这里《GASDocumentation》中的Gameplay Effects

本例中只需要在GE_Hit中做如下设置:

  • 在GrantedTags的Added中添加Ability.Hit标签:当GE_Hit作用在GAS角色上时,自动为目标角色添加一个Ability.Hit标签(这个标签会当GE作用结束后自动去掉)。
  • 将Duration Policy设为Has Duration:GE_Hit会作用在目标角色上一段时长。
  • Scalable Float Magnitude设为0.1:GE_Hit作用时长为0.1秒。

在这里插入图片描述

2.3 受击:为NPC添加一个挨打的被动技能

2.3.1 GA_OnHit技能

受击效果也是用一个(受攻击)的蒙太奇实现的。
在这里插入图片描述
在本例中GA_OnHit是一个被动技能,所以我们需要为它设置一个触发方式(标签),如下图所示。这意味着,当所属GAS角色被添加了Ability.Hit标签时就会自动触发GA_OnHit技能。

在这里插入图片描述

2.3.2 为NPC角色预加载GA_OnHit技能

NPC方的继承关系依然如下图所示:

在这里插入图片描述
在这里插入图片描述

3. 小结

本文通过攻击和受击的小案例,帮助大家了解一下GA和GE之间的协作关系。同时我们也看到了,GA不仅可以主动召唤,也可以通过GE来被动触发。是不是感觉无穷的可能性正在向我们招手。GAS的威力还不止于此,在后续文章中,我们将继续深入了解GAS。

这篇关于[玩转UE4/UE5动画系统>技能系统(GAS)篇] 三 影响 Gameplay Effect(GE)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/375313

相关文章

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后