虚幻引擎GAS入门学习笔记(一)

news2024/12/25 18:42:59

虚幻引擎GAS入门(一)

  • Gameplay Ability System(GAS) 是一个模块化且强大的框架,用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability(定义和执行能力)、Gameplay Effect(应用和管理效果)、Attribute Set(管理角色属性)、Gameplay Tags(标记和管理对象状态)、Gameplay Tasks(处理异步任务)以及 Gameplay Modifiers(修改属性值)。这些组件相互协作,使得开发者能够创建复杂且高度定制化的游戏玩法,如技能系统、状态效果系统等。
  • Gameplay Ability System(GAS)组成部分及其功能
  • 学习位置UE5.3 GAS入门教程重置版 小明

创建工程

  • 创建工程然后开启GameplayAbilites插件
    在这里插入图片描述
  • 在工程.Build.cs里添加这三个模块:"GameplayAbilities","GameplayTags","GameplayTasks"
    在这里插入图片描述
  • 编译后会报307错误,把这几个文件删除重新构建编译一下即可
    在这里插入图片描述

在这里插入图片描述

  • 创建基础角色类并新建基础角色的蓝图,然后创建两个继承这个蓝图的子类作为角色与敌人
    在这里插入图片描述
    在这里插入图片描述

简易角色基本控制

  • 添加一个第三人称模版,然后删除掉就会有它给你做好的轴操作控制
    在这里插入图片描述
  • 留下需要的即可
    在这里插入图片描述
  • 然后将导入的资产中那个蓝图里面的操作复制到我们创建的角色蓝图中去更改这个轴操作
    在这里插入图片描述
  • 勾上
    在这里插入图片描述
    在这里插入图片描述
  • 勾掉这个,角色就能正常转体
    在这里插入图片描述

2种相机模式与夹角限制

  • 首先将输入操作从角色蓝图移动到控制器蓝图中
    在这里插入图片描述
  • 限制视角
    在这里插入图片描述
  • 在玩家蓝图中写一个函数用来锁定相机操作
    在这里插入图片描述

攻击动作的融合

  • 创建混合空间设置好动作行为
    在这里插入图片描述
  • 创建动画蓝图设置初始属性
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 配置蒙太奇
    在这里插入图片描述
  • 攻击蒙太奇与移动进行融合,就可以边走边攻击了
    在这里插入图片描述
  • 这个攻击蒙太奇人物会转身,为了避免这种人物突然旋转的情况,要在蒙太奇中添加通知来是否需要融合
    在这里插入图片描述
    在这里插入图片描述
  • 最后进行攻击动作的融合输出到最终状态
    在这里插入图片描述

GAS结合GamePlay

  • 添加AbilitySystem组件
    在这里插入图片描述
  • 添加技能的基类蓝图
    在这里插入图片描述
    在这里插入图片描述
  • 获取技能
    在这里插入图片描述
  • 创建一个函数用来使用Melee
    在这里插入图片描述
    在这里插入图片描述
  • 创建一个函数用来激活技能
    在这里插入图片描述
  • 然后在技能蓝图里面添加Melee这个标签
    在这里插入图片描述
    在这里插入图片描述
  • 将技能标签添加到数组中
    在这里插入图片描述
  • 然后Melee事件调用激活技能这个函数
    在这里插入图片描述
  • 测试一下
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述
  • 换为播放Montage
    在这里插入图片描述
  • 添加一个GameplayEffect技能CD,以免出现攻击反复无常的情况
    在这里插入图片描述
    在这里插入图片描述
  • 提交CD
    在这里插入图片描述
  • 给剑添加碰撞盒
    在这里插入图片描述
  • 碰撞除了自己与同类不进行碰撞处理,其他进行碰撞处理
    在这里插入图片描述

设置角色属性

  • 新建一个AttributeSet
    在这里插入图片描述
  • 虚幻引擎中提供了一种宏,帮助函数,可以很方便加载游戏的特殊的方法
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)

