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

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(ペースト)で可能

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

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

関連記事

バンダイナムコスタジオが主催する「GYAAR Studioインディーゲームコンテスト」はクリエイターの目にどう映るか。支援総額1億円だけではない、開発者コミュニティとしての魅力を紐解く
2023.11.24 [PR]
編集部員が1日でヴァンサバ風ローグライクゲームを作ってみた。キャラクター変更からオリジナルの攻撃パターン作成までを解説!
2023.11.22
Unityにおけるレベルデザインのノウハウをまとめた公式電子書籍、無料公開。全112ページで、ホワイトボックスの命名規則に至るまで解説
2023.11.13
アークライト 野澤 邦仁のボードゲームを作るには 番外編「ゲームマーケットに来場&出展してみよう!」
2023.11.10 [PR]
フロム・ソフトウェアが語るデバッグメニュー最適化テクニック。ネットワークを活用し、ロード待ちが13秒→15ミリ秒以下に【CEDEC2023】
2023.11.01
どこでも“その場で”即バトル。『ストリートファイター6』ワールドツアーで実現した、自由探索型3Dマップから2D格ゲーへシームレスに移行するシステム&レベルデザイン【CEDEC2023】
2023.10.19

注目記事ランキング

2023.11.26 - 2023.12.03
1
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
2
『フォートナイト』で動く本格的なゲームが作れるツール「UEFN」とは?従来のクリエイティブモードから進化したポイントを一挙紹介!
3
フォートナイト クリエイティブとUEFNで使える仕掛け一覧
4
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.1「アイテム系」
5
【CHALLENGE1】「クリエイター ポータル」を使って、UEFNで作成した島を世界中に公開する
6
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.5「島の設定」
7
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.4「ゲームシステム系」
8
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part1
9
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.2「ユーティリティ系」
10
【STEP2】UEFNの基本的な使い方を覚えよう
11
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part1
12
【CHALLENGE2-1】フレンドと一緒にゲームを作ろう――UEFNプロジェクトをチームメンバーとリアルタイムで共同編集する
13
フォートナイトとUEFNがv26.30にアップデート。ロビー画面が一新され、クリエイターが島ごとにロビー背景を自由にカスタムできるように
14
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part2
15
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.3「プレイヤー系」
16
フォートナイトとUEFNがv27.10にアップデート。プレイヤーに与える武器のマガジン内に入っている初期弾薬量を設定するオプションが追加
17
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.6「チーム・対戦系」Part1
18
日産自動車、UEFNで作られたマップ『Electrify the World』を期間限定公開。EVコンセプトカーが登場する世界を楽しめる
19
『フォートナイト』で建築ビジュアライゼーション!?UEFNでオリジナルの世界観をどう作り上げたか、その手法を解説【UNREAL FEST 2023 TOKYO】
20
【CHALLENGE3】UEFNの機能「ランドスケープ」を使ってオリジナルの地形を作る
21
【STEP4-2】リスポーンとチェックポイントの仕組みを作る
22
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part2
23
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
24
【フォートナイト クリエイティブ】ドリフトボードで駆け巡る!タイマー付きのレースゲームを作ってみよう
25
フォートナイト上にオリジナルゲームを開発・公開できるPC専用エディタ『Unreal Editor For Fortnite(UEFN)』、ついにリリース!
26
【STEP3】オリジナルのアスレチックコースを作ろう
27
「UEFN」って実際どうなの? 編集部が3時間で「みんなで遊べるアクションゲーム(?)」を作ってみた
28
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.8「ゾーン系」
29
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.9「建築物系」Part1
30
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.9「建築物系」Part2
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

リグ(Rig)
リグ 3Dモデルを動かす場合に、すべてのボーンを編集するのではなく、少ない編集箇所で直感的に動作などを付けるために作られたコントローラーやコントロールする仕組み。 またスケルトン自身をリグと呼ぶ場合もある。
VIEW MORE

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