ゲームで公平な抽選を実装したい。
アイテムドロップや確率計算で、偏りのない乱数を使いたい。
現在、一様乱数を使うことで、公平な抽選とランダム生成を実現できます。
一様乱数は、すべての値が同じ確率で出現する乱数です。
ゲーム開発では、ドロップ率や抽選など、様々な場面で使われます。
この記事では、一様乱数をゲームで使う理由について、Unity実装例とともに解説します。
- 一様乱数とは何か、よく分からない…
- 公平な抽選を実装したいが、どうすればいいか分からない。
- アイテムドロップで偏りのない乱数を使いたい。
✨ この記事でわかること
- 一様乱数の基本概念と特徴
- 公平な抽選を実現する方法
- Unityでの一様乱数の生成方法
- ドロップ率や確率計算への応用
- 初心者でも理解できる乱数の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
一様乱数とは何か(ゲーム制作目線)

一様乱数は、すべての値が同じ確率で出現する乱数です。
例えば、1から10の範囲で一様乱数を生成すると、1も2も10も、すべて同じ確率(10%)で出現します。
これに対して、正規分布などの分布では、中央値付近の値が出現しやすくなります。
一様乱数の特徴は、公平性と予測不可能性です。
すべての値が等しい確率で出現するため、公平な抽選やランダムな選択ができます。
ゲーム開発では、UnityのRandom.Rangeなどで簡単に生成できますね。
ゲームでの具体的な使い道

一様乱数が、ゲームでどう使われているか確認してみましょう。
アイテムドロップ率
敵を倒したときに、アイテムをドロップする確率を計算します。
例えば、レアアイテムが5%の確率でドロップする場合、0から100の範囲で一様乱数を生成し、5未満ならドロップします。
ランダムな選択
複数の選択肢から、ランダムに1つを選ぶ際に使われます。
敵の行動パターンや、BGMの選択などに使われます。
ランダムな位置生成
オブジェクトをランダムな位置に配置する際に使われます。
敵の出現位置や、アイテムの配置位置などに使われます。
ランダムな数値生成
ダメージ値や経験値など、ランダムな数値を生成する際に使われます。
一定の範囲内で、ランダムな値を生成できます。
- アイテムドロップ率の計算
- ランダムな選択(行動パターン、BGMなど)
- ランダムな位置生成(敵の出現位置など)
- ランダムな数値生成(ダメージ値、経験値など)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

一様乱数の生成は、「乱数生成器 → 範囲の正規化 → 一様分布の値」という流れで実現できます。
乱数生成器
コンピュータでは、疑似乱数生成器を使って乱数を生成します。
UnityのRandomクラスも、疑似乱数生成器を使用しています。
範囲の正規化
生成された乱数を、指定した範囲に正規化します。
例えば、0から1の範囲の乱数を、1から100の範囲に変換します。
一様分布の実現
すべての値が同じ確率で出現するように、分布を均一にします。
これにより、公平な抽選やランダムな選択ができます。
確率との対応
一様乱数を使うことで、確率計算を簡単に実装できます。
例えば、5%の確率は、0から100の範囲で5未満の値が出現することに対応します。
- 一様乱数は、すべての値が同じ確率で出現する乱数
- 公平な抽選やランダムな選択に適している
- 確率計算を簡単に実装できる
- UnityのRandom.Rangeで簡単に生成できる
Unityで実装する際の注意点(代表例)

Unityで一様乱数を生成する場合の注意点を見ていきましょう。
基本的な乱数生成(Random.Rangeを使う方法)
UnityのRandom.Rangeを使った、基本的な乱数生成です。
|
1 2 3 4 5 6 7 8 9 |
// 整数の乱数(1から10の範囲) int randomInt = Random.Range(1, 11); // 1以上11未満 // 浮動小数点数の乱数(0.0から1.0の範囲) float randomFloat = Random.Range(0f, 1f); // 指定した範囲の浮動小数点数 float randomValue = Random.Range(10f, 20f); // 10以上20未満 |
アイテムドロップ率の実装
一様乱数を使って、アイテムドロップ率を実装します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class ItemDrop : MonoBehaviour { public float rareItemDropRate = 5f; // 5%の確率 public void DropItem() { // 0から100の範囲で一様乱数を生成 float randomValue = Random.Range(0f, 100f); if (randomValue < rareItemDropRate) { // レアアイテムをドロップ Debug.Log("レアアイテムを獲得!"); } else { // 通常アイテムをドロップ Debug.Log("通常アイテムを獲得"); } } } |
ランダムな選択の実装
複数の選択肢から、ランダムに1つを選びます。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
public class RandomSelection : MonoBehaviour { public string[] actions = { "攻撃", "防御", "回復", "逃げる" }; public string SelectRandomAction() { // 配列のインデックスをランダムに選択 int randomIndex = Random.Range(0, actions.Length); return actions[randomIndex]; } } |
ランダムな位置生成
オブジェクトをランダムな位置に配置します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class RandomPositionSpawner : MonoBehaviour { public GameObject prefab; public float spawnRange = 10f; void Start() { // ランダムな位置を生成 float randomX = Random.Range(-spawnRange, spawnRange); float randomZ = Random.Range(-spawnRange, spawnRange); Vector3 spawnPosition = new Vector3(randomX, 0, randomZ); Instantiate(prefab, spawnPosition, Quaternion.identity); } } |
シード値の設定
再現可能な乱数生成のために、シード値を設定できます。
|
1 2 3 4 5 6 |
// シード値を設定 Random.InitState(12345); // 同じシード値なら、同じ乱数列が生成される float random1 = Random.Range(0f, 100f); |
Random.Stateの保存
乱数の状態を保存して、後で復元できますね。
|
1 2 3 4 5 6 7 8 9 10 11 |
Random.State savedState = Random.state; // 乱数を生成 float random1 = Random.Range(0f, 100f); // 状態を復元 Random.state = savedState; // 同じ乱数が生成される float random2 = Random.Range(0f, 100f); |

まとめ

この記事では、一様乱数をゲームで使う理由について見てきました。
重要なポイントをおさらいします。
- 一様乱数は、すべての値が同じ確率で出現する乱数
- 公平な抽選やランダムな選択に適している
- UnityのRandom.Rangeで簡単に生成できる
- アイテムドロップ率や確率計算に活用できる
- シード値を設定すれば、再現可能な乱数生成ができる
一様乱数は、ゲーム開発で頻繁に使われる重要な技術です。
公平な抽選やランダムな選択を実現すれば、ゲームの楽しさを向上させます。
確率計算を簡単に実装できるため、様々な場面で活用できますね。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、乱数と確率を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント