UE(GAS) - GameplayEffect의 FGameplayEffectContextHandle과 FGameplayEffectSpecHandle

2024. 7. 25. 17:02Unreal Engine

 

언리얼 엔진의 GameplayAbilitySystem(GAS)에서 GameplayEffect는 캐릭터나 액터에 다양한 효과를 적용하는 데 사용되는 중요한 구성 요소입니다. GameplayEffect는 상태 변화, 속성 조정, 버프 및 디버프, DOT(데미지 오버 타임) 등 다양한 효과를 정의하고 관리할 수 있도록 도와줍니다.

주요 기능

GameplayEffect는 다양한 효과를 정의하고 적용할 수 있으며, 이를 통해 복잡한 게임플레이 메커니즘을 구현할 수 있습니다. 주요 기능은 다음과 같습니다:

  1. 속성 변경: 캐릭터의 체력, 마나, 공격력 등 속성 값을 변경할 수 있습니다.
  2. 지속 효과: 특정 시간 동안 지속되는 버프나 디버프 효과를 적용할 수 있습니다.
  3. DOT 및 HOT: 시간에 따라 지속적으로 피해를 입히거나 회복시키는 효과를 적용할 수 있습니다.
  4. 태그 추가 및 제거: 특정 조건에 따라 태그를 추가하거나 제거할 수 있으며, 이를 통해 게임플레이 로직을 제어할 수 있습니다.

주요 구성 요소

GameplayEffect는 다양한 속성과 매개변수를 통해 효과를 정의합니다. 주요 구성 요소는 다음과 같습니다:

  1. Modifiers: 속성 값을 변경하는 데 사용됩니다. 예를 들어, 공격력을 증가시키거나 체력을 감소시키는 등의 작업을 수행할 수 있습니다.
  2. Duration: 효과의 지속 시간을 정의합니다. 영구적, 일회성, 혹은 특정 시간 동안 지속되는 효과를 설정할 수 있습니다.
  3. Period: 지속 효과의 주기를 정의합니다. 예를 들어, 매 1초마다 데미지를 주는 효과를 설정할 수 있습니다.
  4. Gameplay Tags: 효과를 분류하고 조건을 설정하는 데 사용됩니다. 특정 태그를 추가하거나 제거할 수 있습니다.
  5. Application Requirements: 효과를 적용하기 위한 조건을 정의합니다. 예를 들어, 특정 태그가 있어야만 적용되는 효과를 설정할 수 있습니다.

 

 예제코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void AMyCharacter::ApplyGameplayEffectToSelf(TSubclassOf<UGameplayEffect> GameplayEffectClass, float Level)
{
    if (AbilitySystemComponent && GameplayEffectClass)
    {
        // Effect Context 생성
        FGameplayEffectContextHandle EffectContext = AbilitySystemComponent->MakeEffectContext();
        EffectContext.AddInstigator(thisthis);
 
        // Effect Spec 생성
        FGameplayEffectSpecHandle SpecHandle = AbilitySystemComponent->MakeOutgoingSpec(GameplayEffectClass, Level, EffectContext);
        if (SpecHandle.IsValid())
        {
            // Effect 적용
            AbilitySystemComponent->ApplyGameplayEffectSpecToSelf(*SpecHandle.Data.Get());
        }
    }
}
cs

 

GameplayEffectContextHandle

GameplayEffectContextHandle는 언리얼 엔진의 GameplayAbilitySystem(GAS)에서 효과가 발생한 컨텍스트에 대한 정보를 저장하고 전달하는 데 사용되는 구조체입니다. 이는 GameplayEffect가 적용될 때 추가적인 메타데이터를 제공하는 데 중요한 역할을 합니다.

주요 기능

GameplayEffectContextHandle는 GameplayEffect가 생성되고 적용될 때 다양한 컨텍스트 정보를 포함할 수 있습니다. 이러한 정보는 효과가 어떻게, 왜, 누구에 의해 발생했는지를 추적하는 데 도움이 됩니다. 주요 기능은 다음과 같습니다:

  1. 원인 제공자 (Instigator): 효과를 일으킨 주체(일반적으로 플레이어 또는 AI 캐릭터)에 대한 참조를 포함합니다.
  2. 원인 객체 (Source Object): 효과의 원천이 되는 객체를 포함합니다. 예를 들어, 특정 무기나 아이템일 수 있습니다.
  3. 대상 데이터 (Target Data): 효과가 적용될 대상에 대한 추가적인 데이터를 포함합니다. 여러 대상에 대한 정보가 필요할 때 사용됩니다.
  4. 위치 및 방향 정보: 효과가 발생한 위치와 방향에 대한 정보를 포함할 수 있습니다.
  5. 태그 정보: 컨텍스트와 관련된 태그를 포함하여 추가적인 조건이나 정보를 제공합니다.

 

FGameplayEffectSpecHandle

FGameplayEffectSpecHandle는 언리얼 엔진의 GameplayAbilitySystem(GAS)에서 GameplayEffectSpec을 안전하게 전달하고 관리하기 위한 핸들입니다. GameplayEffectSpec은 GameplayEffect의 인스턴스화된 사양(specification)으로, 실제로 게임 내에서 효과가 어떻게 작동할지를 정의하는 데 사용됩니다. FGameplayEffectSpecHandle은 이러한 사양을 캡슐화하여 효과의 생성, 수정, 적용을 보다 쉽게 관리할 수 있게 합니다.

주요 기능

FGameplayEffectSpecHandle의 주요 기능은 다음과 같습니다:

  1. 안전한 전달: GameplayEffectSpec을 안전하게 전달할 수 있도록 캡슐화합니다.
  2. 효과의 인스턴스화: GameplayEffectSpec의 인스턴스를 생성하여 실제 게임 내에서 사용될 수 있도록 합니다.
  3. 수정 가능: 생성된 효과 사양을 수정하여 특정 상황에 맞게 조정할 수 있습니다.
  4. 적용: 생성된 효과 사양을 캐릭터나 액터에 적용할 수 있습니다.

주요 메서드

MakeOutgoingSpec

1
FGameplayEffectSpecHandle SpecHandle = AbilitySystemComponent->MakeOutgoingSpec(GameplayEffectClass, Level, EffectContext);
cs

AbilitySystemComponent에서 GameplayEffect의 사양을 생성하는 메서드입니다. 이 메서드는 GameplayEffect의 클래스를 인자로 받아 해당 효과의 인스턴스화된 사양을 반환합니다.

 

ApplyGameplayEffectSpecToSelf

1
AbilitySystemComponent->ApplyGameplayEffectSpecToSelf(*SpecHandle.Data.Get());
cs

생성된 GameplayEffectSpec을 자신에게 적용하는 메서드입니다.