Developer

【初心者Unity】Mathfの関数で知っておきたいものまとめ
2022.02.28
Lv1

【初心者Unity】Mathfの関数で知っておきたいものまとめ

Mathfとは


そのメソッド、Mathfにありますよ!

みなさんはMathfを使ってますでしょうか?
その頑張って作ったロジック…実はMathfに用意されているかもしれません!

Mathfとは、数学に関する定数や関数がまとめられている構造体です。
Mathfクラスと書かれている記事をよく見かけますが、正しくはMathf構造体です。
クラスと構造体の違いについて詳しく知りたい方は⇒こちら

Mathfを使うと数学関連の処理を簡潔に実装できるうえ、用意されたものを使用するだけなのでプログラムのミスも減ります。
よく使う関数もあれば、滅多に使わないものまで様々な関数が用意されていますが、今回は特によく使う関数について紹介していきます。

用意されてるものはしっかり使っていく心構えがコードミスの削減につながります!

値の範囲制限(Mathf.Clamp)

受け取った値を最小値~最大値の範囲に制限する関数です。
ゲームとの相性が良く、Mathfの中でも特に知っておいて欲しい関数の1つです。
Clamp関数を知らないと、if文(else文)を3つほど組み合わせて同じようなロジックを作ってしまうことがあります。

■定義
public static int Clamp (int value, int min, int max);
valueの値がminより小さければminを返し、valueの値がmaxより大きければmaxを返し、どちらでもなければvalueを返します。

■サンプル

using UnityEngine;

public class Mathf_Sample : MonoBehaviour {

	void Start() {

		int a = Mathf.Clamp(110, 0, 100); // int型
		Debug.Log(a);   // a ⇒ 100

		float b = Mathf.Clamp(-0.99f, 1.1f, 1.2f); // float型
		Debug.Log(b);   // b ⇒ 1.1
	}
}

■補足
似た関数でClamp01というものもあります。こちらは値を0~1の範囲に制限します。

最大値、最小値(Mathf.Max、Mathf.Min)

値を比較して一番大きい(小さい)ものを取得する関数です。
シンプルですがif文を使わずに比較できるためコードが簡潔になります。

■定義
public static int Max (int a, int b);
aとbのうち大きい値を返します。

public static int Max (params int[] values);
values(配列)の中から一番大きい値を返します。

■サンプル

using UnityEngine;

public class Mathf_Sample : MonoBehaviour {

	void Start() {

		int a = Mathf.Max(10, 20);
		Debug.Log(a);   // a ⇒ 20

		int b = Mathf.Max(1, 2, 3, 4, 5);  // b ⇒ 5
		Debug.Log(b);   // b ⇒ 5
	}
}

■補足
MaxをMinに変えれば最小値を取得出来ます。
Float型でも使用できます。

切り上げ、切り捨て、四捨五入っぽいもの(Mathf.Ceil、Mathf.Floor、Mathf.Round)

小数点数から整数を取得する際に使用します。
Roundは四捨五入っぽい動作となりますが少し違うので注意してください。

■定義

public static float Ceil (float f);
fの小数部を切り上げて、一番近い整数を返します。(ただし戻り値はfloat型の点に注意)

public static float Floor (float f);
fの小数部を切り捨てて、一番近い整数を返します。(同上)

public static float Round (float f);
fに最も近い整数を返します。
※ただし、小数部が.5の場合一番近い偶数が返ります。ここが四捨五入と違うので注意しましょう。

■サンプル

using UnityEngine;

public class Mathf_Sample : MonoBehaviour {

	void Start() {

		// 切り上げ
		Debug.Log(Mathf.Ceil(0.1f));	// 1.0

		// 切り捨て
		Debug.Log(Mathf.Floor(1.9f));	// 1.0

		// 四捨五入っぽいもの
		Debug.Log(Mathf.Round(2.4f));	// 2.0
		Debug.Log(Mathf.Round(2.5f));	// 2.0
		Debug.Log(Mathf.Round(3.5f));   // 4.0
	}
}

■補足
CeilToInt、FloorToInt、RoundToIntもあります。
こちらは戻り値が整数値(int型)となります。

絶対値(Mathf.Abs)

絶対値を取得出来ます。
if(value > 0)みたいに書かなくてよいので地味に便利です。

■定義

public static float Abs (float f);
fの絶対値を返します。

■サンプル

using UnityEngine;

public class Mathf_Sample : MonoBehaviour {

	void Start() {

		Debug.Log(Mathf.Abs(10));	// 10
		Debug.Log(Mathf.Abs(-10));	// 10
	}
}

■補足
float型でも使用できます。

以上、Mathf構造体のよく使うところの紹介でした。

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次