1. GAS基礎知識
官方視訊
https://www.bilibili.com/video/BV1X5411V7jh?from=search&seid=11610542962902282701&spm_id_from=333.337.0.0
一、GAS簡介
GAS提供了哪些功能?
1. 實現了帶有消耗和冷卻功能的角色技能;
2. 處理數值屬性(生命、魔法、攻擊力、防禦力...);
3. 應用狀態效果(擊飛、著火、眩暈...);
4. 應用遊戲標籤(GamePlayTages);
5. 生成特效和音效;
6. 完整的網路複製、預測功能;
適合使用GAS的專案
1. C++專案,開發人員有充足的C++開發經驗;
2. 使用Dedicated Server的聯機遊戲,UE提供的DS伺服器框架;
3. 專案有大量且複雜的技能邏輯設計需求;
除了GAS之外的其它技能系統外掛,Able Ability System、Ascent Combat Framework。
二、GAS功能概述
Ability System Component
Ability System Component(ASC)是整個GAS的基礎元件。
ASC本質上是一個UActorComponent,用於處理整個框架下的互動邏輯,包括使用技能(GameplayAbility)、包含屬性(AttributeSet)、處理各種效果(GameplayEffect)。
所有需要應用GAS的物件(Actor)(可以被技能作用的物件),都必須擁有GAS元件。
擁有ASC的Actor被稱為ASC的OwerActor,ASC實際作用的Actor叫做AvatarActor。
ASC可以被賦予某個角色ASC,也可以被賦予PlayerState(可以儲存死亡角色的一些資料)。
Gameplay Tags
FGameplayTags是一種層級標籤,如Parent、Child、GrandChile。
通過GameplayTagManager進行註冊。
替代原來的Bool,或者Enum的結構,可以在玩法設計中更高效的標記物件的行為或者狀態。
更多詳情可以去看知乎大佬的帖子:https://zhuanlan.zhihu.com/p/79477182
Gameplay Ability
Gameplay Ability(GA)標識了遊戲中一個物件(Actor)可以做的行為或技能。
能力(Ability)可以是普通攻擊或吟唱技能,可以是角色被擊飛倒地,還可以是使用某種道具,互動某個物件,甚至跳躍、飛行等角色行為也可以是Ability.
Ability可以被賦予物件或者從物件的ASC中移除,物件同時可以啟用多個GameplayAbility。
*基本的移動輸入、UI互動行為則不能也不建議通過GA來實現。
Gameplay Ability流程圖更多詳情可以去看知乎大佬的帖子:https://zhuanlan.zhihu.com/p/76395757
Gameplay Effect
Gameplay Effect(GE)是Ability對自己或者他人產生影響的途徑。
GE通常可以被理解為我們遊戲中的buff。比如增益/減益效果(修改屬性)。
但是GAS中的GE也更加廣義,釋放技能時候的傷害結算,施加特殊效果的控制、霸體效果(修改GameplayTag)都是通過GE來實現的。
GE相當於一個可配置的資料表,不可以新增邏輯。開發者建立一個UGameplayEffect的派生藍圖,就可以根據需求製作想要的效果。
更多詳情可以去看知乎大佬的帖子:https://zhuanlan.zhihu.com/p/78395843
Attribute Set
Attribute Set付則定義和持有屬性,並且管理屬性的變化,包括網路同步。
需要在Actor中被新增為成員變數,並註冊到ASC(C++)。
一個ASC可以擁有一個或者多個(不同的)Attribute Set,因此可以角色共享一個很大的Attribute Set,也可以每個角色按需新增Attribute Set。
可以在屬性變化前(PreAttributeChange)後(PostGameplayEffectExecute)處理相關邏輯,可以通過委託的方式繫結屬性變化。
更多詳情可以去看知乎大佬的帖子:https://zhuanlan.zhihu.com/p/75987858