관리 메뉴

기억을 위한 기록들

[Game Ability System] #4. GameplayEffect 에 관해 본문

UnrealEngine

[Game Ability System] #4. GameplayEffect 에 관해

에드윈H 2024. 2. 14. 13:45

 

GE(GameplayEffect) 라고도 불리고, 영어로 Effect로 불려서 VFX(특수효과)랑 헷갈릴수도 있는데, "영향을 준다" 라는 뜻으로 이해하면 되겠다.

 

GAS는 게임에 영향을 주는 객체를 별도로 분리해서 관리한다. 영향을 준다는 것은 대부분 게임 데이터를 변경 하는것을 의미하고, 대부분 GE와 어트리뷰트(Attribute)는 함께 동작하도록 구성되어 있다.

GAS 시스템에서 가장 많은 기능을 제공하는 클래스이기도 하다.

GE 기반 블루프린트 클래스 예시

GE 타입 3가지

1. Instant : 즉시 적용되는 GE. 한 프레임에 실행된다.

2. Has Duration : 지정한 시간동안 동작하는 GE

3. Infinite : 명시적으로 종료하지 않으면 무한하게 동작하는 GE

 

 

GE에서 어트리뷰트의 변경 방법을 지정한 설정 할 수 있는 모디파이어(Modifier/수정자)라는게 있다.

모디파이어 사용방법

- 적용할 어트리뷰트의 지정

- 적용 방식(Modifier OP)의 설정 : 더하기, 곱하기, 나누기, 덮어쓰기

모디파이어계산 방법(Magnitude Calculation Type)

- ScalableFloat : 실수

- AttrubutedBase : 특정 어트리뷰트에 기반

- CustomCalculationClass : 계산을 담당하는 전용 클래스의 활용

- SetBtCaller : 데이터 태그를 활용한 데이터 전달

모디파이어 없이 자체 계산 로직을 만드는 것도 가능 (GameplayEffectExecutionCalculation)

 

 

 

GE의 생성과정

 

1. EffectContext (FGameplayEffectContext)와 2. EffectSpec(FGameplayEffectSpec)을 통해 생성 할 수 있다.

 

- EffectContext는 GE에서 계산이 필요한 데이터를 담은 객체로 Instigator(가해자), Causer(수단), HitResult 등이 담겨져 있다.

- EffectSpec은 GE에 관련된 정보를 담고 있는 객체로, 레벨 및 모디파이어 및 각종 태그 정보, Handle등이 있다.

 

ASC는 각 데이터를 핸들 객체를 통해 간접적으로 관리한다.

 

순서는 1. EffectContext 를 만들어서 GE 계산에 필요한 정보를 모은 다음 2. EffectSpec을 생성해야한다.

 

 

각각 둘을 관리하는 구조체를 주로 사용한다.

 

FGameplayEffectContextHandle 구조체

코멘트 : FGameplayEffectContext 또는 하위 클래스를 둘러싸는 핸들을 사용하여 다형성 및 복제를 적절히 수행할 수 있습니다

 

 

FGameplayEffectSpecHandle 구조체

코멘트 : Blueprint에서 게임 플레이 효과 스펙을 한 번 생성한 다음 핸들별로 참조하여 여러 번/여러 대상에 적용할 수 있습니다.