はじめに
ゲーム開始時にスポーンする Character クラスなどを呼び分ける実装を紹介します。 Alche の公式Xで以前紹介した内容をベースに、発展的な関数の紹介なども行っていきます。
今日の動画は #UE のTipsです!
— Alche, Inc (@alche_studio) September 13, 2023
Dev シリーズ第一回は GameMode の Default Pawn Class をBP処理で動的にオーバーライドする方法です!
この方法を利用すればプレイヤーが選択した Pawn Class をスポーンさせることができます。#UEStudy #AlcheUETips pic.twitter.com/DgfEP49ytN
環境は UE5.3 の Third Person Template を使用します。
解説
Character を呼び分けるため、以下のように Character を2体用意しました。

そして GameMode の Default Pawn Class には BP_Manny_Red を指定しておきます。
これで実行するとご存知のように BP_Manny_Red が操作キャラクターとしてスポーンされます。

これを Default Pawn Class は BP_Manny_Red のままで BP_Quinn_Blue にオーバーライドする実装をしていきます。
GameMode を開き、MyBlueprint の FUNCTIONS から Get Default Pawn Class for Controller をクリックして開きます。

この関数は Default Pawn Class を取得する関数です。この関数の Return Value に好きな Pawn クラスを指定することによって Default Pawn Class として利用され、操作キャラクターのオーバーライドが可能です。

BP_Quinn_Blue にオーバーライドする実装をしてみました。Parent の呼び出しは不要なので削除しています。
これで実行をしてみます。画像が小さくて申し訳ないですが、Default Pawn Class が BP_Manny_Red に設定されているのに対して、BP_Quinn_Blue にオーバーライドしてスポーンさせることができました。

今回は、スポーンするPawnのクラスをオーバーライドしただけでしたが、特定の条件によって分岐させる処理をGet Default Pawn Class for Controller内に記載することにより、スポーンするキャラクターを呼び分けることができます。
スポーン位置もオーバーライドしたい
上記で紹介した関数と類似のもので、 Spawn Default Pawn for と Spawn Default Pawn at Transform が存在します。どちらも操作キャラクターのオーバーライドが可能ですが、こちらのふたつの関数はスポーン位置のオーバーライドも行うことができます。

Spawn Default Pawn for
こちらは、PlayerController 型の引数である NewPlayer と Actor 型の引数である StartSpot を受け取ります。StartSpot には、PlayerStart がレベル内に存在していたらその参照が入ってきます。
Get Default Pawn Class for Controllerではスポーンしたい Pawn のクラスを返すだけでしたが、この関数のオーバーライドの際は、Spawn Actor ノードを利用して実際に Pawn をスポーンするところまで行います。この Spawn Actor ノードの Spawn Transform 引数において、好きなスポーン位置を指定することができます。関数の引数である StartSpot の Transform を利用しないでスポーンすることにより、Transform のオーバーライドも行える、ということです。
ReturnValue には、Spawn する Pawn のアクタ参照を返します。

Spawn Default Pawn at Transform
こちらはスポーン位置の情報となる引数が Transform 型の Spawn Transform になっていますが、オーバーライドの仕方は先程と同様です。自身で指定した Pawn のクラス及び Transform を用いて SpawnActor ノードを発火させ、スポーンした Pawn の参照を戻り値として返します。

おわりに
ゲーム開始前にキャラクター選択などでプレイヤーが選択したキャラクターを動的に設定してスポーンさせたいような場面などあると思います。そのような場面などで利用できるかもしれません。
ここまで読んでいただきありがとうございました。