「Unityでキャラクターを動かす」とき、あなたはAnimatorを使いますか?
それともスクリプトで座標を動かしますか?
今回は、そのどちらでもない「第3のアプローチ」を紹介します。
それは、「AIに体(物理モデル)だけを与えて、転びながら歩き方を覚えさせる」という方法です。
この記事は、Unity 6の最新環境を使い、機械学習ライブラリ「ML-Agents」で人間型ロボットを歩かせるチュートリアルの第1回(全3回予定)です。
特に、初心者がつまずき易い「関節の設定」「重さのバランス」について、
「なぜその数値なのか?」を徹底的に解説します。
第1章:開発環境の準備(Unity 6対応)
まずは道具を揃えましょう。機械学習は「環境構築が一番難しい」と言われますが、Unity 6とML-Agentsの組み合わせなら比較的スムーズです。
1-1. 必要なソフトウェアとバージョン
以下の構成で進めます。バージョンが違うと動かないことがあるので注意してください。
- Unity Editor:Unity 6 (6000.0.x) 以降
- 推奨:Unity Hubから最新のLTS(Long Term Support)版をインストールしてください。
- Python:Version 3.10.x
- Unityでの学習にはPythonが必要です。最新すぎると動かないことがあるため、安定している
3.10系を推奨します。 - Python公式サイトからインストール時、「Add Python to PATH」に必ずチェックを入れてください。
- Unityでの学習にはPythonが必要です。最新すぎると動かないことがあるため、安定している
- ML-Agents以降
- UnityのPackage Managerから導入します。
1-2. Unityプロジェクトの作成
- Unity Hub を起動し、「New Project」をクリック。
- テンプレートは 「3D (URP)」 を選択します。
- ※Unity 6ではURP(Universal Render Pipeline)が標準となり、描画負荷が軽いため学習に向いています。
- プロジェクト名(例:
AI_Walker_Project)を入力して作成。
1-3. ML-Agentsパッケージのインストール
- Unity画面上部のメニューから Window > Package Manager を開く。
- 左上の「+」ボタン > Add package by name… を選択。
- 入力欄に
com.unity.ml-agentsと入力して「install」をクリック。

