MRが楽しい

MRやVRについて学習したことを書き残す

UnityでMathfを使って複数のfloat値の最大値・最小値を求める

今日は Unity の小ネタ枠です。
Unity で UnityEngine.Mathf を使って複数のfloat値の最大値・最小値を求める手順を記事にします。

UnityEngine.Mathf

UnityEngine.Mathf は一般的な数学関数を扱うためのクラスです。
docs.unity3d.com

正負の判定や小数点の切り上げ、切り捨てといった一般的な数学関数のほか、座標や角度の補完といった Unity で役立つ数学関数が含まれています。

UnityEngine の Max/Min 関数は複数の float 値を渡して最大値や最小値を判定することができます。
一方で System.Mathf の Max/Min 関数は2つまでの値を比較して最大値、最小値を判定します。
docs.microsoft.com

Vector クラスなど3つ以上の値を扱う事の多い Unity では複数の値から最大値、最小値を求めることができる本関数が役立ちます。

Max/Min関数

以下に各軸のスケール値から最も大きい値を取得するサンプルスクリプトを作成しました。
・UnityMathfTest.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UnityMathfTest : MonoBehaviour
{
    void Start()
    {
        // オブジェクトのスケール値を取得する
        Vector3 sclaes = this.transform.localScale;

        // 各軸のスケール値から最大値を取得する
        float maxScale = UnityEngine.Mathf.Max(sclaes.x, sclaes.y, sclaes.z);

        // 各軸のスケール値を最大値に合わせる
        this.transform.localScale = new Vector3(maxScale, maxScale, maxScale);
    }
}

f:id:bluebirdofoz:20210119223628j:plain

各軸のスケール値が異なるゲームオブジェクトを作成し、そのオブジェクトにスクリプトをアタッチします。
f:id:bluebirdofoz:20210119223637j:plain

シーンを再生すると、最大値のスケール値に合わせて全ての軸のスケール値が再設定されます。
f:id:bluebirdofoz:20210119223647j:plain