地味にBlenderのオブジェクトアニメーション*がインポート可能なUnityで、アーマチュアの一部として組み込まれたパーツを動かそうとしても、ボーンアニメーションと両立出来ない問題の解決法。
*(オブジェクトモードでオブジェクトのトランスフォームのキーを打つヤツ)
やりたい事
狂犬的な敵キャラに、歩行や攻撃等の通常アクションをさせつつ、目をクレイジーな感じに動かしたい。
結論
どう設定しても、Unity上では同一アーマチュアのボーンアニメーションと干渉する。
(厳密には、オブジェクトアニメーションの所有がアーマチュアの方になっている的な雰囲気)
対象パーツを別FBXに分けて出力して、Unity上で身体モデルの対象部位用のボーン下に設置すれば両立可能。
手順
【Blender】目のオブジェクトをアーマチュアから分離
【Blender】対象部位用ボーンを対象オブジェクト位置に合わせる
全身のボーンを初期ポーズにリセット
ボーンアニメーションの影響で、デフォルトポーズと変わっている場合は、一応リセットしておく。
- Sceneウィンドウ -> 身体のアーマチュアを選択。
- モードメニュー* -> モードタイプ: ポーズモードに変更。
*(上部メニューの下段、モード毎に変わるメニュー) - モードメニュー -> 選択 -> すべて
(ショートカット: Aキー)
モードメニュー -> ポーズ -> トランスフォームをクリア -> すべて
目のオブジェクトの原点を調整
目のボーンに「位置コピー」を適用
- (モードを変えていた場合)モードメニュー -> モードタイプ: ポーズモードに変更。
- 目のボーンを選択。
- プロパティウィンドウ -> ボーンコンストレイントタブを開く。
- ボーンコンストレイント追加 -> 位置コピー
- ターゲット: 目のオブジェクトを指定。
- モードメニュー -> ポーズ -> 適用 -> 選択ボーンをレストポーズとして適用
- ボーンコンストレイント「位置コピー」を削除。
(左右毎に行う)
【Blender】身体/目モデルを別のFBXとして出力
目のオブジェクトの位置をクリア
目のボーン位置を目のオブジェクト位置にした = 目のオブジェクト位置がそのままだと二重に掛かるので、クリアしておく。
- モードメニュー -> モードタイプ: オブジェクトモードに変更。
- Sceneウィンドウ -> (Ctrlキーを押しながら)目のオブジェクトを全て選択。
- モードメニュー -> オブジェクト -> クリア -> 位置
最適な設定でパーツ毎にエクスポート
- Sceneウィンドウ -> 出力対象のオブジェクトのみを個別に選択。
(ボディ部分の時は、Ctrlキーを押しながらアーマチュア下のメッシュも選択する) - 上部メニュー -> ファイル -> エクスポート -> FBX (.fbx)
- 「内容」の項
- 選択したオブジェクト: 有効化
- オブジェクトタイプ: アーマチュア&メッシュ
(Shiftキーを押しながら選択)
- 「トランスフォーム」の項
- スケールを適用: すべてFBX
(Unity上で、アーマチュアのScaleがバグるのを防ぐ) - トランスフォーム適用: 有効化
(Rotationが分かり易くなる)
- スケールを適用: すべてFBX
- 「アニメーションをベイク」の項
- 全アクション: 無効化
(別にアクションを使っても良いが、モーション名が「アーマチュア名|モーション名」になるのでNLAストリップで出力する方が見栄えが良い)
- 全アクション: 無効化
【Unity】3Dモデルの設定
モデルのインポート&Animatorコンポーネントの追加
- Assetsウィンドウにドラッグ&ドロップして、3Dモデル&テクスチャをインポート。
- Assetsウィンドウ -> 3Dモデルを選択。
- インスペクター -> Rigタブ -> Avatar Definition: Create From This Modelを選択。
(身体/左右の目のモデル全てに行う)
Animator Controllerの作成
- (適したフォルダがない場合は、適当に新規フォルダ「Animators」等を作っておく)
- Assetsウィンドウ -> 右クリック -> Create -> Animator Controllerを選択。
(身体と左右の目のモデル別に作成) - Animatorウィンドウで、アニメーションも設定しておく。
身体モデルを設置&設定
- 身体モデルをシーン内に設置。
- 身体モデルのRootオブジェクトを選択。
- Animatorコンポーネント -> Controller: 前項で作成したAnimator Controllerを設定。
目のモデルを設置&設定
アニメーションの角度の変更はローカル角度として適用される為、直置きでなく若干補正が必要。
- ヒエラルキーウィンドウ -> 検索窓 -> eyeと入力。
- Eyeボーンを選択。
- 検索窓をクリア。
- 対象ボーン下に空のオブジェクトを作成し、向きを正面に合わす。
- Transformコンポーネント -> Rotation: (L: 0, 0, -90 / R: 0, 0, 90)
- 空のオブジェクト下に、目のモデルを設置。
- 目のモデルのAnimatorコンポーネントにも忘れずに、Animator Controllerを設定しておく。
クレイジードッグの完成です。