みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Blenderの3DモデルをUnityにインポートして使う

Blenderで作成したモデルをUnityにインポートして使用することは多いですが,軸の方向を正しく設定しないとややこしいことになってしまいます.ここではその方法をまとめておきます.

時間がない人↓

  • Blenderでは+X: 右,+Y: 前,+Z: 上
  • Unityでは+X: 右,+Y: 上,+Z: 前
  • Blenderでfbx形式でエクスポートし,設定をZ-foward, Y-upとし,Scaleを100にする

時間がある人↓

まずBlenderで以下のようなテスト用のモデルを作成しました.BlenderでのX軸面に突起があり,Y軸面が少し出っ張り,Z軸面が少し凹んでいます.

f:id:atsuhiro-me:20151104003944p:plain:w300

Blenderではテンキーの1を押すとFront Persp (前方から見る)になりますが,この時下のスクショにようにX-Z平面を見ることになります.このことから,BlenderではX軸正方向が右,Y軸正方向が前,Z軸正方向が上という哲学になっていることが分かります.

f:id:atsuhiro-me:20151104003948p:plain:w300

対してUnityでは新規Sceneを作成すると,下のスクショのように,カメラの初期設定の座標は(0, 1, -10),回転は(0, 0, 0)になっています.この時カメラはZ軸正方向を向いており,このことから,UnityではZ軸正方向が前,X軸正方向が右,Y軸正方向が上という哲学になっていることが分かります.

f:id:atsuhiro-me:20151104003952p:plain:w300

さて,先ほど作成した.blendファイルをUnityから読み込むと下のように前後が反転してしまいます.ここで回転を(0, 180, 0)に指定するのも悪くはないのですが,いちいちこのような設定をUnity上で行うのは非常に煩雑なので,Blender側で上手に設定してみます.

BlenderにはExport機能があり,FBX形式で書きだすことができます.この設定はデフォルトで,-Z-forward, Y-upとなっていますが,Unityでは Z-forward, Y-up で使用したいのでそのように設定を変更した上でエクスポートします.また,UnityでのfbxのインポートのScale Factorが0.01になっているので,Blender側でScaleを100に設定しておきます.これで大きさもいい感じに揃います.

f:id:atsuhiro-me:20151104003956p:plain:w300 f:id:atsuhiro-me:20151104004000p:plain:w300

アニメーションも試してみましたが,上記の設定でBlenderとUnity双方で同じ挙動をしました.

 

Blenderからエクスポートしたfbxファイルをインポートした場合,Projectには以下のような構成で表示されます.

Blenderのファイル名

  • Blenderのオブジェクト達
  • Default Take という名前のアニメーション
  • ArmatureAction という名前のアニメーション (アーマチュアを利用している場合のみ)
  • その他いろいろ

基本的には,BlenderのファイルをそのままHierarchyにドラッグすればよいのですが,これだとアニメーションが適応されません.下のスクショのように,指定したいアニメーションをGameObjectにドラッグすると,AnimatorのControllerに自動生成されたControllerが指定され,アニメーションが適応されるので便利です.

f:id:atsuhiro-me:20151104004003p:plain:w300

f:id:atsuhiro-me:20151104004005p:plain:w300

これでアニメーションが適応されて上記のムービーのようにUnity上でアニメーションが実現できます.