Unityで乱数を使いたい

ゲームでランダムな値を使いたいことは多いとおもいます。

その場合、乱数をつかいます。

Unityでは、Randomクラスを使用します。

Randomクラスには、いろいろなメソッドがありますが、一番使用頻度が高いのは

Range メソッドで、取得したい乱数の範囲を指定するやり方だと思います

Rangeメソッドはint型とfloat型の2つのタイプが定義されています。ただ、挙動が少しことなるので、注意が必要です。

●float型(浮動小数点)

public static float Range (float minInclusive, float maxInclusive);

C#
float rnd_float = Random.Range(0.0f, 1.0f);     // 0以上、1以下のfloat型のランダム値を得る

上記の場合、0以上、1以下のfloat型の乱数をえることが出来ます。

●int型(整数)

public static int Range (int minInclusive, int maxExclusive);

C#
int rnd_int = Random.Range(0, 10);              // 0以上、9以下のint型のランダム値を得る

上記の場合、0以上、9以下のint型の乱数を得ることが出来ます。この場合、注意が必要なのは、第2引数に10を指定していますが、10は含まれないということです

あと、まれに、Random.Range で下記のようなエラーが出る場合があります。

Assets\Script\Sample.cs(12,31): error CS0104: 'Random' is an ambiguous reference between 'UnityEngine.Random' and 'System.Random'

これは、UnityEngine名前空間で定義されているRamdomクラスと、System名前空間で定義されているRandomクラスがあり、どちらを使えばよいか曖昧だというエラ-です。

この場合、そのクラスのどこかで、System名前空間で定義されているクラスを使用しており(下記の場合 Action を使用している)、そのために、下記のようにソースの冒頭にUsing System; と記述があると思います。

C#
using UnityEngine;
using System;

public class Sample : MonoBehaviour
{

    private Action onSampleAction;          // サンプルのアクション

    void Start()
    {


            // 0以上、1以下のfloat型のランダム値を得る
            float rnd_float = Random.Range(0.0f, 1.0f);     

          // 0以上、9以下のint型のランダム値を得る
            int rnd_int = Random.Range(0, 10);              


    }

    // Update is called once per frame
    void Update()
    {
        
    }

}

この場合、エラーを手っ取り早く訂正するには、下記の通りにUnityEngin.Random と記述して、UnityEnginのRandomを使用しますと指定したらOKです。

C#
using UnityEngine;
using System;

public class Sample : MonoBehaviour
{

    private Action onSampleAction;          // サンプルのアクション

    void Start()
    {


            // 0以上、1以下のfloat型のランダム値を得る
            float rnd_float = UnityEngine.Random.Range(0.0f, 1.0f);     

          // 0以上、9以下のint型のランダム値を得る
            int rnd_int = UnityEngine.Random.Range(0, 10);              


    }

    // Update is called once per frame
    void Update()
    {
        
    }

}

ちなみに、System.Random としてしまうと、

Assets\Script\Sample.cs(14,45): error CS0117: 'Random' does not contain a definition for 'Range'

というエラーが発生します。System名前空間で定義されているRandomクラスにはRangeメソッドが定義されていないからです。

特別な理由がない限り、UnityEngine の Randomクラスを使用していればよいと思います。

タイトルとURLをコピーしました