Unreal Engine でリスポーン処理を実装しました!
UE5にて、リスポーン処理を実装した際のメモになります。
参考になる人はなかなかいないかもしれませんが、何かの参考になるかもしれないので、処理内容を公開しておきます。
『おわりに』には参考にさせていただいたWebページを乗せています。
※内容は変更する可能性があります。
※Unreal Engineの5.0.3で実装しました。
動作イメージは以下。
使い方は、位置を保存するためのオブジェクトをMapに配備し、死亡時によびだされるRespawn画面をクリックすると、オブジェクト位置に復帰する。
セーブしたいデータを定義するBluePrintを作成
親にSaveGameを指定し、BluePrintを作成
名前をBP_MySaveGame(名前は任意)に設定
VARIABLESに保存したいデータを設定
今回は、キャラクターの位置を保存したいので、Transform型の変数を作成
復帰位置を保存するためのセーブ用のオブジェクト
親にAcotorを指定して、BluePrintを作成
名前をBP_CheckPointに変更(名前は任意)
Componentsにボックスコライダー、スタティックメッシュ、パーティクルシステムを追加
BoxCollider:キャラクターが接触したことを検知し、データの保存処理を行う
StataicMesh:セーブ用のオブジェクトのメッシュを設定する
ParticleSystem:パーティクルシステムを設定する
BoxColliderの各種設定を行う
Transform:スタティックメッシュを覆うように設定する
Collision:キャラクターが接触したことを検知するためにGenerateOverlap Eventsにチェックを付ける
Events:On Component Begin Overlapをクリックして、キャラクターが接触した際の処理を記載(後ほど記載)
StaticMeshの設定を行う
Collision:オブジェクトをキャラクターが通り抜けてもよい場合はCollision PresetsをNoCollisionに設定しておく
ParticleSysteの設定を行う
特に必要な設定はないので好きなように設定する
On Conmponent Begine Overlap (BOX)の設定を行う
処理1
SaveGameオブジェクト(BP_MySaveGame)を作成する
作成したオブジェクトの変数に値をセット
スロットにSaveGameオブジェクトを保存する
処理2
(なくても問題ない)
VARIABLESにSoundCue形式の変数を作成
コンパイルして、Default Valueに好きな音のSoundCueを設定する
(変数の目のマークをクリックしておくと、配備したCheckPoint毎に音をMap上で変更できる)
PlaySound atLocationを使用して、音を鳴らす
GameModeにリスポーンを実現するための処理を記載する
ゲームのGameModeを開く
Add Custom EventからEventを作成し、Respawnと名前を付ける
※GameModeを作成済みプロジェクトでは、World SettingsのGame Mode欄もしくは、Project SettingsのProject>Maps&ModesのDefault GameMode設定を確認しましょう
処理1
Load Game from slotでセーブ用オブジェクトでセーブしたTransformの情報を取得する
処理2
キャラクターを削除する
キャラクターをセーブ位置からリスタートさせる
死亡時に画面をクリックするとリスポーンするように設定する
死亡時に画面に表示するWidgetを作成する
Widget Blueprintを作成(Contentで右クリック>WidgetBlueprint>User Interface>User Widget)
名前を好きなように変更(今回WB_DeathScreenとします
①CanvasPanelを追加
①の配下にImageを追加し、画面いっぱいに広げる(BackImage)
①の配下にTextを追加し、リスポーン方法を記載する
①の配下にButtonを追加(RespawnButton/必須)
リスポーン用のボタンの設定を行う
ボタンを画面いっぱいに広げる
ボタンを透明にする(Appearance>Style配下にあるすべての場合のTintのAlphaを0に設定する)
EventsのOn Pressedをクリックして、画面をクリックした際の処理を記載する
On Preeedの設定を行う
GameModeに作成したRespawnイベントを呼び出し、リスポーン処理を行う
死亡時に呼び出すWidgetを作成する
FUNCTIONSに死亡時にWidgetを呼び出すための関数(Death_f)を追加する
右クリックからCreate Widgetを選択
classに作成したWidgetを設定(WB_DeathScreen)
Add Viewportを設定しつなげる
必要に応じて、画面操作の設定処理を追加する
Widgetを呼び出す処理を死亡時に呼び出す
この部分はゲームの作りでかなり違う形になる。
死亡処理があれば、そこから呼び出すのが早い。
それが難しい場合は、死亡アニメーションの終了時に呼び出す。
※死亡アニメーション終了時の呼び出す方法の手順
死亡アニメーションのMontageを開く
アニメーションの最後にNotifiesを追加
Montageを設定しているAnimBPを開く
右クリックからFinishCharacterDeathのEVENTの呼び出しを配置
注意事項
Advanced_AI_SpawnSystemのアセットを利用した場合にエラーが発生
標題のアセットを利用した場合、リスポーン処理やワープ移動処理を行うとアセットでエラーが発生する。(プレイヤーが突然消えることにより、プレイヤーとの距離を測る処理でエラーが出てそう)
対処方法としては、リスポーン画面からはRestart処理を実施、Open Level BlueprintのEvent BeginPlayへリスタート処理(移動だけでも良いはず)を実施するようにすればエラーは無視できる。
※この方法だと、ゲームを始めた際に必ずセーブポイントから始まるので、フラグでPlayerStartから始めたり、アセットの処理を修正する方法を考えた方がよいかも
おわりに
参考にしたサイトを載せておきます。
(情報を公開してくださっているいる皆様ありがとうございます!)
以上
この記事が気に入ったらサポートをしてみませんか?