在这里插入图片描述

  • 定义好属性
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once

#include "CoreMinimal.h"
#include "AttributeSet.h"
#include "AbilitySystemComponent.h"
#include "BaseAttributeSet.generated.h"

/**
 * 
 */

#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)

UCLASS()
class GASDEMO_API UBaseAttributeSet : public UAttributeSet
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "BaseAttributeSet")
	FGameplayAttributeData HP;
	ATTRIBUTE_ACCESSORS(UBaseAttributeSet, HP);

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")
	FGameplayAttributeData MaxHP;
	ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MaxHP);

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")
	FGameplayAttributeData MP;
	ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MP);

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")
	FGameplayAttributeData MaxMP;
	ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MaxMP);

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")
	FGameplayAttributeData Strength;
	ATTRIBUTE_ACCESSORS(UBaseAttributeSet, Strength);

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BaseAttributeSet")
	FGameplayAttributeData MaxStrength;
	ATTRIBUTE_ACCESSORS(UBaseAttributeSet, MaxStrength);
};
  • 解决小bug,武器碰撞盒子只有在挥刀的时候才开启碰撞
    在这里插入图片描述
    在这里插入图片描述
  • 将碰撞盒子的碰撞修改一下
    在这里插入图片描述

伤害敌人并做夹值处理

  • 新建一个数据表把角色属性加入到里面
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 将这个表设置到角色属性的AbilitySystem里面去
    在这里插入图片描述
  • 再新建一个GameplayEffect作为伤害受理,每次扣血5点值
    在这里插入图片描述
    在这里插入图片描述
  • 在Melee攻击检测这里应用这个GE
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述
  • 处理伤害溢出问题
    在这里插入图片描述
  • 写上夹值逻辑
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

行为树配置

  • 关于两个镜头的处理,取消碰撞测试就不会让镜头被挡,启动
    在这里插入图片描述
    在这里插入图片描述
  • 做不同等级的伤害表,新建一个.csv的表,第一行第一列是要空着的,然后写入伤害等级值
    在这里插入图片描述
  • 将表格拖入UE中,选择类型为曲线表格,插值类型为常量
    在这里插入图片描述
  • 将表格插入到伤害的GE
    在这里插入图片描述
  • 新建行为树与黑板进行配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 创建AIController,然后执行行为树,将这个AIController附加到Enemy蓝图上
    在这里插入图片描述
    在这里插入图片描述

生命值改变时广播

  • 将所有的碰撞类型改成这样
    在这里插入图片描述
  • 基础父类蓝图里面开始时将剑的碰撞盒子关掉
    在这里插入图片描述
  • 把之前的动画通知改变通道变成设置碰撞
    在这里插入图片描述
  • 在基础角色类中声明动态多播委托,因为多播委托可以在蓝图中调用
    在这里插入图片描述
  • 创建一个多播委托的处理函数
    在这里插入图片描述
  • 绑定多播委托
    在这里插入图片描述
    在这里插入图片描述
  • 订阅一下这个广播
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

死亡处理

  • 制作一下死亡的Montage动画
    在这里插入图片描述
  • 添加一个死亡处理事件
    在这里插入图片描述
    在这里插入图片描述

停止AIController控制

  • 在敌人蓝图里面添加一个停止控制的函数
    在这里插入图片描述
  • 在敌人蓝图里面重写一下父类中的检查血量的事件
    在这里插入图片描述
  • 玩家蓝图中也要重写这个事件
    在这里插入图片描述

添加敌人的血条

  • 创建一个UMG制作敌人血条
    在这里插入图片描述
    在这里插入图片描述
  • 在敌人蓝图中添加这个UMG组件,并写上更新UI逻辑
    在这里插入图片描述
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

玩家住UI制作与构建技能结构体系

