PR

【UE5】動的にメッシュを生成・削除する方法

Unreal Engine 5

Unreal Engine 5で、ゲームプレイ中にスタティックメッシュやスケルタルメッシュを作成する方法です。
プレイヤーキャラクターにメッシュコンポーネントを追加したり、新しいアクタを作成してメッシュを追加できます。

上は「Delay」ノードを使って、プレイ開始5秒後に追加、その3秒後に削除した動画です。

ここでは、ロボットのベースとなるスケルタルメッシュに、パーツのスタティックメッシュを追加します。
いくつか下準備はありますが処理としては、ベースとなるスケルタルメッシュを割り当てたスケルタルメッシュコンポーネントに、スタティックメッシュコンポーネントを追加し、そのスタティックメッシュコンポーネントに、パーツのスタティックメッシュを割り当てます。

スポンサーリンク

ソケットの作成

スタティックメッシュを、スケルタルメッシュの決まった位置に追加したいので、ソケットで追加位置と姿勢を決めておきます。

ソケットの追加

スケルトンエディタを開き、スケルトンツリーのソケットを追加したい(=スタティックメッシュを連動させたい)ボーンを右クリック→「ソケットを追加」で、追加します。
追加したソケットはダブルクリックして、名前を変更できます。

ソケットのトランスフォーム調整

プレビュー用にスタティックメッシュのアセットを追加して、狙い通りに表示されるように調整します。

ソケットを追加したボーンを右クリック→「プレビューアセットを追加」→アセットを検索して選択し、追加します。

ソケットを選択して、プレビューのウィジェット操作や、「詳細」→「Relative Location」等で調整します。

スポンサーリンク

追加先コンポーネントの作成

キャラクターブループリントに、スタティックメッシュコンポーネントの追加先となるコンポーネントを用意しておきます。
ここでは、ベースとなるスケルタルメッシュを割り当てたスケルタルメッシュコンポーネントが追加先です。
追加先のスケルタルメッシュコンポーネントがない場合は、以下のように作成します。

コンポーネントの追加

キャラクターブループリントを開き、「コンポーネント」の「追加」→「Skeletal Mesh」でスケルタルメッシュコンポーネントを追加します。

スケルタルメッシュの選択

「コンポーネント」で、追加したスケルタルメッシュコンポーネントを選択し、「詳細」の「Skeletal Mesh Asset」でスケルタルメッシュを選択します。

スポンサーリンク

動的な生成処理の作成

キャラクターブループリントのイベントグラフにスタティックメッシュコンポーネントを生成する処理を作成します。
この処理をゲームプレイ開始時などに実行するようにすれば、スタティックメッシュを動的に生成できます。

全体

全体としては、スタティックメッシュコンポーネントを追加して、スケルタルメッシュコンポーネントにアタッチした後に、スタティックメッシュを割り当てる流れです。

コンポーネントの追加

「Add Static Mesh Component」で、スタティックメッシュを割り当てるための、スタティックメッシュコンポーネントを追加します。

スタティックメッシュの割り当て

「Attach Component To Component」で、ソケット名とアタッチのルールを設定して、スケルタルメッシュコンポーネントにスタティックメッシュコンポーネントをアタッチします。
「Set Static Mesh」で、割り当てるメッシュを設定して、スタティックメッシュコンポーネントにスタティックメッシュを割り当てます。

覚え書き

スケルタルメッシュの動的な生成

「Add Static Mesh Component」と「Set Static Mesh」の代わりに、「Add Skeletal Mesh Component」と「Set Skeletal Mesh Asset」を使って、スケルタルメッシュの動的な生成もできます。

同一メッシュを大量に生成する場合の負荷軽減

同一の「Add Static Mesh Component」の代わりに「Add Instanced Static Mesh Component」を使うと処理負荷を軽減できます。
ただし、同一のスタティックメッシュインスタンスは、同じLOD表示になるようなので、使い方によっては表示がおかしくなるかもしれません。

スポンサーリンク

動的な削除処理の作成

キャラクターブループリントのイベントグラフにスタティックメッシュコンポーネントを削除する処理を作成します。
この処理を弾が衝突した時などに実行すれば、スタティックメッシュを動的に削除できます。

生成したスタティックメッシュコンポーネントを変数に取得しておき、「Destroy Component」で、そのコンポーネントを削除します。

これで、ゲームプレイ中にスタティックメッシュを生成・削除できました。

以上です。

コメント

タイトルとURLをコピーしました