GameDev/[Unity]

[유니티]Mathf 함수: 개념과 주요 함수, 그리고 예제

Bit by Bit 2024. 12. 5. 03:10
728x90

Unity에서 제공하는 Mathf 클래스는 2D 및 3D 게임 개발에서 자주 사용되는 수학적 연산을 쉽게 처리할 수 있도록 설계된 수학 유틸리티 클래스입니다. Mathf 클래스는 삼각함수, 지수 함수, 반올림 및 기타 수학 연산에 대한 메서드를 제공합니다. 특히, 성능 최적화간편한 사용이 장점으로 게임 개발에서 필수적인 도구입니다.


1. Mathf의 개념

 Mathf 클래스는 UnityEngine 네임스페이스에 포함되어 있으며, 주로 다음과 같은 작업에서 사용됩니다:

  • 게임 오브젝트의 움직임 계산 (예: 회전, 위치 보간 등)
  • 효율적인 수학 연산 (예: 거리 계산, 랜덤 값 생성)
  • 수학적 값 처리 (예: 절대값, 반올림, 클램핑 등)

Mathf는 대부분의 함수가 **정적(static)**으로 선언되어 있어 인스턴스를 생성하지 않고도 직접 사용할 수 있습니다.


2. Mathf의 주요 함수

 아래는 Mathf 클래스에서 자주 사용되는 주요 함수와 설명입니다.

(1) 절대값과 부호

함수 설명 예시 코드결과
Abs 주어진 값의 절대값 반환 Mathf.Abs(-5) 5
Sign 값의 부호 반환 (+1 또는 -1) Mathf.Sign(-10) -1

(2) 반올림과 정수 변환

함수 설명 예시 코드결과
Floor 소수점 아래를 버림 Mathf.Floor(3.7f) 3
Ceil 소수점 올림 Mathf.Ceil(3.7f) 4
Round 가장 가까운 정수로 반올림 Mathf.Round(3.5f) 4
FloorToInt 소수점 아래를 버리고 정수로 변환 Mathf.FloorToInt(3.7f) 3
CeilToInt 소수점 올림 후 정수로 변환 Mathf.CeilToInt(3.7f) 4
RoundToInt 반올림 후 정수로 변환 Mathf.RoundToInt(3.5f) 4

(3) 최소/최대값 및 범위 제한

함수 설명 예시 코드결과
Min 두 값 중 작은 값을 반환 Mathf.Min(5, 10) 5
Max 두 값 중 큰 값을 반환 Mathf.Max(5, 10) 10
Clamp 값을 특정 범위로 제한 Mathf.Clamp(15, 0, 10) 10
Clamp01 값을 0~1 범위로 제한 Mathf.Clamp01(1.5f) 1

(4) 삼각 함수

함수 설명 예시 코드결과
Sin 사인값 반환 Mathf.Sin(Mathf.PI / 2) 1
Cos 코사인값 반환 Mathf.Cos(0) 1
Tan 탄젠트값 반환 Mathf.Tan(Mathf.PI / 4) 1
Atan2 두 점 사이의 각도 반환 Mathf.Atan2(1, 1) * Mathf.Rad2Deg 45

(5) 보간 (Lerp)

함수 설명 예시 코드결과
Lerp 선형 보간 Mathf.Lerp(0, 100, 0.5f) 50
LerpUnclamped 범위 제한 없이 선형 보간 Mathf.LerpUnclamped(0, 100, 1.5f) 150

(6) 거듭제곱과 루트

함수 설명 예시 코드결과
Pow 거듭제곱 계산 Mathf.Pow(2, 3) 8
Sqrt 제곱근 계산 Mathf.Sqrt(16) 4

(7) 랜덤 값 생성

함수 설명 예시 코드결과
Random.Range 특정 범위의 난수 생성 Random.Range(1, 10) 1~9 중 하나

3. Mathf 함수 예제

(1) 간단한 캐릭터 점프 처리

using UnityEngine;

public class Jump : MonoBehaviour
{
    public float jumpForce = 10f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Mathf.Clamp로 최대 점프 힘 제한
            rb.AddForce(Vector3.up * Mathf.Clamp(jumpForce, 0, 20), ForceMode.Impulse);
        }
    }
}

 

(2) 보간을 이용한 오브젝트 이동

using UnityEngine;

public class ObjectMover : MonoBehaviour
{
    public Transform target;
    public float speed = 5f;

    void Update()
    {
        // Mathf.Lerp를 사용한 부드러운 이동
        transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime * speed);
    }
}
 
(3) Sin 함수를 이용한 부드러운 움직임
using UnityEngine;

public class Oscillator : MonoBehaviour
{
    public float amplitude = 5f;
    public float frequency = 2f;

    void Update()
    {
        // Mathf.Sin으로 위아래로 부드럽게 이동
        float y = Mathf.Sin(Time.time * frequency) * amplitude;
        transform.position = new Vector3(transform.position.x, y, transform.position.z);
    }
}

 

 Unity의 Mathf 클래스는 게임 개발에서 수학적 계산을 단순화하고 효율적으로 수행할 수 있게 해줍니다. Mathf를 잘 활용하면 더 부드럽고 자연스러운 움직임, 정교한 연산, 그리고 간단한 코드로 복잡한 게임 로직을 구현할 수 있습니다.

Mathf는 프로그래머의 도구 상자에서 가장 중요한 도구 중 하나이므로, 이를 익숙하게 다루는 것이 Unity 개발의 중요한 단계가 될 것입니다.

728x90