ゲーム制作雑記録 - 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が無いよとエラーが出てしまいました。対処法としてPlayerStartだけはPersistent Levelに置くことで動きました。確認のために「ChoosePlayerStart」にサブ・レベルをロードする処理を入れるという荒業をしたけど、うまくいかなかったなぁ(´▽`;うむ。わからん。)

→「ゲーム制作雑記録」トップ・ページへ