UE4/5 GAS技能系统入门

Unreal的GAS技能系统是针对游戏技能管理的一套逻辑封装方案,这套方案考虑面较广,包括了Cooldowns技能冷却、允许多技能同时释放、GameplayTags的使用、特殊的事件触发等,今天就来学习一下。

1.激活插件与C++部分配置

1.1 创建测试工程,选择第三人称案例,C++工程。以便自动创建对应的sln文件。

1.2 以UE5.2版本进行演示,首先在插件管理器中激活GameplayAbilities插件:
在这里插入图片描述
1.3 打开C++工程的build.cs文件,添加GameplayAbilities模块依赖:

// Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;public class MyProject : ModuleRules
{public MyProject(ReadOnlyTargetRules Target) : base(Target){PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "EnhancedInput", "GameplayAbilities" });}
}

1.4 找到Character默认角色类的.h头文件,添加相关模块include并实现IAbilitySystemInterface接口:

//头文件
#include "AbilitySystemInterface.h"
#include "AbilitySystemComponent.h"
#include "Abilities/GameplayAbility.h"
////省略//实现接口:
UCLASS(config=Game)
class AMyProjectCharacter : public ACharacter, public IAbilitySystemInterface
{GENERATED_BODY()//省略

1.5 在Character默认角色类的.h头文件中,定义几个关键函数:

public:AMyProjectCharacter();//该字段为IAbilitySystemInterface接口暴露字段:UAbilitySystemComponent* GetAbilitySystemComponent()const override;//实现技能的蓝图必须挂载该组件:UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Abilities")class UAbilitySystemComponent* AbilitySystemComponent;//学习技能函数需要手动实现:UFUNCTION(BlueprintCallable, Category = "Abilities")void AquireAbility(TSubclassOf<UGameplayAbility>AbilityToAquire);

1.6 来到Character默认角色类的.cpp文件中,实现这几个函数:

AMyProjectCharacter::AMyProjectCharacter()
{//省略//构造函数中创建这个组件:AbilitySystemComponent = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("AbilitySystem"));
}
//省略//实现GetAbilitySystemComponent,返回字段即可
UAbilitySystemComponent* AMyProject2Character::GetAbilitySystemComponent() const
{return AbilitySystemComponent;
}//自行实现AquireAbility逻辑,其实就是调用内部的GiveAbility接口再初始化
void AMyProject2Character::AquireAbility(TSubclassOf<UGameplayAbility> AbilityToAquire)
{if (AbilitySystemComponent) {if (HasAuthority() && AbilityToAquire) {AbilitySystemComponent->GiveAbility(FGameplayAbilitySpec(AbilityToAquire, 1, 0));}AbilitySystemComponent->InitAbilityActorInfo(this, this);}
}

目前C++部分需要的工作已经处理完成。

2.蓝图使用

2.1 创建Ability1技能蓝图

2.1.1 新建蓝图,搜索关键字GameplayAbility,继承自该蓝图,新的技能命名为Ability1:
在这里插入图片描述
2.1.2 在Ability1蓝图的事件ActivateAbility中,编写技能触发蓝图逻辑,其中CommitAbility节点可判断技能是否达到触发要求,EndAbility节点通知技能结束:
在这里插入图片描述

2.2 在Pawn蓝图中使用技能

2.2.1 在World Settings面板中点击Default Pawn Class,找到默认角色类:
在这里插入图片描述
2.2.2 双击进入默认角色蓝图,在BeginPlay处编写技能测试逻辑:
在这里插入图片描述
运行游戏,即可学习Ability1技能,并触发。

3.得到技能事件

技能触发是一个异步过程,还需要拿到触发过程中的各种消息,UE通过节点WaitGameplayEvent to Actor可以拿到异步执行过程中的事件。

3.1 首先在默认角色蓝图中添加该节点,得到技能事件:
在这里插入图片描述
3.2 在技能蓝图Ability1中添加事件的触发节点,这样在技能执行时加了一个1秒钟的Delay,以便更好的触发异步事件:
在这里插入图片描述

3.3 最后运行游戏,触发效果如下:
在这里插入图片描述


参考:
https://zhuanlan.zhihu.com/p/486808688

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

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

相关文章

【简单认识LVS及LVS-NAT负载均衡群集的搭建】

文章目录 一、LVS群集简介1、群集的含义2、性能扩展方式3、群集的分类4、负载均衡群集架构1、负载均衡的结构 5、三种负载调度工作模式1、NAT模式2、TUN模式3、DR模式 二、LVS虚拟服务器1、Linux Virtual Server简介2、启用LVS虚拟服务3、LVS调度算法&#xff08;1&#xff09;…

基于单片机的教室智能照明台灯控制系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前时间、年月日、时分秒、前教室人数&#xff1b;2路红外探头用来感应当前教室进出人数&#xff1b;按键可以设置当前时间、自动手动模式、开启和关闭教室灯光时间&#xff1b;在手动模式下&#xff0c;可以通过按…

【网络】HTTPS协议原理

目录 “加密”相关概念 为什么要加密 常见加密方式 对称加密 非对称加密 HTTPS工作过程探究 方案1-只使用对称加密 方案2-只使用非对称加密 方案3-客户端和服务端双方都使用非对称加密 方案4-非对称加密 对称加密 上述方案问题分析 方案5-证书认证 非对称加密对…

GWIN入门-完整一个程序

GWIN入门-完整一个程序 新建工程 右击工程名,添加.v文件 编写功能文件 /* timescale是Verilog HDL 中的一种时间尺度预编译指令,它用来定义模块的仿真时的时间单位和时间精度。 */`timescale 1ns/1ps module LED(input wire clk

gitlab【安装部署、备份与恢复】

【1】安装依赖 [rootgit ~]# yum -y install install curl opessh-server postfix wget【2】安装软件包 [rootgit ~]# yum -y localinstall gitlab-ce-11.2.3-ce.0.el7.x86_64.rpm 【3】修改配置 [rootgit ~]# grep "^[a-Z]" /etc/gitlab/gitlab.rb external_ur…

JavaWeb学习路线(11)—— Maven延伸

一、分模块设计 &#xff08;一&#xff09;概念&#xff1a; 将项目按功能拆分出若干个子模块。 &#xff08;二&#xff09;作用&#xff1a; 方便项目管理维护、扩展&#xff0c;也方便模块间相互调用&#xff0c;资源共享。 &#xff08;三&#xff09;具体实现 1、抽取…

运维开发面试题第一期

1.tail -f和tail -F的区别是什么? tail -f 根据文件描述符进行追踪&#xff0c;当文件改名或被删除&#xff0c;追踪停止。 tail -F 根据文件名进行追踪&#xff0c;并保持重试&#xff0c;即该文件被删除或改名后&#xff0c;如果再次创建相同的文件名&#xff0c;会继续…

es8.8 集群安装笔记

es8.8 集群安装笔记 配置集群第一步 修改配置文件 本次安装使用centos8 3节点安装&#xff1a; 192.168.182.142 192.168.182.143 192.168.182.144 官网 可以查看详细的安装&#xff0c;安装步骤比较简单 https://www.elastic.co/guide/en/elasticsearch/reference/8.8/rpm.htm…

MySQL练习题(3)

创建数据库插入数据 CREATE TABLE emp ( empno int(4) NOT NULL, ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, mgr int(4) NULL DEFAULT N…

win11病毒和防护功能显示‘页面不可用’的解决方法

问题如上图所示&#xff0c;试了很多种方法&#xff0c;有一种是可以用的&#xff0c;记录一下。 步骤&#xff1a; 1、搜索框输入cmd&#xff0c;以管理员身份运行命令提示符 2、输入 第一条代码 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows D…

Django_re_path_使用正则匹配url

与path定义的路由相比&#xff0c;re_path 定义的路由可以使用正则表达式匹配url。 需要注意的是&#xff1a; 如果未定义匹配结果的变量名&#xff0c;匹配的结果默认传入视图的第2个形参。如果定义了匹配结果的变量名&#xff0c;匹配的结果会传给视图的同名字段&#xff0…

vscode安装+配置+使用+调试【保姆级教程】

1. VScode是什么 Visual Studio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱即…