tanaka's Programming Memo

プログラミングについてのメモ。

Blenderからの読み込み、座標軸

3Dツール(Blender)からUnityへのモデルの読み込みと、リジッドボディに制御を任せる際の注意点をまとめる(Unity3.5)。

座標軸

UnityとBlenderの座標系をまとめる。

Unityの座標系


右がX+。
上がY+。
奥がZ+。

Blenderの座標系


右がX+。
上がZ+。
奥がY+。

BlenderのモデルをUnityに読み込んだ時のモデルの向き


X軸を270度(-90度)回転させて、前後が逆になるように配置される。

モデリング時の前提

座標軸のYとZの違いは自動的に補正されるので、違いは気にせず見た目通りに作成すればよい。

ただし、前後が逆になるため、Unityに読み込んだ時に奥に向かせたい方向を、Blenderで正面からモデリングすると分かりやすい。


Blenderで正面からモデリングしておく。


Unityに読み込むと、奥行きに配置される。

補足

Unityでモデルを扱う際にX軸を270度回転させることは色々と混乱の元となる。このドキュメントでは270度回転を前提でまとめたが、最初から回転させないことを前提にモデリングする方法も考えられる。その場合は、BlenderとUnityでY,Z軸の向きが一致するようになるので、Unityに読み込んだ時に奥に向かせたい面(Z+)を、Blenderでは上向きにモデリングすればよい。

読み込み方

Unityにインポートする際は、作成したblendファイルと、使用したテクスチャを一緒にドラッグ&ドロップする。

リジッドボディに制御を任せる際の注意点

アニメーションするオブジェクトにリジッドボディを付加しても、リジッドボディで制御されない。アニメーションが不要な場合はアニメーションコンポーネントを削除する。アニメーションが必要な場合は、メッシュをリジッドボディの制御用のゲームオブジェクトの下に配置して、制御とモデルを切り分ける。

また、最初の設定では、Mesh Collider同士はぶつからない。ぶつかるようにする場合は、Mesh Colliderコンポーネントの「Convex」パラメータにチェックを入れる。

アニメーションが不要な場合のセットアップ

  1. モデルをUnityにインポートする。
  2. プロジェクトビューに追加されたモデルをクリックして選択する。
  3. 「Generate Colliders」にチェックを入れて、「Mesh Collider」をモデルに最初から含むようにする。
  4. インスペクタの「Animations」内の「Generation」パラメータを「Don't Import」にして、「Apply」ボタンを押す。
  5. モデルをシーンに追加する。

以上で、モデルにアニメが含まれなくなる。

アニメーションを削除するには、モデルをシーンに追加した後に、モデルのインスペクタから「Animation」コンポーネントをRemoveしてもよい。

アニメーションを使う場合のセットアップ

  1. モデルをUnityにインポートする。
  2. シーンにキャラクタの親オブジェクトとして、空のゲームオブジェクトを追加する。
  3. 追加した親オブジェクトに、リジッドボディ(Rigidbody)コンポーネントを追加する。
  4. 当たり判定を付けるために、プロジェクトビューのモデルを開き、自動的に作成されるMesh Collider(図ではCube)をドラッグし、親オブジェクトにドロップする。
  5. モデルと姿勢を合わせるために、親オブジェクトの「Rotation」の「X」を「270」にする。
  6. 親オブジェクトを選択して、インスペクタの「Mesh Collider」欄の「Convex」にチェックを入れて、他のMesh Colliderとの判定を有効にする。跳ね返り係数などが必要な場合は、Physic Materialを作成して、Mesh Colliderの「Material」欄に設定する。
  7. プロジェクトビューからモデルをドラッグし、親オブジェクトにドロップする。
  8. Hierarchyビューから追加したモデルをクリックして、座標と回転を全て0にする。

アニメさせる時は、当たり判定や挙動と、モデルのGameObjectを分けて実装する。動作の制御は親のGameObject、モデルの制御は子のGameObjectとして設計するとよい。