GameplayEffect in Lyra

Jangmanbo·2025년 9월 2일

보통 생각하는 방식은 캐릭터 클래스에 속성(hp, mp, ..)을 넣고,
캐릭터를 상속받는 클래스마다 속성을 하나씩 추가하게 되는데 이러면 비대해지고, 어떤 걸 상속받을지 모호한 경우가 생긴다

따라서 라이라에서는 이러한 캐릭터의 속성을 Attribute라는 클래스로 만들었다 (속성을 모듈화)
-> 캐릭터의 속성으로 인해 상속을 받을 일이 없어진다.


GameplayEffectPad

를 만들어보며 GameplayEffect와 Attribute를 이해해보자

GameplayEffectPad 액터 만들고..

HealthSet

hp와 관련된 속성 모음

FGameplayAttributeData

  • 왜 float 변수 하나가 아니라 float 변수 2개로 이루어진 FGameplayAttributeData 클래스를 사용?
  • BaseValue는 고정된 값. CurrentValue는 버프 등의 효과로 임시로 늘어나거나 줄어들은 결과값

CombatSet

타 캐릭터의 힐이나 여기서 구현하는 GameplayEffectPad의 힐량이 BaseHeal에 적용되고,
이 값을 HealthSet의 Health에 더할 예정

참고로 AttributeSet은 AbilitySystemComponent와 동일한 시점에 생성한다
AbilitySystemComponent은 Outer에서 생성된 AttibuteSet을 내부적으로 알아서 저장한다.
따라서 PlayerState에서 AttributeSet이 생성하면 AbilitySystemComponent에 캐싱될 것

HealExecution

UGameplayEffectExecutionCaculation을 상속

필요한 Attribute를 미리 캡쳐해두고, (여기서는 CombatSet::BaseHeal)
Execute에 이를 통해 얻은 결과값을 HealthSet의 Healing에 더한다
(HealthSet 내부에서 알아서 Healing을 Health에 적용해준다. Execution에서 하지 않음)

UGameplayEffectExecutionCaculation
데미지, 힐량 등의 수치에 사칙연산을 제외한 추가적인 계산을 할 수 있게 한다

GameplayEffect

GameplayEffectEffect_Heal

HealExecution을 적용한 Gameplay Effect 클래스 생성
한 번 CombatSet::BaseHeal에 1을 더한 값을 가져와 적용

GE_Heal_Periodic

GameplayEffectEffect_Heal 상속
1초마다 체력 1(CombatSet::BaseHeal에 1을 더한 값) 회복

GE_GameplayEffectEffect_Heal

GE_Heal_Periodic 상속
체력 1 > 체력 5(CombatSet::BaseHeal에 5을 더한 값) 회복만 변경됨


정리. GameplayEffect 클래스 구조

0개의 댓글