ブループリントで「ゲームオーバーからリスポーンまでの流れ」を作ってみよう

2022.01.01
ゲームづくりの知識
この記事をシェア!
twitter facebook line B!
twitter facebook line B!
目次

「リスポーン」の概要

STEP4-3では、トゲに触れると「やられた!」と画面に表示するところまで作りました。今回は、トゲに触れた時に操作キャラクターが倒れるゲームオーバーの機能と、ゲームオーバー後にキャラクターが復活するリスポーンの機能を作ります。

リスポーン(respawn)とは、ダメージを受ける、ステージ外へ落下するなどの理由で操作を失ったキャラクターを指定した位置に再配置すること。STEP4-3で制作したプロジェクトをもとに、設定の手順を解説します。

トゲがキャラクターにダメージを与える処理を作る

最初に、「トゲに触れたキャラクターが倒れて消える」というゲームオーバーの演出を作ります。前回作ったブループリント「DamageNeedle」と、操作キャラクターのブループリントである「BP_ThirdPersonCharacter」にノードを追加していきます。

前回作ったトゲのブループリント「DamageNeedle」を開く

トゲに触れると、キャラクターが「ダメージ」を受けるようにします。

「DamageNeedle」を開き、前回追加したPrintStringの続きに「ApplyDamage」を追加します。ApplyDamageは指定した相手にダメージを与えるノードです。

EventGraphの何もないところで右クリックし、ノード検索窓を呼び出す。指定した相手にダメージを与えるノード「ApplyDamage」を追加する

PrintStringの次にApplyDamageを繋ぐ

ApplyDamageの「DamagedActor」にダメージを与える相手を設定します。今回はプレイヤーが操作しているキャラクターにダメージを与える設定にしたいので、「GetPlayerPawn」を追加します。GetPlayerPawnをDamagedActorに繋ぐことで、プレイヤーが操作しているキャラクターにダメージを与えることができるようになります。

プレイヤーが操作しているキャラクターを取得するため「GetPlayerPawn」を追加

次に、ApplyDamageの「BaseDamage」欄で与えるダメージ量を設定します。BaseDamageは10.0に変更してください(初期値の0.0では、ノーダメージになってしまいます!)。

BaseDamageが0.0のままだと、ダメージを与えた判定にならない。想定した結果が得られなかったときは、ダメージ量を設定しているか再度確認してみよう

これで、トゲ側(DamageNeedle)のブループリントは完成です。

DamageNeedleの完成図

ダメージを受けたキャラクター側の処理を作る

次に、ダメージを受けたキャラクター側の処理を作っていきます。プレイヤーが操作していたキャラクターのブループリント「BP_ThirdPersonCharacter」を開きます

プレイヤーが操作しているキャラクターのブループリント「BP_ThirdPersonCharacter」を開く

ダメージを受けた時にイベントが実行される「EventAnyDamage」を追加します。

ダメージを受けた時に実行されるイベント「EventAnyDamage」を追加

トゲからダメージを受けるとこのイベントが呼ばれる。ApplyDamageとAnyDamageはセットで使うノードなので覚えておこう

ダメージを受けたらキャラクターが倒れる処理を追加します。

まずは「SetAllBodiesSimulatePhysics」と「SetCollisionEnabled」を追加します。

SetAllBodiesSimulatePhysicsは、SimulatePhysicsを有効化するノードです。ブループリントから、STEP3-3で行ったボールのSimulatePhysics有効化と同じことしています。

SetCollisionEnabledは、当たり判定の設定を変更するノードです。

SetAllBodiesSimulatePhysicsは、STEP3-3で行ったボールのSimulatePhysics有効化と同じことをブループリントから行うためのノード

SetCollisionEnabledを追加することで、倒れるキャラクターの挙動が荒ぶってしまうのを防いでいる

続いて、SetAllBodiesSimulatePhysicsのNewSimulateにチェックを入れます。さらに、SetCollisionEnabledのNewTypeをPhysicsOnly(NoQueryCollision)に変更します。

この設定にすることで、SimulatePhysicsが有効化されたキャラクターが荒ぶるのを防いでいます。

チェックの付け忘れや、NewTypeが変更されていないと想定した挙動にならないのでしっかり確認しよう

キャラクターが倒れた後にカメラを動かせてしまう問題

それでは、この段階で実際にプレイして確認してみましょう。

キャラクターは無事に倒れるようになりましたが、このままではトゲに触れて倒れたあともカメラを動かせてしまいます。カメラが動けないように「DisableInput」を追加します

