本STEPでは、ブループリントを使った本格的なギミックの実装を行います。このプロジェクトでは、サンプルゲームにあった「的を撃ったら壊れる」処理や「すべての的が壊されたら扉が開く」処理がまだ実装されていません。これらの処理を、自分で実装してみましょう。
「的を壊す」処理をブループリントで実装する
本STEPで使用するマップに移動しましょう。コンテンツドロワー上で、「コンテンツ」→「GameMaking_Kit」→「Maps」を開きます。その中にある「Step2_P」をダブルクリックし、「Step2_P」へ移動します。
開いたマップには、的と扉が設置されており、扉の奥にゴールがあります。
試しにプレイしてみましょう。的を壊して扉を開かなければゴールに到達できませんが、現状「壊れる処理」が実装されていないため、的を撃ってもなにも起こりません。
的のブループリントを編集し、撃たれたら壊れる処理を実装します。コンテンツドロワーから、「コンテンツ」→「GameMaking_Kit」→「Blueprints」にある「BP_Target」のブループリント編集画面を開きましょう。
イベントグラフが表示されないときは……
「BP_Target」のブループリント編集画面を開いた際、上図のようにイベントグラフではない画面が表示される場合があります。
その場合は、画面上部にある「イベントグラフ」と書かれたタブをクリックすると、イベントグラフが表示できます。
処理のきっかけとなる「イベント」を用意する
「ゲームづくりを始めよう!」で「動く床」や「触るとゲームオーバーになるトゲ」を作ったように、ノードを組み合わせることで「BP_Target」に機能を実装していきます。
まずは、処理が実行されるきっかけとなるノードを配置します。処理の起点となるノードは「イベント」と呼ばれ、ノードの上部が赤色になっています。
今回は撃たれたことをきっかけに処理を始めるため、「ダメージを受けた時」に実行されるイベントノード「Event AnyDamage」を配置しましょう。
壊れた時にSEを鳴らす処理を追加する
「Event AnyDamage」をきっかけにして、サウンド再生を実行する処理を作っていきます。弾がきちんと的に当たったことをプレイヤーに示すために、SE(サウンドエフェクト/効果音)を鳴らす処理を入れましょう。
「Event AnyDamage」ノードの右側にある白い矢印(右向きの五角形)は、「実行ピン」と呼ばれます。ブループリントでは、実行ピンがつながっているノードが、順番に処理を実行していきます。
サウンドを再生するノード「Play Sound 2D」を、「Event AnyDamage」の実行ピンから続くように配置しましょう。
「Play Sound 2D」ノードの「Sound」と書かれた青い丸(ピン)には、鳴らしたいサウンドを指定します。「アセットを選択」をクリックし、サウンドのリストから、弾が当たった時のSE「SE_Hit_Cue」を選択しましょう。
これで、SEが鳴るようになりました。
的を消す処理を追加する
自身を消滅させる処理を実行させれば、的が破壊されたことになります。そこで、オブジェクトを消滅させるノード「Destroy Actor」を、「Play Sound 2D」の後に実行されるように配置しましょう。
これで、撃たれた的を消す処理は完成です。
プレイして、処理が正しく行われるかを確かめましょう、撃たれた的がSEとともに消えるようになったことを確認できます。
以上で、ハンドブックP.9〜P.10の手順は完了です。P.11に進みましょう。
壊した的の数をUIに表示させる
このゲームは、ゴールするために的をすべて壊す必要があります。「すべての的を壊せたかどうか」をプレイヤーが把握するためには、マップ上にある的の数と、自分が壊した的の数をUI (※)として表示しておく必要があります。
※ ユーザーインターフェースの略称。ゲームの状態を視覚的に伝える要素であり、プレイヤーの残り体力を示す体力ゲージなどが該当する
そこで、UIに的の数を反映させる処理を、このゲームでUIを管理しているアクタ「PlayerController」に対して実装します。
「PlayerController」のブループリントは、「コンテンツ」→「GameMaking_Kit」→「Blueprints」にある「BP_PlayerController」です。コンテンツドロワーから「BP_PlayerController」をダブルクリックし、ブループリント編集画面を開きましょう。
具体的なUIを更新する処理の流れは、以下の通りです。
オリジナルのイベントを作成する
今までの処理は「ゲーム開始時」など汎用的なタイミングで行うものばかりであったため、デフォルトでイベントが用意されていました。しかし、今回は「的が壊されたとき」という独自のタイミングであるため、UE5には用意されていません。
そこで、オリジナルのイベントを作れる「カスタムイベント」ノードを使えば、「的が壊されたとき」に実行されるイベントを新たに作成できます。
イベントグラフを右クリックし、ノード一覧メニューから、「custom event」と検索しましょう。「Add Custom Event…」を選択すると、オリジナルのイベント「カスタムイベント」を配置できます。
配置した「カスタムイベント」には自身で名前を付けられます。今回は「OnTargetBroken」とします。
今はまだ設定していませんが、的が壊されるたびに「OnTargetBroken」の処理が実行される前提で処理を組み立てます。
カウントを加算する処理を追加する
「OnTargetBroken」に、壊した的のカウントを1増やす処理を追加します。
「壊した的のカウントを増やす」を行うためには、壊した的の数を記録しておく必要があります。そこで、値を保存する「変数」という仕組みを使います。
ブループリント編集画面左下の「変数」に、「BrokenTargetCount」と書かれた変数が確認できます。この「BrokenTargetCount」が、壊された的の数を保存するための変数です。
画面左下の「変数」から、「BrokenTargetCount」をイベントグラフにドラッグ&ドロップし、変数「BrokenTargetCount」の現在値を取得する「Broken Target Count」ノードを配置しましょう。
「Broken Target Count」にある緑色のピンをドラッグし、足し算を行う「Add」ノードを配置しましょう。
「0」と書かれている左下のピンには、「1」を直接入力しましょう。
これで、「BrokenTargetCount」の現在値を1増やした値を計算できます。計算結果(右側のピン)の値を、「BrokenTargetCount」にセット(上書き)すれば、壊した的のカウントを更新できます。
「変数」にある「BrokenTargetCount」をイベントグラフにドラッグ&ドロップし、「BrokenTargetCount」の値を更新する「Set BrokenTargetCount」ノードを配置しましょう。
下図の通り、「Set BrokenTargetCount」ノードとほかのノードをつなげましょう。
的の総数と破壊状況をUIに反映させる
変数に保存した「壊した的の数」をUIに反映させる処理を実装します。UIを更新する「Update Target UI」ノードを配置し、「Set BrokenTargetCount」の後に実行されるよう実行ピンをつなげましょう。
これで、的を壊すと、UI側に表示された数字が+1ずつ増えるように実装できました。
以上で、ハンドブックP.11〜P.12の手順は完了です。P.13に進みましょう。
破壊されたことを通知する処理を的に追加する
UIの更新処理は実装できましたが、このままでは「OnTargetBroken」はどこからも実行されません。的のブループリント「BP_Target」に処理を追加し、的が壊れたタイミングで「OnTargetBroken」を実行するようにします。
「BP_Target」のブループリント編集画面を再度開きましょう。
弾が当たったときのイベント「Event AnyDamage」の後に「OnTargetBrokenを実行する」処理を追加します。
「OnTargetBroken」を実行するためには、どのアクタが「OnTargetBroken」の処理を実装しているかを知る必要があります。今回は「BP_PlayerController」が「OnTargetBroken」を実装しているため、ゲーム内の「PlayerController」にアクセスするための「Get Player Controller」ノードをイベントグラフに配置します。
続いて、「Get Player Controller」の「Return Value」ピンをドラッグし、「Cast to BP_PlayerController」を配置します。
現時点の「Play Sound 2D」ノードの実行ピンには「Destroy Actor」が接続されています。実行ピンをドラッグして、下図の通り「Cast to BP_PlayerController」につなぎかえましょう。
「As BP Player Controller」ピンから、「BP_PlayerController」の処理が使えます。ピンをドラッグし、「OnTargetBroken」ノードを配置しましょう。
「OnTargetBroken」の後に「Destroy Actor」が実行されるよう実行ピンをつなげたら、処理は完成です。
これで、的の数がUIに反映されるようになりました。プレイして確かめてみましょう。
的が壊されたときの処理を実装する
続けて、すべての的を壊したときに扉を開く処理を追加します。コンテンツドロワーから、「BP_PlayerController」の編集画面を再度開きましょう。
「OnTargetBroken」イベントに、「的がすべて壊れたら扉を開く」処理を追加します。
壊した的の変数を更新した後に、数が「的の総数(ゲーム開始時に存在している的の数)」と一致しているかどうかをチェックするようにしましょう。
「Set BrokenTargetCount」ノードの出力ピン(右側のピン)からは、更新後の値(+1した後の数値)が出力されます。ドラッグして「Equal(==)」ノードを配置します。
「Equal(==)」を使えば、更新後の値が的の総数と同じかどうかをチェックできます。的の総数は、変数「InitialTargetCount」に保存されています。
画面左下の「変数」から、「InitialTargetCount」をドラッグし、「Equal(==)」ノードの左下のピンにドロップしましょう。「InitialTargetCount」の値を取得する「Initial Target Count」ノードが、自動的に接続されます。
続いて、「Equal(==)」の結果に応じて処理を分岐させるために、「Branch」ノードを配置しましょう。
実行ピンは「Update Target UI」の実行ピンに、「Condition」ピンは「Equal(==)」ノードの出力ピンに接続します。
「Equal(==)」ノードへの入力(壊した的の数と的の総数)が一致している場合に、「True」側の実行ピンにつないだ処理が実行されます。「True」に、扉を開ける処理を続けていきます。
マップ上に配置されているアクタを検索・取得するノード「Get Actor Of Class」を配置し、「True」ピンに接続します。
検索するアクタを指定する「Actor Class」ピンには、扉のアクタ「BP_Door」を指定します。
「Return Value」ピンから、「BP_Door」の処理を使えます。ドラッグして「BP_Door」が持っている「扉を開ける」処理を実行するノード「Open」を配置しましょう。
ここまでの一連の作業で、「すべての的を壊したら扉が開く処理」が完成しました。
テストプレイを行い、2つの的を壊すと扉が開くかどうか確かめましょう。
STEP2は以上です。ハンドブックに戻り、STEP3(P.15)に進みましょう。
ゲームメーカーズ×GALLERIA コラボPC 紹介ページコラボPC 特設ページ関連記事
注目記事ランキング
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
連載・特集ピックアップ
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
東京ゲームショウ2024で展示された作品のプレイレポートやインタビューをまとめました。
CEDEC2024で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブル2024で行われた講演のアーカイブ動画・スライドをまとめました。
CEDEC2023で行われた講演レポートをまとめました。
東京ゲームショウ2023で展示された作品のプレイレポートやインタビューをまとめました。
UNREAL FEST 2023で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドをまとめました。
UNREAL FEST 2022で行われた講演レポートやインタビューをまとめました。
CEDEC2022で行われた講演レポートをまとめました。