UE(GAS) - UGameplayEffectExecutionCalculation

2024. 8. 20. 15:31Unreal Engine

UGameplayEffectExecutionCalculation는 Unreal Engine의 Gameplay Ability System (GAS) 에서 사용되는 클래스 중 하나입니다. 이 클래스는 Gameplay Effect의 계산 로직을 정의하는 데 사용됩니다. UGameplayEffectExecutionCalculation를 사용하면 능력(Ability)의 효과가 적용될 때, 복잡한 계산이나 커스텀 로직을 수행할 수 있습니다.

주요 개념

  1. Gameplay Effect:
    • Gameplay Effect는 능력(Ability)이나 상태 변화와 같은 게임플레이 이벤트의 결과를 정의합니다. 예를 들어, 피해를 입히거나, 치유를 하거나, 버프 또는 디버프를 적용할 수 있습니다.
    • UGameplayEffectExecutionCalculation은 이 효과가 적용될 때 계산되는 복잡한 로직을 처리하기 위해 사용됩니다.
  2. Execution Calculation:
    • Execution Calculation은 Gameplay Effect가 발동될 때 수행되는 사용자 정의 계산입니다.
    • 이 클래스는 보통 여러 입력 값을 받아 복잡한 수식을 처리하고, 결과 값을 출력으로 제공합니다. 예를 들어, 피해량 계산, 치유량 계산, 또는 상태 효과 적용에 대한 로직을 구현할 수 있습니다.

UGameplayEffectExecutionCalculation 클래스의 기능

UGameplayEffectExecutionCalculation 클래스는 기본적으로 Execute_Implementation 함수에서 계산 로직을 정의합니다. 이 함수는 Gameplay Effect가 실행될 때 호출되며, 필요한 계산을 수행하고 결과를 Gameplay Effect에 전달합니다.

 

기본 클래스 구조

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "GameplayEffectExecutionCalculation.h"
#include "MyGameplayEffectExecutionCalculation.generated.h"
 
UCLASS()
class UMyGameplayEffectExecutionCalculation : public UGameplayEffectExecutionCalculation
{
    GENERATED_BODY()
 
public:
    UMyGameplayEffectExecutionCalculation();
 
protected:
    virtual void Execute_Implementation(
        const FGameplayEffectCustomExecutionParameters& ExecutionParams,
        OUT FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const override;
};
cs

 

주요 함수

  • Execute_Implementation:
    • Execute_Implementation 함수는 커스텀 로직을 구현하는 핵심 부분입니다. Gameplay Effect가 실행될 때 이 함수가 호출되어 계산이 수행됩니다.
    • ExecutionParams는 계산에 필요한 다양한 입력 값을 포함하고 있으며, OutExecutionOutput은 계산 결과를 담습니다.

예시: 피해량 계산

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void UMyGameplayEffectExecutionCalculation::Execute_Implementation(
    const FGameplayEffectCustomExecutionParameters& ExecutionParams,
    OUT FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const
{
    // 입력 파라미터에서 데이터를 가져오기
    const FGameplayEffectSpec& Spec = ExecutionParams.GetOwningSpec();
    UAbilitySystemComponent* TargetAbilitySystemComponent = ExecutionParams.GetTargetAbilitySystemComponent();
    AActor* TargetActor = TargetAbilitySystemComponent ? TargetAbilitySystemComponent->GetOwner() : nullptr;
 
    // 커스텀 계산 로직
    float BaseDamage = 10.0f;
    float FinalDamage = BaseDamage; // 더 복잡한 계산을 여기에 추가
 
    // 계산된 결과를 출력
    OutExecutionOutput.AddOutputModifier(FGameplayModifierEvaluatedData(SomeDamageAttribute, EGameplayModOp::Additive, FinalDamage));
}
cs

 

GameplayEffectExecutionCalculation의 사용 사례

  1. 피해량 계산:
    • 피해량을 계산할 때, 캐릭터의 스탯, 아이템 효과, 상태 효과 등을 고려해 복잡한 수식을 적용할 수 있습니다.
  2. 상태 효과 적용:
    • 상태 효과를 적용할 때, 다양한 조건을 기반으로 로직을 분기하여 효과의 강도나 지속 시간을 조정할 수 있습니다.
  3. 능력치 조정:
    • 스탯이나 능력치를 복잡한 계산 로직으로 조정할 때 유용합니다.

요약

UGameplayEffectExecutionCalculation은 Unreal Engine의 Gameplay Ability System에서 복잡한 계산을 수행하고 결과를 적용하는 데 사용됩니다. Gameplay Effect의 실행 과정에서 커스텀 계산 로직을 정의할 수 있으며, 이를 통해 게임플레이의 다양한 요소를 제어할 수 있습니다. 이 클래스는 특히 복잡한 게임플레이 메커니즘을 구현할 때 유용합니다.