【Unreal Engine】チェックポイントとリスポーン:死んでもやり直せるゲームにする

作成: 2026-07-23

UE5で死亡→復活のループを作る入門。死亡演出→入力停止→待ち→復活の4拍子、チェックポイントActorで最後の地点を覚える方法、作り直す/置き直すの2つのリスポーン方式、Kill Volumeで奈落を処理する方法、HPは戻すがコインは残す設計判断まで。溶岩に落ちたら旗から再開するアスレチックを作ります。

体力とダメージの仕組みを作って、プレイヤーが死ぬところまでは組めた。でも、死んだあとに何も起きません。画面が止まったまま、その場に倒れて、ゲームが進まなくなります。

死は、ゲームの終わりではなく、やり直しの始まりです。アクションでもアスレチックでもシューターでも、「死んだら少し前から再開する」というループがないと、ゲームは成立しません。この記事では、 死亡演出 → 入力停止 → 少し待つ → 復活 の流れと、最後に触れたチェックポイントから再開する仕組みを、溶岩に落ちたら旗から再開するアスレチックで作ります。

旗のチェックポイントを通り、溶岩に落ち、直前の旗の上で復活するループとソフトブルーのクレイ人形

この記事でわかること

  • 死んだときに踏むべき 4つの拍子(演出→停止→待ち→復活)
  • チェックポイントActorで 最後に触れた地点だけ覚える
  • リスポーンの2方式: 作り直す置き直す の使い分け
  • 奈落の底は Kill Volume で拾う(Blueprintで確実な方法)
  • 復活で戻すもの・残すもの(HPは全快、コインは維持)の 設計判断
  • 実践: 溶岩に落ちたら旗から再開するアスレチック

Sponsored

死んだら何が起きるべきか

「死んだら復活」と一言で言いますが、いきなり別の場所へワープさせると、プレイヤーは何が起きたか分かりません。良い死は、4つの拍子を順に踏みます。

死亡の4拍子。演出(倒れる)→入力停止→少し待つ→復活、を左から右へ並べた図
  1. 演出する: 倒れる、点滅する、画面が赤くなる。「今死んだ」と伝える
  2. 入力を止める: 死んでいる間は操作を受け付けない。倒れながら動けると台無しです
  3. 少し待つ: 0.5〜1秒の間。プレイヤーが状況を飲み込む時間
  4. 復活する: 保存地点へ戻し、状態をリセットし、入力を返す

この順番を守るだけで、死が「理不尽な中断」から「区切り」に変わります。実装では、この4拍子を1つの関数(たとえば HandlePlayerDeath)にまとめると、どこから死んでも同じ流れを通せます。

チェックポイントで最後の地点を覚える

復活先を決めるのが チェックポイント です。プレイヤーが通過した地点を覚えておき、死んだらそこへ戻します。

チェックポイントActorに触れると、その位置がLastCheckpointへ上書きされ、常に最後の1つだけを覚える図

仕組みは単純です。旗やかがり火のような BP_Checkpoint(Box Collision付き)を置き、プレイヤーが触れたら その地点を1つだけ記録 します。次のチェックポイントに触れたら上書きされ、常に「最後に触れた地点」が復活先になります。

この記録の置き場所は、 ゲーム全体の状況 なので GameState が自然です(プレイヤーが死んで作り直されても、記録は消えません)。ここでは分かりやすさのため、ルール判定の中心である GameModeLastCheckpointTransform(Transform型)を持たせます。

記録は保存しない: このチェックポイントは、ゲームを起動している間だけ覚えていれば十分です。だからSave Gameには書き出さず、変数に持つだけにします。ゲームを閉じても進行を残したいなら、その値を Save/Loadシステム でディスクへ書き出します。「セッション内の復活」と「起動をまたぐ保存」は、別の仕事です。

Sponsored

リスポーンの2方式:作り直すか、置き直すか

復活のやり方には2つの方式があり、それぞれ長所と短所があります。

