【Unity】Mathf.Infinityとは?無限大を表すfloat型の変数

Mathf.Infinityとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「Unityで出てくるMathf.Infinityってなに?」

「Mathf.Infinityはどこで使うの?」

というお悩みの方に向けた内容となっています。

Unityで使われるC#では、数学的な関数や変数をまとめているMathfクラスの中に、Infinityという変数があります。

このInfinityは、無限大を表している変数で、「限りなく大きいこと」を示しゲーム内では無制限を表すために使います。

そこまでUnityで使う機会は多く無いですが、例えば、RaycastメソッドなどでRayの距離を指定しますが、この距離にMathf.Infinityで無限大を指定することで、Rayの長さを無制限にすることができます。

そこでこのページでは、Unityで使うことができるMathf.Infinityについて、どんな変数なのか、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Mathf.Infinityとは?

まずは、Mathf.Infinityがどういうものなのかを紹介していきます。

無限大を表すMathfクラスの変数

Mathf.Infinityとは、C#において「無限大」を表しているMathfクラスの変数のことです。

無限大とは、数学的に限りなく大きいこと、つまりどんな数よりも大きいことを意味していて、記号で「∞」で表示されます。

このInfinityはfloat型の変数で取得することができますが、例えば以下のようなスクリプトでコンソールウィンドウに表示してみると、

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        float num = Mathf.Infinity;
        Debug.Log(num);
    }
}

と、「Infinity」という文字で表示されることになります。

負の無限大はNegativeInfinityで取得する

Mathf.Infinityは無限大を取得できる変数ですが、の無限大、つまりプラス方向に対して大きいことを表しています。

反対にの無限大、つまりマイナス方向に対して「限りなく小さいこと」を表したい場合は、Mathf.NegativeInfinityで取得することができます。

先ほどと同様に、以下のスクリプトでMathf.NegativeInfinityの値をコンソールウィンドウに表示させてみると、

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        float num = Mathf.NegativeInfinity;
        Debug.Log(num);
    }
}

「-Infinity」となり、負の無限大として取得できていることがわかります。

Mathf.Infinityの使い方:Raycastメソッドでの使用例

Mathf.Infinityが無限大を取得できる変数であることが分かりましたが、Unityではどんな場面で使われるのでしょうか?

ここでは、Unity内での活用例としてRaycastメソッドを紹介していきます。

Raycastメソッドとは、光線であるRayを投射して、コライダーを付けたオブジェクトと衝突しているかどうかを検知するメソッドです。

このRaycastメソッドの引数に必須なのが、Rayを投射する開始地点(origin)と、Rayを投射する方向(direction)の2つで、他にもRayが投射する距離(maxDistance)やRayで当たったオブジェクト情報(RaycastHit hitInfo)などを指定することができます。

Raycast (Vector3 origin, Vector3 direction, float maxDistance, RaycastHit hitInfo);

この中の「Rayが投射する距離」は省略することも可能ですが、省略した場合は「Mathf.Infinity」、つまり投射する距離が無限大を表すことになります。

例えば、下のようにオブジェクトをひとつ配置して、マウスでこのオブジェクトをクリックしたら色が変わるように、スクリプトで処理を作ってみます。

using UnityEngine;

public class Test : MonoBehaviour
{
    Renderer render;

    void Start()
    {
        render = GetComponent<Renderer>();
    }

    void Update()
    {
        // マウスをクリックした場合
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);    // マウスカーソルの位置へのベクトルを取得
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 2.0f))    // Rayの距離を2.0に設定
            {
                render.material.color = Color.red;  // 赤色に変更
            }
        }
    }
}

スクリプトの19行目で、Rayが投射する距離をまずは「2.0」で設定して書いてみました。

これでゲームを実行してみますが、

上記のようにカメラからオブジェクトまでの距離が離れているため、クリックしても色が変わりません。

using UnityEngine;

public class Test : MonoBehaviour
{
    Renderer render;

    void Start()
    {
        render = GetComponent<Renderer>();
    }

    void Update()
    {
        // マウスをクリックした場合
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);    // マウスカーソルの位置へのベクトルを取得
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, Mathf.Infinity))    // Rayの距離を無限大に設定
            {
                render.material.color = Color.red;  // 赤色に変更
            }
        }
    }
}

次に、Rayが投射する距離を無限大、つまり「Mathf.Infinity」で書いてみます。

すると、

上のように投射する距離が無限に届くようになったので、距離が離れていてもオブジェクトの色を変えることができました。

このように、Mathf.Infinityを使うことで、ゲーム内での距離などで無制限を表すことができるようになります。

まとめ

このページでは、UnityのC#で使うことができるMathf.Infinityについて、どんな変数なのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?

Mathf.Infinityとは、数学的な変数や関数を定義しているMathfクラスの中で、正の無限大を表している変数です。

この無限大とは、限りなく大きいことを表していて、反対に限りなく小さいことである負の無限大はMathf.NegativeInfinityで取得することができます。

Unityでは、そこまで多く使われませんが、RaycastメソッドでRayの距離を指定する際などに、Mathf.Infinityが使われることがあります。

最後までお読みいただきまして、ありがとうございました!

コメント