GAS - Gameplay Attributes

GAS - Gameplay Attributes

https://www.jianshu.com/p/fb75f0ebae42

 

Attribute

屬性,記錄Actor數值信息,類型爲FGameplayAttributeData(目前就是float),常見的屬性有血量、藍量、攻擊力、移動速度等等。通常使用Gameplay Effect來作用於Attribute,對屬性值進行修改。
Gameplay Attribute可以說是這個系統的數據核心了,我們使用GAS的目的就是改變Actor的數值屬性和狀態(狀態通常就是個二進制數Yes or No,使用Gameplay Tag)。設計技能也是從Actor擁有的屬性出發的。


Attribute Set

Define and Configure attribute(定義和配置屬性)

如何給Actor添加屬性呢?這裏要使用AttributeSet類,顧名思義,屬性集類。在這個類中定義的float(被UPROPERTY標記)就是Attribute。

 

RPGAttributeSet,h

上圖中的Health,MaxHealth,Mana都是屬性,當然還有一些函數和宏定義,它們的功能後面細說。
創建好自己的AttributeSet類之後,必須使用AbilitySystemComponent註冊它。實現方式有兩種:

1、將其設爲擁有AbilitySystemComponent的Actor的SubObject。

 

RPGCharacterBase.h


在構造函數中:

RPGCharacterBase.cpp

 

2、將類傳給Ability System Component的GetOrCreateAttributeSubobject函數。

AbilitySystemComponent.cpp

 

相關的響應函數(不知道該如何稱呼,暫且定這個叫法)

當屬性值發生變化時,或是施放GameplayEffect時,我們希望做一些處理,此時就需要系統提供的響應函數來進行操作。如ActionRPG中,實現了兩個函數:

RPGAttributeSet.h


插播:寫override是個好習慣!!!
響應函數主要有:

 

  • PreAttributeBaseChange
  • PreAttributeChange
  • PreGameplayEffectExecute
  • PostGameplayEffectExecute

這裏要提一下,Base value和(Current) value的區別。Base value是永久修改的,而value是暫存,這裏應該涉及到網絡相關,GAS是支持客戶端回滾的。

各函數描述:
注意!!只能應用修改符和Setter來改變屬性值(current value),應該也是爲同步服務的

PreAttributeBaseChange:在base value修改前調用。因爲是永久修改,不允許使用temporary modifiers(修改符也是一個類,通常修改屬性是使用GameplayEffect,裏面定義了基本的修改符,也可以自己拓展),不應該在遊戲邏輯中使用。最多用來做數值的Clamp。
PreAttributeChange:同上,只是這裏可以使用temporary modifiers。例子:

 

RPGAttributeSet.cpp


PreGameplayEffectExecute,PostGameplayEffectExecute:顧名思義,技能釋放前、後會被調用。

RPGAttributeSet.cpp

 

官方描述

 

Replication(網絡)

需要在UPROPERTY中添加ReplicatedUsing = OnRep_MyAttribute,同時要在GetLifetimeReplicatedProps函數中設置LiftTime,於是最後會變得像是這樣。

 

 

 

ActionRPG中是這樣的,LifeTime的設置不一樣,如果上圖中說的無誤,則ActionRPG這樣設置在聯機時可能會出現Error。

 

RPGAttributeSet.cpp

相關宏(Macro)

在前面的響應函數實現中,我們發現要使用許多Get函數,來獲得屬性或是屬性值。幸好,引擎爲我們準備好了宏。

 

AttributeSet.h

數據驅動

你可以用數據表來初始化你的AttributeSet。

 

初始化屬性


最後附上ActionRPG的AttributeSet供參考:

 

RPGAttributeSet.h



作者:珏_Gray
鏈接:https://www.jianshu.com/p/fb75f0ebae42
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章