搭建玩家UI界面

  • 创建玩家的属性UI
    在这里插入图片描述
  • 这个纹理有两个暴露出来设置的值,一个是设置百分比一个是设置颜色
    在这里插入图片描述
  • 添加一个事件来设置血球的百分比
    在这里插入图片描述
  • 添加一个事件来设置血球的颜色
    在这里插入图片描述
  • 创建角色的主UI,然后设置好这三个属性球的颜色
    在这里插入图片描述
    在这里插入图片描述

同步UI到玩家信息

  • 在玩家控制器里面添加这个主UI窗口
    在这里插入图片描述
  • 获取到角色的控制器,然后进行血量的数值变化逻辑
    在这里插入图片描述

给玩家一个自动回复血量Buffer

  • 创建一个继承自基础技能的回复Buffer技能
    在这里插入图片描述
  • 添加效果
    在这里插入图片描述
  • 设置好技能效果的回复属性
    在这里插入图片描述
  • 激活技能
    在这里插入图片描述
  • 提交技能
    在这里插入图片描述

构建技能信息结构体

  • 创建一个GameplayAbility基类
    在这里插入图片描述
  • 创建技能信息的数据
    在这里插入图片描述
    在这里插入图片描述

获取技能信息与创建技能图标

获取技能详细信息函数

  • 获取技能信息
// Fill out your copyright notice in the Description page of Project Settings.

#include "BaseGameplayAbility.h"

FGameplayAbilityInfo::FGameplayAbilityInfo():
	CD(0),
	CostValue(0),
	CostType(ECostType::MP),
	IconMaterial(nullptr),
	AbilityClass(nullptr)
{

}

FGameplayAbilityInfo::FGameplayAbilityInfo(float CD, ECostType CostType, float CostValue, UMaterialInstance* IconMaterial, TSubclassOf<UBaseGameplayAbility> AbilityClass):
	CD(CD),
	CostType(CostType),
	CostValue(CostValue),
	IconMaterial(IconMaterial),
	AbilityClass(AbilityClass)
{

}

FGameplayAbilityInfo UBaseGameplayAbility::GetAbilityInfo(int Level)
{
	//获取与技能冷却相关的游戏效果
	UGameplayEffect* CDEffect = GetCooldownGameplayEffect();
	//获取与技能使用成本相关的游戏效果
	UGameplayEffect* CostEffect = GetCostGameplayEffect();
	float CD = 0;
	float CostValue = 0;
	ECostType CostType = ECostType::MP;
	if (CDEffect && CostEffect)
	{
		CDEffect->DurationMagnitude.GetStaticMagnitudeIfPossible(Level, CD);
		if (CostEffect->Modifiers.Num() > 0)
		{
			//获取花费的是哪一个类型
			FGameplayModifierInfo CostEffectModifierInfo = CostEffect->Modifiers[0];
			CostEffectModifierInfo.ModifierMagnitude.GetStaticMagnitudeIfPossible(Level, CostValue);
			FString CostTypeName = CostEffectModifierInfo.Attribute.AttributeName;

			if (CostTypeName == "HP")
			{
				CostType = ECostType::HP;
			}
			if (CostTypeName == "MP")
			{
				CostType = ECostType::MP;
			}
			if (CostTypeName == "Strength")
			{
				CostType = ECostType::Strength;
			}
			//返回技能信息
			return FGameplayAbilityInfo(CD, CostType, CostValue, IconMaterial, GetClass());
		}
	}
	return FGameplayAbilityInfo();
}

学习技能时就获取技能信息

  • 在基础类里面创建一个学习获取技能信息的函数
    在这里插入图片描述
  • 学习此技能
    在这里插入图片描述

利用结构体信息创建单个技能UI

  • 创建技能的UI
    在这里插入图片描述
  • 设置技能Key与技能初始化
    在这里插入图片描述
  • 设计技能开始CD逻辑
    在这里插入图片描述
  • 更新技能图标的值,当前CD除以总CD因为材质里面的数值问题要取反,然后CD小于0的情况下就回复技能图标,并设置当前技能无CD
    在这里插入图片描述

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

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

