【Blender→Unity】FBXのScaleが100になりコライダーが100倍になる不具合と原因
投稿日: 2026年9月19日
対象読者: BlenderからUnityへFBXを持ち込んだら Scale が 100 になっていて、付けたコライダーや子オブジェクトの大きさがおかしい人
不具合内容
作成したモデルをBlenderから書き出し、Unityに取り込むと Armature の Scale が 100 になっている。モデルの見た目の大きさは正しいが、ボーンに当たり判定(コライダー)を付けると100倍の大きさになる。
クリックやレイキャストの当たり判定が、モデルと関係ない場所で反応するようになる。
原因
Blender既定の書き出し(スケールを適用=全ローカル)がFBXをcm単位で出すため。Unityはそれを0.01倍し、Blenderはオブジェクトに100倍を掛けて帳尻を合わせているので、Transformに100が残る。
解決方法
- Blenderで Ctrl+A →「スケール」でスケールを1に焼き込んでから、FBX書き出しの「スケールを適用」を 「すべてFBX」 にする
- Unityに取り込んだら、インポート設定の「単位を変換する」の横が「1m(ファイル)から1m(Unity)へ」になっているかを確かめる
動作環境
| 項目 | バージョン |
|---|---|
| Blender | 5.0.1(日本語UI) |
| Unity | 6000.0.58f2 (Unity 6・日本語UI) |
| 検証モデル | 高さ1.8mの円柱 +ボーン3本(Bone0〜2) 自動ウェイトでスキン済み |
解決方法の詳細:Scaleを1にして書き出す手順
ここからは、Unityに取り込んだときに Scale が1になるFBXを書き出す手順を、実際の画面で順に説明します。 またそのあとに、今回の不具合内容の再現手順も載せておきます。
手順1:オブジェクトのスケールが1か確かめる
アーマチュア(とメッシュ)を選び、右下のプロパティの「トランスフォーム」でスケールを確かめます。1.000 以外(0.010 など)が残っているときは、手順2で焼き込みます。
手順2:Ctrl+A →「スケール」でスケールを焼き込む
3Dビューにマウスを置いて Ctrl+A を押し、「適用」メニューの「スケール」を選びます。スケールが1.000になり、見た目の大きさは変わりません。手順1でスケールがすでに1なら、この手順は飛ばして構いません。
手順3:ファイル → エクスポート → FBX を開く
画面左上の「ファイル」メニューから「エクスポート」にカーソルを合わせ、「FBX (.fbx)」を選びます。
手順4:「スケールを適用」を「すべてFBX」にする
書き出し画面の右側、「トランスフォーム」パネルの「スケールを適用」は既定で「全ローカル」になっています。プルダウンを開いて「すべてFBX」を選びます。
「FBX単位スケール」を選んでも、今回の検証では同じ結果でした。
手順5:「FBXをエクスポート」を押す
画面下の欄にファイル名を入れ、右下の「FBXをエクスポート」を押します。
確認1:Unityのインポート設定が「1m(ファイル)から1m(Unity)へ」になっている
書き出したFBXをUnityの Project ウィンドウに入れて選び、Inspector の Model タブを見ます。「単位を変換する」の横が「1m(ファイル)から1m(Unity)へ」になっていれば、単位の変換は起きていません。
確認2:Armature の Scale が1になっている
FBXをシーンに置いて Armature を選び、Transform のスケールが1になっていれば成功です。
ボーンの子に半径0.3の Sphere Collider を付けても、意図どおり半径30cmに収まります。
参考:スクリプトで書き出す場合
スクリプトで書き出すなら、手順2を transform_apply、手順4を apply_scale_options で指定します。
import bpy
armature = bpy.data.objects["Armature"]
body = bpy.data.objects["Body"]
bpy.ops.object.select_all(action='DESELECT')
armature.select_set(True)
body.select_set(True)
bpy.context.view_layer.objects.active = armature
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True) # 手順2
bpy.ops.export_scene.fbx( # 手順3〜5
filepath="model.fbx",
use_selection=True,
apply_scale_options='FBX_SCALE_ALL', # 手順4:「スケールを適用:すべてFBX」
)
参考:スケール0.01が残ったまま「すべてFBX」で書き出すと0.01になる
手順2を飛ばし、スケール0.01が残ったまま「すべてFBX」で書き出すと、今度は Armature のスケールが 0.01 になりました。子に置いたコライダーは1/100になり、半径0.3が3mmの当たり判定になります。
ちなみに、スケール0.01が残ったモデルを既定の「全ローカル」で書き出した場合は、0.01と100が打ち消し合って Armature のスケールが1になりました。「すべてFBX」に変えるなら、手順2の焼き込みとセットで行う必要があります。
参考:Unity側の「単位を変換する」を外すと本当に巨大化する
Unityのインポート設定で「単位を変換する」のチェックを外すと、FBXの「1単位=1cm」が無視されます。
既定で書き出したFBXでこれをやると、Transformの100倍だけが残り、モデルが身長180mになりました。
モデルが巨大化してカメラに収まらないときは、Blenderの書き出し設定より先にこのチェックを疑ってください。
原因詳細:FBXがcm単位で書かれ、Unityが100倍で帳尻を合わせている
不具合は次の手順で再現できます。
再現1:「スケールを適用」を既定の「全ローカル」のまま書き出す
「ファイル → エクスポート → FBX」を開き、「スケールを適用」を変えずに「全ローカル」のまま書き出します。
再現2:Unityに取り込み、Armature を選ぶ
書き出したFBXをUnityのシーンに置き、Armature を選ぶと、Transform のスケールが X・Y・Z とも 100 になっています。モデルの見た目は正しく1.8mで、巨大にはなっていません。
再現3:ボーンの子にコライダーを付ける
当たり判定のために Bone1 の子に Sphere Collider を置き、半径を 0.3(30cmのつもり)にします。
シーンで見ると、当たり判定は半径30mの球になっています。モデル本体は球の中心にある小さな点です。
なぜScaleが100になるのか
FBXを Project ウィンドウで選ぶと、Inspector の Model タブにインポート設定が出ます。「単位を変換する」の横の表示を2つのFBXで比べると、違いがはっきりします。
Blenderの既定の書き出しは、FBXに「このファイルの1単位は1cm」と書き込みます(FBX内部の UnitScaleFactor が 1.0)。Unityはそれを読んで全体を0.01倍に縮めます。一方で頂点やボーンの位置はメートルの値のまま書かれているので、そのままでは1/100の大きさになってしまいます。そこでBlenderは、オブジェクトのスケールに100を入れて打ち消しています。
見た目のサイズは「0.01倍 × 100倍=1倍」で合っています。ですが、Armature と Body の Transform には100が残ります。その子に置いたものはすべて100倍になり、コライダーが30mになったのはこのためです。
「すべてFBX」で書き出すと、FBXは「1単位=1m」になり(UnitScaleFactor が 100.0)、Unityは縮小も拡大もしません。
参考:条件別の実測結果
同じリグを条件を変えて書き出し、Unity 6 に既定のインポート設定で取り込んだ結果です。「条件」はBlenderのFBX書き出しの「スケールを適用」、「単位」はUnityのインポート設定に出る変換の表示です。「コライダー」はボーンの子に置いた半径0.3の Sphere Collider の実際の半径です。
| 条件 | 単位 | Armatureの スケール |
身長 | コライダー |
|---|---|---|---|---|
| 全ローカル(既定) | 1cm→0.01m | 100 | 1.8m | 30m |
| すべてFBX | 1m→1m | 1 | 1.8m | 0.3m |
| FBX単位スケール | 1m→1m | 1 | 1.8m | 0.3m |
| 0.01残り+ 全ローカル |
1cm→0.01m | 1 | 1.8m | 0.3m |
| 0.01残り+ すべてFBX |
1m→1m | 0.01 | 1.8m | 3mm |
| 全ローカル+Unityで 「単位を変換する」OFF |
変換なし | 100 | 180m | 30m |
「0.01残り」は、オブジェクトにスケール0.01が残ったまま書き出した場合です。
どの条件でも Armature の回転Xは -89.98(または 89.98)のまま残りました。Blender(Z上)とUnity(Y上)の軸の違いを吸収している回転で、スキンメッシュの表示には影響しません。Blenderの「トランスフォームを適用」をONにすると Body の回転は0になりますが、Armature の回転は残りました。
まとめ
- Scale が 100 になるのは、既定の書き出しがFBXをcm単位で出し、Unityの0.01倍をオブジェクトの100倍で打ち消しているから
- 見た目の大きさは正しいが、ボーンの子に付けたコライダーや子オブジェクトが100倍になる
- Ctrl+A でスケールを1に焼き込み、「スケールを適用:すべてFBX」で書き出せば、Unity上のスケールは1になる
- 取り込んだら、インポート設定の「1m(ファイル)から1m(Unity)へ」の表示を確かめる。「単位を変換する」はONのままにする
ボーンが消える不具合は原因も直し方も別で、【Blender→Unity】FBXでボーンが消える不具合と原因にまとめています。
このパイプラインで作ったモデルは、MediaPipeとUnity WebGLでポーズ推定を動かす仕組みの記事や、写真からポーズを3D化する Pose Mirror 本体で動いています。

















