BlueRoseNote/03-UnrealEngine/Gameplay/GAS/(0)Exploring the Gameplay Ability System (GAS) with an Action RPG Unreal Fest 2022学习笔记.md

106 lines
4.4 KiB
Markdown
Raw Normal View History

2023-06-29 11:55:02 +08:00
---
title: Exploring the Gameplay Ability System (GAS) with an Action RPG Unreal Fest 2022学习笔记
date: 2022-11-10 21:04:35
excerpt:
tags: GAS
rating: ⭐
---
## 前言
原视频:[Exploring the Gameplay Ability System (GAS) with an Action RPG Unreal Fest 2022](https://www.youtube.com/watch?v=tc542u36JR0&t)
## InitialSetup
首先需要考虑:
- 哪些`AttributeSets`需要创建
- 如何让角色获取`GrantAbility`
- 如何绑定按键与控制器输出事件
## CharacterSetup
- 继承并实现`IAbilitySystemInterface`
- 挂载ASC但一般还是挂载到PlayerState上。
- 在构造函数中创建默认子物体:
- AbilitySystemComponent
- AttributeSetObject
### PossessedBy
- AbilitySystemComponent->InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor)
- InitializeAttributes
- Listen for tags of interest(via UAsyncATaskGameplayTagAddedRemoved)
- Add start-up effects
- Bind to Ability activation failed callback
### BeginPlay
Listen to Health Attribute change
Bind to ASC->OnImmunity
## AttributeSets
- PrimaryAttributes——核心RPG状态绝大多数实体需要
- Health,MaxHealth,Shields,MaxShields,Stamina
- Core RPG Style values比如StrengthFortitude坚韧
- SecondaryAttributes——一定深度的RPG状态非所有实体需要
- Elemental resistances元素抵抗表,Elemental bonuses元素奖励,Current Elemental build-Ups当前元素构建方式
- TertiaryAttributes——Bounses主要用于玩家控制的角色
- Interaction speed bonuses,other specific bonuses and stats
- Weapon archetype specific Attribute武器相关属性
- Charge Percent充能百分比,Spread扩散,Charge Count充能次数
### 后续改进
- PrimaryAttributes
- 将Health等基本属性分割成自己的属性集
- 目前如果我们给一个UObject等设置了一个属性集来跟踪它们的Health但它们也会保存其他不必要的值。
- SecondaryAttributes
- 对这个设计很满意因为它都是与元素有关的状态以及buff/debuff属性。
- TertiaryAttributes
- 一些属性可以被分割合并到实体特化的属性集中。
- Weapon archetype specific attributes
- 一些int类型的Attribute可以使用Stackable GE来代替属性集只有float类型通过查询堆栈数目来获取数据。
## 演讲者团队增加的额外功能
- UGameplayAbility
- Input
- UInputAction InputAction(Enhanced Input System)
- Custom Ability Input ID Enum
- Booleans/Bitfields 开启一些核心功能 我们不想对所有Ability增加通过GameplayTags实现的功能
- Activate On Granted
- Activate On Input
- Can Activate Whilst Interacting
- Cannot Activate Whilst Stunned
- Cached Owning Character
- AsyncAbilityTasks
- Attribute Changed
- Cooldown Changed
- GameplayTag Added Removed
- Wait GE Class Added Removed
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111112940.png)
## 使用DataTable与C++来初始化属性集
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111114735.png)
或者就是实现一个结构体基于FAttributeSetIniDiscreteLevel。
## 创建自定义节点来传递GE计算结果与Tags
多次GE的积累计算结果。主要是通过AbilitySystemGlobals来实现
- GE_Damage
- Custom Calculation ClassC++ Damage Execution Calculation
- Conditional GEs
- GE_BuildUp_Stun
- Custom Calculation Class: C++ Build Up Calculation
- Conditional GE: GE_Stunned
- GE_BuildUp_Burn
- Custom Calculation Class: C++ Build Up Calculation
- Conditional GE: GE_Burned
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111140430.png)
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111140516.png)
## 装备属性变化
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111141459.png)
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111141539.png)
## AbilityTraitsTableExample
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111141647.png)
## 该团队AbilityEntitySystem设计
用来实现子弹变量、AOE、Cnnstruct、角色等带有ASC的实体。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111142713.png)
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111142509.png)