- 개요
본격적으로 GameplayEffect를 프로젝트에 사용한다
GameplayEffect는 AttrbuteSet의 Attribute에 영향을 주기 위해 사용하며
GameplayTag를 사용하여 설계자가 원하는 시점에서 사용하도록 제어할 수 있다
- GameplayEffect에 대한 정리
GameplayEffect에 대해 정리하면 다음과 같이 나타낼 수 있다
- Data Only 방식으로 동작하여 로직이 아닌 데이터(값)을 설정하여 정의한다
- UGameplayEffect 클래스에서 상속되지만, C++ 클래스가 아닌 블루 프린트로 정의하여 사용한다
- Modifier와 Executions의 2가지 방식을 사용하여 Attribute를 수정한다
1) GameplayEffect의 적용 방식 - Modifier
GE에서 사용하는 Modifier의 옵션은 다음의 4가지로 구분하여 사용한다
각각의 역할은 다음과 같다
- Add : Attribute의 값에 설정한 값을 더한다
- Multiply : Attribute의 값에 설정한 값을 곱한다
- Divide : Attribute의 값에 설정한 값을 나눈다
- Override : Attribute의 값에 설정한 값을 덮어씌운다
Modifier를 통해 적용하는 값의 크기를 설정하기 위해서는 Magnitude Caculation Type을 설정해야 한다
다음의 4가지로 구분되어 있으며, 각각의 역할은 다음과 같다
- Scalable Float : 설정한 실수 값만큼의 크기를 설정
- Attrbute Based : Attribute의 값을 기반으로 크기를 설정
- Custom Calculation Class : GameplayModMagnitudeCalculation 클래스를 통해 크기를 설정
- Set By Caller : 설정한 GameplayTag가 활성화되면 크기를 설정
2) GameplayEffect의 적용 방식 - Executions
Modifier는 GameplayEffect의 블루 프린트에서 설정할 수 있는 옵션들을 통해 GE를 사용하지만,
Executions는 GameplayEffectExecutionCalculation 클래스를 통해 GE를 사용한다
Modifier 방식과 다르게 로직을 직접 구성해야 하지만,
사용자가 원하는 방식으로 동작시킬 수 있는 자율성을 보장한다
3) GameplayEffect의 적용 주기
GameplayEffect에는 Duration Policy가 존재하고 이를 통해 GE가 적용되는 주기를 설정할 수 있다
총 3개로 구성되어 있으며 각각 다음과 같다
- Instant : 일시적으로 적용되는 GameplayEffect
- Has Duration : 설정한 주기만큼만 적용되는 GameplayEffect
- Infinite : 영구히 적용되는 GameplayEffect
- GameplayEffectSpec과 GameplayEffectContext
GameplayEffect를 C++에서 편하게 사용할 수 있도록 돕는 래퍼 클래스가 존재한다
GameplayEffectSpec이 해당 래퍼 클래스로서, GameplayEffect를 그대로 사용하기보다
한번 래핑하여 Spec의 형태로 사용하는 것을 권장한다
1) GameplayEffectSpec
GameplayEffectSpec은 런타임에서 생성되는 GameplayEffect의 인스턴스로서
GameplayEffectSpec을 통해 실제 GameplayEffect의 적용이 이뤄진다
또한 런타임에서 수정이 가능한 이점이 존재한다
2) GameplayEffectContext
GameplayEffectContext는 GameplayEffectSpec에 관련한 정보를 저장한다
대표적으로 GESpec의 Instigator나 GESpec의 Target과 같은 정보가 해당된다
따라서 GameplayEffectSpec을 생성하기 위해서는 GameplayEffectContext를 인자로 넘겨줘야 한다
위와 같이 GameplayEffect에 대해 간단하게 정리해보았다
이제 이를 바탕으로 기존의 EffectActor를 수정하여 GameplayEffect를 적용할 수 있도록 수정한다
- AuraEffectActor 클래스 : GameplayEffect의 적용

1개의 함수와 2개의 프로퍼티를 추가하였다
ApplyEffectToTarget 함수를 통해 프로퍼티로 갖고 있는 GameplayEffect를 대상에 적용한다
2개의 프로퍼티는 각각 다음과 같다
- InstantGameplayEffectClass : 일시적인 GESpec을 생성하기 위한 클래스
- ActorLevel : GESpec을 만들기 위해 필요한 실수값

ApplyEffectToTarget 함수는 위와 같이 구성하였다
우선, GE의 Target으로부터 ASC를 가져온다
이후의 로직은 다음과 같다
- 인자로 넣어준 GE가 유효한지 확인
- 빨간색 : GESpec의 정보를 저장할 GEContext의 핸들을 생성
- 파란색 : 생성한 GEContext의 핸들 및 필요한 인자를 넘겨주어 GESpec의 핸들을 생성
- 초록색 : GESpec의 핸들로부터 GESpec의 정보를 가져오고 정보를 바탕으로 Target에게 GE를 적용
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| GameplayEffect - 2) Stacking을 통한 중첩 Effect (0) | 2025.07.18 |
|---|---|
| GameplayEffect - 2) Instant / Duration / Period GameplayEffect (0) | 2025.07.13 |
| RPG 게임 UI - 최종) GetGameplayAttributeValueChangeDelegate의 사용 (0) | 2025.07.12 |
| RPG 게임 UI - 2) OverlayWidgetController 생성 및 설정 (0) | 2025.07.12 |
| RPG 게임 UI - 1) UI의 설계와 HUD 구성 (0) | 2025.07.07 |