HOWTO · Csharp

Unity3D で乱数を生成する

この記事では、C# で unity3d を使用して、特定の範囲内で整数および浮動小数点の乱数を生成する方法を示します。

このページの内容

このチュートリアルでは、unity3d で乱数を生成する方法について説明します。 float と int の戻り値の型を持つ乱数ジェネレーターを実装し、例を使用して実行動作を調べます。

Unity3D の乱数ジェネレーター

UnityEngine.Random は乱数を生成する組み込みメソッド Range() を提供します。 残念ながら、Unity3d では Range() メソッドは int と float の両方のデータ型に対してオーバーロードされています。

float または int データ型をパラメーターとして渡すことで、このメソッドを呼び出すことができます。 この関数のパラメーターは、下限と上限を指定して乱数の範囲を定義します。

float 戻り型の UnityEngine.Random.Range 関数の定義は次のとおりです。

public static float Range(float minValue, float maxValue);

Range() メソッドは、[minValue to maxValue] 内の乱数 float を返します。 maxValue が minValue より小さい場合、このメソッドは値を交換します。

float Range() メソッドには下限と上限が含まれます。 たとえば、Random.Range(1.2f,5.2f) は、極端な値を含め、1.2 から 5.2 までの数値を返します。

int 戻り型の UnityEngine.Random.Range 関数の定義は次のとおりです。

public static int Range(int minValue, int maxValue);

このメソッドは、[minValue to maxValue] の範囲内のランダムな整数を返します。 次の動作は、このメソッドの実行方法です。

  • このメソッドには上限は含まれません。 たとえば、Random.Range(-5, 5) は -5 と 4 の間の値を返します。
  • minValue と maxValue の両方が等しい場合、上限は除外され、メソッドは下限、つまり minValue を返します。
  • maxValue が minValue より小さい場合、数値は自動的に交換されます。

これらのメソッドの両方を Unity3D プロジェクトに実装します。 以下は、これらの関数を実装する完全なデモンストレーションです。 しかし、まず、プロセスを順を追って見ていきましょう。

  • 新しいプロジェクトを作成

    新しい Unity プロジェクトを作成します。 デフォルトでサンプルシーンが作成されます。

  • 3D ゲーム オブジェクトの作成

    ヒエラルキー ウィンドウを右クリックして、シーン内に任意の 3D ゲーム オブジェクトを作成します。

    unity3d で乱数を生成 - 3d ゲーム オブジェクト

  • float 乱数ジェネレーターを生成する C# スクリプトの作成

    プロジェクト ウィンドウで右クリックして、新しい C# スクリプトを作成します。 次に、新しく作成したスクリプトに次のコード スニペットを記述します。

    unity3d で乱数を生成 - スクリプト

    次のコード スニペットは、float 乱数ジェネレーターを示しています。 このコード スニペットは、-5.0 と 5.0 の範囲内で生成された乱数を追加することにより、gameObject を x 方向 に移動します。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class RandomNumberGenerator : MonoBehaviour {
      public GameObject gameObject;
      float xOffset = 0.0f;
    
      void OnGUI() {
        xOffset = Random.Range(-5.0f, 5.0f);
        if (GUI.Button(new Rect(10, 300, 100, 50), "MOVE")) {
          gameObject.transform.position =
              new Vector3(gameObject.transform.position.x + xOffset, gameObject.transform.position.y,
                          gameObject.transform.position.z);
        }
      }
    }
    
  • スクリプトをゲームオブジェクトにアタッチ

    シーンで作成されたゲーム オブジェクトにスクリプトをアタッチします。 次に、ゲーム オブジェクトを階層からドラッグしてスクリプトに渡します。

    unity3d で乱数を生成 - float スクリプト

  • ゲームを実行

    ゲームを実行し、Game View の Move ボタンを押して、ゲーム オブジェクトの位置を変更します。

  • 空のゲームオブジェクトを作成

    シーンに空のゲーム オブジェクトを作成して、整数型の乱数ジェネレーターを実装します。

    unity3d で乱数を生成 - 空のゲーム オブジェクト

  • int 乱数ジェネレーターを生成する新しい C# スクリプトの作成

    新しい C# スクリプトを再度作成し、スクリプトに次のコードを記述します。 このコード フェンスは、1 と 4 (整数) の間の乱数を生成し、0 を含む降順の値を出力します。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class IntRNG : MonoBehaviour {
      void Start() {
        int x = Random.Range(1, 5);
        for (int i = x; i >= 0; i--) {
          print(i);
        }
      }
    }
    
  • スクリプトを空のオブジェクトにアタッチ

    上記のスクリプトを、シーンで作成された空のゲーム オブジェクトにアタッチします。

    unity3d で乱数を生成 - int スクリプト

  • ゲームを実行

    ゲームを実行し、コンソール ウィンドウをチェックして出力を確認します。 詳細については、Unity3D 乱数ジェネレーター を参照してください。