ゲーム制作雑記録 - Unreal Engine - Blueprint - SubLevelと複数PlayerStartのメモ

アクション・ゲームでは定番のステージ・クリア型ですが、一つのレベルで複数レベル管理をするレベル・ストリーミングの機能でハマったのでメモを残します。従来の通り一つずつOpen Levelでレベルを開けば問題無いのですが、特に意味もなく興味本位でレベル・ストリーミング機能を使おうとしたばっかりに… 複数PlayerStart 一つのレベルに複数のPlayerStartがある場合にRestart Player At Player Startという関数でPlayerStartを指定してリスタートできるのですが、Destroy Actorしないとリスタートできなかったりして中々使いづらい(Kill ZがDestroyedイベントなのが…)。さらにRestart GameはPlayerStartを指定することができない。私が調べた限り、PlayerStartを指定して半恒久的にプレイヤーの開始位置にするという、気の利いた機能は現在UE5.5では無いようです。(ソースをサラッと見た感じ、情報を保持していないっぽい。) ただGameModeBaseの関数「ChoosePlayerStart」をオーバーライドして処理を実装すれば可能です。開始位置を動的に変更する際には、当然GameModeはプレイヤー・キャラがスポーンする前の話なので、GameInstance等から値を引き渡す必要があります。Destroyされても問題無いですし。 例)GameModeのイベント・グラフ (なんかStage NumberとかいうInteger型を使ってますが、そのままString型でもいいですね。) この例で気を付けないといけないのは関数「FindPlayerStart」の「Incoming Name」を空(から)にしないことです。空にしちゃうと自分自身(ChoosePlayerStart)を呼んじゃうので無限ループになります。(検知してくれるのでPCがデストローイ!されることはありません。) サブ・レベル作成時の注意点 私の知識不足のため仕様なのかどうか判らないのですが、PlayerStartを各サブ・レベルに置いてLoad Stream Levelしても、何故かPlayerStartが無いよとエラーが出てしまいました。対処法としてPlayerS...