Level上の敵を全て倒したらクリアみたいなシステム

「敵を全て倒すとクリア」「コインを全て取るとクリア」みたいなシステム。

今回は「敵を全て倒すとクリア」という形でやります。
アクターのBP_Enemyとそれを倒すシステムが既にあるという前提です。

Engineバージョンは5.3.2。

敵の残数を管理

ウィジェットBP: W_Score

ユーザーインターフェース > ウィジェットブループリント
親クラス: User Widget
名前: W_Score
・新規作成
グラフ
【変数作成】
Enemies – Integer
・「インスタンス編集可能」と「スポーン時に公開」にチェックを入れる。
デザイナー

必要なのはText1つだけです。それ以外は好きなように作ってください。

とりあえずCanvas Panelを配置。
その下にVertical Boxを配置。
・アンカーを右上
・Vertical Boxを画面右上に配置。
Vertical Boxの中にHorizontal Boxを配置。
Horizontal Boxの中にVertical Boxを2つ配置。
・2つのVertical Boxは同じ階層
・それぞれスロット > Sizeをフィルにする
この2つのVertical Boxの中にそれぞれTextを入れる。
・左側のTextのコンテンツ > Textに「残数」
・右側のTextのコンテンツ > Textに「10」

フォントサイズ等は好きなように設定してください。

「10」と記入したTextのバインドをEnemiesにする。
変数Enemiesの値が表示されるようになるわけです。

Level: ThirdPersonMap

Levelを開いてください。
今回はサードパーソンテンプレートのThirdPersonMapを使っています。

画面上部の3つのノードみたいなアイコンから「レベルブループリントを開く」を選択。

ノードを組む

【変数】Enemy – BP Enemy
Get All Actors Of ClassのOut Actorsから変数へ昇格

LevelにBP_Enemyを3体配置しました。
この状態でテストプレイすると、右上に「残数 3」と表示されます。

キャラクターBP: BP_Enemy

【変数追加】
W_ScoreRef – W_Score

ノードを組む

・敵の死亡処理の後に変数Enemiesを減らす処理を加えます。

Level: ThirdPersonMap

ノードを組む

Add to Viewportの後に追加。
この状態でテストプレイして敵を倒すと、残数の表示が減ります。

クリアした時の処理

Enemiesが0になった時の処理。

ウィジェットBP: W_Win

ユーザーインターフェース > ウィジェットブループリント
親クラス: User Widget
名前: W_Win
・新規作成
クリア時に表示されるものです。
今回は簡単に作成します。

とりあえずCanvas Panelを配置。
その下にTextを配置。
・アンカーを中央にしてTextを中央に配置
・Textのコンテンツ > Textに「Win」

今回は簡単に作成しましたが、このウィジェットブループリントにButtonを配置して「次のステージ」「リトライ」「終了」など選択できるようにすると良いでしょう。

Textの文字は「あの洞窟の敵を一掃してくれ」みたいなクエストの場合は「Win」ではなく「Quest Complete」など。

ウィジェットBP: W_Score

ノードを組む

キャラクターBP: BP_Enemy

ノードを組む

・変数Enemiesを減らす処理の後にW_Scoreで作成したカスタムイベント CheckEnemiesを配置。
テストプレイして3体の敵を倒すと、画面に「Win」と表示されます。

応用しやすい

今回はキャラクターBPのBP_Enemyを使用しましたが、コインであればアクターBPのBP_Coinを使って、同じように管理できます。コイン取得時にコイン数の変数を減らす。

W_ScoreとWinを1つにまとめる事も可能です。
W_Scoreの中央にTextで「Win」と書いておき、最初は非表示にしておく。変数化もしておく。
グラフで、Enemiesが0になった時の処理で「Win」を表示する。

ステージのクリア条件やクエストのクリア条件など、使いやすいシステムです。

コメント

タイトルとURLをコピーしました