執筆バージョン: Unreal Engine 5.1.1
|
確認
前回でCubeの作成が一旦完成しましたので、またゲームの仕様を確認してみましょう。
4 弾が当たると爆発四散するCUBE <--完成。
5 CUBEを上空から生成するシステム <--今回で作成します。
6 CUBEが消滅する時、獲得する点数をCOUNTしてくれるシステム <--今回で作成します。
7 制限時間になると、ゲームPLAYを止めてくれるシステム
8 SCOREを表示してくれるUI
残りの部分がかなりあるように見えますが、そこまで重くないので、今回で5と6の二つを実装していきましょう。
6の部分だけまたCubeのアクターをいじらないといけません。
CUBEを上空から生成するシステムを作成します。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/b1809651873581308cdab795c484f5d9.png)
まずはCubeをSpawnさせるActorBPを作ります。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/ffa1e26c1a29191537ed0222bd9d439d.png)
そしてcomponentにBoxCollisonを追加します。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/f4a6814d07d901851b9c72dcad883c03-1024x312.png)
作成したEventgraphの中身を見てみましょう。
まずは1の部分でレベル上のCube数を数え、100個になるまで2の部分のノードを実行し続けます。
1
毎フレームレベル上の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となります。
2
100個になるまでActorをSpawnします。
Spawn Actor Of Class
ActorClassをSpawnをするノード。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/ef07721f83015f1dd472aaa51dc60e44.png)
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の点数を加算するシステムです、簡単だけど、あると一気にゲームぽくなりますね。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/c264b79cca776ca768f2dba963a7eada.png)
新しいくBP_scoreというActorBPを作ります。
考え方はCubeが消滅処理を行い前にこのレベル上に存在しているActorに自分の点数を送信するイメージです。
ですので、一旦を完成したBP_Cubeをもう一度編集しないとだめです。
BP_scoreの中身はとても簡単です。
Scoreという整数変数を作成します。初期値は0を設定してください。
これでもうこのBPは作成終えました、もう本当に簡単すぎます。
でも大事なのはこのBPを必ずレベル上に配置してください。適当でもいいので、レベル上に放り込みましょう。
これだけです。後はCubeのBPです。CubeのBPを開きましょう。
でもそもそもどうすればCubeからBP_scoreの変数を参照できるのか?やり方を説明します。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/c3232fcb01a7eb9d1154a7ab2fd85ebe.png)
BP_Cubeで新しい変数を作ります。名前はScore_0にしましたが、好きな名前をつけてください。
そして、型はBP_scoreにします。前にも説明したのですが、変数のイメージは特定の形をした箱、同じ形したものしか入らないです。
型の欄で左クリックして、BP Scoreと入力すると出てきてくれるはずです、それに設定してください。
箱を作りました、でも中身がないと意味がありません。
結構誤解されがちですが、実は参照したいActorBPの型をした変数を作成しただけでは仕事してくれません、
なぜなら中身は空だからです。ですので、Construction Scriptで変数score_0にBP_scoreをセットするBPを組みます。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/3f6cf5543d3338587dd2a6ce5390ad9d-1024x164.png)
赤色部分のCollapsed Graphがそれです。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/9f1243eb7626cd084c7ae457e4c50a24.png)
中身はレベル上に存在しているBP_Scoreを
探してきて、変数Score0にセットしています。
終わったらまたEventgraphに戻ります。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/378c42a7f7b0341f9280469a29f7a738-1024x255.png)
新しく編集したCubeのEventgraphです、赤色部分のCollapsed Graphが増えましたね。
ここは主にCubeが破壊される前に、BP_ScoreのScore変数に加点する処理です。
中を展開して見てみます。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/edbc8ef21fab3030f25ae1392cdb006f.png)
こんな感じです。
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
残り二つ、後一回で完成できるので、もう少し頑張りましょう、次回もよろしくお願いします!