[UE5] Blenderで制作した複数アニメーション付きの家具を、UE5でセットアップする
アニメーションに不得手なこともあって結構苦戦したので備忘録として。
まあ建築ビジュアライゼーション界隈あるあるですけど、アニメーション製作はみんな苦手だと思います。
やり方
今回はこちらの古家具アセットのアニメーションでやっていきます。
扉が3つと、引き出しが3つ。計6か所がアニメーションするようにしたいんです。
ちなみに後日Fabで販売予定です。
要件
製品としては、こういうアセット構成にしておきたいんです。
・6か所のアニメーションが独立して動作するように作っておきたい。
・例えば使ってくれる方がUE5側で「1クリックすると2つの扉が同時に開かせたい」とか「特定のインプット(例えば[F1]キーを押す)すると左の引き出しが開かせたい」とか柔軟に実装できるようにしたい。
1. Blenderでモデリングして、アニメーションをセットしておく
Blenderでのアクションとかモーションの設定は省略します。
とりあえず6つのパーツがそれぞれに対してアニメーションをセットしておきました。
2. Blenderでエクスポート
今回はFBXでエクスポートします。
オプションの「Bake Animation」は必ずONにしてください。
ここでは「kagu.fbx」として説明していきます。
3. UE5でインポート
「kagu.fbx」をUE5に入れます。
・[Skeletal Mesh]はONにしましょう。
・[Import Animation]もONです。
4. 要らないアセットは削除してもいい
アニメーションシーケンスがたぶんすごい量になっていると思います。
私としては6個あればいいはずですから、ダブルクリックしてアニメーション再生させてみて、関係ないor重複しているアニメーションシーケンスのアセットは削除してしまいます。
5. アニメーションブループリントを作成する
コンテンツブラウザで右クリックして「アニメーションBP」を選びます。
スケルトンを選択する画面が出るので「kagu_Skeleton」を選択して[作成]します。
するとアニメーションブループリントのアセットができます。
ファイル名は「kagu-Anim_BP」としました。
「kagu-Anim_BP」をダブルクリックで開いて、右クリックして「Default Slot」ノードを作成します。
「Default Slot」と「Output」を接続します。
「保存」して終了。
6. アニメーションモンタージュを作る
アニメーションシーケンスの全6つを選択して右クリックし「AnimMontageを作成」を選択します。
するとアニメーションモンタージュというアセットが6つ作成されます。
アニメーションモンタージュを開き[アセット詳細]ビューの[Enable Auto Blend Out]をOFFにします。
この設定をするとアニメーションしっぱなしになります。
今回の箪笥の扉の場合だと、
・設定がONの場合:扉が開いて、閉じてしまいます。(アニメ位置が0.0に戻ります。)
・設定がOFFの場合:扉が開いたところで止まります。(アニメ位置が1.0で終了します。)
これを6つ全部に設定します。
7. アクターのブループリントを作る
「kagu-BP」をダブルクリックで開いて、コンポーネントで追加→「Skeletal Mesh」を選択。
詳細の[Skeletal Mesh]には「kagu」を割り当てます。
Skeletal Meshを選択して詳細の[Animation Mode]は「Use Animation Blurprint」を選びます。
[Anim Class]は「kagu-AnimBP」を割り当てます。
8. 家具を配置する
ワールドに配置するのは「kagu-BP」です。いつも通り配置しましょう。
実験1
まずは「箪笥をクリックすると右扉が開く」という実装だけしてみましょう。
0. 準備
レベルブループリントあたりでコントローラーと「Show Mouse Cursor」と「Enable Click Events」ノードを接続して有効にしておいてください。
これでPLAY中にマウスカーソルが表示されて、マウスクリックするとOnClickイベントが有効になります。
1. コンポーネントのSkeletalMeshを選択した状態で、イベントグラフで右クリックし「ActorOnClicked」ノードを作成。
さらに「モンタージュを作成 (Play Montage)」ノードを作成してActorOnClickedノードと接続します。
Play Montageノード
・In Skeletal Mesh Component →コンポーネント「SkeletalMesh」を接続。
・Montage In Play →アニメーションモンタージュ「kagu_door_right_Anim_Montage」をプルダウンから選択。
あとコンポーネントのSkeletalMeshを選択して、[詳細]ビューの[コリジョン]にある「コリジョンプリセット」は「CollisionDynamic」とかにしておきます。「NoCollision」だと反応しませんので注意。
2.PLAYしてみましょう。
箪笥をどこでもいいのでクリックすると、右扉が開くことが確認できました。
実験2
ここまでくるともうちょっと欲が出てきます。
「それぞれのパーツをクリックすると、クリックされたパーツがアニメーションする」みたいなことがしたいですよね。
1.SkeletalMeshの「コリジョンプリセット」は「NoCollision」に戻しておきます。これが割と重要。
2.コンポーネントでBox Collisionを6つ追加します。
6つのBoxはすべてパーツの位置といい感じに重なるようにしておきます。
3.Box Collisionの「コリジョンプリセット」は「OverlapAllDynamic」とかに変更します。
4.さらにBoxについて、[詳細]ビューで[イベント]の[On Clicked]を選択して、イベントを用意します。
「OnClick(Box_door_right)イベント」ノードからPlay Montageノードを接続します。
この作業を6つのOnClickイベントに対して実装していきます。
5.PLAYしてみましょう。
箪笥のそれぞれのパーツをクリックするとアニメーションすることが確認できます。
トラブルシューティング
私がハマったトラブルたちです。
Q. 設定は完璧だと思うんだけどなぜかアニメーションしない。
A. 手順5の、アニメーションブループリントの「Default Slot」のセットができていないのかも。
Q. クリックしても反応しない。
A. 実験1の0.準備の設定をし忘れているのかも。
Q. Boxコリジョンをちゃんと設定したのにクリックしても反応しない。
A. SkeletalMeshのコリジョンプリセットがNoCollisionになっていないからかも。
参考サイト
・アニメーションを再生する方法(Animation Blueprint編)【UE5,UE4】 – ZENN
・アニメーションモンタージュとは?自然にアニメーションを再生させよう [UE5入門続編 #1-9] – ZENN
・Hello, Play montage does not work. – Unreal Engine Forums
・Animation Montage – Unreal Engine Documents