カメラを動けなくするために「DisableInput」を追加。マウスやキーボードなどの入力を無効にするノード

プレイヤーが操作するキャラクターへの入力を受け付けるPlayer Controllerを繋げることで、入力を受け付けなくする

これでトゲに触れてダメージを受けて倒れるところまで完成です。

ここまでのBP_ThirdPersonCharacterの図

ここまででゲームオーバーの実装が完了しました。改めてプレイして確かめてください。トゲに触れた瞬間にダメージを食らい、その場に倒れる演出ができているはずです。

スタート地点へリスポーンする処理を作る

ゲームオーバー後、スタート地点からリスタートする「リスポーン機能」を作っていきます。

リスポーンとは、自身がプレイするキャラクターが倒されたのち、指定された位置で復活すること。先ほどの状態では、トゲに当たって消えたあとはゲームを終了するしかありませんでしたが、リスポーン地点を設定することで再びスタート地点に戻ることができるようになります。

さきほどの「BP_ThirdPersonCharacter」の続きから始めます。

ゲームオーバーになったあと3秒後にリスポーンする処理を追加します。「Delay」と「ExecuteConsoleCommand」を追加します。Delayは指定した秒数の間、処理を待機するノードです。

Unreal Engineには、コンソールコマンドと呼ばれるテキストでコマンドを打ち込みゲームの挙動を変化させる機能があります。ExecuteConsoleCommandは、このコンソールコマンドをブループリントから実行するためのノードです。

「Delay」を追加することで、そのあとに続くノードの実行を遅らせることができる

コンソールコマンドをブループリントから実行するために「ExecuteConsoleCommand」を追加

続いて、DelayのDurationを3.0に変更します。

さらに、ExecuteConsoleCommandのCommandを「RestartLevel」に変更します。

RestartLevelを実行すると、現在のレベルを再読み込みします。なお、この処理はキャラクターをスタート地点に戻すだけでなく、レベル上のギミックなども戻るので注意が必要です。

Commandの入力ミスに注意しよう

これでゲームオーバー後にスタート地点にリスポーンする処理が完成しました。

BP_ThirdPersonCharacterの完成図

実際にプレイしてみましょう。何度ゲームオーバーになってもリスポーンできるようになっているはずです。

キャラクターのリスポーンには他にもいくつかの方法がありますが、今回はコンソールコマンドでレベルを再読み込みする方法で実装を行いました。

この後、もう1つだけキャラクターのリスポーンの方法を紹介しています。そちらの方法では好きな場所にリスポーンさせることができるので、気になる方は挑戦してみてください!

さらにチャレンジ!リスポーンの別の方法

上記で紹介した方法ではリスポーンと同時にレベルの状態も戻ってしまうため、途中まで攻略したギミックなどが攻略前に戻ってしまいます。これから紹介する方法はキャラクターを指定した位置でリスポーンするものです。

さきほどの続きで「BP_ThirdPersonCharacter」を開き、「Delay」と「ExecuteConsoleCommand」を削除します。

「Delay」と「ExecuteConsoleCommand」を削除する

次に「Disable Input」の後に「Set Life Span」を繋げます。

Set Life Spanは数秒後にキャラクターを消すことができるノードです。

数秒後にキャラクターが消えるように「SetLifeSpan」を追加

今回は自分自身を消したいので、TargetはselfのままでOKです。InLifespanは3.0に変更してください。これでダメージを受けると3秒後に消えるようになりました。

InLifespanを3.0に設定。これで、キャラクターはダメージを受けると3秒後に消えるようになった

次に「BP_ThirdPersonGameMode」を開きます。

「BP_ThirdPersonGameMode」を開く

EventGraphの表示が出てこない場合は、上部の「OpenFullBlueprintEditor」をクリックすることで、今までと同じ画面を確認できます。

OpenFullBlueprintEditorをクリックして、画面の表示を変更する

「BeginPlay」を追加します。これは、ゲームが開始されると実行されるイベントです。

ゲームが開始したときに実行されるように「BeginPlay」を追加

「OnDestroyed」を追加します。選択肢が複数ありますが、Assignを選んでください。Assignを選ぶことでイベント「OnDestroyed_Event_0」も追加されます。

OnDestroyedは、Targetに設定したアクターが消えると、Eventに設定されたイベントが実行されるというものです。

OnDestroyedを追加。AssignOnDestroyedを選択することで、CustomEventの作成を省くことができる

