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()));
}
}
영향을 받은 어트리뷰트가 체력이면 다시 한번 클램핑을 진행하여 실제 체력을 변환 시킨다. 마나도 같은 작업을 하면 된다.
'게임프로그래밍 > 실습2' 카테고리의 다른 글
[실습2] 31. Combat 인터페이스를 통해 플레이어 레벨 얻기 (0) | 2024.12.01 |
---|---|
[실습2] 30. 게임플레이 이펙트로 어트리뷰트 초기화 하기 (0) | 2024.12.01 |
[실습2] 28. 태그 브로드 캐스팅 하기 - 2 (0) | 2024.11.30 |
[실습2] 27. 태그 브로드 캐스팅 하기 - 1 (0) | 2024.11.30 |
[실습2] 26. 게임 플레이 이펙트에 게임플레이 태그 적용하고 태그 출력하기 (0) | 2024.11.30 |