0. 개요

파이어볼트 어빌리티는 기본 데미지 게임플레이 이펙트를 사용하여 대상의 HP를 고정으로 깎는 역할을 하고 있다.

이제 메타 속성을 도입하여 2차 속성(방어력, 방어관통 등)을 고려한 데미지 계산을 도입한다.

 

 

1. 메타 속성이란?

메타 속성은 속성 값 사이의 관계를 반영하는 계산을 위한 속성이다.

아래와 같은 특징을 지닌다.

- 중간 계산 용도

- 복제되지 않음

- 속성 셋에 따른 서버에서의 계산 수행

 

 

2. 메타 속성 생성 - AuraAttributeSet

(1) 들어오는 데미지(Incoming Damage)

	/*
	* 메타 속성
	*/

	UPROPERTY(BlueprintReadOnly, category="Meta Attributes")
	FGameplayAttributeData IncomingDamage;
	ATTRIBUTE_ACCESSORS(UAuraAttributeSet, IncomingDamage);

들어오는 데미지를 계산하기 위한 메타 속성으로 IncomingDamage 속성을 생성한다.

void UAuraAttributeSet::PostGameplayEffectExecute(const FGameplayEffectModCallbackData & Data)
{
    // ~~~~~~~~~~~~~~~~
    // 데미지 판단
    if (Data.EvaluatedData.Attribute == GetIncomingDamageAttribute())
    {
        const float LocalIncomingDamage = GetIncomingDamage();
        SetIncomingDamage(0);

        if (LocalIncomingDamage > 0.f)
        {
            const float NewHealth = GetHealth() - LocalIncomingDamage;
            SetHealth(FMath::Clamp(NewHealth, 0, GetMaxHealth()));

            const bool bFatal = NewHealth <= 0.f;
        }
    }
}

들어오는 데미지를 로컬 변수로 저장하고, 원본값은 0으로 초기화한다.

들어오는 데미지가 0보다 크면 계산을 수행하고, 치명적인 일격(사망에 이르는 데미지)인지 판단하는 로컬변수 bFatal을 선언한다.

 

 

(2) 게임플레이 이펙트 수정 - GE_Damage

기존에 Health 속성을 -10, Add 하던 식을 변경한다.

IncomingDamage속성을 특정 값으로 더하는 방법을 사용한다.

이제 테스트를 진행하면 정상적으로 25의 데미지가 적의 체력을 깎는 것을 볼 수 있다.