【UE5】Blenderでテスト用アニメを作ってUE5にインポートする方法

プログラマーの尾関です。今回はBlenderで作ったアニメーションをUE5でインポートして再生する方法について紹介します。

今回の記事を書くことになった理由

ゲーム開発の現場では、アニメーションデータの作成や検証を素早く行えることが大きな強みとなります。今回この記事を書こうと思ったきっかけは、プログラマー自身がテスト用のアニメーションモデルを作成し、実際にUE5上で動作確認できるようにしたいと考えたからです。

仮データを自分で用意できれば、アートチームからの最終データを待たずにゲームの実装や検証を進めることができ、開発効率が大きく向上します。

ということで、BlenderとUE5を組み合わせて、テスト用アニメーションを作成・インポートする手順を解説していきます。

Information

■動作確認バージョン

  • Blender: 4.4.3
  • Unreal Engine 5.5.4

テスト用モデルの作成

まずは Blender を起動してテスト用モデルを作っていきます。

ドアを支える部分を作る

Blenderを起動して最初に配置されているCubeを使ってドアを支える部分を作成します。

  • トランスフォーム
    • 位置
      • X: 0m
      • Y: -1m
      • Z: 1m
    • スケール
      • X: 0.1
      • Y: 0.1
      • Z: 1.0

メッシュの名前は「Fulcrum」にしておきます。

扉の部分を作る

「追加 > メッシュ > 立方体」を選んで立方体を作成します。

回転する扉部分を作ります。

  • トランスフォーム
    • 位置
      • X: 0m
      • Y: 0m
      • Z: 1m
    • スケール
      • X: 0.1
      • Y: 0.85
      • Z: 1.0

扉の部分のメッシュの名前は「Door」にしておきます。

アーマチュアの作成

次にアーマチュアを作ります。

Information

Blenderではスケルトンをアーマチュアという名称で呼ぶようです。

まずは「Z」キーを長押しして「ワイヤーフレーム」を選び、メッシュの表示を切り替えます。

これはボーンの表示をわかりやすくするための設定です。

次に「SHIFT+A」で追加メニューを表示して「アーマチュア」を選びます。

すると原点にアーマチュアのボーンが追加されます。

「G」キーを押して移動モードにし、ドアを支える部分あたりに移動します。

位置としては (X, Y, Z) = (0, -1, 1) あたりです。

続けて回転を X = -90° にして横向きにします。

そうしたら「Door」メッシュをクリックして、「CTRL」を押しながらアーマチュア階層のボーンをクリック。

そしてメッシュやボーンがあるビューの上で「CTRL+P」を押して、「自動のウェイトで」を選びます。

注意点

「CTRL+P」による親子付けのメニューは「メッシュを配置しているビューにマウスカーソルを移動」させないと表示されないようです。

するとアーマチュアの下にDoorメッシュが移動してボーンに関連付けされました。

Zキーを長押しして「レンダー」に戻します。

末端のボーンを選んだ状態で「回転Z」から扉を回転できるようになりました。

アニメーションの作成

編集モードの設定

Blender上部にあるメニューから「アニメーション」を選んでアニメーションモードにします。

アニメーションモードの設定

Blenderの下側のアニメーションが「ドープシート」となっている部分を「アクションエディター」に変更します。

そして「+新規」を選びます。

作成したアクションを「door_idle」にします。

フレームを「0」に移動。

アーマチュアの末端のボーンを選んで「回転Zのキー」のアイコンをクリック。

するとキーフレームが設定されました。

そしてフレームを「20」に移動。

待機アニメは特に何もしないのでそのまま "回転Zのキーフレーム" をクリックして設定します。

Information

キーフレームが1つだけのアニメーションは Unreal Engineでのインポート時に失敗するようなので、ダミーで20フレームのアニメーションとしました。

ドアが開くアニメーションの作成

別のアクションを作成します。新規アクションアイコンをクリック。

作成したアクションの名前を「door_open」に変更。

念のため、アクションが2つあることを確認します。

フレームが「0」にあることを確認。

そして回転Zのキーフレームをクリック。

そしてフレームを「20」に移動。

回転Zを「65°」あたりにしてキーフレームアイコンをクリック。

Warning

「数値入力→キーフレームアイコンをクリック」の順番でないと、キーフレームの値は設定されないようです。

(キーフレームのアイコンクリック後、数値入力しても反映されません)

これでドアが開くアニメーションが作れました。

なお、終了の部分を「20」にすると繰り返し確認がしやすくなります。

FBXの出力

出力前の設定

Unreal Engineで読み込めるFBXを出力する前にやるべきこととして、ここの「ボーン」というルートボーンは “root” にリネームするのが推奨されるようです。

このようにリネームしました。

また「アーマチュア」の文字も "anim" などに変えておいた方が良さそうです。

FBXの出力

アニメーションを出力するときには「アーマチュア」を選択します。

Warning

このときメッシュが選択されているとメッシュのみが出力されるようです。

FBXの出力はメニューから「ファイル > エクスポート > FBX」を選びます。

書き出し設定は以下のようにしました。