作り直す方式(Destroy→Spawn→Possess)と置き直す方式(Set Actor Location+変数リセット)を左右で対比した図
方式やること長所短所
①作り直す今のPawnを Destroy → 保存地点で SpawnPossess(または RestartPlayerAtTransform状態が 確実に初期化 される。持ち越しバグが起きないUIやカメラがそのPawnを参照していると、参照が切れて作り直しが要る
②置き直すSet Actor Location で保存地点へ移し、変数(HP等)を手でリセット軽い。UI・カメラの参照が 切れないリセットし忘れた変数がバグの温床になる

RestartPlayer 系のノード(RestartPlayerAtTransform など)はGameModeが持っていて、Blueprintから呼べます。ただしGameModeはサーバーにしか存在しないので、マルチプレイではサーバー側で呼びます。

個人開発の小規模なゲームでは、 ②置き直す方式 が扱いやすいです。HPバーやカメラがプレイヤーを参照したままでも壊れないからです。この記事も②で組みます。「リセットし忘れ」の短所は、後述の「戻すもの・残すもの」を表にして潰します。

奈落はKill Volumeで拾う

アスレチックの死因は、たいてい「落下」です。ここで初心者がはまるのが、UE標準の Kill Z の扱いです。

World Settingsの Kill Z は、その高さを下回ったActorに処理を呼びます。ただし、その通知(FellOutOfWorld)は C++の関数で、Blueprintからは直接受け取れません 。「Kill Zを設定したのに、Blueprintで死亡処理が呼べない」で手が止まります。

奈落の底に大きなBox CollisionのKill Volumeを1枚敷き、落ちたプレイヤーがOverlapした瞬間に死亡処理を呼ぶ図

Blueprintだけで作るなら、答えはシンプルです。 奈落の底に、大きなBox Collisionの「Kill Volume」を1枚敷きます 。落ちたプレイヤーがそこに触れた瞬間、On Component Begin Overlap で死亡処理を呼びます。Kill Zの高さ判定を毎フレーム自分で見張る必要もなく、コリジョンの当たり判定 に任せられます。

戻すもの・残すもの

置き直す方式の弱点は「リセットのし忘れ」でした。これは、 復活時に何を戻し、何を残すか を最初に決めておけば防げます。しかもこれは、バグ対策であると同時に ゲームデザインそのもの です。

復活で戻すもの(HP全快・位置)と残すもの(コイン・鍵)を仕分けた図。敵の復活は設計判断として分岐
項目どうする理由
HP全快に戻す瀕死のまま復活させると、また即死する
位置・向きチェックポイントへ戻すこれが復活の本体
集めたコイン・鍵残す死ぬたびに没収すると、探索の意欲が折れる
開けた扉・倒した敵ゲーム次第ソウルライク風なら復活、親切設計なら維持。 ここが難度の調整弁

「死んだら何もかも巻き戻る」のか「進んだ分は残る」のかで、ゲームの手触りは大きく変わります。この表を、あなたのゲームの難度に合わせて書き換えるのが、リスポーン設計の勘所です。

Sponsored

実践:溶岩アスレチックを作る

3Dアクションの足場地帯、ホラーの即死トラップ、レースのコース復帰。 「落ちたら直前の地点からやり直す」 はジャンルを問わない定番です。ここではその1本を、旗のチェックポイントと溶岩の奈落で組みます。

作るのは、 旗に触れると記録され、溶岩に落ちると画面が暗転して、直前の旗の上でHP全快・コインそのままで復活する アスレチックです。

動かすとこうなります。プレイヤーが足場を渡って旗に触れる。次の足場で踏み外して溶岩に落ちる。画面がスッと暗転し、明けると直前の旗の上に立っていて、HPバーは満タン、集めたコインはそのまま。旗を1本も踏まずに落ちたら、スタート地点へ戻ります。

旗に触れて記録、溶岩に落ちて暗転、直前の旗で復活する一連の流れ。HP満タン・コイン維持を示した実例図

再現条件

項目設定
GameMode BP_GameMode変数 LastCheckpointTransform(Transform)。初期値は Player Start の位置でよい
プレイヤー BP_Player(Character)変数 CurrentHealth(Float, 100.0)、MaxHealth(Float, 100.0)、bIsDead(Boolean, false
チェックポイント BP_CheckpointStatic Mesh(旗)+ Box Collision。Collision Presets = OverlapAllDynamic
Kill Volume BP_KillVolume大きな Box Collision。溶岩の底を覆う。Collision Presets = OverlapAllDynamic
フェード用WBP_Fade(全画面の黒いImage)。詳しくは Timelineノード の補間で

ステップ1:チェックポイントに触れたら記録する

BP_Checkpoint は、触れたプレイヤーの位置を、GameModeの LastCheckpointTransform へ書き込むだけです。

BP_CheckpointのOn Component Begin OverlapからCast To BP_Player、Get Game Mode→Cast、Set LastCheckpointTransformへつなぐ完成ノードグラフ
BP_Checkpoint(イベントグラフ)
On Component Begin Overlap(Box)
  → Cast To BP_Player(Other Actor)
  → (成功)Get Game Mode → Cast To BP_GameMode
  → Set LastCheckpointTransform(= Other Actor の GetActorTransform)
  → Print String("チェックポイント記録")

Cast To BP_Player を挟むのは、プレイヤー以外(落ちてきた小物など)で記録が上書きされないためです。

ステップ2:溶岩に落ちたら死亡処理を呼ぶ

BP_KillVolume は、触れたプレイヤーの HandlePlayerDeath を呼ぶだけです。

BP_KillVolume(イベントグラフ)
On Component Begin Overlap(Box)
  → Cast To BP_Player(Other Actor)
  → (成功)Call HandlePlayerDeath(Target: Other Actor)

ステップ3:4拍子の死亡処理を組む

BP_PlayerHandlePlayerDeath(Custom Event)を作り、演出→停止→待ち→復活を1本に通します。

上段「止める」でHandlePlayerDeath→Branch→Set bIsDead=true→Disable Input、下段「待って、戻す」でフェードイン→Delay→Set Actor Transform→HP全快→フェードアウトへ折り返す2段組みの完成ノードグラフ
BP_Player(イベントグラフ)
HandlePlayerDeath(Custom Event)
  → Branch(bIsDead == true)→ True: Return   // 二重死亡を防ぐ
  → Set bIsDead = true
  // ① 演出+② 入力停止
  → Disable Input(Get Player Controller 0)
  → WBP_Fade を Add to Viewport → フェードイン(画面を黒く)
  // ③ 少し待つ
  → Delay(Duration = 0.5)
  // ④ 復活:置き直す
  → Get Game Mode → Cast To BP_GameMode → Get LastCheckpointTransform
  → Set Actor Transform(Target: self, New Transform = LastCheckpointTransform)
  → Set CurrentHealth = MaxHealth        // HP全快(戻すもの)
  → フェードアウト(画面を明るく)→ WBP_Fade を Remove from Parent
  → Enable Input(Get Player Controller 0)
  → Set bIsDead = false

先頭の bIsDead チェックが要点です。落下中にKill Volumeへ複数回触れても、死亡処理は 一度しか走りません 。コインや鍵はここで何もしていないので、そのまま 残ります(戻すもの・残すものの表のとおり)。

確かめる

Playして、旗に触れてから溶岩へ飛び込んでください。うまくいけば、画面が0.5秒かけて暗転し、明けると 直前の旗の上に立っていて、HPバーは満タン、コインはそのまま です。旗を1本も踏まずに落ちたら、LastCheckpointTransform の初期値(Player Start)へ戻ります。

うまくいかないときの切り分けです。

  • 落ちても何も起きない → Kill Volumeの Collision PresetsOverlapAllDynamic か、Generate Overlap Events にチェックが入っているかを確認
  • 暗転したまま戻ってこないEnable InputRemove from Parent が呼ばれていません。Delay の先がつながっているか確認
  • 復活を何度も繰り返すbIsDead のチェックが抜けています。Kill Volumeに触れ続けて HandlePlayerDeath が連発しています

ポイントは2つです。

  • 死は1つの関数に集約する: 落下death・敵にやられるdeath・トラップdeath、入口は違っても、行き着く先は同じ HandlePlayerDeath に。4拍子を一箇所に書けば、どこから死んでも同じ手触りになります
  • 戻すものと残すものを先に決める: HPは全快、コインは維持。この仕分けが難度そのものなので、体力とダメージ の死亡判定とセットで設計してください

おまけ:先に知っておくと良いこと

作り直す方式が要るとき。 状態が複雑に絡んで「置き直しでは初期化しきれない」と感じたら、RestartPlayerAtTransform(GameModeが持つ)でPawnごと作り直します。この場合、UIやカメラの参照は自分で張り直す必要があります。小規模なうちは置き直し、複雑になったら作り直し、と考えてください。

チェックポイントを「1つだけ」にしない発展。 ローグライクの階層セーブや、戻れる分岐路がある探索ゲームでは、複数のチェックポイントを覚えたくなります。そのときは Transform 1個ではなく、チェックポイントの配列やIDで管理します。まずは「最後の1つ」で仕組みを掴んでからで十分です。

起動をまたいで残すなら保存する。 この記事の記録は、ゲームを閉じると消えます。「昨日の続きから」を実現したいなら、LastCheckpointTransform やコイン数を Save/Loadシステム でディスクへ書き出します。セッション内の復活(この記事)と、起動をまたぐ保存(save-load)は、両輪です。

まとめ

死んでもやり直せるゲームは、次の4拍子で組み上がります。

拍子やること実装
演出死んだと伝える倒れる・点滅・画面を暗く
停止操作を止めるDisable Input
待つ状況を飲み込ませるDelay(0.5〜1秒)
復活保存地点へ戻す置き直し(Set Actor Transform+HP全快)

そして忘れてはいけないのが、 戻すもの(HP)と残すもの(コイン)の仕分け です。これが難度の調整弁になります。

これで「動かす → 当てる → 死ぬ → やり直す」のループが閉じました。あなたのゲームで、プレイヤーが一番よく死ぬのはどの場所でしょうか。そこに、最初の旗を1本立ててみてください。

さらに学ぶために