ゲームでランダムな値を使いたいことは多いとおもいます。
その場合、乱数をつかいます。
Unityでは、Randomクラスを使用します。
Randomクラスには、いろいろなメソッドがありますが、一番使用頻度が高いのは
Range メソッドで、取得したい乱数の範囲を指定するやり方だと思います
Rangeメソッドはint型とfloat型の2つのタイプが定義されています。ただ、挙動が少しことなるので、注意が必要です。
●float型(浮動小数点)
public static float Range (float minInclusive, float maxInclusive);
float rnd_float = Random.Range(0.0f, 1.0f); // 0以上、1以下のfloat型のランダム値を得る
上記の場合、0以上、1以下のfloat型の乱数をえることが出来ます。
●int型(整数)
public static int Range (int minInclusive, int maxExclusive);
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; と記述があると思います。
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です。
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クラスを使用していればよいと思います。