자주 사용하는 Mathf 함수 모음 [유니티 C#]

1. 최대,최솟값 Max / Min

C#
int damage = 10 - 15;
damage = Mathf.Max(damage, 1);

Max()는 두 수 중큰 값을 반환합니다.

예를 들어, 공격력이 음수나 0이 되는 것을 방지하기 위해 Max함수를 사용하여 이를 제한할 수 있습니다.

C#
int magazine = 0;
int ammo = 10;
int needAmmo = 15;
magazine = Mathf.Min(ammo, needAmmo);

Min()은 두 수 중 작은 값을 반환합니다.

재장전 로직을 만들 때 남아있는 총알의 수와 필요한 총알의 수 중 작은 값을 사용해야 될 때 사용할 수 있습니다.

2.절댓값 Abs

C#
float distance = -50f;
distance  = Mathf.Abs(distance);

Abs()는 수의 절댓값을 반환합니다.

거리를 계산하는 등 절댓값이 필요할 때 사용합니다.

3. 올림, 내림, 반올림 Ceil / Floor / Round

C#
float value = 4.4f;
value = Mathf.Ceil (value); // 5f
value = Mathf.Floor (value); // 4f
value = Mathf.Round(value); // 4f

소수점을 다룰 때 사용합니다.

Ceil()은 수를 올리고 Floor()는 수를 내립니다. Round()는 수를 반올림합니다. 세 함수 모두 float 타입을 반환합니다.

Round()가장 가까운 짝수로 반올림 됩니다.

ex) Round(4.5) ==> 4 , Round(5.5) ==> 6

4. 범위 내 고정 Clamp

C#
// Clamp(검사할 값, 최솟값, 최댓값)
int currentHp = 150;
int maxHp = 100;

currentHp = Mathf.Clamp(currentHp, 0, maxHp); // 100

Clamp()를 사용하면 현재 값을 범위 내에 고정할 수 있습니다.

체력 등의 최솟값과 최댓값이 존재하는 값을 다룰 때 사용할 수 있습니다.

5. 선형보간 Lerp

C#
float start = 0f;
float end = 10f;
float result = Mathf.Lerp(start, end, 0.5f); // 5

선형보간은 두 수의 사이에 위치한 값을 반환합니다. 위 예의 경우 0.5를 넣었기 때문에 두 수의 0.5(50%)에 해당하는 값을 반환합니다.

C#
transform.position =
Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * speed);

주로 위처럼 특정 지점으로 부드럽게 이동할 때 사용할 수 있습니다.

6. 근사값 Approximately

C#
float a = 1.0f;
float b = 10.0f / 10.0f;
if (Mathf.Approximately(a, b))
{
    // 처리
}

컴퓨터는 소수를 정확하게 비교할 수 없습니다. 컴퓨터가 소수를 표현하는 방식인 부동 소수점 방식과 저장 공간의 한계로 인하여 수학적으로는 같은 값이어도 컴퓨터공학적으로는 다른 값을 가질 수 있습니다.

그렇기에, Approximately() 함수를 사용하여 두 수가 같은 지를 비교하는 게 아닌 두 수의 차이가 작은 오차범위 안에 있는 지를 판단하여 이를 해결할 수 있습니다.

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다