相关文章

数字安全新时代:聚焦关键信息基础设施安全保障——The Open Group 2024生态系统架构·可持续发展年度大会盛大来袭

在全球数字化转型的浪潮中&#xff0c;关键信息基础设施&#xff08;Critical Information Infrastructure&#xff0c;简称CII&#xff09;的安全保障已成为各国政府和企业共同关注的焦点。随着技术的飞速发展和网络威胁的日益复杂&#xff0c;如何构建高效、灵活且安全的数字…

“Flash闪存”基础 及 “SD NAND Flash”产品的测试介绍

目录 一、“FLASH闪存”是什么&#xff1f; 1. 简介 2. 分类 3. 特点 4. 虚拟化 二、SD NAND Flash 1. 概述 2. 特点 3. 引脚分配 4. 数据传输模式 5. SD NAND寄存器 6. 通电图 7. 参考设计 三、STM32测试例程 1. 初始化 2. 单数据块测试 3. 多数据块测试 4.…

SSD | (一)SSD综述

文章目录 &#x1f4da;SSD综述&#x1f407;SSD基本结构&#x1f407;SSD与HDD&#x1f407;SSD基本工作原理⭐SSD请求处理流程⭐SSD主要组成模块⭐SSD读写操作 &#x1f407;SSD产品核心指标⭐基本信息⭐性能指标⭐数据可靠性和寿命⭐功耗 &#x1f4da;可计算存储 &#x1f…

VueRouter前端路由

文章目录 VueRouter前端路由VueRouter 简介安装vuerouter配置router文件子路由路由重定向 VueRouter前端路由 VueRouter 简介 安装vuerouter npm install vue-router4yarn add vue-router4配置router文件 import { createRouter, createWebHistory } from vue-router; impor…

k8s--二进制包部署及常见报错解决方法

部署流程 所有基础流程见此教程&#xff0c;很详细&#xff1a; 从零搭建k8s集群 - 许大仙 - 博客园 (cnblogs.com) 记得在写配置文件时细心点&#xff0c;注意修改自己的ip地址&#xff0c;以及看在哪个主机上操作 这里记得写自己的token 常见报错及解决方法 我只在下边讲…

GDPU Vue前端框架开发 ecmascript6初步使用

前端框架基础&#xff0c;打造你的前端应用。 箭头函数 使用箭头函数实现求多个数的和&#xff0c;可以有一个参数&#xff0c;也可以有多个或零个参数。 let sum (...numbers) > {return numbers.reduce((acc, curr) > acc curr, 0);};let asum(); let bsum(1); let…

实战千问2大模型第五天——VLLM 运行 Qwen2-VL-7B(多模态)

一、简介 VLLM 是一种高效的深度学习推理库&#xff0c;通过PagedAttention算法有效管理大语言模型的注意力内存&#xff0c;其特点包括24倍的吞吐提升和3.5倍的TGI性能&#xff0c;无需修改模型结构&#xff0c;专门设计用于加速大规模语言模型&#xff08;LLM&#xff09;的…

生成对抗网络(GAN,Generative Adversarial Network)

生成对抗网络&#xff08;GAN&#xff0c;Generative Adversarial Network&#xff09;是一种深度学习模型&#xff0c;由两部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;。生成器的目标是生成逼真的样本&#x…

Xinstall品牌揭秘:如何成为App拉新的行业翘楚?

在移动互联网时代&#xff0c;App作为连接用户与服务的桥梁&#xff0c;其重要性不言而喻。然而&#xff0c;随着市场竞争的加剧&#xff0c;App拉新&#xff08;即吸引新用户下载并使用App&#xff09;的难度也在逐渐增大。传统的营销方式往往面临着成本高、效率低、用户留存差…

理解PID(零)——什么是PID

