プレイ可能なキャラクターを使用する Unreal Engine プロジェクトでは、Player Start アクタを使用して、ゲーム ワールドで、各プレイヤー キャラクターがランタイム時にスポーンされる場所をコントロールできます。
Player Start アクタはゲーム コントローラー アイコンとフラグで表現され、プレイヤーがスポーンされたときに正面となる方向を示す矢印が表示されます。
Player Start アクタを選択すると、2 つの追加コンポーネントが表示されます。アクタがゲーム ワールドで占める物理スペースを表すカプセルと、トランスフォーム ウィジェットです。
レベルの Player Start アクタ。左:非選択状態、右:選択状態。 画像をクリックするとフル サイズで表示されます。
レベルに Player Start アクタがない場合、プレイヤーはワールドの原点 (0,0,0) から常に開始されます。
Player Start アクタを配置する
Player Start アクタは他のアクタと同様にドラッグアンドドロップでレベルに配置されます。
複数の Player Start アクタをレベルに配置し、プレイヤー スポーン位置としてどの Player Start を使用するのかをブループリントまたは C++ でコントロールできます。
Player Start アクタを配置するには、次の手順を実行します。
画像をクリックするとフルサイズで表示されます。
-
迅速に追加 ボタンを メイン ツールバー でクリックします。
-
[Basic (基本)] > [Player Start] を選択します。
-
Player Start アクタをクリックして、レベル ビューポートにドラッグします。
プレイヤーをスポーンするために Player Start アクタを使用するとき、プレイヤー キャラクターの位置と回転は Player Start の位置と回転に一致します。スポーン時にプレイヤーの正面を特定の方向にする場合は、Player Start の 矢印 コンポーネントを使用して、必ずプレイヤーの正面を指すようにします。
複数の Player Start アクタがレベルにある場合、プレイヤーはそれらをランダムに選択した場所から開始されます。動きを妨げない Player Start アクタが優先されます。
Player Start「BADsize」警告
Player Start アクタを配置または移動すると、白地に赤枠の「BADsize」ラベルが表示されることがあります。
画像をクリックするとフルサイズで表示されます。
この警告が表示されるのは、Player Start アクタがレベルで他の何か (プロップやテレイン) とオーバーラップまたは交差するときです。この問題を解決するには、カプセル コンポーネントが他のオブジェクトとオーバーラップや交差しなくなるまで Player Start を移動します。
Player Start アクタをブループリントで使用する
Unreal Engine には Player Start アクタを操作するために使用できる複数のブループリント ノードがあります。これらは Player Start アクタの場所にプレイヤーを再スポーン、異なる条件に基づいて別の Player Start でプレイヤーをスポーンするなど、多様なシナリオで役に立ちます。
Player Start アクタに対して動作する次のノードは Game Mode ブループリントで利用できます。
-
FindPlayerStart:特定 タグ ( IncomingName プロパティで定義) に基づいて、レベルで Player Start アクタを見つけます。Player Start アクタのタグをアクタの [Details (詳細)] パネルで設定できます。
-
Restart Player at Player Start:特定 Player Start アクタを使用してプレイヤーを再スポーンします。
下のスクリーンショットでは、これらのノードを使用する方法のサンプルを示します。E キーを押したとき、タグ TheStartIWant
がある Player Start の位置でプレイヤーを再び開始します。このサンプルを試す場合は、使用するプロジェクトの Game Mode ブループリントでこれらのノードを再作成します。
画像をクリックするとフルサイズで表示されます。
PIE で Player Start を無視する
Unreal Editor で プレイインエディタ (PIE) を使用しゲームをプレビューするとき、Player Start アクタの位置にキャラクターをスポーンせずに、まずレベルで特定の場所に移動し、そこから PIE セッションを開始したい場合があります
これを実現するには 2 つの方法があります。
-
[Play Options (プレイ オプション)] メニューの [Spawn Player At (プレイヤーを特別な位置にスポーンする)] セクションで、現在のカメラ位置またはデフォルトのプレイヤースタート位置を選択できます。
]
-
レベル ビューポートの対象開始位置を 右クリック し、コンテキスト メニューから [Play From Here (ここからプレイ開始)] を選択できます。
Player Start の動作をカスタマイズする
Player Start アクタの大半の動作は、Game Mode Base クラス (AGameModeBase
) の FindPlayerStart()
および ChoosePlayerStart()
関数に実装されています。異なる動作にする場合は、対象プロジェクトの Game Mode クラスでこれらの関数の一方または双方をオーバーライドできます。
たとえば、このページで前に説明したように Player Start アクタをこれらの関数がランダムに選択するのではなく、次のような異なる基準に従って選択できます。
- プレイヤーが到達した最終チェックポイントに一番近い Player Start アクタ。
- プレイヤーのチームメートの現在位置に一番近い Player Start アクタ。
- プレイヤーまたはキャラクターに関連する他の属性 (開始時のチーム割り当てなど)。
FindPlayerStart()
および ChoosePlayerStart()
関数は、Player パラメータで、スポーンされるプレイヤーのコントローラーに渡されます。必要に応じて、この参照を使用して、独自の実装で、プレイヤーに関する情報にアクセスできます。
FindPlayerStart
プレイヤーの新しい開始位置が必要なときは常に、エンジンにより自動で FindPlayerStart()
が呼び出されます。開始位置をマークしたアクタで前に対象プレイヤーをスポーンした場合、この関数はそのアクタを返します。他の場合は、アクタを選択するために ChoosePlayerStart()
を呼び出します。
これが適しているのは、プレイヤーを再スタートするときに、初めにゲームに参加したときと異なる開始位置を選ぶかどうかをオーバーライドする場合です。
FindPlayerStart()
も Incoming Name パラメータを受け取ります。この名前が指定されている場合、デフォルトの実装は、Player Start Tag 設定の文字列に一致する、割り当てられた Player Start アクタを検索します。一致する Player Start アクタが見つかった場合、そのアクタを返します。この動作は使用する独自のゲームプレイ コードで FindPlayerStart()
を呼び出す場合に便利です。ただし、エンジンの内部で FindPlayerStart()
が呼び出されるとき、多くの場合 Incoming Name がありません。
ChoosePlayerStart
ChoosePlayerStart()
のデフォルト実装では、Player Start アクタをランダムに選択します。他のブロッキング ジオメトリで妨害されないものが優先されます。
これは FindPlayerStart()
のデフォルト動作をそのまま維持するかどうかをオーバーライドする適切な選択ですが、プレイヤーが初めてゲームに参加したときに開始位置を選択する独自のカスタム ロジックを使用できます。
例
FindPlayerStart()
の次の実装は、Game Mode Base から派生したブループリント クラスによるものです。現在の Game State を取得し、その Game State に保存された Checkpoint Location という参照位置を探します。Game State から参照位置を取得できる場合、その位置に一番近い Player Start アクタを返します。他の場合、基本クラスのオリジナル実装が呼び出され、ランダムで Player Start アクタが選択されます。
画像をクリックするとフルサイズで表示されます。
Game Mode と Game State の詳細については、Game Mode と Game State を参照してください。