注意点として「スムージング」は「面」または「辺」にしないと、Unreal Engineでインポート時に「スムージンググループが見つからない」というエラーになることがあります。

Danger

■UEでのFBXインポート時に「スムージンググループ情報が見つからない」というエラーが出る場合

FBX ファイルのメッシュ「立方体」にスムージンググループ情報が見つかりません。FBX エクスポータの [Export Smoothing Groups] オプションを必ず有効にしてから、ファイルをエクスポートします

UEでのFBXインポート時に上記エラーが出る場合は Blenderの FBX の出力設定を見直します。

具体的には、ジオメトリの項目からスムージングを「」または「」にします。

ただ、例えば「アニメーションのキーフレームが1つだけの無効なアニメ」など不正なデータのときにも「スムージンググループ情報が見つからない」というエラーが出力されるので、色々と設定を見直さなければならないことがあります。

ここまでのデータ

ここまでの作業で作成した Blenderのデータと FBX ファイルを添付しておきます。

Unreal Engineでのインポート

確認用のプロジェクトは何でも良いですが、今回はサードパーソンのテンプレートを使ってみます。

FBXのインポート

再インポートを考えると正しい場所に置いたほうが良いですが、今回はテストデータなのでそのまま FBX をコンテンツドロワーにドラッグ&ドロップ。

するとインポートダイアログを表示されるので「インポート」ボタンをクリック。

「インポート」ボタンが押せない場合は “Import Only Animations” を OFF にすると押せるようになります。

特にエラーがなければ以下のアセットがインポートされます。

  • スケルタルメッシュ
  • アニメーションシーケンス: door_idle
  • アニメーションシーケンス: door_open
  • PhysicsAsset (物理アセット)
  • Skeleton (スケルトン)
  • Material (マテリアル)

アニメーションブループリントの作成

Animブループリントの作成

「スケルタルメッシュ」を右クリックして「作成する > Animブループリント」からアニメーションブループリントを作成します。

アセット名は「ABP_Door」としました。

ステートマシンの作成

何もないところを右クリック、日本語で「ステートマシン」で検索して “State Machine” を作成します。

名前を「Top State Machine」にして “Output Pose” に接続します。

Idleステートの追加

Top State Machine」をダブルクリック。”Entry” ノードを伸ばして「ステートを追加」でステートを追加します。

ステートの名前は “Idle” とします。

“Idle” をダブルクリックして Idleステートを編集。アセットブラウザから “door_idle” を追加して Output に接続します。

「コンパイル」ボタンをクリックして正常にコンパイルされることを確認します。

“Top State Machine” を選んで State Machine に戻ります。

Openステートの作成

“Idle” ステートを伸ばして「ステートを追加」を選択。

ステート名を「Open」にします。

Openステートをダブルクリックして、”door_open”アニメーションシーケンス を Output に接続します。

「コンパイル」をクリックすると以下のような警告となります。

[1597.54] ABP_Door のコンパイルに成功しましたが、1 件の警告があります [34 ミリ秒] (/Game/Door/ABP_Door.ABP_Door)

これは Idle ステートから Open ステートへの遷移が実装されていないためです。

状態遷移を実装するために「Top State Machine」をクリックして戻ります。

ステートマシンのトランジションルールのアイコンをダブルクリック。

左下にある変数定義から「+」アイコンをクリックして変数を追加し、名前を「bOpen」の Boolean型で作成します。

そして Result に接続します。

「コンパイル」をクリックで警告が消えました。

状態遷移の動作確認

Top State Machine” に戻って、詳細タブから 変数 “Open” のデフォルト値を ON にします。

すると Openステートに遷移して扉が開くアニメーションが再生されます。

Idleに戻る遷移を実装する

開いた扉が戻る遷移ととして、OpenからIdleに遷移する処理を作ってみます。

OpenステートからIdleステートに線を伸ばして接続します。

そしてトランジションルールアイコンをダブルクリック。

bOpen変数を「Not Boolean」で反転させて、Resultに接続します。

Open変数をON/OFFすると、ドアの開閉が確認できました。

ブループリントクラスでアニメーションを再生する

最後にブループリントクラスでアニメーションを再生してみます。

ブループリントクラスの作成

任意の場所で「ブループリントクラス」を作成。

親クラスは「アクター」にしておきます。

名前は「BP_Door」としておきました。

コンポーネントの追加から「スケルタルメッシュコンポーネント」を追加。

スケルタルメッシュコンポーネントの詳細から「Animation > Animクラス」に「ABP_Door」を指定。またメッシュには「Door002 (ドアメッシュ)」を指定します。

プレイヤーが近づいたら開くようにする

イベントグラフを開いて Tickイベントでプレイヤーが近づいたら bOpen フラグを ON/OFF するようにしてみました。

レベルに配置して動作確認

BP_Doorをレベルに配置して動作確認します。

プレイヤーが近づいたら扉が開くようになりました。

おしまい

以上、Blenderで作成したアニメーションメッシュをUnreal Engineで再生する方法でした。

テストデータ作成などに活用できれば幸いです。

\ 最新情報をチェック /