AssignOnDestroyedを追加したのでCustomEvent「OnDestroyed_Event_0」が追加されている

Targetには「GetPlayerPawn」を設定します。

これで、「プレイヤーが操作しているキャラクターが消えるとOnDestroyed_Event_0が実行される」という処理になります

プレイヤーが操作しているキャラクターを取得するため「GetPlayerPawn」を追加

BindEvent to OnDestroyedのTargetにGetPlayerPawnを繋ぐ

キャラクターを指定箇所にスポーンさせる

「SpawnActorfromClass」を追加します。SpawnActorfromClassは、Classに設定したブループリントを、SpawnTransformに設定した位置スポーンさせることができます。

新しいキャラクターをスポーンさせるために「SpawnActorfromClass」を追加

OnDestroyed_Event_0に繋ぐ。BindEventtoOnDestroyedではないので注意しよう

スポーンさせるキャラクターを設定します。「ClassにBP_ThirdPersonCharacter」を設定します。

ClassにキャラクターのブループリントであるBP_ThirdPersonCharacterを設定

次に、スポーンさせる場所を設定します。スポーンさせる場所は、初期位置と同じ、ゲーム開始地点のPlayerStartにします。

ゲームの開始地点。PlayerStartの位置を変更すれば、好きなところからゲームを始められる

レベルに配置されているPlayerStartを取得するため、「FindPlayerStart」を追加します。

レベルに配置されているPlayerStartを取得するため「FindPlayerStart」を追加

しかし、このままではSpawnActorfromClassのSpawnTransformに繋がりません。

FindPlayerStartとSpawnTransformが繋がらない

PlayerStartのTransform情報を取得するために「GetActorTransform」を追加します。

今までとノードの追加方法が違うことに注意してください。今回は、FindPlayerStartのReturnValueを引っ張り、何もないところで離します。これで、操作キャラクターが消えたあと、新しいキャラクターがPlayerStartの位置にスポーンするようになりました。

取得したPlayerStartのTransformを取得するために「GetActorTransform」を追加。今までとノードの追加方法が違うので注意しよう

SpawnTransformにGetActorTransformを繋ぐ

リスポーンしたキャラクターを操作できるように設定

ここからは、スポーンしたキャラクターとPlayerControllerの紐づけを行います。この設定を行わないと、キャラクターがスポーンしても操作することができません。

PlayerControllerを取得するために「GetPlayerController」を追加します

PlayerController取得のために「GetPlayerController」を追加

次に「Possess」というノードを追加します。このノードが、プレイヤーコントローラーとキャラクターを紐づけてくれるノードです。GetPlayerControllerから引っ張って追加しましょう。

紐づけのために「Possess」を追加。ノードの追加方法が違うので注意しよう

続いて、SpawnActorfromClassのReturnValueとPossessのInPawnを繋ぎます。これで、スポーンしたキャラクターとPlayerControllerの紐づけが完了しました。

Possessに紐づけるキャラクターとPlayerControllerを繋ぐ

プレイしてリスポーンすることを確認してみましょう。

一度目はリスポーンしますが、二度目はリスポーンしなかったはずです。

OnDestroyedのTargetに設定されたキャラクターは、リスポーンしたキャラクターで更新されません。このため、リスポーンしたキャラクターをもう一度OnDestroyedに設定する必要があります。

BindEventtoOnDestroyedをコピー&ペーストして、リスポーンしたキャラクターを設定。コピー&ペーストは、Ctrl+C(コピー)・Ctrl+V(ペースト)で可能

これで、何度ゲームオーバーになってもリスポーンするようになりました。ついにリスポーン機能の完成です!

後半ではキャラクターのみを再生成するという方法を紹介しました。「上手くできなかった」という方も、改めて記事内の画像を見ながら設定してみてください。

関連記事

「生と死」を物語る陰影表現とは――『Xenoblade3(ゼノブレイド3)』のキャラクターを魅せる2灯トゥーンシェーディング、世界を描くアップサンプリング【CEDEC+KYUSHU 2022】
2023.03.22
ゲーム業界で活躍するプロに聞いた「ゲーム開発現場で読まれている書籍」&オススメ書籍を厳選して紹介!【ゲームメーカーズ スクランブル】
2023.03.18
ゼロから分かるBlender講座 Vol.03―アニメーションに挑戦!制作したピコピコハンマーをUE5で動かしてみよう
2023.03.17
ゼロから分かるBlender講座 Vol.02―ピコピコハンマーをモデリングするまでのチュートリアル
2023.03.14
イチから教えるUE標準サウンド機能の使い方ーー初歩的なSEの鳴らし方から3Dオーディオの適用方法までを動画付きで解説
2023.03.10
【西川善司が語る“ゲームの仕組み” Vol.3】見た目とは違う!?ゲームの「当たり判定」
2023.03.03

