- 強化学習(RL)最大のボトルネックだった「報酬関数の設計」を、LLM(Claude / ChatGPT)が代わりにやれる時代に入った。
- Unity ML-AgentsはCPU学習対応。クラウドGPUもNVIDIA GPUも不要。ローカルPCだけで始められる。
- 報酬関数の生成だけでなく、自動プレイテスト、難易度調整、模倣学習のデモ設計まで — LLM×RLの使い道は7つある。
「強化学習って面白そうだけど、自分には無理だ」。ゲーム開発者なら一度はそう思ったことがあるはずだ。
NPCが自分で歩き方を学ぶ。敵が勝手に戦術を覚える。そんな話を聞くと興奮する。でも実際に作ろうとすると、最初に「報酬関数」という壁にぶつかる。何を褒めて、何を罰するか。その数式を自分で書けないと、強化学習は始まらない。ここが地獄だった。
だが2026年、その前提が崩れ始めた。
試しにClaudeに「プレイヤーを追いかけるけど5m以内に入らず、視界の端に留まって圧をかける敵AIの報酬関数を書いて」と頼んでみた。出てきたのは、7つの報酬要素を持つ構造化されたC#コードだった。しかも各要素にコメント付き。調整ポイントまで明示されている。
これを見て思った。あ、これでもうRLは始められる。
そもそも強化学習の何が難しかったのか
強化学習(Reinforcement Learning)は、AIが環境の中で試行錯誤しながら行動を学ぶ仕組みだ。ゲームでは、敵AI、味方AI、車両制御、ボスの移動パターンなどに使える。
仕組み自体はシンプルだ。「良い行動には報酬を与え、悪い行動には罰を与える。AIはより多くの報酬を得る行動を学習していく」。犬のしつけと同じ原理である。
問題は、その「何が良い行動か」を数式で定義することだ。これが報酬関数であり、RL最大のボトルネックだった。
たとえば「プレイヤーを追い詰める敵」を作りたいとする。従来はこう書いていた。
// 従来: 開発者が手探りで数値を調整する
public override void OnActionReceived(ActionBuffers actions)
{
float distToPlayer = Vector3.Distance(transform.position, player.position);
// 近づいたら加点...でもどれくらい?0.1?0.01?
AddReward(0.1f * (previousDist - distToPlayer));
// 近すぎたら減点...閾値は3m?5m?係数は?
if (distToPlayer < 3f) AddReward(-0.5f);
// 壁にぶつかったら減点
if (hitWall) AddReward(-1.0f);
// 視界に入ってたら加点...角度計算は?dot productの使い方は?
// ...ここから地獄の調整が始まる
// 報酬の比率が間違うと、敵は壁に突っ込み続ける
}
見てわかる通り、コメントが疑問符だらけだ。「0.1でいいのか?」「閾値は3mか5mか?」「報酬の比率はどう決める?」。これに正解はない。試行錯誤で調整するしかなく、1回の学習に数時間かかる。報酬が偏ると、敵はプレイヤーを追うどころか壁の角で永遠に回転し始める。
つまり、従来のRLの現実はこうだった。
| 項目 | 従来の現実 |
|---|---|
| 導入ハードル | 環境構築、学習設定、報酬設計が全部重い |
| 必要な知識 | ゲーム開発+ML。片方だけでは足りない |
| 失敗パターン | 報酬が偏る→敵が壁で回転→原因が見えない→数週間溶ける |
| インディー適性 | 「面白いが手を出してはいけない技術」だった |
実際にClaudeに報酬関数を書かせてみた — Before / After
では、2026年はどう違うのか。実際にやってみた。
Claudeに出したプロンプトはこれだ。
Unity ML-Agents 4.0で使える報酬関数を書いて。
敵AIの条件:
・プレイヤーを追いかけるが、距離5m以内には入らない
・常にプレイヤーの視界の端(横や後ろ)に留まって圧をかける
・障害物にぶつからない
・動きは滑らかで、急旋回しない
C#のOnActionReceivedメソッドとして書いて。各報酬の意図もコメントで説明して。
出てきたのが、以下のコードだ。
// LLM生成: 「圧をかける敵AI」の報酬関数
// Unity ML-Agents 4.0 対応
public override void OnActionReceived(ActionBuffers actions)
{
float distToPlayer = Vector3.Distance(transform.position, player.position);
Vector3 dirToEnemy = (transform.position - player.position).normalized;
Vector3 playerForward = player.forward;
// --- 1. 距離維持報酬: 5~10mの「圧ゾーン」に留まる ---
// 理想距離7.5m、ガウス分布で滑らかに評価
float idealDist = 7.5f;
float distReward = Mathf.Exp(-0.1f * Mathf.Pow(distToPlayer - idealDist, 2));
AddReward(0.3f * distReward);
// → 7.5m付近で最大報酬。近すぎても遠すぎても減衰
// --- 2. 近すぎペナルティ: 5m以内は強い罰 ---
if (distToPlayer < 5f)
{
AddReward(-0.5f * (1f - distToPlayer / 5f));
// → 0mで-0.5、5mで0。線形に罰が強くなる
}
// --- 3. 視界の端ボーナス: プレイヤーの横〜後ろに回る ---
float dotProduct = Vector3.Dot(playerForward, dirToEnemy);
// dotProduct: 1=正面、0=真横、-1=真後ろ
float flanking = 1f - Mathf.Abs(dotProduct);
AddReward(0.2f * flanking);
// → 正面や真後ろより、横にいる方が高報酬
// --- 4. 正面ペナルティ: 真正面は「見つかりすぎ」 ---
if (dotProduct > 0.8f && distToPlayer < 10f)
{
AddReward(-0.15f);
// → 近距離で正面に立つのは圧ではなく脅威。罰で回避
}
// --- 5. 壁衝突ペナルティ ---
if (hitWall)
{
AddReward(-1.0f);
}
// --- 6. 滑らかさ報酬: 急旋回を罰する ---
float angularChange = Mathf.Abs(previousYaw - transform.eulerAngles.y);
if (angularChange > 180f) angularChange = 360f - angularChange;
float smoothness = 1f - Mathf.Clamp01(angularChange / 45f);
AddReward(0.1f * smoothness);
// → 1フレームで45度以上回転すると報酬0。滑らかなほど高報酬
// --- 7. 存在報酬: 生存ボーナス ---
AddReward(0.01f);
// → 何もしないで死ぬより、動き続ける方向に誘導
previousDist = distToPlayer;
previousYaw = transform.eulerAngles.y;
}
このコードの何がすごいのか
「コードが出てきただけじゃないか」と思うかもしれない。だが、従来の手書きと比較すると決定的な差がある。
| 観点 | 従来(手書き) | LLM生成 |
|---|---|---|
| 報酬の数 | 2〜3個、足りない | 7つの要素が構造化されている |
| 数学的手法 | if文と定数の羅列 | ガウス分布、dot product、線形補間を適切に使用 |
| 意図の説明 | コメントが「?」だらけ | 各報酬の意図と調整ポイントが明記 |
| 調整しやすさ | 何を変えたらどうなるか不明 | idealDistを変えれば圧の距離感、45fを変えれば旋回の鋭さ、と明確 |
| 所要時間 | 数日〜数週間 | 30秒 |
重要なのは、LLMが出すのは「完璧な報酬関数」ではないということだ。これは「調整可能な出発点」である。ゼロから手書きする地獄がなくなり、「ここの数値を変えたらどうなるか」を試す段階から始められる。この差は、インディー開発者にとって決定的だ。
研究でも証明されている — Eureka、Text2Rewardの衝撃
「Claudeに書かせたらそれっぽいコードが出た」だけでは説得力が弱い。だが、この方向性は研究でも裏付けられている。
NVIDIAが発表したEureka(ICLR 2024)は、GPT-4を使って報酬関数を自動生成し、評価結果をまたGPT-4にフィードバックして改善するシステムだ。つまり「LLMが報酬を書く→試す→直す」を全自動で回す。
| 指標 | 結果 |
|---|---|
| 評価タスク数 | 29タスク、10種のロボット形態 |
| 人間の専門家との比較 | 83%のタスクで人間を上回った |
| 平均改善率 | 52% |
Text2Reward(ICLR 2024 Spotlight)は、自然言語のタスク説明から密な報酬コードを自動生成する。17タスク中13で人間設計と同等以上、ロコモーション6種で94%以上の成功率。
2025年にはさらに加速。CARDはLLM駆動のCoderとEvaluatorが人間フィードバックなしで報酬を反復改善。LEARN-Optは環境のソースコードすら不要で、テキスト説明だけからEureka同等の性能を達成した。
つまり、さっきClaudeにやらせた「自然言語で頼んで報酬関数を出す」は、遊びではなく、最先端の研究が有効性を証明している手法だ。
実際のゲームではもう使われている
研究だけではない。2026年のGDCで、RLが実ゲームに入っている具体例が2つ話題になった。
ARC Raiders(Embark Studios)は、GDC 2026の講演で、敵ロボットの移動をRLで学習させていることを発表した。敵は複数の「brain」を持ち、移動・追跡・バランス制御をRLで獲得する。
ただし重要な点がある。RLが担当しているのは「移動」だけだ。攻撃、行動選択、モード切替は従来のスクリプトAI。さらに、物理だけでは破綻する場面では「magic torque」という補助力を使い、その使用自体にペナルティを課して「最後の手段」として制御している。
EA SPORTS FC 26のゴールキーパーAIも同様だ。GDC 2026で「designer-first reinforcement learning」を掲げた。RL研究者ではなく、ゲームデザイナーが調整しやすい形でRLを組み込んでいる。
プロの答えは明確だ。
- 全部をRLにしない。ルール化しにくい部分(移動、物理挙動、スポーツ挙動)だけをRLに任せる
- 行動選択、演出、ゲーム進行は従来AIが握る
- つまりハイブリッドが現実解
GPUもクラウドもいらない — CPU学習という現実
「RLは高スペックGPUがないと動かない」。これはよくある誤解だ。
Unity ML-Agentsの学習はCPUだけで動く。実際、ML-Agentsの公式GitHub Issuesを見ると「GPUが使われていない」という報告が多数あるが、それはバグではない。小〜中規模のRL学習において、ボトルネックはGPUではなくシミュレーションの並列数(Unityの同時実行環境数)だからだ。
学習コマンドも明示的にCPU指定ができる。
mlagents-learn config.yaml --run-id=enemy_ai --torch-device=cpu
つまりこういうことだ。
| よくある誤解 | 実際 |
|---|---|
| NVIDIA GPUがないとRLできない | ML-AgentsはCPU学習対応。Radeonでも問題なし |
| クラウドGPUを借りる必要がある | 小規模タスク(追跡、回避、追従)ならローカルCPUで十分 |
| 学習に何日もかかる | 1エージェント・1行動のシンプルなタスクなら数時間で収束 |
| Unity以外に大量のツールが必要 | Unity + Python(PyTorch)+ ML-Agentsパッケージ。全部無料 |
インディーにとって重要なのは、「始めるのにお金がかからない」ということだ。Unity ML-Agentsはオープンソース。Pythonも無料。学習はCPUで回る。必要なのはPCと時間だけだ。
インディーがLLM×RLを使える7つの場面
報酬関数の生成は入口にすぎない。LLM×RLの組み合わせが実際に活きる場面は、もっと広い。3つのAI(Claude、ChatGPT、Gemini)に「インディーが今すぐ使えるユースケース」を出させ、自分の調査と合わせて整理した結果が以下だ。
1. 報酬関数の自動生成・改善
LLMの役割: 自然言語(例:「慎重に距離を取る敵」)→ 報酬関数コード生成
RLの役割: その報酬でエージェントを学習
この記事のBefore/Afterデモがまさにこれ。ML-AgentsのAddReward()をLLMに書かせるだけで始められる。学習結果を見せて「もっと回避を重視させたい」と追加指示すれば、LLMが報酬の重みを調整してくれる。
2. 敵AIの行動デザイン → 学習
LLMの役割: 敵の性格・戦術(例:ヒット&アウェイ)をルール化し、報酬構造に変換
RLの役割: 最適な動きに収束させる
「こういう敵にしたい」をプロンプトで書くだけで、報酬+学習設定の叩き台が出る。特にBehavior Tree等の条件分岐で書きづらい「距離の取り方」「回り込み方」のような滑らかな物理的行動に強い。
3. 自動プレイテスト — テスト人員ゼロでもバグを見つける
LLMの役割: テスト観点(詰み、無限ループ、クリア不能等)を生成
RLの役割: 実際に何千回もプレイして問題箇所を発見
研究レベルではSMART(2025年)がコード差分をAST解析し、変更に応じたテスト行動をRLに指示。94%コードカバレッジ、98%タスク完了率を達成。TITANは商用ゲームQAの8タイトルに実導入済み。小規模チームほどQA専任を置けないので、この自動化の価値は大きい。
4. 難易度の自動調整(DDA)
LLMの役割: 難易度指標(死亡率、クリア時間、操作量)の設計
RLの役割: プレイヤーの腕前に合わせて敵の強さや配置を学習
最近の研究では、LLMエージェント自体がゲーム難易度の測定器として使えることも判明している。LLMにゲームを遊ばせて、そのクリア率が人間プレイヤーの感じる難易度と相関するという結果が出ている。つまりプレイテスターがいなくても、難易度の目安が取れる。
5. 模倣学習のデモ設計・補助
LLMの役割: 人間っぽいプレイ方針(安全重視、攻撃重視等)を言語化し、デモ設計を支援
RLの役割: Behavior Cloning(BC)やGAILで、人間のプレイを模倣して初期学習を高速化
Unity ML-AgentsにはBC(Behavioral Cloning)とGAIL(Generative Adversarial Imitation Learning)が標準搭載されている。開発者が数分〜数時間のプレイを.demoファイルとして録画するだけで、NPCが「人間っぽい」動きを学習する。デモ6エピソード分の録画で、学習ステップを4分の1以下に短縮できることが公式ドキュメントで確認されている。
6. ステージ検証AI — クリア不能を事前検出
LLMの役割: 攻略ルール(例:右壁沿い優先、ジャンプタイミング)を設計
RLの役割: 最短ルートや安定攻略を学習し、クリア不能ステージを検出
レベルデザインの検証に使える。新しいステージを作るたびに「このステージはクリアできるか?」をRLエージェントに確認させれば、リリース前に詰みを防げる。
7. 学習ログの分析・改善提案
LLMの役割: 学習ログ(TensorBoard出力やcumulative reward推移)を解析し、問題点を言語化
RLの役割: 改善された報酬で再学習
「報酬は上がっているのに行動がおかしい」「学習が途中で止まった」。こういう場面でLLMにログを食わせると、「報酬のスパース性が高すぎる」「探索が不足している — entropy_coeffを上げろ」といった具体的な改善提案が返ってくる。ML知識がない開発者にとって、この翻訳機能は強い。
これらをまとめると、LLM×RLの役割分担はこうだ。
| LLMの仕事 | RLの仕事 |
|---|---|
| 設計する(報酬関数、テスト観点、難易度指標) | 最適化する(行動の収束、パラメータ調整) |
| 翻訳する(自然言語 → コード、ログ → 改善案) | 探索する(何千回もプレイして最適解を見つける) |
| 分析する(学習ログの問題点を言語化) | 実行する(実際にゲーム環境内で行動する) |
LLMは「頭脳」、RLは「身体」。この組み合わせが、インディーのRL導入ハードルを一気に下げる。
インディーが今すぐ始めるなら
まとめると、2026年にインディーがRLを始める現実的なステップはこうだ。
- Unity ML-Agents 4.0をインストール(Unity 6000対応、PPO/SAC/MA-POCA/self-play/BC/GAIL対応)
- 「追いかける」「避ける」「障害物を越える」など1機能だけを対象にする
- 報酬関数の初期案をClaude / ChatGPTに書かせる
- CPU学習で回す(
--torch-device=cpu)。数時間で結果が出る - 学習ログをLLMに見せて改善案を出させる。報酬を直して再学習
- 動きだけRL、攻撃や状態遷移は従来AIで制御する
費用はゼロだ。Unity ML-Agentsは無料。Pythonは無料。LLMはClaude/ChatGPTの無料枠でも十分。学習はローカルPCのCPUで回る。NVIDIA GPUもクラウドも不要。
おすすめの最初の題材はこのあたりだ。
- 追跡ロボットの歩行・追従
- ペットや仲間NPCの追従行動
- 障害物回避
- 車両やドローンの移動制御
- 自動プレイテスト用の探索エージェント
逆に、いきなり「敵AI全部」「会話も戦闘も判断も全部学習」は確実に破綻する。ARC Raidersですら移動だけをRL化している。1機能だけから始めるべきだ。
筆者の本音:報酬関数の壁がなくなっただけで世界が変わる
筆者(uc)がこの記事を書いたのは、純粋に自分が知りたかったからだ。
強化学習には前からずっと興味があった。NPCが自分で歩き方を覚える。ルールベースでは出せない「生っぽさ」。あの感じに惹かれていた。でも、報酬関数の設計がわからなくて手を出せなかった。「0.1と0.05、どっちが正解?」「そもそもこの報酬構造で合ってる?」。その疑問に答えてくれる人が周りにいなかった。
だから、実際にClaudeに報酬関数を書かせてみて、7つの要素が構造化されたコードが返ってきたとき、率直に「これでいいじゃん」と思った。完璧ではない。でも、ゼロから始める地獄と、調整可能な出発点がある状態は、天と地の差だ。
もちろん、全部AIに丸投げするのが正しいとは思わない。報酬設計の出発点はAIに作らせるが、「どういう敵が面白いか」「プレイヤーが緊張するのはどの距離か」「気持ちよさと理不尽さの境界はどこか」。これは人間の仕事だ。ゲームデザインの核は、依然として開発者の手にある。
LLMは報酬関数を書けるようになった。ツールは揃った。しかもGPUもクラウドも不要だ。 足りなかったのは「最初の一歩」で、その壁がなくなった。2026年は、インディーが初めてRLに手を出せる現実的な年だ。
まとめ
強化学習の最大のボトルネックは、アルゴリズムでもGPUでもなく、報酬関数の設計だった。何を褒めて何を罰するか、その数式を手書きできる人だけの技術だった。
2025〜2026年、LLMがその壁を壊した。自然言語で「こういう敵にしたい」と書けば、構造化された報酬コードが出てくる。NVIDIAのEurekaは人間の専門家を83%上回り、Text2Rewardは94%以上の成功率を示した。
使い道は報酬生成だけじゃない。敵AIの行動設計、自動プレイテスト、難易度調整、模倣学習の設計補助、ステージ検証、学習ログの分析。LLMが「設計と翻訳」を担い、RLが「最適化と探索」を担う。この組み合わせがインディーのRL導入コストを劇的に下げる。
しかも、Unity ML-AgentsはCPUだけで学習できる。NVIDIA GPUもクラウドも不要。ローカルPCと時間があれば始められる。
結論はシンプルだ。全部を置き換えようとするな。1機能だけ学習させろ。報酬関数はLLMに書かせろ。そしてGPUのことは忘れろ。
参考ソース
- NVIDIA Eureka — Human-Level Reward Design via Coding Large Language Models
- Text2Reward — Reward Shaping with Language Models(ICLR 2024 Spotlight)
- CARD: LLM-Driven Reward Design Framework(arXiv)
- LEARN-Opt: ソースコード不要の報酬関数設計(arXiv)
- ARC Raiders — RLはロコモーションのみ(PC Gamer)
- SMART: LLM-Guided RL Game Playtesting(arXiv)
- TITAN: LLM Agents for Automated Video Game Testing(arXiv)
- LLMs as Game Difficulty Testers(ACM)
- Unity ML-Agents 4.0 ドキュメント
- ML-Agents: CPU vs GPU Training(GitHub Issue)
- ML-Agents Self-Play Training(Unity Blog)
- Claude and Cursor: Building Reinforcement Learning(Medium, Jan 2026)
- Awesome LLM Game Agent Papers(GitHub)



コメント