Pv_log

int, float 나누기 계산 시 주의할 점 본문

Develop Study/Unity

int, float 나누기 계산 시 주의할 점

Priv 2020. 7. 18. 21:41

 

 

1
 UIHealthBar.instance.SetValue(CurrentLife / (float)MaxLife);
cs

 

위의 코드에서 CurrentLife와 MaxLife 모두 int형 변수이다.

UIHealthBar.instance.SetValue() 코드는 게임 상에 구현한 체력 게이지 UI에 사용된 체력 표시 바의 길이를 조절하기 위한 코드이다.

헌데, 코드를 다시 보면 MaxLife 변수를 임의적으로 float 형태로 변환하고 있는데, 이로 인해 계산 방식이 (int / float) 형태로 바뀌게 된다.

이는 int와 float의 표현 방식의 차이 때문이다.

그럼 먼저, (int / int) 형태로 계산했을 경우를 생각해보자.

CurrentLife를 2로, MaxLife를 4라고 가정한 뒤, 계산을 해본다면 (int 2 / int 4)가 나온다.

이 계산 결과는 0.5가 당연히 아니다. 그냥 0이다.

그렇기에 저 계산 형태를 그대로 사용할 경우 체력 수치가 곧장 0으로 떨어지고 만다.

이 문제를 해결하기 위해서 (int / float) 형태의 계산 방식을 사용하는 것이다.

즉, CurrentLife는 그대로 2가 되고, MaxLife가 일시적으로 4.0으로 변경되어 계산된다는 것인데, 이를 풀어보면 다음과 같다.

(int 2 / float 4.0) == float 0.5

이렇게 계산 되어야 올바른 체력 수치가 UI 상에 표시될 수 있다.

(float / float)으로 바꿔도 결과는 동일하겠지만, 굳이 2개를 다 바꿀 필요까지야...

Comments