ゲームにランダム要素を取り入れたい。
でも、どうやって実装すればいいのか分からない。
実は、乱数を使うことで、ゲームに予測不可能性と楽しさを加えられます。
乱数は、コンピュータが生成する、一見ランダムに見える数値です。
ゲーム開発では、ドロップ率や抽選、AIの行動決定など、様々な場面で使われます。
この記事では、乱数をゲームで使う考え方について、Unity実装例とともに解説します。
- 乱数をゲームでどう使えばいいか分からない…
- ランダム要素を実装したいが、方法が理解できていない。
- 確率計算で乱数を使いたい。
✨ この記事でわかること
- 乱数の基本概念とゲームでの役割
- 確率計算への応用方法
- ドロップ率や抽選の実装
- AIの行動決定への活用
- 初心者でも理解できる乱数の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
乱数とは何か(ゲーム制作目線)

乱数は、予測不可能な数値の列です。
コンピュータで生成される乱数は、厳密には「疑似乱数」と呼ばれます。
一定のアルゴリズムで生成されますが、十分にランダムに見えます。
乱数の特徴は、予測不可能性と再現性です。
シード値を設定すれば、同じ乱数列を再現できます。
ゲーム開発では、UnityのRandomクラスで簡単に生成できますね。
ゲームでの具体的な使い道

乱数が、ゲームでどう使われているか確認してみましょう。
アイテムドロップ率
敵を倒したときに、アイテムがドロップする確率を計算します。
レアアイテムほど低い確率で、乱数を使って判定します。
ダメージ値の変動
攻撃のダメージ値を、一定の範囲でランダムに変動させます。
最小値と最大値の間で、乱数を使って値を決定します。
敵の行動パターン
敵の行動を、複数のパターンからランダムに選択します。
毎回同じ行動を取らないようにして、ゲームの楽しさを向上させます。
ランダムな位置生成
敵の出現位置や、アイテムの配置位置をランダムに生成します。
毎回異なる配置にすれば、ゲームの変化を生み出します。
抽選システム
ガチャや宝箱など、抽選システムで乱数を使います。
各アイテムの出現確率に応じて、乱数で判定します。
- アイテムドロップ率の計算
- ダメージ値の変動
- 敵の行動パターンの選択
- ランダムな位置生成
- 抽選システム(ガチャ、宝箱など)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

乱数の生成は、「シード値 → 乱数生成アルゴリズム → 乱数列」という流れで実現できます。
シード値
乱数生成の初期値です。
同じシード値なら、同じ乱数列が生成されます。
乱数生成アルゴリズム
線形合同法やメルセンヌツイスターなど、様々なアルゴリズムがあります。
UnityのRandomクラスも、疑似乱数生成アルゴリズムを使用しています。
乱数列の生成
アルゴリズムに基づいて、乱数列が生成されます。
十分に長い周期を持つアルゴリズムが使われます。
確率への変換
生成された乱数を、確率に変換します。
例えば、0から100の範囲で5未満なら、5%の確率に対応します。
- 乱数は、予測不可能な数値の列
- シード値を設定すれば、再現可能な乱数生成ができる
- 確率計算に応用できる
- ゲームの楽しさを向上させる重要な要素
Unityで実装する際の注意点(代表例)

Unityで乱数を使う場合の注意点を見ていきましょう。
基本的な乱数生成
UnityのRandomクラスを使った、基本的な乱数生成です。
|
1 2 3 4 5 6 7 8 9 |
// 整数の乱数(0以上10未満) int randomInt = Random.Range(0, 10); // 浮動小数点数の乱数(0.0以上1.0未満) float randomFloat = Random.Range(0f, 1f); // 真偽値のランダム生成 bool randomBool = Random.value < 0.5f; |
確率計算の実装
乱数を使って、確率計算を実装します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class ProbabilityCalculator : MonoBehaviour { public bool CheckProbability(float probability) { // 0から100の範囲で乱数を生成 float randomValue = Random.Range(0f, 100f); // 確率と比較 return randomValue < probability; } void Start() { // 30%の確率で成功 if (CheckProbability(30f)) { Debug.Log("成功!"); } else { Debug.Log("失敗"); } } } |
重み付き抽選の実装
各アイテムに重みを設定して、抽選を行います。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
[System.Serializable] public class WeightedItem { public string name; public float weight; // 重み } public class WeightedRandomSelection : MonoBehaviour { public WeightedItem[] items; public string SelectRandomItem() { // 総重みを計算 float totalWeight = 0f; foreach (var item in items) { totalWeight += item.weight; } // 乱数を生成 float randomValue = Random.Range(0f, totalWeight); // 重みに応じて選択 float currentWeight = 0f; foreach (var item in items) { currentWeight += item.weight; if (randomValue < currentWeight) { return item.name; } } return items[items.Length - 1].name; } } |
シード値の設定
再現可能な乱数生成のために、シード値を設定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class SeededRandom : MonoBehaviour { void Start() { // シード値を設定 Random.InitState(12345); // 同じシード値なら、同じ乱数が生成される float random1 = Random.Range(0f, 100f); float random2 = Random.Range(0f, 100f); Debug.Log($"Random 1: {random1}, Random 2: {random2}"); } } |
配列やリストからのランダム選択
配列やリストから、ランダムに要素を選択します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class RandomArraySelection : MonoBehaviour { public string[] items = { "アイテム1", "アイテム2", "アイテム3" }; public string GetRandomItem() { // ランダムなインデックスを生成 int randomIndex = Random.Range(0, items.Length); return items[randomIndex]; } public T GetRandomItemFromList(List list) { if (list.Count == 0) return default(T); int randomIndex = Random.Range(0, list.Count); return list[randomIndex]; } } |
ランダムな方向の生成
ランダムな方向ベクトルを生成します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class RandomDirection : MonoBehaviour { public Vector3 GetRandomDirection() { // ランダムな方向ベクトルを生成 float angle = Random.Range(0f, 360f) * Mathf.Deg2Rad; return new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)); } public Vector3 GetRandomDirection3D() { // 3D空間でのランダムな方向 return Random.onUnitSphere; } } |

まとめ

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





コメント