Blenderで作成したアニメーションを使用してUE5でドアを開閉する方法/Blender&UE5
UE5でドアを開閉する方法を調べると、UE5内でアニメーションを作成して実施している方法ばかりでした
ですがせっかくBlenderで作成したアニメーションを使用しないのは勿体無いと思ったのでいろいろ調べてまとめました
Blender
アニメーションの作成
ドアのモデルを作成します
「編集モード」でドアの開閉の軸となる面の頂点を選択し
「頂点をスナップ」→「カーソル→選択物」を押します
オブジェクトモードで
「原点を設定」→「原点を3Dカーソルへ移動」を押します
ドアのアニメーションがわかりやすいように壁を作成します
「出力プロパティ」の「フレームレート」を任意の数値に変更します
「アニメーション」のワークスペースを表示させます
画面下部に表示中のコンテクストを「ドープシート」から「アクション」に変更します
ドアを開けるアニメーションを作成します
「新規」を押し名前をOpenに変更します
1フレーム目に合わせて、ドアが閉じている状態で「キーフレームを挿入」を押します
60フレーム目に合わせて、ドアを回転させドアが開いている状態で「キーフレームを挿入」を押します
ドアを閉じるアニメーションを作成します
新規アクションを作成し名前をCloseに変更します
先ほどと同様にドアが閉じるときのアニメーションを作成します
終了フレームを60に変更します
エクスポート
FBXファイルにエクスポートします
その際に「アニメーションをベイク」にチェックを入れます
UE5
インポート
ドアのfbxファイルをコンテンツブラウザにD&Dします
「Import Animations」にチェックを入れてインポートします
コリジョン作成
Wallのスケルタルメッシュをダブルクリックし開いて
「スタティックメッシュを作成」を押します
コンテンツブラウザからWallのスタティックメッシュを開いて
「詳細」→「コリジョンプリセット」→「Collision Complexity」を
「Use Complex Collision As Simple」に変更します
「凸型分解」を「適用」します
コンテンツブラウザからDoorの物理アセットを開きます
「ツール」→「ボディの作成」→「Primitive Type」を「Box」に変更し
すべてのボディを生成を押します
インターフェース作成
コンテンツブラウザ内で右クリックし
「ブループリントインターフェース」を選択します
名前をInteractInterfaceに変更します
InteractInterfaceを開き、関数名をInteractに変更します
「コンパイル」を押します
Actorブループリント作成
コンテンツブラウザで右クリックし
「ブループリントクラス」→「Actor」を選択します
名前をDoor_BPに変更します
Door _BPを開きます
「コンポーネント」の「追加」を押し「Skeletalmesh」を追加し、名前をDoorに変更します
「詳細」→「メッシュ」→「Skeletal Mesh Asset」にDoorのスケルタルメッシュを選択します
「詳細」→「コリジョン」→「コリジョンプリセット」を「BlockAll」に変更します
「コンポーネント」の「追加」を押し「Static Mesh」 を追加し、名前をWallに変更します
「詳細」→「スタティックメッシュ」→「Static Mesh」にWallのスケルタルメッシュを選択します
「コンポーネント」の「追加」を押し「Box Collision」を追加します
Box Collisionの範囲がドアの開閉のインタラクトの範囲になるので、ビューポートで任意の大きさに調整します
「クラス設定」を押します
「詳細」→「インターフェース」→「継承インターフェース」の
「追加」を押し「Interact Interface」を選択します
「コンパイル」を押します
イベントグラフに移ります
以下のようにノードを繋げます
「Play Animation」の「アセットを選択」にドアの開閉アニメーションをそれぞれ選択します
「コンパイル」を押します
Characterブループリント編集
コンテンツブラウザ内のキャラクターブループリントを開きます
以下のようにノードを繋げます
「Does Implement Interface」の「クラスを選択」に「InteractInterface 」を選択します
コンパイルを押します
ドアの配置
コンテンツブラウザ内のDoor_BPをD&Dして配置します
シミュレーションをして、ドア付近に立ちEキーを押すとドアが開閉できるのを確認します
コリジョンを設定してあるので、ドアが閉まっているときはプレイヤーが通れないようになっています
テキスト表示
ドアに近づいたときにEキーを押す旨のテキストを表示させます
Door_BPをダブルクリックします
「詳細」→「テキスト」→「Text」をPress Eに変更します
ビューポート内でテキストの表示位置やサイズを変更します
「詳細」→「レンダリング」の「Visible」と「Hidden in Game」にチェックを入れます
コンポーネントの「Box」を選択し
「詳細」→「イベント」→「On component Begin Overlap」の「+」ボタンを押します
同様に「On component End Overlap」の「+」ボタンを押します
以下のようにノードを繋げます
「On component End Overlap」から繋がっている「Set Hidden in Game」の「New Hidden」にチェックをして「コンパイル」を押します
シミュレーションをしてみると、離れているとテキストが表示されませんが、近づくと(Box Collisionの範囲に入ると)テキストが表示されることが確認できます
余談
Blenderで作成したアニメーションを使用して、UE5でドアを開閉する方法を調べる際に日本語の動画等だと全然見つからなかったので海外の方が作成した動画等を漁ってたのですが、そこで出てくるドアが内開きばかりでした
気になって調べたところ、海外のドアに内開きが多い理由は外開きのドアに比べて防犯性が高いかららしいです