Unity ML-Agents(ML-Agents Toolkit)は、Unityのシーンを学習環境にして、キャラクターやロボットの行動を強化学習・模倣学習で学ばせるUnity公式のオープンソースです。2026年10月時点の現行版はUnityパッケージ com.unity.ml-agents 4.1.0(2026年7月29日公開)で、Unity 6(6000.0)以上が必須になりました。
つまずきやすいのはPython側です。PyPIの mlagents 1.1.0をそのまま入れるとPyTorch 2.9以降が入って.onnxの書き出しが失敗し、setuptools 82以降では mlagents-learn が起動しません。この記事の版指定は、Python 3.10.12のLinuxコンテナ(venvとpip)で.onnxの書き出しまで、Intel版macOSで mlagents-learn の起動まで確かめたものです。
まとめ:Unity ML-Agentsの要点(2026年10月時点)
- 現行版:Unityパッケージは4.1.0(GitHub上の最新リリースはRelease 23=4.0.0)。4.x系はUnity 6000.0以上に対応します。Unity 2022.3では2.x系に加え、Release 21の3.0.0-exp.1も使用できます。
- Python側:Python 3.10.1〜3.10.12、PyTorch 2.1.1〜2.8.0が公式の対応範囲です。PyPIから入れるなら
mlagents==1.1.0に"torch>=2.1.1,<=2.8.0"と"setuptools<81"を併記します。リポジトリのrelease/4.1.0からソースで入れれば、この2つの指定は不要です。 - 学習の流れ:Agentクラスに観測・行動・報酬を書く→設定YAMLを用意→
mlagents-learnを起動してEditorで再生→results/<run-id>/に出る.onnxをAgentに割り当てる、の4段階です。 - 推論:学習済みモデルはUnity内の推論ライブラリSentis(パッケージ名
com.unity.ai.inference)で動きます。2025年に一時Inference Engineと呼ばれ、2.4.0から再びSentisの名前に戻っています。 - トレーナー:
trainer_typeはppo・sac・pocaの3種。迷ったらPPO、協調する複数エージェントならMA-POCAです。 - 制約:学習はEditorとWindows・macOS・LinuxのMonoビルドに限られ、IL2CPPでは学習できません。ML-Agentsのニューラルネットワークによる行動では、公式トレーナーで作成したモデルがサポート対象です。
ML-Agentsの構成:Unityパッケージ・Pythonトレーナー・Sentis
Unity側で環境とエージェントを書き、Python側がPyTorchでニューラルネットワークを学習させ、学習済みモデルはUnityに戻してSentisで推論します。UnityとPythonの間はgRPCで通信します。
| 部品 | 名前 | 役割 |
|---|---|---|
| Unityパッケージ | com.unity.ml-agents |
Agent・センサー・Behavior Parameters |
| Python(通信) | mlagents_envs |
Unity環境の起動・観測・操作 |
| Python(学習) | mlagents |
PPOなどのトレーナーと mlagents-learn |
| 推論ライブラリ | Sentis(com.unity.ai.inference) |
.onnxをゲーム内で実行 |
mlagents_envs はUnityの環境をPythonから起動し、観測を受け取って行動を返す通信ライブラリです。低レベルAPIのほかにGym互換(1エージェント)とPettingZoo互換(複数エージェント)のラッパーを持つので、自前の強化学習コードから環境を動かすならこれだけで足ります。mlagents は公式トレーナーの本体で、入れると mlagents_envs も依存として入ります。
学習のしかたは、ゲームの中で試行錯誤させて報酬を最大化する強化学習が中心です。ほかに、人間が操作した記録(.demoファイル)を手本にする模倣学習(Behavioral Cloning・GAIL)、易しい課題から順に難しくするカリキュラム学習も同じ mlagents-learn から使えます。強化学習そのものの仕組みは強化学習とは?報酬から学ぶ仕組みとQ学習・方策勾配・企業導入の判断を実装目線で解説で扱っています。
ライセンスはApache License 2.0で、商用のゲームやアプリに組み込めます。リポジトリ(Unity-Technologies/ml-agents)は2026年10月27日にも develop ブランチへコミットがあり、開発は続いています。
対応バージョンとリリース履歴:Release 20から4.1.0まで
ML-Agentsは「Release 番号」とパッケージの版番号が別々に付いています。古い解説記事の多くはRelease 18〜21時点のもので、Unityの対応版も推論ライブラリも今とは違います。Unity側とPython側の組み合わせは次のとおりです。
| リリース | 公開日 | Unityパッケージ | Python(PyPI) | 最低Unity | 推論 |
|---|---|---|---|---|---|
| Release 20 | 2022-11-29 | 2.3.0-exp.3 | 0.30.0 | 2021.3 | Barracuda |
| Release 21 | 2023-10-09 | 3.0.0-exp.1 | 1.0.0 | 2022.3 | Sentis 1.2 |
| Release 22 | 2024-10-05 | 3.0.0 | 1.1.0 | 2023.2 | Sentis 2.1 |
| Release 23 | 2025-09-02 | 4.0.0 | 1.1.0を継続 | 6000.0 | Inference Engine 2.2.1 |
| パッケージのみ | 2026-07-29 | 4.1.0 | 1.1.0を継続 | 6000.0 | Sentis 2.6.1 |
日付はGitHubのリリース一覧の公開日と、Unityパッケージレジストリへの登録日です。登録日は変更履歴に書かれた日付と数日から1か月ほどずれます。4.0系は4.0.1(2026年1月)・4.0.2(2月)・4.0.3(4月)と小刻みに更新され、4.1.0ではPython側が gym から後継の gymnasium へ移り、IL2CPPビルドでの Google.Protobuf_Packed.dll の不具合などが直りました。Unity 6.3 LTSの変更点はUnity 6.3 LTS(6000.3)の新機能と変更点|最新パッチ・サポート期限・6.0からの移行にまとめています。
PyPIのmlagents 1.1.0とPyTorchの対応範囲
Unityパッケージは4.1.0まで進んでいますが、PyPIに上がっている mlagents は2024年10月の1.1.0が最後です。リポジトリのPython側の版番号は 1.2.0.dev0 のままで、Release 23以降はPyPIに公開されていません。公式のインストール手順(developブランチ)は2026年10月13日に互換表を追加し、4.0.x・4.1.0にはPyPIの1.1.0を組み合わせるとしています。
| Unityパッケージ | mlagents / mlagents-envs | Python | PyTorch |
|---|---|---|---|
| 4.0.x・4.1.0 | 1.1.0(PyPI) | 3.10.1〜3.10.12 | 2.1.1〜2.8.0 |
問題は、PyPIの1.1.0が依存を torch>=2.1.1 としか書いておらず、上限が無いことです。PyTorch 2.9.0が出た2025年10月に.onnxの書き出し(torch.onnx.export)が落ちる報告があり、リポジトリ側はPR #6251で torch<=2.8.0 に制限しました。この修正も、4.1.0のgymnasium対応やCUDA・CPUのデバイス不一致の修正も、PyPIの1.1.0には入っていません。使うにはソースから入れます。
推論ライブラリの名前:Barracuda・Sentis・Inference Engine
学習済みモデルを動かす推論ライブラリは、名前が3回変わっています。Release 21でBarracudaからSentisへ移り、Sentisは2025年5月の2.2.0でInference Engineに改称、2025年10月の2.4.0で再びSentisという表示名に戻りました。パッケージ名は2.1系までが com.unity.sentis、2.2.0以降は com.unity.ai.inference です。4.0.0の変更履歴にある「Inference Engine 2.2.1」と4.0.3以降の「Sentis 2.6.1」は、同じライブラリの版違いです。
ML-Agentsのインストール手順:Unity 6とPython 3.10.12
インストールはUnity側とPython側を別々に行います。Python側は「PyPIから入れる」と「リポジトリをcloneしてソースから入れる」の2通りで、サンプル環境を使うなら後者になります。
Unity側:Package Managerによるcom.unity.ml-agentsの追加
- Unity HubでUnity 6000.0以上のEditorを入れ、プロジェクトを作ります。
- Window > Package Manager を開き、+ > Add package by name を選びます。
com.unity.ml-agentsと入力して Install を押します。版を固定したいときは、同じ画面の Version (optional) 欄に4.1.0と入力します。
依存関係としてSentis(com.unity.ai.inference 2.6.1)も入ります。4.0.0で拡張パッケージ com.unity.ml-agents.extensions が本体へ統合されたため、Release 22以前の記事にある「extensionsも追加する」手順は不要です。
Python側:PyPI版mlagents 1.1.0の導入
Python側の対応範囲は >=3.10.1,<=3.10.12 です。Python 3.11の環境でpipを使うと No matching distribution found for mlagents==1.1.0 で止まるので、condaなどで3.10.12の環境を別に作り、PyTorchとsetuptoolsの版を指定して入れます。
conda create -n mlagents python=3.10.12
conda activate mlagents
python -m pip install "torch>=2.1.1,<=2.8.0"
python -m pip install mlagents==1.1.0 "setuptools<81"
mlagents-learn --help
Windowsで学習にNVIDIAのGPUを使う場合は、PyTorchをCUDA版の配布元から入れます(pip3 install "torch>=2.1.1,<=2.8.0" --index-url https://download.pytorch.org/whl/cu121)。cu121の配布は2.5.1までなので、この指定では2.5.1が入ります(対応範囲内)。grpcio のホイールのビルドで失敗したときは、conda install "grpcio=1.48.2" -c conda-forge で先に入れてから mlagents を入れ直します。
PyTorchを指定しない場合の版はOSで変わります。2026年10月29日に uv pip compile で mlagents==1.1.0 の依存を解決させると、Linux(x86_64)・Windows・Apple Silicon版のmacOS 14以降では torch 2.14.1、macOS 13では2.11.0になりました。いずれも書き出しが壊れる2.9以降です。Intel版macOSだけはPyTorchの配布が2.2.2で止まっているため、指定しなくても対応範囲に収まります。
LinuxコンテナでPython 3.10.12に mlagents==1.1.0 を入れ、トレーナーと同じ書き出し処理(ModelSerializer.export_policy_model)を観測8・連続行動2の方策で呼んで確かめた結果が次の表です。
| torch | 追加の指定 | .onnxの書き出し |
|---|---|---|
| 2.14.1 | なし | 失敗(onnxscriptが無い) |
| 2.14.1 | onnxscript 0.7.2を追加 | 失敗(mlagentsの読み込みで例外) |
| 2.8.0 | なし | 成功(opset 9) |
2.14.1では ModuleNotFoundError: No module named 'onnxscript' で止まり、PR #6251の報告と同じ症状でした。onnxscriptを後から入れるとonnx 1.23.2・protobuf 7.36.2・numpy 2.2.6が連れて入り、mlagents 1.1.0が固定する onnx==1.15.0・protobuf<3.21・numpy<1.24 と衝突して、読み込みの段階で TypeError: Descriptors cannot be created directly. になります。直し方はPyTorchを2.8.0以下に戻すことだけで、2.8.0では入力 obs_0・出力 continuous_actions などを持つopset 9の.onnxが書き出されました。
setuptools の版指定は公式手順にない回避策です。mlagents 1.1.0は起動時に pkg_resources を読み込みますが、setuptools は82.0.0(2026年2月8日)でこのモジュールを削除しました。新しく作った環境では、tensorboardやPyTorchの依存として最新の setuptools(2026年10月29日時点で84.2.1)が入ることがあり、mlagents-learn が ModuleNotFoundError: No module named 'pkg_resources' で起動しません。81.0.0には残っていますが、非推奨の警告文が81未満への固定を勧めているので <81 にしています。
uvを使う場合は uv venv -p 3.10.12 のように版を明示します。uvは Requires-Python の上限を見ないので、Python 3.11の環境にも mlagents 1.1.0を入れてしまいます。numpy も1.24未満に固定されるため、学習専用の環境を分けます。
Python側とサンプル環境:release/4.1.0からのソース導入
3DBallなどのサンプル環境はUnityパッケージに入っていないので、リポジトリをcloneしてUnity Hubで Project フォルダを開きます。公式手順のclone先は、2026年10月に release_23(4.0.0)から release/4.1.0 へ変わりました。
git clone --branch release/4.1.0 https://github.com/Unity-Technologies/ml-agents.git
cd ml-agents
python -m pip install ./ml-agents-envs
python -m pip install ./ml-agents
ml-agents-envs を先に入れます。順序を逆にすると、同じ開発版の mlagents_envs(1.2.0.dev0)がPyPIに無いため依存関係の解決に失敗します。このブランチのPython側は torch<=2.8.0 の上限を持ち、pkg_resources の代わりに標準ライブラリの importlib.metadata を使うので、PyTorchとsetuptoolsの指定はいりません。2026年10月29日に、PyTorch 2.14.1とsetuptools 84.2.1を先に入れたLinuxコンテナで2つのディレクトリをpipで入れると、PyTorchは2.8.0へ入れ替わり、mlagents-learn --help も.onnxの書き出しも通りました。gymnasiumは1.4.0が入ります。
Python側をソースから入れたら、Unity側も同じcloneの中のパッケージを使うと版がそろいます。Package Managerで + > Add package from disk を選び、com.unity.ml-agents/package.json を指定します。
ML-Agentsで学習させる流れ:Agentスクリプトから.onnxまで
ここでは公式チュートリアルの「RollerBall」(球を転がして箱に届かせる課題)を例に、1体のエージェントを学習させる流れを示します。
Agentクラスで実装するメソッド
MonoBehaviour の代わりに Agent を継承し、エピソード開始時の初期化(OnEpisodeBegin)、観測(CollectObservations)、行動と報酬(OnActionReceived)を書きます。Heuristic はキーボードで動作確認するためのものです。
using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
public class RollerAgent : Agent
{
public Transform target;
public float forceMultiplier = 10f;
Rigidbody rBody;
public override void Initialize()
{
rBody = GetComponent<Rigidbody>();
}
public override void OnEpisodeBegin()
{
// 床から落ちていたら速度を消して中央へ戻す
if (transform.localPosition.y < 0)
{
rBody.angularVelocity = Vector3.zero;
rBody.linearVelocity = Vector3.zero;
transform.localPosition = new Vector3(0, 0.5f, 0);
}
target.localPosition = new Vector3(Random.value * 8 - 4, 0.5f, Random.value * 8 - 4);
}
public override void CollectObservations(VectorSensor sensor)
{
sensor.AddObservation(target.localPosition); // 3
sensor.AddObservation(transform.localPosition); // 3
sensor.AddObservation(rBody.linearVelocity.x); // 1
sensor.AddObservation(rBody.linearVelocity.z); // 1
}
public override void OnActionReceived(ActionBuffers actions)
{
var force = new Vector3(actions.ContinuousActions[0], 0, actions.ContinuousActions[1]);
rBody.AddForce(force * forceMultiplier);
float distance = Vector3.Distance(transform.localPosition, target.localPosition);
if (distance < 1.42f)
{
SetReward(1.0f);
EndEpisode();
}
else if (transform.localPosition.y < 0)
{
EndEpisode();
}
}
public override void Heuristic(in ActionBuffers actionsOut)
{
var continuous = actionsOut.ContinuousActions;
continuous[0] = Input.GetAxis("Horizontal");
continuous[1] = Input.GetAxis("Vertical");
}
}
公式チュートリアルのコードは rBody.velocity を使っていますが、Unity 6(6000.0)のスクリプトリファレンスに載っているのは Rigidbody.linearVelocity です。上のコードはこちらに合わせています。また Input.GetAxis は旧Input Managerの機能なので、Player設定の Active Input Handling が新しいInput Systemだけになっているプロジェクトでは例外になります。その場合は Both にするか、ML-Agentsの InputActuatorComponent を使います。
Behavior ParametersとDecision Requesterの設定
このコードは、空のGameObject(TrainingArea)の下に床・ターゲット・球をまとめる構成を前提にしています。床は位置(0, 0, 0)のPlane、ターゲットは位置(3, 0.5, 3)のCube、エージェントは位置(0, 0.5, 0)のSphereです。球にRigidbodyとRollerAgentを付け、target 欄にCubeを割り当てます。
さらに同じ球に Behavior Parameters と Decision Requester を追加します。RollerBallの設定値は次のとおりです。
| 項目 | 値 | 意味 |
|---|---|---|
| Behavior Name | RollerBall | 設定YAMLのキーと一致させる |
| Vector Observation > Space Size | 8 | AddObservationの合計要素数 |
| Actions > Continuous Actions | 2 | x方向とz方向の力 |
| Behavior Type | Default | 学習側→モデル→Heuristicの順に使う |
| Model | 学習後の.onnx | 推論に使うモデル |
| Inference Device | Default | 推論の実行先(Burstなど) |
| Decision Requester > Decision Period | 10 | 10ステップごとに行動を決める |
Space Sizeは CollectObservations で渡した数値の合計(位置2つで6、速度2成分で2の計8)と一致させます。多ければ超えた分を切り捨て、少なければ0で埋めて、どちらもConsoleに警告を出します。学習は止まらないので、警告を見落とすと誤った観測のまま進みます。学習の前に Behavior Type を Heuristic Only にして再生し、矢印キーで球が動くこと、箱に届くか落ちるとリセットされることを確かめます。
設定YAMLとmlagents-learnの実行
ハイパーパラメータは設定YAMLに書きます。以下の内容を、コマンドを実行するディレクトリ直下のconfigフォルダにrollerball_config.yamlという名前で保存してください。behaviors の直下のキーがBehavior Nameです。batch_size 10・buffer_size 100は、観測8・行動2の小さな課題を速く回すための公式チュートリアルの値で、後述の目安より意図的に小さくしています。
behaviors:
RollerBall:
trainer_type: ppo
hyperparameters:
batch_size: 10
buffer_size: 100
learning_rate: 3.0e-4
beta: 5.0e-4
epsilon: 0.2
lambd: 0.99
num_epoch: 3
learning_rate_schedule: linear
beta_schedule: constant
epsilon_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
max_steps: 500000
time_horizon: 64
summary_freq: 10000
Behavior ParametersのBehavior TypeをHeuristic OnlyからDefaultへ戻してから、ターミナルで mlagents-learn を起動します。待ち受けのメッセージが出たら、60秒以内(--timeout-wait の既定値)にEditorの再生ボタンを押します。
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall
TensorBoardは別のターミナルで、同じ作業ディレクトリから起動します。
conda activate mlagents
tensorboard --logdir results
成果物は results/RollerBall/ に出ます。主なオプションは次の4つです。
--resume:同じrun-idの学習を途中から再開する--force:同じrun-idの成果物を上書きして最初からやり直す--num-envs=2:ビルドした環境を2つ並列に起動する(--envと併用)--no-graphics:ビルドした環境を画面なしで起動する(--envと併用)。サーバーでの学習向けで、カメラ観測は使えない
TensorBoardでは Cumulative Reward を見ます。RollerBallの報酬の最大は1.0なので、1.0に近づけば課題を解けています。学習エリアをプレハブ化して複数並べる(または TrainingAreaReplicator を使う)と、集まる経験が増えて学習が速く進みます。
学習済みモデル(.onnx)で動かすときの確認点
学習を止めると results/RollerBall/RollerBall.onnx が書き出されます。これをProjectウィンドウに入れ、Behavior Parametersの Model 欄に割り当てれば、Sentisが推論してエージェントが動きます。.onnxが無い、または割り当てたのに学習前と同じ動きになるときは、次の4点を確認します。
- PyTorch 2.9以降で学習した:.onnxの書き出しは、チェックポイントの保存(既定の
checkpoint_intervalは500,000ステップごと)と学習の終了時に行われます。それまでは学習が普通に進むので、ターミナルに出たエラーを見ないと気づけません。書き出しの直前に.ptのチェックポイントは保存されているので、PyTorchを2.8.0以下に入れ直したあと--resumeで同じrun-idから再開します。 - Behavior TypeがDefaultのまま
mlagents-learnが動いている:Defaultは、Pythonと接続していれば学習側の指示を優先し、接続が無ければモデル、モデルも無ければHeuristicを使います。モデルの動作を見るときはmlagents-learnを止めるか、Inference Only にします。 - Unityのウィンドウを閉じて学習を終えた:公式手順は、
Saved Modelと表示されたあと、学習プロセスがウィンドウを閉じるのを待つか、ターミナルでCtrl+Cを押して止めるよう求めています。ウィンドウを手で閉じると.onnxが書き出されません。 - 観測や行動の数を学習後に変えた:Space SizeやContinuous Actionsの数を変えると、学習済みモデルの入出力と合わなくなります。変えたら学習し直します。
Inference Onlyにしてモデルを割り当てていないと「Can't use Behavior Type InferenceOnly without a model.」という例外になります。推論デバイスは Burst(CPU)・Compute Shader・Pixel Shader から選べます。公式ドキュメントは、ML-Agentsで作る一般的なモデルならCPUのBurstの方が速く、GPUが有利なのはResNetの画像エンコーダーを使う場合や、カメラ観測を持つエージェントが多い場合だとしています。
ML-Agentsのトレーナーの選び方:PPO・SAC・MA-POCAと模倣学習
設定YAMLの trainer_type に書けるのは ppo(既定)・sac・poca の3つです。模倣学習や好奇心による探索は、トレーナーではなく reward_signals や behavioral_cloning の設定として追加します。
| 設定 | 種類 | 向いている場面 |
|---|---|---|
ppo |
オンポリシー | 最初の1本・並列環境が多い |
sac |
オフポリシー | 1ステップが重い環境 |
poca |
MA-POCA | チームで協調する複数エージェント |
reward_signals: gail |
模倣学習 | 手本(.demo)の動きに寄せる |
behavioral_cloning |
模倣学習 | 手本で学習初期を補助する |
reward_signals: curiosity / rnd |
内発的報酬 | 報酬がまれにしか出ない課題 |
PPOは集めた経験をnum_epochの回数だけ学習に使って破棄するので、並列環境で経験を多く集めるほど有利です。SACは過去の経験をバッファに貯めて使い回すので、1ステップの計算が重く経験を集めにくい環境でサンプル効率が上がります。バッチサイズの目安も公式は分けていて、連続行動のPPOは512〜5120、連続行動のSACは128〜1024、離散行動は32〜512です。
サッカーのように味方と協力する課題では、各エージェントを独立にPPOで学習させるとチームへの貢献を評価できません。MA-POCAはグループ全体を評価するcriticを1つ持ち、チームにまとめて報酬(SimpleMultiAgentGroup)を与えます。途中で退場したエージェントもその後の勝敗から貢献を学ぶので、自分が倒れてでもチームを勝たせる行動を覚えます。PPOの目的関数とLLMの選好最適化との違いはPPOとDPOの違いとは?強化学習PPOの仕組みとDPOの選好学習をコードで比較【TRL 1.16対応】で比べています。
同梱のサンプル環境17種と最初に動かすもの
リポジトリの Project には17のサンプル環境があり、それぞれ学習済みの.onnxと設定YAML(config/ppo/ など)が付いています。
- 単体・入門:Basic、3DBall、GridWorld、Push Block、Wall Jump、Hallway、Pyramids
- 身体制御:Crawler、Worm、Walker
- 複数エージェント:Food Collector、Soccer Twos、Strikers Vs. Goalie、Cooperative Push Block、Dungeon Escape
- その他:Match 3、Sorter
最初は3DBall(頭の上のボールを落とさないよう傾ける課題)から動かします。公式の手順も3DBallで、mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun で学習が始まります。1シーンに同じ設定のエージェントが12体並び、ボールが頭に乗っている間は1ステップごとに+0.1、落とすと-1.0の報酬なので、Python側とUnity側がつながって学習が進んでいるかをTensorBoardで確かめやすい課題です。Wall Jumpはカリキュラム学習(WallJump_curriculum.yaml)、Soccer TwosとStrikers Vs. Goalieはセルフプレイ、Cooperative Push BlockとDungeon EscapeはMA-POCAの設定例です。
ML-Agentsが向かない場面と制約
ML-Agentsは、Unityのゲームやシミュレーションの中で学習させ、そのままゲームに組み込む用途の道具です。次の条件に当たるなら別の手段を先に検討します。
学習環境:IL2CPPビルドとモバイル実機の制約
4.1のパッケージの制約によると、学習できるのはEditorと、Windows・macOS・LinuxのスタンドアロンビルドでスクリプトバックエンドがMonoの場合だけです。IL2CPPでは学習できず、学習が動いていない環境は推論モードになります。モバイルやコンソールで動かせるのは、学習済みモデルの推論だけです。
外部フレームワークの学習済みモデル:サポート範囲
ML-AgentsのAgentで公式にサポートされるのは、Unityのトレーナーで作ったモデルです。テンソル名や定数の約束事に従う必要があり、公式は「外部で学習したモデルを動かすならML-Agentsを通さずSentisを直接使う」よう案内しています。Unity外での推論もサポート対象外です。
物理シミュレーション:100倍速の上限とUpdateとの同期制約
ゲーム物理の加速は実時間の100倍までです。また、エージェントの意思決定は FixedUpdate() に同期して進むため、Update() に書いたゲームの処理とはずれることがあります。自分で進めたい場合は Academy.Instance.AutomaticSteppingEnabled = false; で自動の進行を止め、Academy.Instance.EnvironmentStep() を手動で呼びます(公式の制約ページにある DisableAutomaticStepping() は4.1.0では外から呼べません)。
ロボットの制御則を物理の再現度を重視して学習させるなら、NVIDIAのシミュレーターも比較対象です。概要はIsaac Simとは?無料で使えるライセンスの範囲・GPU要件・導入方法【6.2対応・2026年10月】で説明しています。ChatGPT APIやNavMeshAgentも含めたゲーム内AIの作り方の比較はUnityでAIを実装する方法|ChatGPT API連携・NavMeshAgent・ML-Agentsで作るゲーム内AIにあります。学習させた敵AIを組み込んだゲームを企画から作る場合は、ゲームアプリ開発のご相談も承っています。
ML-Agentsの導入・学習時のエラーと対処
公式FAQ・4.x系の変更履歴と、PyPI版の導入で出るエラーです。
ModuleNotFoundError: No module named 'pkg_resources':mlagents-learnの起動直後に出ます。setuptools 82以降が入っているので、python -m pip install "setuptools<81"で戻します。ModuleNotFoundError: No module named 'onnxscript':最初のチェックポイント保存か学習の終了時、.onnxの書き出しで出ます。PyTorch 2.9以降が入っているので、python -m pip install "torch>=2.1.1,<=2.8.0"で入れ直し、同じrun-idに--resumeを付けて再開します(onnxscriptを足す直し方は使えません)。The Communicator was unable to connect:シーンにAgentが無い、macOSのファイアウォールが通信を止めている、環境変数HTTP_PROXY・HTTPS_PROXYが設定されている、のいずれかが多い原因です。画面の無いサーバーでは--no-graphicsを付けます。Couldn't launch new environment because communication port ... is still in use:前の学習プロセスがポートを握っています。プロセスを終了するか、Pythonから起動する場合はUnityEnvironment(file_name=..., worker_id=1)のようにworker_idを変えます。Mean reward : nan:エピソードが1回も終わっていないため平均が計算できていません。EndEpisode()を呼ぶ条件か、Agentの Max Step を設定します。- Play modeを抜けるとEditorが落ちる:4.0.1と4.1.0で修正された既知の不具合です。4.0.0を使っているなら4.1.0へ上げます。
よくある質問
ML-Agentsは無料ですか?商用のゲームに使えますか?
無料です。ライセンスはApache License 2.0で、商用のゲームやアプリに組み込めます。学習に使うPyTorchなどの依存ライブラリも、それぞれのオープンソースライセンスで配布されています。
ML-AgentsはUnity 2022で使えますか?
4.x系はUnity 6000.0以上、正式版3.0.0はUnity 2023.2以上が必要です。Unity 2022.3ではRelease 21の3.0.0-exp.1も使用できます。2.x系(Release 20以前)を選ぶと推論ライブラリが旧Barracudaになり、機能の追加も4.x系にしか入りません(2.x系の更新は2025年10月の2.0.2が最後です)。新しく始めるならUnity 6にそろえる方が手間は少なくて済みます。
Python 3.11や3.12で動きますか?
対応していません。mlagents 1.1.0も、リポジトリの開発版(1.2.0.dev0)も、対応範囲は3.10.1〜3.10.12です。3.10.12の環境を別に作ってください。
ML-Agentsは開発が終わったのですか?
終わっていません。Unityパッケージは2026年7月に4.1.0が出ており、GitHubのリポジトリにも2026年10月までコミットがあります。止まっているのはPyPIのPythonパッケージ(1.1.0)の公開だけです。
学習にGPUは必要ですか?
必須ではありません。RollerBallや3DBallのように観測が数値だけの環境はCPUで学習できます。GPUの効果が大きいのは、カメラ画像を観測に使う場合です。