본문 바로가기

게임프로그래밍/실습2

[실습 2] 29. 클램핑 버그 고치기

1. 제대로 된 클램핑 적용하기

 

PreAttributeChange 에서  클램핑을 한 덕분에 체력과 마나가 0이하로 내려가지 않고 최대 체력, 마나를 뛰어 넘지도 않는다. 

 

하지만 이곳에서 수정자의 값은 실제로 변하지 않고, 리턴하는 값만 변하게 된다. 즉 이 함수에서 존재하는 NewValue의 값이 계속 최대 체력을 넘는 상태로 존재하고 이 값이 최대 체력보다 낮아져야만 제대로된 작동을 한다. 이 값을 바꿀 필요가 있을 것이다.

 

클램핑을 한번 더 해서 데이터의 값을 바꿀 것이다. PostGameplayEffectExecute() 함수에서 데이터를 받고 있고 이곳에서 값을 바꿀 것이다.

 

void UAuraAttributeSet::PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data)
{
    Super::PostGameplayEffectExecute(Data);
    FEffectProperties Props;
    SetEffectProperties(Data, Props);

    if (Data.EvaluatedData.Attribute == GetHealthAttribute())
    {
       SetHealth(FMath::Clamp(GetHealth(), 0.f, GetMaxHealth()));
    }
}

 

영향을 받은 어트리뷰트가 체력이면 다시 한번 클램핑을 진행하여 실제 체력을 변환 시킨다. 마나도 같은 작업을 하면 된다.