BLOGブログ

2024.07.24UE5UE/ 初心者向けUE/ Blueprint

[UE5]UE5で簡単なゲームを作ってみた【4/5:CubeをSpawnさせるの巻】

 

執筆バージョン: Unreal Engine 5.1.1

 

確認

前回でCubeの作成が一旦完成しましたので、またゲームの仕様を確認してみましょう。

4 弾が当たると爆発四散するCUBE <--完成。

5 CUBEを上空から生成するシステム <--今回で作成します。

6 CUBEが消滅する時、獲得する点数をCOUNTしてくれるシステム <--今回で作成します。

7 制限時間になると、ゲームPLAYを止めてくれるシステム 

8 SCOREを表示してくれるUI 

残りの部分がかなりあるように見えますが、そこまで重くないので、今回で5と6の二つを実装していきましょう。

6の部分だけまたCubeのアクターをいじらないといけません。

 


CUBEを上空から生成するシステムを作成します。

 

 

 

 

 

 

まずはCubeをSpawnさせるActorBPを作ります。

 

 

 

 

 

 

 

 

そしてcomponentにBoxCollisonを追加します。

 

作成したEventgraphの中身を見てみましょう。

まずは1の部分でレベル上のCube数を数え、100個になるまで2の部分のノードを実行し続けます。

毎フレームレベル上のCubeの数を数え、100個になるまで後ろのノードを実行し続けます。

100個になったら後ろのノードは実行されなくなります。

Event Tick

毎フレームレベル上のCubeの数を確認してほしいのでEvent Tickを使います。

Get All Actors Of Class

レベル上に存在している、指定したActorClassのActorを取ってきてくれます、とても便利です。

でも毎回レベル上にある全てのActorを検査して、指定してるActorClassなのかをチェックしてるので、レベル上のActorの数が多いほど重くなるノードです。

これも複数のアクターを取ってきてくれるので、出力はArrayです。

IS VALID INDEX

Get All Of Classから受け取ったArrayをチェックし

Indexの99番が存在しているかどうかをチェックして結果をBoolean値で出力します。

もし99番を使われているなら、後ろのノードを実行しません、なぜ99に設定するかというと、

レベル上に同時に存在してほしいCubeは100個だからです。Arrayの最初のIndexは0番なので、100目のIndexは99となります。

100個になるまでActorをSpawnします。

Spawn Actor Of Class

ActorClassをSpawnをするノード。

 

 

 

 

 

 

 

 

 

 

 

SpawnTransformの中でも使うのはLoctaionだけなので、SpawnTransformを右クリックして

SplitStructPinを選んで、このPinを分割します。

そして、SpawnTransformLocationにSpawnして欲しいLocationの数値を繋げましょう。

Get Component Bounds

BoxCollisionをGetして、このノードの左側のTagetに繋げます。

右側のOriginはBoxCollisionの原点位置、BoxExtentはBoxCollisonの大きさを出してくれます。

なぜBoxCollisonを使ってSpawnする範囲指定するかというと、レベル上でBoxCollisonのSizeと位置を設定/修正するのが楽だからです。

こういった範囲指定は結構調整が頻繁する物なので、可視化した方が後々便利です。

Random Point In Bounding Box

入力したBoundingBoxの範囲内でRandomのPointを出してくれます。

ここではSpawnするLocationとして使いますので、右側のPinはSpawnActorOfClassのSpawnTransformLocationに繋げます。

そして、このBoundingBoxは先程作成したBoundsと同じ形にしたいので

左側のPinは隣りのGetComponentBoundsのPinに繋げましょう。

 

作成終えましたので、レベルに配置してみましょう!

プレイヤーの上にからCubeを降ってきてほしいので、この位置に配置しました。

見えてる黄色い枠内の範囲がCubeがSpawnしてくる範囲です。

レベル上でそのまま調整してもSpawn位置にはちゃんと変わるので便利です。

Playボタンを押して、Cubeが降ってくることを確認してみましょう。問題なかったら次に行きます!

 


CUBEが消滅する時、獲得する点数をCOUNTしてくれるシステム

消滅したCubeの点数を加算するシステムです、簡単だけど、あると一気にゲームぽくなりますね。

 

 

新しいくBP_scoreというActorBPを作ります。

考え方はCubeが消滅処理を行い前にこのレベル上に存在しているActorに自分の点数を送信するイメージです。

ですので、一旦を完成したBP_Cubeをもう一度編集しないとだめです。

 

 

BP_scoreの中身はとても簡単です。

Scoreという整数変数を作成します。初期値は0を設定してください。

これでもうこのBPは作成終えました、もう本当に簡単すぎます。

でも大事なのはこのBPを必ずレベル上に配置してください。適当でもいいので、レベル上に放り込みましょう。

これだけです。後はCubeのBPです。CubeのBPを開きましょう。

 

 

でもそもそもどうすればCubeからBP_scoreの変数を参照できるのか?やり方を説明します。

 

 

 

 

 

 

BP_Cubeで新しい変数を作ります。名前はScore_0にしましたが、好きな名前をつけてください。

そして、型はBP_scoreにします。前にも説明したのですが、変数のイメージは特定の形をした箱、同じ形したものしか入らないです。

型の欄で左クリックして、BP Scoreと入力すると出てきてくれるはずです、それに設定してください。

 

箱を作りました、でも中身がないと意味がありません。

結構誤解されがちですが、実は参照したいActorBPの型をした変数を作成しただけでは仕事してくれません、

なぜなら中身は空だからです。ですので、Construction  Scriptで変数score_0にBP_scoreをセットするBPを組みます。

 

赤色部分のCollapsed Graphがそれです。

 

 

中身はレベル上に存在しているBP_Scoreを

探してきて、変数Score0にセットしています。

終わったらまたEventgraphに戻ります。

 

新しく編集したCubeのEventgraphです、赤色部分のCollapsed Graphが増えましたね。

ここは主にCubeが破壊される前に、BP_ScoreのScore変数に加点する処理です。

中を展開して見てみます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

こんな感じです。

Construction Scriptで「Score0の中に定義したBP_Score」から変数Scoreを参照して、「Cube内の変数Point」を加算し

「Score0の中に定義したBP_Score」の変数Scoreにセットします。

これでやっとCube関連の実装はほぼ完成しました。

 


では終わり前にもう一回ゲームの仕様を確認してみましょう。

4 弾が当たると爆発四散するCUBE <--完成。

5 CUBEを上空から生成するシステム <--完成。

6 CUBEが消滅する時、獲得する点数をCOUNTしてくれるシステム <--完成。

7 制限時間になると、ゲームPLAYを止めてくれるシステム 

8 SCOREを表示してくれるUI 

残り二つ、後一回で完成できるので、もう少し頑張りましょう、次回もよろしくお願いします!