第2章:キャラクター(ラグドール)の用意
AIに学習させるための「体」を用意します。
アニメーションで動くモデルではなく、物理演算でグニャグニャ動く「ラグドール(Ragdoll)」である必要があります。
2-1. 3Dモデルの入手
今回は、Adobeが提供する無料の3Dアニメーションサイト Mixamo のモデル(Y Botなど)を使用するのが一般的です。
- Mixamoから「Y Bot」などをダウンロード(Formatは
FBX for Unityを選択)。 - UnityのProjectウィンドウにドラッグ&ドロップしてインポート。(その時Animationなどのフォルダを作り、その中に入れると整理できる。)
- Hierarchy(ヒエラルキー)にモデルを配置します。
2-2. ラグドール化(Ragdoll Wizard)
モデルに骨と肉(Collider)を入れます。
- Hierarchyで配置したモデルを選択。
- メニューの GameObject > 3D Object > Ragdoll… を選択。
Advanced Bone Setupを開く - 「Create Ragdoll」ウィンドウが開くので、各パーツをドラッグ&ドロップで割り当てます。
【Y Bot】Ragdoll Builder 対応
ヒエラルキーにあるmixamorig:Hipsの中身を順番に開いていき、以下のボーンを探してセットしてください。
Ragdoll Builder の項目名
Y Bot (Mixamo) のボーン名
解説・注意点
Pelvis (骨盤)mixamorig:Hips
体の中心です。
Left Hips (左太もも)mixamorig:LeftUpLeg
※ “LeftLeg” ではありません!
Left Knee (左ひざ/すね)mixamorig:LeftLeg
太ももの下にある骨です。
Left Foot (左足)mixamorig:LeftFoot
つま先(ToeBase)は使いません。
Right Hips (右太もも)mixamorig:RightUpLeg
Right Knee (右ひざ/すね)mixamorig:RightLeg
Right Foot (右足)mixamorig:RightFoot
Left Arm (左腕/二の腕)mixamorig:LeftArm
【重要】LeftShoulder(鎖骨) ではありません!
Left Elbow (左ひじ)mixamorig:LeftForeArm
Right Arm (右腕/二の腕)mixamorig:RightArm
【重要】RightShoulder(鎖骨) ではありません!
Right Elbow (右ひじ)mixamorig:RightForeArm
Middle Spine (背骨)mixamorig:Spine1
胸とお腹の中間です。
Head (頭)mixamorig:Head - Total Mass を
20くらいにして「Create」ボタンを押します。
これで、モデルに Rigidbody(重さ)と Character Joint(関節)と Collider(当たり判定)が自動でつきました。
1. 床(Plane)を作成する
- Unityのメニューから GameObject > 3D Object > Plane を選択します。
- シーン上に白い板が現れます。これが地面になります。
2. 位置と大きさを調整する(重要)
床とロボットの位置関係を整理します。
- 床(Plane)の設定:
- Hierarchyで
Planeを選択。 - Inspectorの Transform で、Positionを
(0, 0, 0)にリセットします。 - Scale(大きさ) を
(20, 1, 20)くらいに大きくしておきます(後で歩き回るため)。
- Hierarchyで
- ロボットの設定:
- Hierarchyでロボット(Y bot)をWalkerにする。
Walkerの親オブジェクトを選択。 - Positionの Y(高さ) を
0.5〜1.0くらいにして、「床から少し浮いた状態」にします。
- Hierarchyでロボット(Y bot)をWalkerにする。
3. 実行(Play)して確認する
画面上部の 再生ボタン(▶) を押してください。
再生ボタンを押して、キャラクターが「崩れ落ちれば」成功です。
2-3. Character Joint を Configurable Joint に置換する
【選択対象リスト】(全12個)
※ mixamorig:Hips は含めないでください!
■ 体幹・頭(2つ)
mixamorig:Spine1(背骨・腹)mixamorig:Head(頭)
■ 左足(3つ) 3. mixamorig:LeftUpLeg (左太もも) 4. mixamorig:LeftLeg (左すね) 5. mixamorig:LeftFoot (左足)
■ 右足(3つ) 6. mixamorig:RightUpLeg (右太もも) 7. mixamorig:RightLeg (右すね) 8. mixamorig:RightFoot (右足)
■ 左腕(2つ) 9. mixamorig:LeftArm (左腕) 10. mixamorig:LeftForeArm (左ひじ下)
■ 右腕(2つ) 11. mixamorig:RightArm (右腕) 12. mixamorig:RightForeArm (右ひじ下)
ML-Agentsでは、標準の Character Joint よりも、より細かい制御ができる Configurable Joint が推奨されています。
- Hierarchyで、Hips以外のすべての骨(LeftUpLeg, LeftLeg, Spineなど)を複数選択します。
- Inspectorで
Character Jointを右クリック > Remove Component。 - そのまま Add Component >
Configurable Jointを追加。 - 重要: 各パーツの
Connected Bodyが外れてしまっているので、手動で「親の骨」をセットし直します。- 例:
LeftLeg(すね)の Connected Body にはLeftUpLeg(太もも)をセット。 - 設定するパーツ (Jointを持っている)Connected Body に入れる親
- 親にRigitbodyコンポーネントが無い下記の場合
mixamorig:Head (頭) mixamorig:Spine1
mixamorig:LeftArm (左腕)mixamorig:Spine1
mixamorig:RightArm (右腕)mixamorig:Spine1
mixamorig:Spine1 (腹)mixamorig:Hips - これを行わないと、体がバラバラに散らばります。
- 例:
第3章:【最重要】重さ(Mass)の「黄金比」設定
ここからが本番です。 初心者の9割がここで失敗します。
デフォルト設定のままだと、AIロボットは「風船のように空へ飛ぶ」か「生まれたての子鹿のように立てない」かのどちらかになります。
3-1. なぜデフォルト(Mass: 1)ではダメなのか?
Unityの物理エンジン(PhysX)において、軽い物体を強力なモーター(関節)で動かそうとすると、計算が不安定になり、接触した瞬間に彼方へ吹っ飛ぶ現象が起きます。
これを防ぐには、現実に近い「重み」を持たせる必要があります。
3-2. 推奨設定値(これを入力してください)
Hierarchyで各ボーンを選択し、Inspectorの Rigidbody > Mass を以下の数値に書き換えてください。
| 部位 | 推奨Mass | 理由(なぜ?) |
| Hips (腰) | 15 | 最重要。ここが「重心」です。ここを一番重くしないと、足の動きに振り回されて体が安定しません。 |
| Spine1 | 5 〜 8 | 上半身に適度な重みがないと、振り子運動が使えず歩けません。 |
| UpLeg (太もも) | 2.5 | 足の根元は少し重めに。 |
| Leg (すね) | 2 | 太ももより少し軽くします。 |
| Foot (足先) | 1 | 先端は軽くします。重すぎると足を上げるのが大変になります。 |
| Arm (腕) | 1 | 腕はバランスを取るための「重り」ですが、重すぎると肩が脱臼します。 |
【チェックポイント】
すべて設定したら再生してみましょう。以前より「ドスン」と重そうに床に落ちるはずです。この「重量感」がリアルな歩行を生みます。
第4章:関節(Joint)の可動域を「人間」にする
次は関節です。ここを適当にすると、膝が逆に曲がるなどおかしな動作となります。
特に「膝(Knee/Shin)」の設定は、以下の数値を厳守してください。
4-1. Configurable Joint の基礎知識
設定項目が多すぎてパニックになりますが、見るべきは以下の3つだけです。
- Motion (X, Y, Z):
Locked: 全く動かない(固定)。Limited: 決められた角度まで動く。Free: 360度回転する(首が回るホラー映画状態)。
- Limit (Angular Limit):
Limitedを選んだ場合、何度まで曲がっていいか。
- Drive (Spring / Damper):
- 関節の「筋力」。
4-2. 【超重要】膝(Leg / Shin)の完全設定マニュアル
Hierarchyで mixamorig:LeftLeg と mixamorig:RightLeg (すね)を選択し、以下のように設定します。
① Motion(回転の許可)
- Angular X Motion:
Limited(縦の曲げ伸ばしはOK) - Angular Y Motion:
Locked(重要!膝は横には回転しません) - Angular Z Motion:
Locked(重要!膝は横には折れません)
なぜ?
YとZを
Lockedにしないと、体重をかけた瞬間に膝が横にグニャッと折れてしまい、AIはどうやっても立てなくなります。
② Limit(可動範囲の制限)
ここが最大の落とし穴です。
- Linear Limit (Move): 全部 0(関節は伸び縮みしません)
- Low Angular X Limit:
-120 - High Angular X Limit:
0
なぜ「0」なのか?
自分の膝を見てください。後ろ(マイナス方向)には曲がりますが、真っ直ぐ(0度)より前には曲がりませんよね?
High Limit を
0に設定することで、膝が逆に曲がる(逆関節)のを物理的に防ぎます。 これをやらないと、AIは「逆に曲げたほうが安定する」と学習してしまい、フラミンゴ歩きになります。
4-3. 股関節(UpLeg / Thigh)の設定
太ももは比較的自由に動きますが、脱臼を防ぎます。
- Angular X Motion:
Limited(前後の足振り) - Angular Y Motion:
Limited(ガニ股・内股) - Angular Z Motion:
Limited(足を開く動作) - Angular X Limit: High
30, Low-90(後ろにはあまり行かないが、前には足が上がる)
第5章:筋力(Drive)の設定
最後に、ロボットに「筋肉」をつけます。
これがないと、設定した関節はすべてプランプランの操り人形状態で、床に崩れ落ちて終わりです。
5-1. Spring(バネ)と Damper(減衰)
Configurable Joint の Angular X Drive を開いて設定します。
- Position Spring (バネ):
- 「指定した角度に戻ろうとする力」です。これが筋肉の強さになります。
- 数値が高い=マッチョ(姿勢が良いが、カクカクする)。
- 数値が低い=脱力(柔らかいが、体を支えられない)。
- Position Damper (減衰):
- 「動きの粘り気」です。
- 水の中で動くような抵抗力を与えます。これがないと、バネの力でビヨンビヨンと永遠に振動し続けます。
5-2. 部位別の推奨設定値
Mass(重さ)に対して、適切なSpring(筋力)を設定しないと動きません。
先ほど設定した重さに基づき、以下の値を入力してください。
| 設定する部位 (Inspectorで選択) | Angular X Drive > Position Spring | Angular X Drive > Position Damper |
| mixamorig:Spine1 (腹) | 3000 〜 5000 | 100 |
| mixamorig:LeftUpLeg (左もも) | 2000 〜 3000 | 50 |
| mixamorig:RightUpLeg (右もも) | 2000 〜 3000 | 50 |
| mixamorig:LeftLeg (左すね) | 1500 〜 2000 | 50 |
| mixamorig:RightLeg (右すね) | 1500 〜 2000 | 50 |
| mixamorig:LeftFoot (左足) | 500 〜 1000 | 20 |
| mixamorig:RightFoot (右足) | 500 〜 1000 | 20 |
| mixamorig:LeftArm (左腕) | 500 | 10 |
| mixamorig:RightArm (右腕) | 500 | 10 |
| mixamorig:Head (頭) | 500 | 10 |
| 部位 | Spring (筋力) | Damper (粘り) | 解説 |
| Spine1 | 3000 〜 5000 | 100 | 体幹は強く!重い上半身を支えるため、最強の筋力が必要です。 |
| UpLeg (太もも) | 2000 〜 3000 | 50 | 足を持ち上げ、蹴り出すための強い力。 |
| Leg (すね) | 1500 〜 2000 | 50 | 重要。 強すぎると「竹馬」のように膝が棒になります。少し弱めにして、着地の衝撃を吸収させます。 |
| Foot (足首) | 500 〜 1000 | 20 | 地面の傾きに合わせるため、適度に柔らかく。 |
| Arm (腕) | 500 | 10 | ブラブラしない程度に弱く。 |
【トラブルシューティング】
- 膝が曲がらない(竹馬状態): LegのSpringを
1000くらいまで下げてください。- 腰が砕ける: Hips/SpineのSpringを
6000くらいまで上げてください。
第1回のまとめと次回予告
これで「物理的に歩く準備が整った体」が完成しました。
今の状態で再生ボタンを押すと、キャラクターは崩れ落ちることなく、少し耐えてからドスンと倒れる、あるいは膝を少し曲げてバランスを取ろうとするはずです。
次回(Vol.2)は、いよいよAIの「脳」を作ります。
- 目を作る: 「地面はどこ?」「体は傾いてる?」という情報を取得するスクリプト。
- 筋肉を動かす: AIからの命令を、今設定したJointのモーターに伝える方法。
- 報酬を決める: 「前に進んだら褒める」「転んだら罰」というルールの記述。
この物理設定さえ完璧なら、学習は8割成功したも同然です。
今のうちにProjectを保存し、次回の更新をお待ちください!
[使用したアセットリンク]
- [Mixamo (3Dモデル)]
- [Unity ML-Agents]

