티스토리 뷰

Properly Clamping Attributes

이번에는 Clamping과 관련하여 현재 존재하는 버그를 수정할 것이다.

지금은 Clamping을 통해서 최대 체력이 100이 넘지 않도록 고정했는데, 체력 100을 넘어서는 회복 효과 적용 후에 FireArea로 들어가서 데미지를 입어보면 체력 UI가 꽉 찬 상태에서 떨어지지 않는 것을 볼 수 있다.

 

효과가 적용 될 때 변경되는 속성이 Health가 맞는 지 체크하고, 디버그 메시지까지 출력해서 확인해보면 다음과 같다.

 

이제 디버그 중단점을 이용하여 이 상태의 체력이 몇인지 확인할 수 있다.

체력이 100을 넘기면 안되지만, 137이 찍힌 것을 볼 수 있다.

 

PreAttributeChange에서 전달되는 값은 최종 확정된 속성 값이 아니라, Gameplay Effect와 Modifier 계산 결과로 만들어진 “이번 적용 후보값”이다.

예를 들어 Health가 50이고 최대 체력이 100인 상태에서, 체력 증가 아이템(+60)이 적용되면 계산상으로는 110이 될 수 있다.

 

이 단계에서 PreAttributeChange는 이 값을 0~MaxHealth 범위로 Clamp해서 100으로 제한하려고 한다.

하지만 이 Clamping은 값을 실제로 저장하거나 고정하는 것이 아니라, “이번 계산 결과에 대해서만 제한을 거는 과정”이다.

그래서  매 프레임이나 이벤트마다 모든 Gameplay Effect의 Modifier가 다시 계산된다.

예를 들어 다음 틱에서 Fire Damage(-5)나 다른 효과가 추가로 적용되면, 시스템은 다시 전체 Modifier를 합산해서 Health 값을 새로 계산한다.

이러한 이유로 계산 결과가 105나 155처럼 100을 넘는 값으로 나올 수 있다.

 

이를 해결하기 위해서는 Gameplay Effect 적용 완료 시점(최종 결과값)에 Clamping을 해주면 된다.

 

기존 디버그 메시지를 지우고, Mana도 똑같이 설정해주자.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함