【UE5】スポーン時に見た目を動的に変更する処理を解説!
Tutorial Eキー入力, InputAction, Random, SkeletalMesh, Tutorial, UE, UE4, UE5, UnrealEngine, Visual Scripting, アクター生成, アンリアルエンジン, ゲームプログラミング, ゲーム演出, ゲーム開発, スケルタルメッシュ, スポーン処理, チュートリアル, ランダム処理, ロジック構築
今回は、「【UE5】スケルタルメッシュをランダムにスポーンする処理」ということで、動的にランダムな見た目のブループリントアクターを生成する方法について記事を作成してみました。
銃をランダムに、スポーンさせているのですが、Skeletal Meshを銃ではなく、色んなメッシュに変更することによって、様々なアイテムをスポーンさせるときに役立つかなと思いますので、是非作成していってください。
実は、本記事の内容はYoutubeにも動画を投稿しているので、
動画がいいよぉ!って方はそちらをご覧いただければと思います。
※本記事の動画は、5月2日18時から公開のため、動画が公開されたタイミングで、動画のリンクを更新します。
※現時点では、以前投稿したインベントリボックスについての動画リンクを掲載させていただきました。

今回は、「Military Weapons Silver」というアセットを利用していきます
こちらのアセットですが、なぜかFabでページを開けなかったため、リンクを乗せられずすいません。
もしかしたら、無料公開が終了になっている可能性があるので、お好きなSkeletalMeshを使って再現してください

まずは、ゲームプレイ中にEkeyを押したら、アクタがスポーンする処理を作成していきたいと思います。
コンテンツドロワーを開いて、右クリックからブループリントを選択し作成

アクタを選択して、ブループリントを作成します。
名称:BP_Weapons

コンポーネントから「Skeletal Mesh」を追加します
メッシュは後から関数を作成して、そっちで制御するので、いったんここでは適当なMeshを差し込んでおいてください。

ブループリントの関数(Construction Script)に移動します。
Set Simulate Physicsをセットして、SimulateをTrueにしましょう!
Set Simulate Physics
物理シュミレーションのON/OFFを切り替えるノード

SkeletalMeshのコリジョンを設定しましょう
今回は、BlockAllDybamicに設定します
※コリジョンが無効になっている場合、Set Simulate Physicsが有効になっている場合でも物理演算が無効になるので忘れないよう設定してください

続いて「アクタコンポーネント」を作成しましょう!
右クリック→ブループリント→アクタコンポーネントを選択して作成
名称:BP_SpawnWeapons

「BP_ThirdPersonCharacter」を開きます
コンポーネントタブの追加から、先ほど作成した「BP_SpawnWeapons」を追加します。

BP_SpawnWeaponsコンポーネントを開きます
イベントグラフに「ActionKey」 「Get Player Character」 「Get World Location」を配置します
Get Player CharacterとGet World Locationの間にあるノードは、Get World Locationを配置するときに(Mesh)と記載のあるものを選択すると自動で配置されます

続いて取得したLocationから、ブループリントがスポーンする場所を作成してあげます
Get World LocationのReturn Valueを「Add」と「Multiply」配置して接続します
Addノードには、Multiplyの出力ピンを接続してあげます
ちなみに今回MultiplyはZの値を100に設定しているので、キャラクターのワールド位置から上方向(頭上)を算出して、アクタがスポーンします

「Spawn Actor From Class」をまずは配置します(実行ピンはEKeyと接続)
Classを作成していた「BP_Weapons」に設定し、Addノードの出力ピンを「Spawn Transform」ピンに接続
Collision Handling Overrideは今回「Try To Adjust Location, But Always Spawn」にしています
ちなみにPrint Stringが接続されていますが、こちらはなくても問題ないです
ここまできたら一度ゲームをプレイしてみてください。うまくいっていれば、Ekyeを押すと、アクタがレベル内にスポーンされたかと思います

ここからは、スポーンしたアクタがランダムなSkeletalMeshを参照して、スポーンするように処理を組んでいきたいと思います。
コンテンツドロワーを開いて、右クリックから列挙型を作成します
名称:E_Weapons

作成した列挙型(Enum)ファイルを開いたら、列挙子を必要な分追加してください
今回、SkeletalMeshは4つ使いたいので、同様に列挙子も4つ追加しました
名称:Assault_Rifle、Grenade_Launchar、Knife、Pistols

列挙型(Enum)の作成ができたら、「BP_Weapons」のConstruction Scriptに移動して続きの処理を作成しましょう
まずは「Random Integer in Range」ノードを配置します
インプットピンは「Min=0」 「Max=3」に設定
Random Integer in Range
指定範囲内でランダムな整数値を取得するノードです。0もカウント対象になるので、列挙子-1でMax数を設定します。
Random Integer in RangeのReturn Valueピンを引っ張り、Selectノードを配置します。
初期値では、Optionピンが2つしかありません。
なので、記事通りに作成中の方は「ピンを追加⊕」を押して、Option3まで追加してください。
作成したEnumの一番上にある列挙子がOptionピンに設定されているので、プルダウンからそれぞれ対象のものに変更してください

Switch on E_Weaponsノードを配置します
※「Switch on 列挙型」で検索して配置するため、記事内と作成した列挙型の名称が異なる場合は、気をつけてください
コンポーネントタブにあるWeapons(SkeletalMesh)をGetで配置し、Set Skeletal Mesh Assetを接続し、各種Switch on E_Weaponsの実行ピンと接続してください
接続が完了したらそれぞれNewAssetに呼び出したいメッシュを設定します

最後に、デバッグ用にPrint Stringを各種実行ピンと接続して、Enumの変数をInstringに接続して完了になります
Enumの変数をInStringに接続すると、間に「Enum to String」が自動で配置&接続されます
Enum to String
列挙型(Enum)を、その名前を表す文字列に変換するノードです。
ここで、今回の作業は以上となりました!
ゲームをプレイして見ましょう!!!
動画のように頭の上から、ランダムな見た目のアクタがスポーンされてますかね?
できていたら完璧です!!!
ナイス実装でした!
冒頭でも触れましたが、今回は頭上にスポーンさせただけですが、スポーンする位置や設定を多少変更すれば色々なことに利用できると思いますので、応用してみてください
YouTube活動やXもやっているので、そっちにも是非遊びにきてください!
また、お会いできるのを楽しみにしております。