Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Mathf(UnityのMathライブラリ)
Unity 専用の数学関数ライブラリ『Mathf』の使い方です。C# の『Math』クラスと似ていますが、Mathf は float 型に特化しており、ゲーム開発でよく使う補間・クランプ・三角関数などを提供します。
構文
using UnityEngine; // 絶対値を返します(float 特化版)。 float 絶対値 = Mathf.Abs(float f); // 値を min 以上 max 以下に制限します。 float 制限値 = Mathf.Clamp(float value, float min, float max); // a から b へ t(0〜1)の割合で線形補間します。 float 補間値 = Mathf.Lerp(float a, float b, float t); // 三角関数(引数はラジアン)。 float サイン = Mathf.Sin(float f); float コサイン = Mathf.Cos(float f); // 度数をラジアンに変換します。 float ラジアン = 角度 * Mathf.Deg2Rad; // ラジアンを度数に変換します。 float 度数 = ラジアン * Mathf.Rad2Deg;
メソッド一覧
| メソッド / 定数 | 概要 |
|---|---|
| Mathf.Abs(f) | f の絶対値を返します。 |
| Mathf.Clamp(value, min, max) | value を min 以上 max 以下の範囲に収めて返します。 |
| Mathf.Clamp01(value) | value を 0 以上 1 以下に収めます。正規化された値のクランプに便利です。 |
| Mathf.Lerp(a, b, t) | a と b の間を t(0〜1)で線形補間します。t が 0 なら a、1 なら b を返します。 |
| Mathf.LerpUnclamped(a, b, t) | Lerp と同様ですが t を 0〜1 に制限しません。t < 0 や t > 1 も使えます。 |
| Mathf.Sin(f) / Mathf.Cos(f) | f(ラジアン)のサイン・コサインを返します。 |
| Mathf.Sqrt(f) | f の平方根を返します。 |
| Mathf.Pow(f, p) | f の p 乗を返します。 |
| Mathf.Floor(f) / Mathf.Ceil(f) | 切り捨て・切り上げた整数値を float で返します。 |
| Mathf.Round(f) | 最も近い整数に丸めます。 |
| Mathf.PI | 円周率π(3.14159265...)の定数です。 |
| Mathf.Deg2Rad | 度数をラジアンに変換する係数(π / 180)です。 |
| Mathf.Rad2Deg | ラジアンを度数に変換する係数(180 / π)です。 |
| Mathf.Infinity | 正の無限大を表す定数です。 |
サンプルコード
using UnityEngine;
public class MathfSample : MonoBehaviour
{
[SerializeField] private float 移動速度 = 5f;
[SerializeField] private Transform ターゲット;
void Start()
{
// Mathf.Clamp() — 体力を 0〜100 の範囲に制限します。
float 体力 = 120f;
体力 = Mathf.Clamp(体力, 0f, 100f);
Debug.Log($"体力(制限後): {体力}"); // 100
// Mathf.Abs() — 距離の差の絶対値を取得します。
float 差 = -3.5f;
Debug.Log($"絶対値: {Mathf.Abs(差)}"); // 3.5
// 三角関数 — Sin 波を使った往復アニメーションです。
float 振れ幅 = Mathf.Sin(Time.time) * 2f;
Debug.Log($"Sin 値: {振れ幅}");
// 角度からラジアンへの変換です。
float 角度 = 45f;
float ラジアン = 角度 * Mathf.Deg2Rad;
Debug.Log($"Sin(45°) = {Mathf.Sin(ラジアン):F4}"); // 0.7071
}
void Update()
{
// Mathf.Lerp() — ターゲットに向かって滑らかに移動します。
if (ターゲット != null)
{
// Time.deltaTime を使って速度を時間ベースにします。
float t = 移動速度 * Time.deltaTime;
transform.position = Vector3.Lerp(transform.position, ターゲット.position, t);
}
// Mathf.Clamp01() — 入力を 0〜1 に正規化します。
float 入力 = Input.GetAxis("Horizontal");
float 正規化 = Mathf.Clamp01(Mathf.Abs(入力));
}
}
概要
『Mathf』の関数はすべて float 型を扱います。C# の Math クラスは double 型なので、Unity では基本的に Mathf を使ってください。三角関数の引数は度数(degree)ではなくラジアン(radian)です。度数で指定したい場合は Mathf.Deg2Rad を掛けてから渡してください。
『Mathf.Lerp()』を Update() 内で使う場合、t に Time.deltaTime を掛けることでフレームレートに依存しないスムーズな補間が実現できます。ベクトル演算についてはVector2 / Vector3を、コルーチンを使った時間制御についてはCoroutine / IEnumeratorをご確認ください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。