【Unity】Random.Rangeとは?範囲内の数値をランダムに返してくれるメソッド

乱数を取得できるRangeメソッド Unity

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

このページでは、

「Random.Rangeってどういうメソッドなの?」

「ランダム要素を作ってみたいけど、どうすればいいの?」

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

Unityでゲームを作っていく際に、ランダム的な要素を組み込んでいくことがあると思います。

このランダム要素を作る際に便利なのが、Randomクラスで定義されているRangeメソッドです。

Rangeメソッドは、引数で指定した範囲内の数値の中から、ランダムで値を取得することができるので、ゲーム内でランダム要素や確率を作る際に使えます。

そこでこのページでは、Unityでゲームを作る際に使えるRandom.Rangeメソッドについて、どんなメソッドなのか、使い方までをまとめていきます。

この記事を書いた人

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

Random.Rangeメソッドとは?

Rangeメソッドは、指定した範囲内でランダムに数値を取得することができるRandomクラスで定義されているメソッドです。

例えば、サイコロを考えてみると分かりやすいですが、サイコロの目は1~6まで6つの数値があり、どの数値の目が出るかはランダムになっています。

これと同じ仕組みなのがRangeメソッドで、サイコロの目にあたる部分を数値の範囲で指定してあげることで、その範囲内にある数値からランダムに1つの値を取得して返すということができます。

そしてこの返ってくる数値に対して、if文で制御を加えることで、ゲーム内で敵の配置や宝箱の中身、くじ引きなど様々なランダム要素を追加することができるようになります。

Random.Rangeメソッドの使い方

ここからは、Random.Rangeメソッドの使い方について紹介していきます。

引数で指定した範囲の数値を取得する

Rangeメソッドの引数で、サイコロの目にあたる数値の範囲を指定することができます。

具体的に言うと、第一引数にその範囲の最小となる数値第二引数にその範囲の最大となる数値を指定してあげます。

Random.Range(最小数値, 最大数値);

なお、後ほど記載していますが、引数をint型の整数で指定する場合は、最大数値は範囲に含まれないことになりますので、注意してください。

引数にはint型とfloat型の2つを指定できる

Rangeメソッドの引数に設定する数値は、

の2つあり、int型であれば返り値も整数、float型であれば返り値も小数になります。

int型:整数での値を指定して取得する

int型でRangeメソッドの引数を指定する場合は、

Random.Range(最小数値, 最大数値+1);

と、第二引数を範囲内の整数に+1した値で設定してあげることで、最小数値から最大数値の中にある整数をランダムで取得してきます。

例えば、マウスをクリックすると、サイコロと同じく1~6までの範囲の整数から、ランダムに1つの整数を取得するという場合、

using TMPro;
using UnityEngine;

public class Test : MonoBehaviour
{
    TextMeshProUGUI textMeshPro;

    void Start()
    {
        textMeshPro = GetComponent<TextMeshProUGUI>();
    }
    void Update()
    {
        // 左クリックした場合
        if (Input.GetMouseButtonDown(0))
        {
            int num = Random.Range(1, 7);   // 1~6までの整数からランダムで取得
            textMeshPro.text = num.ToString();  // 取得した数値を表示する
        }
    }
}

上記のように記述することで、マウスをクリックする度に、1~6までの範囲の中でランダムに整数の値を取得することができます。

float型:小数での値を指定して取得する

float型でRangeメソッドの引数を指定する場合は、

Random.Range(最小数値, 最大数値);

と、第二引数には範囲内の一番大きい小数をそのまま設定してあげることで、最小数値から最大数値の中にある小数をランダムで取得してきます。

なお、float型で指定する場合は、数字の後ろに「f」を付けるのを忘れないようにしましょう。

例えば、先ほどと同じくマウスをクリックすると、0.0~1.0までの範囲の小数から、ランダムに1つの数値を取得するという場合、

using TMPro;
using UnityEngine;

public class Test : MonoBehaviour
{
    TextMeshProUGUI textMeshPro;

    void Start()
    {
        textMeshPro = GetComponent<TextMeshProUGUI>();
    }
    void Update()
    {
        // 左クリックした場合
        if (Input.GetMouseButtonDown(0))
        {
            float num = Random.Range(0.1f, 1.0f);   // 0.1~1.0までの小数からランダムで取得
            textMeshPro.text = num.ToString();  // 取得した数値を表示する
        }
    }
}

上記のように記述することで、マウスをクリックする度に、0.0~1.0までの範囲の中でランダムに小数の値を取得することができます。

まとめ

このページでは、Unityのゲーム制作で使えるRandom.Rangeメソッドについて、どんなメソッドなのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?

Rangeメソッドは、Unity内で乱数を生成するためのRandomクラスで定義されているメソッドです。

Rangeメソッドの引数に、最小数値と最大数値を指定してあげることで、その範囲内にある数値から1つをランダムで返してくれます。

このRangeメソッドを使うことで、ゲーム内に確率や運要素などを入れていくこともできるようになるので、覚えておくと良いでしょう。

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

コメント