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

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

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

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

関連記事

プログラミング不要の「ティラノビルダー」で短編ノベルゲームづくり Vol.1―キャラクターを表示してしゃべらせてみよう
2024.04.25
ゲームサウンド実装、初学者向け。『ハーヴェステラ』開発者がサウンド演出の基本を語った講演をレポート【GCC 2024】
2024.04.22
Unity Technologies、HDRPを解説した無料の電子書籍をUnity 2022 LTS版にアップデート。進化した水面の表現やSpeedTreeを組み合わせたTerrainの使い方を183ページにわたって紹介
2024.04.19
RE ENGINEで10,000体の恐竜群を制御!『エグゾプライマル』超大量のエネミーを表現するために施された最適化を深堀りしたセッションをレポート【GCC2024】
2024.04.12
ゲーム制作者が選ぶ!「クリエイターにオススメな書籍」読者アンケートを大募集!
2024.04.10
【Godot Engine】よく使うショートカットまとめ
2024.04.09

注目記事ランキング

2024.04.19 - 2024.04.26
1
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
2
『フォートナイト』で動く本格的なゲームが作れるツール「UEFN」とは?従来のクリエイティブモードから進化したポイントを一挙紹介!
3
フォートナイト クリエイティブとUEFNで使える仕掛け一覧
4
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.1「アイテム系」
5
【CHALLENGE1】「クリエイター ポータル」を使って、UEFNで作成した島を世界中に公開する
6
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.5「島の設定」
7
フォートナイトとUEFNがv29.30にアップデート。すでに公開した島をプレイできないようにする機能が導入される
8
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part1
9
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.2「ユーティリティ系」
10
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.4「ゲームシステム系」
11
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.6「チーム・対戦系」Part1
12
UEFNで使えるプログラミング言語「Verse」のノウハウが集結。『UEFN.Tokyo 勉強会 03 Verse Night』レポート
13
フォートナイトとUEFNがv29.20にアップデート。見下ろし視点でもプレイヤーキャラクターの向きを操作できるようになった
14
フルカラー書籍「UEFN(Unreal Editor For Fortnite)でゲームづくりを始めよう!」、ついに本日発売!全国書店で好評発売中!
15
『フォートナイト』で建築ビジュアライゼーション!?UEFNでオリジナルの世界観をどう作り上げたか、その手法を解説【UNREAL FEST 2023 TOKYO】
16
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
17
【STEP2】UEFNの基本的な使い方を覚えよう
18
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part2
19
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part1
20
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.3「プレイヤー系」
21
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part2
22
【CHALLENGE3】UEFNの機能「ランドスケープ」を使ってオリジナルの地形を作る
23
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.9「建築物系」Part1
24
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.8「ゾーン系」
25
フォートナイトとUEFNがv26.30にアップデート。ロビー画面が一新され、クリエイターが島ごとにロビー背景を自由にカスタムできるように
26
【STEP4-2】リスポーンとチェックポイントの仕組みを作る
27
「UEFN」って実際どうなの? 編集部が3時間で「みんなで遊べるアクションゲーム(?)」を作ってみた
28
【CHALLENGE2-1】フレンドと一緒にゲームを作ろう――UEFNプロジェクトをチームメンバーとリアルタイムで共同編集する
29
Epic Games、200を超えるフォートナイトの島クリエイターが年間10万ドル以上の配当金を得られると発表。島の「プレイ時間」が影響
30
【STEP4-1】コース外に出たらデスする仕組みを作る
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

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

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