注目記事ランキング

2023.03.19 - 2023.03.26
1
フォートナイト上にオリジナルゲームを開発・公開できるPC専用エディタ『Unreal Editor For Fortnite(UEFN)』、ついにリリース!
2
ゲームを開発し、フォートナイト上に公開できるPC専用エディタ『Unreal Editor For Fortnite(UEFN)』、Epic Games Storeに登場。3/23(木)リリース予定
3
『Minecraft』次回大型アップデートver1.20で桜バイオームが登場予定。Java版スナップショットで一足先に体験可能
4
【STEP2】UEFNの基本的な使い方を覚えよう
5
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
6
【STEP3】オリジナルのアスレチックコースを作ろう
7
【STEP4-1】コース外に出たらデスする仕組みを作る
8
【STEP1】「UEFN」を入手しよう
9
フォートナイトがv23.40にアップデート!新エキゾチック武器や「ザ・シタデル」テーマのプレハブ追加、ポップアップダイアログの機能改善などを実施
10
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
11
【STEP4-3】仕掛けを使って「坂を転がるボールのギミック」を組み込む
12
【STEP4-2】リスポーンとチェックポイントの仕組みを作る
13
フォートナイトがUnreal Engine 5.1に移行。Nanite、Lumen、仮想シャドウマップ、テンポラル スーパー解像度に対応
14
【STEP5-1】スタート時のカウントダウンを作る
15
【STEP5-2】ゴールの仕組みを作る
16
フォートナイトがv22.30にアップデート!クリエイティブモードにて「バトルロイヤル島」が登場したほか、メモリ使用量を表示する新たなマップUIが追加
17
フォートナイトがv24.00にアップデート!AIナビゲーション変更の仕掛け、バトルロイヤルからの新要素、新たなプレハブとギャラリーが追加
18
『Fortnite』クリエイティブモードで「スパイダーマン」と「ヴェノム」の世界を再現、一般参加可能のe-sports大会が開催
19
【フォートナイト クリエイティブ】ドリフトボードで駆け巡る!タイマー付きのレースゲームを作ってみよう
20
フォートナイトがv23.30にアップデート!「バジェット超過編集」や「クラウドボリューム」など、クリエイティブモードで多くのアップデート
21
フォートナイトがv23.50にアップデート!「隠れ場所小道具」にプレイヤー転送機能が追加、「ポップアップダイアログ」はリッチテキストエディタが解禁に
22
Java版『Minecraft』ver1.19「ワイルド アップデート」と題した大型更新が行われる。バイオームやレッドストーン回路の新出力オブジェクトなど新要素が盛り沢山
23
『Minecraft Live 2022』が10/16(日)午前1時より配信決定!『Minecraft』の最新情報発表や恒例のモブ投票が実施予定
24
iPhoneやAndroidから『フォートナイト』がプレイ可能に。マイクロソフトのクラウドサービスXbox Cloud Gamingが提供開始
25
『マインクラフト』Java版と統合版のセット販売が6/7(火)開始。どちらかのエディションを所得しているユーザーはもう片方を無料で入手可能に
26
Epic Games、フォートナイトで動作する新たな専用エディターを2023年3月末頃までにリリース予定であることを報告
27
フォートナイトがv22.40にアップデート!クリエイティブモードにてクリエイター用の仕掛け「クラスセレクターUI」などが登場
28
フォートナイトがv23.20にアップデート!「ファルコンスカウト」が新たに追加されたほか、全ての島でゲーム終了後の演出設定が可能に
29
フォートナイトがv21.30にアップデート!クリエイティブに「プレイヤーマーカー」や新しい小道具ギャラリーが追加
30
教育版マインクラフトで行われる18歳以下対象の全国大会「Minecraftカップ2022全国大会」開催決定、エントリー受け付けがスタート
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

ワイヤーフレーム(Wire Frame)
ワイヤーフレーム
  1. 3Dモデルのエッジ情報のみを表示するレンダリング手法。ゲーム開発においては、3Dモデルやシーンのポリゴン構造を確認することに用いることが多い。
  2. UIやWebページなどのレイアウトを決めるための設計図。
VIEW MORE

Twitterで最新情報を
チェック!