Gameplay Ability System - osy9611/ProjectPT GitHub Wiki
์ด ๋ฌธ์๋ Gameplay Ability System (GAS)์ ํ๋ก์ ํธ์ ์ ์ฉํ ๋ด์ฉ์ ์ ๋ฆฌํ ๋ฌธ์์ด๋ค. PTGameAbility๋ฅผ ์์ํ ๊ฐ๋ณ ํด๋์ค๋ ์ ์ธํ๊ณ , ์ ์ฒด์ ์ธ ๊ตฌ์กฐ์ ํต์ฌ ๊ธฐ๋ฅ์ ์ค๋ช ํ๋ค.
Attack
|
Skill
|
- ์
๋ ฅ ์ด๋ฒคํธ ๊ฐ์ง ๋ฐ Ability ์คํ
-
ํ๋ ์ด์ด์ ์ ๋ ฅ์ด ๊ฐ์ง๋๋ฉด
AbilitySpecInputPressed๋๋AbilitySpecInputReleased๊ฐ ํธ์ถ๋๋ค. -
InvokeReplicatedEvent๋ฅผ ์ฌ์ฉํด ํด๋น Ability๋ฅผ ์คํํ ์ ์๋๋ก ์ฒ๋ฆฌํ๋ค. -
GameplayTag๋ฅผ ํ์ฉํด ํน์ Ability๋ฅผ ์คํํ ์ ์๋๋ก ์ค๊ณํ๋ค. -
์ฃผ์ ์ฝ๋
void UPTAbilitySystemComponent::AbilitySpecInputPressed(FGameplayAbilitySpec& Spec) { Super::AbilitySpecInputPressed(Spec); if (Spec.IsActive()) InvokeReplicatedEvent(EAbilityGenericReplicatedEvent::InputPressed, Spec.Handle, Spec.ActivationInfo.GetActivationPredictionKey()); } void UPTAbilitySystemComponent::AbilitySpecInputReleased(FGameplayAbilitySpec& Spec) { Super::AbilitySpecInputReleased(Spec); if (Spec.IsActive()) InvokeReplicatedEvent(EAbilityGenericReplicatedEvent::InputReleased, Spec.Handle, Spec.ActivationInfo.GetActivationPredictionKey()); }
-
-
์บ๋ฆญํฐ & AI ๋ฅ๋ ฅ์น๋ฅผ ๊ด๋ฆฌ
-
TCharacter_AttributeSetโ ํ๋ ์ด์ด์ ์ฒด๋ ฅ, ์คํฌ ์ ๋ณด ๊ด๋ฆฌ -
PTAI_AttributeSetโ AI ๋ชฌ์คํฐ์ ์ฒด๋ ฅ, ์คํฌ ์ ๋ณด ๊ด๋ฆฌํด๋์ค๋ช ์ญํ PTCharacter_AttributeSet ํ๋ ์ด์ด์ ์ฑ๋ ฅ, ์คํฌ ์ ๋ณด ๊ด๋ฆฌ PTAI_AttributeSet AI ๋ชฌ์คํฐ์ ์ฒด๋ ฅ, ์คํฌ ์ ๋ณด ๊ด๋ฆฌ PostGameplayEffectExecute ๋ฅ๋ ฅ์น๊ฐ ๋ณ๊ฒฝ๋ ๋ UI ๋ฐ AI ์ํ ์ ๋ฐ์ดํธ InitAttributeSet ์บ๋ฆญํฐ/๋ชฌ์คํฐ ๋ฐ์ดํฐ ํ ์ด๋ธ์์ ์ด๊ธฐ ๋ฅ๋ ฅ์น ๋ก๋
-
-
์์ ์ฝ๋ - ์ฒด๋ ฅ ๋ณ๊ฒฝ ์ UI ์ ๋ฐ์ดํธ
void UPTCharacter_AttributeSet::PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data) { Super::PostGameplayEffectExecute(Data); if (Data.EvaluatedData.Attribute == GetHealthAttribute()) { const FPTGameplayTags& GameplayTags = FPTGameplayTags::Get(); UGameplayMessageSubsystem& MessageSubsystem = UGameplayMessageSubsystem::Get(this); float HealthRatio = GetHealth() / GetMaxHealth(); FUIHPMessage UIHealthMessage; UIHealthMessage.HealthAmount = HealthRatio; MessageSubsystem.BroadcastMessage(GameplayTags.UI_Event_Health, UIHealthMessage); } }
-
์ถ๊ฐ ์ค๋ช
- PostGameplayEffectExecute๋ GAS์์ ๋ฅ๋ ฅ์น๊ฐ ๋ณ๊ฒฝ๋ ๋ ํธ์ถ๋๋ ํจ์์ด๋ค.
- ์ด ์ฝ๋๋ฅผ ํตํด ํ๋ ์ด์ด ์ฒด๋ ฅ์ด ๋ณํ๋ฉด UI์ ๋ฐ์๋๋๋ก ์ค๊ณํ๋ค.
-
Ability ์คํ ์ ์บ๋ฆญํฐ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
-
GetPTCharacterFromActorInfo()โ ํ๋ ์ด์ด ์บ๋ฆญํฐ ๊ฐ์ ธ์ค๊ธฐ -
GetPTAICharacterFromActorInfo()โ AI ์บ๋ฆญํฐ ๊ฐ์ ธ์ค๊ธฐ -
์์ ์ฝ๋
APTCharacter* UPTGameplayAbility::GetPTCharacterFromActorInfo() { return CurrentActorInfo ? Cast<APTCharacter>(CurrentActorInfo->AvatarActor.Get()) : nullptr; }
-
-
Gameplay Ability ์คํ ์ ์นด๋ฉ๋ผ ๋ชจ๋ ๋ณ๊ฒฝ
-
SetCameraMode๋ก ์นด๋ฉ๋ผ ๋ชจ๋ ์ ์ฉ โ Ability ์คํ ํClearCameraMode๋ก ์๋ ์ํ ๋ณต๊ท -
์์ ์ฝ๋
void UPTGameplayAbility::SetCameraMode(TSubclassOf<UPTCameraMode> CameraMode, bool UseFovOffset) { if (UPTHeroComponent* HeroComponent = GetPTHeroComponentFromActorInfo()) { HeroComponent->SetAbilityCameraMode(CameraMode, CurrentSpecHandle, UseFovOffset); ActiveCameraMode = CameraMode; } }
-