디버깅이라는게 무엇일까?
어떤 코드를 짜다가 예상외로 프로그램이 이상하게 동작을 한다고 느낄 때 해결하는 방법 중 하나이다.
나눗셈을 할 때 사람들이 자주 실수하는 부분에 대해서 재현해 보도록 하자.
예를 들어, 기획서에 현재 체력이 몇 프로인지 UI에 출력해야된다 라는 요구사항이 있다고 가정해보자.
세팅값 : 현재 체력 82 / 최대 체력 100
퍼센트.. 백분율이니까 현재 체력과 최대 체력을 나눠주고 100을 곱해주면 0.82 라는 값이 나온다.
그래서 퍼센트까지 출력해주고 싶으면 [Format Text]를 이용해 {Percent}% 해준 뒤 연결해주면 현재 체력이 몇 프로이다 라는걸 확인할 수 있지 않을까?

연결한 노드들.

하지만 0이라는 값이 나온다.


[Event BeginPlay]를 선택하고 F9을 눌러보자.
어디서 많이 봤던것 같은데... 아 브레이크 포인트!!
프로그램 흐름상 비긴플레이 노드로 들어오게 되면 더 이상 이어서 실행하지 않고 여기서 멈추게 된다.


그래서 구동을 해보면 아까 브레이크 포인트를 걸었던 부분에서 멈췄다는것을 알 수 있다.
그 후 F10을 누르면 한 칸씩 앞으로 갈 수 있다.

그래서 여튼 [Print Text]에 0이 출력되어 이걸 거꾸로 가서 마우스를 가져다 대보니 이미 곱하기로 가기도 전에 0이 뜨는 사태가 발생했다! 이처럼 개발할때는 메모리를 하나씩 보면서 코드가 어떻게 실행이 되는지 알아보는게 매우 중요하다.
일단 나누기가 문제가 되었으니 이 부분을 고쳐보도록하자!

[To Float]을 이용해 float으로 변환을 해주고 연결해주면 된다. 나누기 노드도 다시 추가해서 소수점으로 바꿔줘도 되지만, 둘 중 하나는 int여도 크게 상관이 없다. 이 부분에서 나눗셈 연산이 되면 float이 더 우선순위가 높기 때문에 소수점을 유지할 수 있다.

최종적으로 이렇게 연결해주면...

82%가 뜬다는것을 알 수 있다!
꼭 이렇게 해야 하는것은 아니고 다른 방법으로도 해줄수 있다.

현재 HP와 최대 HP를 서로 곱해준다음에 100으로 나누어주면 결과값은 똑같이 나온다.
근데 다른 문제가 발생할 수 있다. HP가 굉장히 커져서 1억에 근접하는 수치가 된다면 1억에 100을 곱하면 100억이 되는데 int의 표현범위는 21억이여서 이러면 오버플로우 문제가 발생할 수 있다.
'🧠프로그래밍 > UE5' 카테고리의 다른 글
[UE5] 논리연산 (0) | 2025.04.06 |
---|---|
[UE5] 총알 재장전 (0) | 2024.12.18 |
[UE5] 비교 연산 (1) | 2024.12.18 |
[UE5] 사칙 연산 (0) | 2024.11.19 |
[UE5] Get / Set (0) | 2024.11.12 |