PID控制器是一种广泛用于各种工业控制场合的控制器&#xff0c;它结构简单&#xff0c;可以根据工程经验整定参数Kp,Ki,Kd. 虽然现在控制专家提出了很多智能的控制算法&#xff0c;比如神经网络&#xff0c;模糊控制等&#xff0c;但是PID仍然被广泛使用。常见的PID控制器有位置…

视频怎么转gif动图?5个简单转换方法快来学(详细教程)

相信大家在社交平台上会经常看到一些有趣的gif动图表情包&#xff0c;有些小伙伴就会问&#xff1a;这些GIF动图是如何制作的呢&#xff1f;一般GIF动图表情包可以用视频来制作&#xff0c;今天小编就来给大家分享几个视频转成GIF动图的方法&#xff0c;相信通过以下的几个方法…

文献阅读CONCH模型--相关知识点罗列

文章链接&#xff1a;A visual-language foundation model for computational pathology | Nature MedicineThe accelerated adoption of digital pathology and advances in deep learning have enabled the development of robust models for various pathology tasks across…

【可答疑】基于51单片机的智能家居系统(含仿真、代码、报告、演示视频等)

✨哈喽大家好&#xff0c;这里是每天一杯冰美式oh&#xff0c;985电子本硕&#xff0c;大厂嵌入式在职0.3年&#xff0c;业余时间做做单片机小项目&#xff0c;有需要也可以提供就业指导&#xff08;免费&#xff09;~ &#x1f431;‍&#x1f409;这是51单片机毕业设计100篇…

ceph基础

ceph基础搭建 存储基础 传统的存储类型&#xff1a; DAS设备&#xff1a; SAS,SATA,SCSI,IDW,USB 无论是那种接口&#xff0c;都是存储设备驱动下的磁盘设备&#xff0c;而磁盘设备其实就是一种存储是直接接入到主板总线上去的。直连存储。 NAS设备: NFS CIFS FTP 几乎所有的…

商标恶意维权形式及应对策略

在商业领域&#xff0c;商标恶意维权的现象时有出现&#xff0c;给正常的市场秩序和企业经营带来了不良影响。以下将介绍其常见形式及应对方法。 一、商标恶意维权的形式1、囤积商标后恶意诉讼。一些人或企业大量注册与知名品牌相似或具有一定通用性的商标&#xff0c;并非用于…

留学生毕业论文设计问卷questionnaire的基本步骤

在上一期内容中&#xff0c;小编介绍了留学毕业论文的定量研究和相关的问卷设计。然而在一些研究中&#xff0c;定量研究和问卷数据并不能满足我们的研究需求。这种情况下&#xff0c;我们可以采取其他的数据收集方式&#xff0c;例如observation&#xff0c;case study和inter…

软件设计之SSM(11)

软件设计之SSM(11) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Springboot 配置文件整合SpringMVC整合Dr…

【学术会议征稿】第十届能源资源与环境工程研究进展国际学术会议(ICAESEE 2024)

第十届能源资源与环境工程研究进展国际学术会议&#xff08;ICAESEE 2024&#xff09; 2024 10th International Conference on Advances in Energy Resources and Environment 第十届能源资源与环境工程研究进展国际学术会议&#xff08;ICAESEE 2024&#xff09;定于2024年…

拓扑排序与入度为0的结点算法解析及实现

拓扑排序与入度为0的结点算法解析及实现 算法思想时间复杂度分析伪代码C语言实现环路检测结论拓扑排序是一种用于有向无环图(DAG, Directed Acyclic Graph)的重要操作,它可以对图中的结点进行排序,使得对于每一条有向边 (u, v),顶点 u 在排序中都出现在顶点 v 之前。本文介…

Qt和c++面试集合

目录 Qt面试 什么是信号&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;&#xff1f; 什么是Meta-Object系统&#xff1f; 什么是Qt的MVC模式&#xff1f; 1. QT中connect函数的第五个参数是什么&#xff1f;有什么作用&#xff1f; 3. 在QT中&#xff…