Unity上でBlenderのオブジェクト/ボーンアニメを両立

Unity上でBlenderのオブジェクト/ボーンアニメを両立

地味にBlenderのオブジェクトアニメーション*がインポート可能なUnityで、アーマチュアの一部として組み込まれたパーツを動かそうとしても、ボーンアニメーションと両立出来ない問題の解決法。
*(オブジェクトモードでオブジェクトのトランスフォームのキーを打つヤツ)

やりたい事

狂犬的な敵キャラに、歩行や攻撃等の通常アクションをさせつつ、目をクレイジーな感じに動かしたい。

結論

どう設定しても、Unity上では同一アーマチュアのボーンアニメーションと干渉する。
(厳密には、オブジェクトアニメーションの所有がアーマチュアの方になっている的な雰囲気)

対象パーツを別FBXに分けて出力して、Unity上で身体モデルの対象部位用のボーン下に設置すれば両立可能。

手順

【Blender】目のオブジェクトをアーマチュアから分離

(目のオブジェクトがアーマチュアの子になっている場合)

  1. モードメニュー -> モードタイプ: オブジェクトモードに変更。
  2. Sceneウィンドウ -> 目のオブジェクトを選択。
  3. モードメニュー -> オブジェクト -> ペアレント -> 親子関係をクリア

(左右毎に行う)

【Blender】対象部位用ボーンを対象オブジェクト位置に合わせる

全身のボーンを初期ポーズにリセット


ボーンアニメーションの影響で、デフォルトポーズと変わっている場合は、一応リセットしておく。

  1. Sceneウィンドウ -> 身体のアーマチュアを選択。
  2. モードメニュー* -> モードタイプ: ポーズモードに変更。
    *(上部メニューの下段、モード毎に変わるメニュー)
  3. モードメニュー -> 選択 -> すべて
    (ショートカット: Aキー)
ポーズモードに変更してから全てのボーンを選択

モードメニュー -> ポーズ -> トランスフォームをクリア -> すべて

全てのボーンのトランスフォームをクリア

目のオブジェクトの原点を調整

(目のオブジェクトの原点(オレンジ色の点)が、目の中心になっていない場合)

  1. モードメニュー -> モードタイプ: オブジェクトモードに変更。
  2. Sceneウィンドウ -> 目のオブジェクトを選択。
  3. モードメニュー -> オブジェクト -> 原点を設定 -> 原点を重心に移動(サーフェス)

(左右毎に行う)

目のボーンに「位置コピー」を適用

  1. (モードを変えていた場合)モードメニュー -> モードタイプ: ポーズモードに変更。
  2. 目のボーンを選択。
  3. プロパティウィンドウ -> ボーンコンストレイントタブを開く。

目のボーンを選択し、ボーンコンストレイントタブを開く

  1. ボーンコンストレイント追加 -> 位置コピー
    • ターゲット: 目のオブジェクトを指定。
  2. モードメニュー -> ポーズ -> 適用 -> 選択ボーンをレストポーズとして適用
  3. ボーンコンストレイント「位置コピー」を削除。

(左右毎に行う)

目のボーンにボーンコンストレイント「位置コピー」を追加

ボーンコンストレイント「位置コピー」のターゲットに目のオブジェクトを指定

レストポーズに適用し、オブジェクトコンストレイント「位置コピー」を削除

  • デフォルトポーズが崩れてしまう場合は、一旦ペアレントを解除して再び親子関係を設定。
  • ボーンアニメーション作成後に行っても、目のボーン位置をレストポーズに適用する事で多分ズレない。

【Blender】身体/目モデルを別のFBXとして出力

目のオブジェクトの位置をクリア

目のボーン位置を目のオブジェクト位置にした = 目のオブジェクト位置がそのままだと二重に掛かるので、クリアしておく。

  1. モードメニュー -> モードタイプ: オブジェクトモードに変更。
  2. Sceneウィンドウ -> (Ctrlキーを押しながら)目のオブジェクトを全て選択。
  3. モードメニュー -> オブジェクト -> クリア -> 位置

左右の目を選択し、オブジェクト位置をクリア

最適な設定でパーツ毎にエクスポート

  1. Sceneウィンドウ -> 出力対象のオブジェクトのみを個別に選択。
    (ボディ部分の時は、Ctrlキーを押しながらアーマチュア下のメッシュも選択する)
  2. 上部メニュー -> ファイル -> エクスポート -> FBX (.fbx)

分ける部位毎に選択し、FBX形式でエクスポート

  • 「内容」の項
    • 選択したオブジェクト: 有効化
    • オブジェクトタイプ: アーマチュア&メッシュ
      (Shiftキーを押しながら選択)
  • 「トランスフォーム」の項
    • スケールを適用: すべてFBX
      (Unity上で、アーマチュアのScaleがバグるのを防ぐ)
    • トランスフォーム適用: 有効化
      (Rotationが分かり易くなる)
  • 「アニメーションをベイク」の項
    • 全アクション: 無効化
      (別にアクションを使っても良いが、モーション名が「アーマチュア名|モーション名」になるのでNLAストリップで出力する方が見栄えが良い)

エクスポートオプションを適切に設定001

エクスポートオプションを適切に設定002

【Unity】3Dモデルの設定

モデルのインポート&Animatorコンポーネントの追加

  1. Assetsウィンドウにドラッグ&ドロップして、3Dモデル&テクスチャをインポート。
  2. Assetsウィンドウ -> 3Dモデルを選択。
  3. インスペクター -> Rigタブ -> Avatar Definition: Create From This Modelを選択。
    (身体/左右の目のモデル全てに行う)

Avatar DefinitionをCreate From This Modelに変更

Animator Controllerの作成

  1. (適したフォルダがない場合は、適当に新規フォルダ「Animators」等を作っておく)
  2. Assetsウィンドウ -> 右クリック -> Create -> Animator Controllerを選択。
    (身体と左右の目のモデル別に作成)
  3. Animatorウィンドウで、アニメーションも設定しておく。

身体と左右の目のAnimator Controllerを作成

身体モデルを設置&設定

  1. 身体モデルをシーン内に設置。
  2. 身体モデルのRootオブジェクトを選択。
    • Animatorコンポーネント -> Controller: 前項で作成したAnimator Controllerを設定。

目のモデルを設置&設定

アニメーションの角度の変更はローカル角度として適用される為、直置きでなく若干補正が必要。

  1. ヒエラルキーウィンドウ -> 検索窓 -> eyeと入力。
  2. Eyeボーンを選択。
  3. 検索窓をクリア。
  4. 対象ボーン下に空のオブジェクトを作成し、向きを正面に合わす。
    • Transformコンポーネント -> Rotation: (L: 0, 0, -90 / R: 0, 0, 90)
  5. 空のオブジェクト下に、目のモデルを設置。
  6. 目のモデルのAnimatorコンポーネントにも忘れずに、Animator Controllerを設定しておく。

Eyeボーンを検索&選択

目のボーン下に空のオブジェクトを作成

クレイジードッグの完成です。

タイトルとURLをコピーしました