2024. 7. 25. 17:02ㆍUnreal Engine
언리얼 엔진의 GameplayAbilitySystem(GAS)에서 GameplayEffect는 캐릭터나 액터에 다양한 효과를 적용하는 데 사용되는 중요한 구성 요소입니다. GameplayEffect는 상태 변화, 속성 조정, 버프 및 디버프, DOT(데미지 오버 타임) 등 다양한 효과를 정의하고 관리할 수 있도록 도와줍니다.
주요 기능
GameplayEffect는 다양한 효과를 정의하고 적용할 수 있으며, 이를 통해 복잡한 게임플레이 메커니즘을 구현할 수 있습니다. 주요 기능은 다음과 같습니다:
- 속성 변경: 캐릭터의 체력, 마나, 공격력 등 속성 값을 변경할 수 있습니다.
- 지속 효과: 특정 시간 동안 지속되는 버프나 디버프 효과를 적용할 수 있습니다.
- DOT 및 HOT: 시간에 따라 지속적으로 피해를 입히거나 회복시키는 효과를 적용할 수 있습니다.
- 태그 추가 및 제거: 특정 조건에 따라 태그를 추가하거나 제거할 수 있으며, 이를 통해 게임플레이 로직을 제어할 수 있습니다.
주요 구성 요소
GameplayEffect는 다양한 속성과 매개변수를 통해 효과를 정의합니다. 주요 구성 요소는 다음과 같습니다:
- Modifiers: 속성 값을 변경하는 데 사용됩니다. 예를 들어, 공격력을 증가시키거나 체력을 감소시키는 등의 작업을 수행할 수 있습니다.
- Duration: 효과의 지속 시간을 정의합니다. 영구적, 일회성, 혹은 특정 시간 동안 지속되는 효과를 설정할 수 있습니다.
- Period: 지속 효과의 주기를 정의합니다. 예를 들어, 매 1초마다 데미지를 주는 효과를 설정할 수 있습니다.
- Gameplay Tags: 효과를 분류하고 조건을 설정하는 데 사용됩니다. 특정 태그를 추가하거나 제거할 수 있습니다.
- 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(this, this);
// 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가 생성되고 적용될 때 다양한 컨텍스트 정보를 포함할 수 있습니다. 이러한 정보는 효과가 어떻게, 왜, 누구에 의해 발생했는지를 추적하는 데 도움이 됩니다. 주요 기능은 다음과 같습니다:
- 원인 제공자 (Instigator): 효과를 일으킨 주체(일반적으로 플레이어 또는 AI 캐릭터)에 대한 참조를 포함합니다.
- 원인 객체 (Source Object): 효과의 원천이 되는 객체를 포함합니다. 예를 들어, 특정 무기나 아이템일 수 있습니다.
- 대상 데이터 (Target Data): 효과가 적용될 대상에 대한 추가적인 데이터를 포함합니다. 여러 대상에 대한 정보가 필요할 때 사용됩니다.
- 위치 및 방향 정보: 효과가 발생한 위치와 방향에 대한 정보를 포함할 수 있습니다.
- 태그 정보: 컨텍스트와 관련된 태그를 포함하여 추가적인 조건이나 정보를 제공합니다.
FGameplayEffectSpecHandle
FGameplayEffectSpecHandle는 언리얼 엔진의 GameplayAbilitySystem(GAS)에서 GameplayEffectSpec을 안전하게 전달하고 관리하기 위한 핸들입니다. GameplayEffectSpec은 GameplayEffect의 인스턴스화된 사양(specification)으로, 실제로 게임 내에서 효과가 어떻게 작동할지를 정의하는 데 사용됩니다. FGameplayEffectSpecHandle은 이러한 사양을 캡슐화하여 효과의 생성, 수정, 적용을 보다 쉽게 관리할 수 있게 합니다.
주요 기능
FGameplayEffectSpecHandle의 주요 기능은 다음과 같습니다:
- 안전한 전달: GameplayEffectSpec을 안전하게 전달할 수 있도록 캡슐화합니다.
- 효과의 인스턴스화: GameplayEffectSpec의 인스턴스를 생성하여 실제 게임 내에서 사용될 수 있도록 합니다.
- 수정 가능: 생성된 효과 사양을 수정하여 특정 상황에 맞게 조정할 수 있습니다.
- 적용: 생성된 효과 사양을 캐릭터나 액터에 적용할 수 있습니다.
주요 메서드
MakeOutgoingSpec
1
|
FGameplayEffectSpecHandle SpecHandle = AbilitySystemComponent->MakeOutgoingSpec(GameplayEffectClass, Level, EffectContext);
|
cs |
AbilitySystemComponent에서 GameplayEffect의 사양을 생성하는 메서드입니다. 이 메서드는 GameplayEffect의 클래스를 인자로 받아 해당 효과의 인스턴스화된 사양을 반환합니다.
ApplyGameplayEffectSpecToSelf
1
|
AbilitySystemComponent->ApplyGameplayEffectSpecToSelf(*SpecHandle.Data.Get());
|
cs |
생성된 GameplayEffectSpec을 자신에게 적용하는 메서드입니다.
'Unreal Engine' 카테고리의 다른 글
UE(GAS) - GetActivatableAbilities() (0) | 2024.08.07 |
---|---|
UE - TBaseStaticDelegateInstance (0) | 2024.08.04 |
UE(GAS) - SetReplicationMode()와 SetIsReplicated() (0) | 2024.07.25 |
UE(GAS) - GameAbilitySystem과 AttributeSet (0) | 2024.07.25 |
UE5 PossessedBy() 와 OnRep_ 함수 (0) | 2024.07.25 |