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
'GameDev > [Unity]' 카테고리의 다른 글
[유니티]Unity에서 Gradle(build.gradle) 파일 접근 및 수정 (0) | 2024.12.10 |
---|---|
[유니티]Target API Level과 Target SDK 완벽 정리 (2) | 2024.12.09 |
[유니티]싱글톤(Singleton) 패턴이란? (2) | 2024.12.04 |
[유니티]코루틴(Coroutine) 개념과 사용 방법 (2) | 2024.12.03 |
[유니티]Unity에서 GameObject의 활성화 상태를 확인하는 방법: activeSelf와 activeInHierarchy의 차이 (3) | 2024.11.26 |