この記事はUnityの基本的な使い方を解説するシリーズの一つで、今回は便利な「Mathf」クラスの使い方について詳しくご説明します。
Mathfクラスとは
Mathfクラスは、数学関係の処理を行う関数や数学に関する定数を多数もつUnity独自のクラスです。三角関数やべき乗、平方根といった数学ではおなじみの計算を手軽に行えるほか、値の範囲を制限したり補完したりするなどゲームで重宝する便利な機能も備わっているので使いこなせると便利です。
なおC#にも数学を扱える「Mathクラス」があるのですが、Mathfクラスの関数等はゲーム用に最適化されているらしいのでUnityでゲームを作るならMathfを使いましょう。
Mathfクラスの主な定数・関数一覧
ではゲーム制作でよく使うMathfの便利な定数・関数を紹介していきます。
- 角度の単位の変換(Deg2Rad、Rad2Deg)
- 無限大(Infinity)
- 円周率(PI)
- 絶対値(Abs)
- 切り上げ(Ceil、CeilToInt)
- 切り捨て(Floor、FloorToInt)
- 四捨五入(Round、RoundToInt)
- 三角関数(Sin、Cos、Tan)
- 角度を取得(Atan2)
- 範囲を制限(Clamp、Clamp01)
- 小さい方の値を取得(Min)
- 大きい方の値を取得(Max)
- 線形補完(Lerp、LerpAngle)
- べき乗(Pow)
- 平方根(Sqrt)
- 符号の取得(Sign)
※これら以外にも色々な定数や関数があるので、詳しく知りたい方は公式リファレンスをご覧ください。
定数
角度の単位の変換(Deg2Rad、Rad2Deg)
角度の値に
- Mathf.Deg2Radを掛けると度→ラジアン
- Mathf.Rad2Degを掛けるとラジアン→度
に変換できます。
無限大(Infinity)
Mathf.Infinityで無限大を取得します(具体的な数値ではない)。レイ(Ray)を無限遠に飛ばす、といった場面でよく出てきます。
円周率(PI)
Mathf.PIで円周率(3.14…)を取得できます。
関数
絶対値(Abs)
Mathf.Absで引数の絶対値を得ることができます。例えば、Mathf.Abs(-10)とすると10が返ってきます。
切り上げ(Ceil、CeilToInt)
Mathf.Ceilは引数の値以上の最小の整数を返します。例えば、Mathf.Ceil(1.1f)とすると2が返ってきます。
返ってくる値は整数ですがfloat型なので、int型がほしい場合はMathf.CeilToIntを使いましょう。
切り捨て(Floor、FloorToInt)
Mathf.Floorは引数の値以下の最大の整数を返します。例えば、Mathf.Floor(1.1f)とすると1が返ってきます。
返ってくる値はやはりfloat型なので、int型がほしい場合はMathf.FloorToIntを使いましょう。
四捨五入(Round、RoundToInt)
Mathf.Roundは引数を四捨五入します。例えば、Mathf.Round(1.5f)とすると2が返ってきます。
切り上げや切り捨てと同様に戻り値はfloat型なので、int型がほしい場合はMathf.RoundToIntを使いましょう。
三角関数(Sin、Cos、Tan)
Mathf.Sin、Mathf.Cos、Mathf.Tanでそれぞれサイン、コサイン、タンジェントの計算を行えます。引数の単位はラジアンなので間違えないように注意してください。
角度を取得(Atan2)
Mathf.Atan2で2点間の角度を求めることができます。返ってくる値の単位はラジアンなので注意しましょう。
範囲を制限(Clamp、Clamp01)
Mathf.Clampを使えば、ある値を指定した最小値~最大値の間に制限することができます。例えばプレイヤーキャラクターの座標を画面内に制限したい場合などに便利です。このMathf.Clampは非常によく使う関数なのでぜひ覚えておきましょう。
ちなみに、値を0~1の間で制限したい場合はMathf.Clamp01を使うと引数を2つ省略できます。
小さい方の値を取得(Min)
Mathf.Minで2つの引数のうち小さい方を得ることができます。例えばMathf.Min(0,1)なら0が返ってきます。使い道としては変数の最小値を設定したいときに便利です。
大きい方の値を取得(Max)
Mathf.Maxで2つの引数のうち大きい方を得ることができます。例えばMathf.Max(0,1)なら1が返ってきます。こちらは変数の最大値を設定したいときに便利ですね。
線形補完(Lerp、LerpAngle)
Mathf.Lerpを使えば、引数の2つ値の間を線形補完した値を取得することが可能です。線形補完というのは、簡単に言うと次のように2つの値を直線で結ぶことです。この関数ではその直線上の値を取得できるというわけですね。
なお角度に対して線形補間を使いたい場合はMathf.LerpAngleを使ったほうが便利です。
べき乗(Pow)
Mathf.Powを使えばべき乗(例:2の2乗、とか)を計算することができます。これは比較的処理が重い計算だとされています。
平方根(Sqrt)
Mathf.Sqrtを使えば引数の平方根(ルート)を求めることができます。なお、この計算も処理が重いとされています。
符号の取得(Sign)
Mathf.Signで引数の符号を取得できます。例えばMathf.Sign(10)なら1・Mathf.Sign(-10)なら-1、というように引数がプラスまたは0のときは1、マイナスのときは-1が返ってきます。0のときは0が返ってくるわけではないので注意しましょう。
おわりに
以上、Unityの便利なMathfクラスについて一通りご説明しました。
Mathfクラスはゲームを作っているとよく使いますし、使いこなせるようになるととても便利なのでぜひ上記の内容を参考にしていただき、実際に使ってみて頂ければと思います。