오르카의 아틀리에


유니티를 사용하다 보면 숫자를 계산할 때가 많습니다. 이 숫자들을 다룰 때 자주 사용하는 클래스가 Mathf 클래스입니다. 레퍼런스가 잘 되어있다고 하더라도 자주 사용하는 함수들을 외워두면 코드를 작성하는 시간을 크게 줄일 수 있을 것입니다. (무엇보다 구글 켜서 검색하는게 귀찮음...) 그래서 이번에는 알아두면 좋고, 나의 삽질 시간을 줄여줄 수 있는 유용한 Mathf 함수들을 정리해보려고 합니다.


0. 절댓값

Mathf.Abs(float num)

Abs은 num에 대한 절댓값을 반환해줍니다. 가끔 데이터의 부호를 때고 계산해야 할 때 편리하게 사용할 수 있습니다.

1. 최대/최솟값

Mathf.Clamp(float num, float min, float max)

Mathf.Clamp01(float num)

Clamp는 num 값을 min, max에 맞추어 재조정해줍니다. min보다 작으면 min값을, max 값보다 크면 max값을 반환합니다. 주로 특정 변수가 어떤 값 사이에 존재해야 할 때 프로퍼티로 빼고 set 쪽에서 필터링을 걸어줄 때 사용합니다.


2. 올림 / 버림 / 반올림

올림 - Mathf.Cell(float num)

버림 - Mathf.Floor(float num)

반올림 - Mathf.Round(float num)

함수 뒤에 ToInt를 붙여주면 반환 값이 int가 됩니다.

3. 근사 (Approximately)

Mathf.Approximately(float a, float b)

두 변수 a, b가 같은지(근사한지) 비교합니다. float은 부동 소수점이기 때문에 데이터들이 이리저리 가공되거나 특히, 물리를 사용하여 물체를 요리조리 가지고 놀다가 위치나 속력 같은 친구들 가지고 == 연산을 하게 되면 일치하지 않을 때가 있습니다. 이럴 때를 대비해서 float 데이터들은 Approximately를 이용하여 비교해야 합니다. 예를 들어 1.8f == 18.0f / 10.0f가 true를 반환하지 않을 수도 있습니다.

4. 선형 보간

Mathf.Lerp(float a, float b, float t)

함수를 먼저 설명하자면 a와 b 사이의 값 반환하는 함수입니다. 구체적으로는 $0 \le t \le 1$인 t를 통해 a와 b를 잇는 직선 $\overline{AB}$를 $t:1-t$로 분할하는 지점을 반환합니다. 왜 이런 것을 사용할까요? 조금 깊이 들어가는 감이 있지만, 일단 선형 보간에 대해 잠깐 살펴봅시다.


선형 보간법(線型補間法, linear interpolation)은 끝점의 값이 주어졌을 때 그 사이에 위치한 값을 추정하기 위하여 직선 거리에 따라 선형적으로 계산하는 방법이다.

- 위키 백과

쉽게 생각하면 중간에 있는 어느 값을 추정하는 방법론입니다. 그럼 어떤 상황에서 어느 중간값을 추정해야 할 필요가 생길까요? 예를 들어봅시다.


우리는 값이 틱!하고 바뀌는 상황을 보여줄 수도 있지만, 값이 바뀌는 "과정"을 보여주어야 할 경우도 있습니다. 예를 들어 상금을 타는 연출에서 자신의 소지금액에 상금이 '틱!'하고 합쳐지게 보여줄 수도 있지만, 숫자들이 '촤라라락'하는 느낌으로 변화해서 목표 금액에 도달하는 연출이 필요할 수도 있습니다. 이럴 때 시작 값과 마지막 값의 중간값들을 구해 사용할 수 있습니다.


5. 라디안

Mathf.Deg2Rad

Mathf.Rad2Deg

각각 라디안->각도, 각도->라디안으로 바꿀 때 필요한 상수의 읽기전용 변수입니다. Deg2Rad는 $2\pi / 360$이고 Rad2Deg는 $180/\pi$와 같습니다.



사실 보간에 관련된 함수들이 여럿 있지만, 이 부분은 서드파티 플러그인에서 지원하는 기능이 훨씬 다양하고 직관적이므로 다른 포스팅에서 그 원리와 함수들을 살펴보도록 하겠습니다.