みなさんこんにちは!
フリーランスプログラマーのsatoです。
今回はMathfクラスについて見ていきましょう。
このクラスはいろいろな便利な計算関数がまとめられているクラスです。
使いこなせば複雑な計算処理を、自分で作らずとも扱えてしまいます!
とても便利そうですね!
しかし一体どんな計算処理が準備されているのでしょう?
今回は、Mathfクラスの出来ること・そしてその使い方についてまとめてみました!
Mathfクラスとは?
Mathとは和訳すると「数学」という意味です。
しかしここで「Mathfクラスの、じゃあ後ろのfはなんなんだ?」と思う人もいるかもしれませんが、これはfloat型のfです。
つまりUnityでよく使われているfloat型(小数点型)で、いろいろな計算結果を返してくれる関数だということです。
名前の通りですね!
便利な計算関数がまとめられているわけです。
では一体どんな関数があるのか?
それをまずは見てみましょう。
どんなことができるの?
主だったものを、非常に大きく分けると以下のようなものがあります。
② 小数点の切り捨て・切り上げ
③ 判定系関数
④ 計算系関数
⑤ 範囲指定関数
補間系関数は、例えばA地点からB地点へのスムーズな移動が簡単に行えます。
計算系では、三角関数や累乗などの計算が行えます。
と言っても言葉だけではわからないと思うので、実際に順に見ていきましょうか。
また他にも便利な関数がありますので、是非一度は公式のリファレンスに目を通しておきましょう。
参照元:https://docs.unity3d.com/ja/current/ScriptReference/Mathf.html
【目的別】需要の高い機能を紹介!
ここからは実例を交えながら、それぞれの関数の使い方を見ていきましょう。
座標や角度の補間!
Lerp関数やLerpAngle関数がこれに該当する関数です。
こちらは説明の内容が大きくなるので別記事で説明いたします。
こちらに後日追記予定です。
小数点の切り捨て・切り上げ
まずは小数点の操作に関する関数について見てみましょう。
主だった関数は以下の3つでしょうか。
Mathf.Ceil() ・・・ 切り上げ
Mathf.Round() ・・・ 四捨五入
やはり需要が高いのは「切り捨て・切り上げ・四捨五入」ですよね。
実際に使ってみましょう。
void Start () { // 5.5 という数字を準備 float testNum = 5.5f; // 関数を使用してみる float num1 = Mathf.Floor(testNum); //切り捨て float num2 = Mathf.Ceil(testNum); //切り上げ float num3 = Mathf.Round(testNum); //四捨五入 // ログに出してみる Debug.Log("Floor = " + num1 ); Debug.Log("Ceil = " + num2 ); Debug.Log("Round = " + num3 ); }
結果は以下の通りです。
いろいろな判定をしよう!
Mathfクラスには以下のように、判定を行う関数も準備されています。
Mathf.Min ・・・ 小さい方を返す
Mathf.Max ・・・ 大きい方を返す
正か負かの判定
まずはSign関数からみてみましょう。
void Start() { // 正か0の場合は1を、負の場合は-1を返す float num1 = Mathf.Sign(5.0f); float num2 = Mathf.Sign(-5.0f); // ログに出してみる Debug.Log("num1 = " + num1); Debug.Log("num2 = " + num2); }
結果は以下の通りです。
ちゃんと「+1 -1」で返って来ていますね!
あとはif文などを使用して判断すれば良いでしょう。
一番大きい・小さいのはどれ?
Mathf.Min関数・Mathf.Max関数
void Start () { // 比較用の数字を準備 float[] testArray = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f}; // 関数を使用してみる float num1 = Mathf.Min(testArray); // 小さい方を返す float num2 = Mathf.Max(testArray); // 大きい方を返す // ログに出してみる Debug.Log("num1 = " + num1); Debug.Log("num2 = " + num2); }
結果は以下の通りです。
ちゃんと一番小さい物、大きい物が返って来ていますね!
また、これらの関数は比較する数字が二つまでの場合、第一引数、第二引数にfloat型として別々に送ることも可能です。
便利に計算してみよう!
計算系の関数も以下のような物が備わっています。
Mathf.Exp ・・・ 累乗
Mathf.Log ・・・ 対数
Mathf.Sqrt ・・・ 平方根
Mathf.Abs ・・・ 絶対値
Mathf.Sin ・・・ 三角関数Sin
Mathf.Cos ・・・ 三角関数Cos
Mathf.Atan ・・・ 三角関数Atan
数が多いので全部は紹介しませんが、今回は需要の多そうなMathf.Abs関数についてだけ実例を見てみましょう。
void Start () { // 関数を使用してみる float num1 = Mathf.Abs( 5.0f); float num2 = Mathf.Abs(-5.0f); // ログに出してみる Debug.Log("num1 = " + num1); Debug.Log("num2 = " + num2); }
結果は以下の通りです。
ちゃんと絶対値として、整数が返って来ていますね!
またそれ以外の関数を使いたい場合、公式リファレンスで、戻り値引数をともに確認してから使ってみましょう。
参照元:https://docs.unity3d.com/ja/current/ScriptReference/Mathf.html
地味に便利な範囲指定関数
一定値以上の範囲から出したくない数字を扱う場合Math.Clamp関数が有用です。
この関数は第一引数に好きな数字を、第二引数に最小値、第三引数に最大値を送ります。
void Start () { // 関数を使用してみる float num1 = Mathf.Clamp(-10.0f, 0.0f, 50.0f); // 0〜50の値で返す float num2 = Mathf.Clamp( 10.0f, 0.0f, 50.0f); // 0〜50の値で返す float num3 = Mathf.Clamp( 80.0f, 0.0f, 50.0f); // 0〜50の値で返す // ログに出してみる Debug.Log("num1 = " + num1); Debug.Log("num2 = " + num2); Debug.Log("num3 = " + num3); }
結果は以下の通りです。
最小値を下回った-10を送った場合、最小値0として返され…
最大値を上回った80を送った場合、最大値50として返されています。
この関数は、座標の最大・最小の範囲指定にも使えますね!
上限・下限で、if文をわざわざ書く必要がないのは、わかりやすくて良いですね!
まとめ
今回はMathfという、便利数学関数について見てきました。
小数点の管理をしてくれたり、補間をしてくれたり、計算してくれたり…
有用な存在であることを理解してもらえたなら幸いです。
ぜひ、つかいこなして計算で楽をしましょう!