ゲームの敵キャラクターにAIを実装したいけど、どんな数学が必要なのか分からない。
確率や乱数は使うけど、どう計算すればいいのか。
状態遷移や評価関数って、何なのか。
実は、ゲームAIには確率・状態管理・評価関数などの数学的考え方が欠かせません。
これらを理解すれば、より高度なAIを実装できます。
この記事では、ゲームAIに必要な数学を、Unity実装例とともに解説します。
- ゲームAIに必要な数学が分からない…
- 確率や乱数を使ったAIの実装方法が理解できていない。
- 状態遷移や評価関数の使い方を知りたい。
✨ この記事でわかること
- ゲームAIに必要な数学の基本概念
- 確率と乱数を使ったAI実装
- 状態遷移と状態管理の考え方
- 評価関数を使った意思決定
- 初心者でも理解できるAI数学の基礎
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
ゲームAI数学とは何か(ゲーム制作目線)

ゲームAI数学は、ゲームのAI実装に必要な数学的な考え方や手法です。
単純な条件分岐だけでなく、確率・状態管理・評価関数などの数学的手法を使うことで、より自然で高度なAIを実現できます。
ゲームAIでよく使われる数学には、確率論、状態遷移、評価関数、パスファインディングなどがあります。
これらの基礎を理解すれば、様々なAIパターンを実装できます。
ゲームでの具体的な使い道

ゲームAI数学が、ゲームでどう使われているか確認してみましょう。
確率を使った行動選択
敵キャラクターが複数の行動から選択する場合、確率を使って選択します。
例えば、攻撃70%、防御20%、逃走10%のような確率分布で行動を決定します。
状態遷移による行動制御
敵キャラクターが「待機」「追跡」「攻撃」「逃走」などの状態を持ち、状況に応じて状態を遷移させます。
状態遷移図や状態マシンを使って、AIの行動を管理します。
評価関数による意思決定
複数の選択肢の中から最適なものを選ぶ際、評価関数を使って各選択肢を評価します。
評価値が最も高い選択肢を選ぶことで、最適な行動を決定します。
乱数を使ったランダム要素
AIの行動にランダム性を持たせることで、予測不可能な動きを実現します。
ドロップ率や、行動の確率分布に乱数を使います。
- 確率を使った行動選択(攻撃・防御・逃走など)
- 状態遷移による行動制御(待機・追跡・攻撃など)
- 評価関数による意思決定(最適な行動の選択)
- 乱数を使ったランダム要素(ドロップ率、行動の確率分布)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

ゲームAI数学は、確率・状態管理・評価関数を組み合わせてAIを実装します。
確率を使った行動選択
確率分布を使って、複数の行動から1つを選択します。
例えば、Random.Range(0f, 1f)で0〜1の乱数を生成し、確率の範囲に応じて行動を決定します。
状態遷移の考え方
AIは複数の状態を持ち、条件に応じて状態を遷移させます。
状態ごとに実行する処理が異なり、状態遷移図で全体の流れを管理します。
評価関数の計算
複数の選択肢に対して、評価関数を使って各選択肢の価値を計算します。
評価値が最も高い選択肢を選ぶことで、最適な行動を決定します。
乱数の生成
UnityのRandom.RangeやRandom.valueを使って、一様乱数や確率分布に基づいた乱数を生成します。
- 確率を使って複数の行動から選択する
- 状態遷移でAIの行動を制御する
- 評価関数で最適な行動を決定する
- 乱数を使ってランダム要素を実装する
Unityで実装する際の注意点(代表例)

UnityでゲームAI数学を実装する場合の注意点を見ていきましょう。
確率を使った行動選択
確率分布を使って、行動を選択する実装です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public enum Action { Attack, Defend, Flee } public Action SelectAction() { float random = Random.Range(0f, 1f); if (random < 0.7f) return Action.Attack; // 70%の確率 else if (random < 0.9f) return Action.Defend; // 20%の確率 else return Action.Flee; // 10%の確率 } |
状態遷移の実装
enumとswitch文を使って、状態遷移を実装する例です。
|
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 |
public enum AIState { Idle, Chase, Attack, Flee } private AIState currentState = AIState.Idle; void Update() { switch (currentState) { case AIState.Idle: // 待機処理 if (CanSeePlayer()) currentState = AIState.Chase; break; case AIState.Chase: // 追跡処理 if (IsInAttackRange()) currentState = AIState.Attack; else if (IsLowHealth()) currentState = AIState.Flee; break; case AIState.Attack: // 攻撃処理 break; case AIState.Flee: // 逃走処理 break; } } |
評価関数を使った意思決定
評価関数を使って、最適な行動を選択する例です。
|
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 |
public Vector3 SelectBestPosition() { Vector3[] candidatePositions = GetCandidatePositions(); Vector3 bestPosition = candidatePositions[0]; float bestScore = EvaluatePosition(bestPosition); foreach (Vector3 pos in candidatePositions) { float score = EvaluatePosition(pos); if (score > bestScore) { bestScore = score; bestPosition = pos; } } return bestPosition; } float EvaluatePosition(Vector3 position) { float score = 0; score += GetDistanceScore(position); // 距離による評価 score += GetCoverScore(position); // カバーによる評価 score += GetSafetyScore(position); // 安全性による評価 return score; } |
乱数を使ったランダム要素
乱数を使って、ランダムな行動を生成する例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 一様乱数 float randomValue = Random.Range(0f, 1f); // 整数の乱数 int randomInt = Random.Range(0, 10); // リストからランダムに選択 List<Transform> targets = GetTargets(); Transform randomTarget = targets[Random.Range(0, targets.Count)]; // 確率に基づいた選択 bool ShouldAttack() { float attackProbability = 0.7f; return Random.value < attackProbability; } |
確率分布の実装
重み付き確率分布を実装する例です。
|
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 |
public enum ItemType { Common, Rare, Epic, Legendary } public ItemType GetRandomItem() { float[] weights = { 50f, 30f, 15f, 5f }; // 重み float totalWeight = 0; foreach (float w in weights) totalWeight += w; float random = Random.Range(0f, totalWeight); float currentWeight = 0; for (int i = 0; i < weights.Length; i++) { currentWeight += weights[i]; if (random <= currentWeight) return (ItemType)i; } return ItemType.Common; } |

まとめ

この記事では、ゲームAIに必要な数学について見てきました。
重要なポイントをおさらいします。
- ゲームAI数学は、確率・状態管理・評価関数などの数学的手法を使う
- 確率を使って複数の行動から選択する
- 状態遷移でAIの行動を制御する
- 評価関数で最適な行動を決定する
- 乱数を使ってランダム要素を実装する
ゲームAI数学は、より自然で高度なAIを実装する上で欠かせません。
確率、状態遷移、評価関数などの考え方を組み合わせることで、様々なAIパターンを実現できます。
まずは基本的な確率を使った行動選択から始めて、徐々に状態遷移や評価関数を学んでいきましょう。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、ゲームAI数学を含む確率と乱数を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント