Blenderでアニメーション付きのFBXを出力してUnityで使う方法

こんにちは!

インディゲームを制作するディベロッパー「Studio Itachi」のZiggyです。

今回はBlenderで作ったモデルとアニメーションをUnity側にもっていく方法をまとめます。

これ、プロジェクトの度に調べなおすんですよね、、、効率が悪いということもあり、一か所にまとめておこうと思った次第でございます。

使用しているバージョンは現時点から考えてもちょっと古いんですが、Unity2022.1.16f1、Blender2.9です。

■①Blender側でモーションを作る

Animationタブで作業するのが楽です。
スキニングまで終えたモデルを用意します。

ドープシートの「アクション」を使ってモーションを作っていきます。
任意の名前を付けて盾みたいなマークにチェックが入っていれば保存されたということですね。
これを繰り返して複数のアニメーションを作成することができます。
※ポーズライブラリは使っても使わなくてもOK。

■②FBX出力

シーンコレクションでモデルとアーマチュアを選択します。

ファイル→エクスポート→FBXを選択し、以下の設定にしてFBXをエクスポートしましょう。

■③Unityを立ち上げてテクスチャ張り直し

恐らくテクスチャがはがれているので、くっつける作業をします。

出力したFBXが/Assets下にある前提で話を進めます。
同様にBlenderで使用していた、モデルのテクスチャも/Assets下に置いてください。

まず、プロジェクトウインドウでモデルを選択し、インスペクターの「Materials」の位置をデフォルトマテリアルを使用から「外部マテリアルの使用」に変更します。
こうすると、マテリアルの設定をUnity側でいじれるようになります。


次に、テクスチャを張り付けていたマテリアルを見つけ出してインスペクターを表示させます。
「アルベド」の左側の四角の部分に、テクスチャをドラッグ&ドロップします。
これでおわり。


④Unityでモーション切り替え

まずはモーションがちゃんとインポートされているか確認する。
FBXファイルを選択したインスペクターから「Animation」タブを選択。
「クリップ」の項目にモーションがすべてそろっているか確認。
そろってなければ+-をいじって揃えてください。
※クリップにどのモーションを割り当てるかはSource Takeで選ぶ。
この時、クリップを選んで「時間をループ」にチェックを入れると、モーションがループする。

次に、モデルにアニメーションコントローラを設定する。
プロジェクトウインドウにアニメーションコントローラを追加。
モデルをヒエラルキーウインドウにドラッグ&ドロップして、インスペクターに「Animator」を追加し、コントローラーの項目に先ほど作ったアニメーションコントローラを設定する。

最後にモーションの遷移を作成。
アニメーションコントローラをダブルクリックしてひらいたアニメーターウインドウに、にインポートしたモーションのクリップをドラッグアンドドロップ。
クリップを右クリックして「遷移を作成」を行い、各モーションをつなぐ。

遷移の条件は各クリップのインスペクターにある「Transitions」を選択し、「Conditions」の項目で設定する。
Conditionsの選択肢はパラメータータブで増やしていく。

スクリプトでパラメータの値を変更する。例えばRunというbool型のパラメータがあった時、スクリプトでいじるにはこんな感じ。
Animator anim = GetComponent<Animator>(); 
anim.SetBool("Run",true);

■最後に

長くなりましたが、毎回これらの情報を探して実装しては忘れているので、情報をまとめさせていただきました。
細かい説明を端折っているのでかなり雑な内容ですが、かなり私向けに書いたところもあるので、もしわかりにくいとがあったらググってみてください!

もし記事が面白いなぁと思いましたら、Twitterのほうをフォローしていただけると嬉しいです!
日々のゲーム制作の進捗や、ブログの更新告知、たまにふと思ったことなんかを呟いていますのでよろしくお願いします。