執筆バージョン: Unreal Engine 5.1.1
|
確認
前回はCubeの一部機能を実装しました
今回は引き続き下半分の実装を一気に終わらせましょう。
1 弾が当たると爆発します。<-完成
2 爆発すると、近くにあるCUBE達も爆風に巻き込まれて爆発します。これで連鎖爆発狙えて爽快!<-半分完成
3 CUBEをランダムな点数で設定して、その点数の高さによってCubeの色と大きさが変わります。<―未完
仕様2について考える
残りの仕様について考えてみましょう。
2 爆発すると、近くにあるCUBE達も爆風に巻き込まれて爆発します。これで連鎖爆発狙えて爽快!
これについてですが、まず一つのCubeが爆発すると、近くに存在するCube達がそれをわかる様にすれば問題解決できます。
では、この連携の取れるようにするBPを組んでいきます。
はい完成しました。見ていきましょう。
このBPの組み方は、まず1の部分で毎フレームに一回このイベントを実行して
2の部分でこのCubeの近くに他のアクターの有無を検索し、存在しているなら
それを3の部分で、同じCubeの爆発のエフェクトがActiveしてるのかをチェックします。
結果がTrueの場合だけ、後の処理を行うようにします。
白枠「1」の処理について
Event Tick
Event Tickは毎フレーム一回実行してくれるノードです、今回は常に周りにCubeがあるかどうかをチェックしたいので
このイベントノードを使うのは理にかなってます。
白枠「2」の処理について
この部分は近くに存在してるアクターを検索してきます。少しだけ仕組みが複雑かもしれませんので。細かく説明します。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/7cc66c191188ec6532c6c5cd4018ad80.png)
まずはどう周りのアクターの存在を検知してくるのですが、ここはコリジョンを使います。
前回で登場したcomponentsのリストにSphereというcollisionが存在していたのですが、今まで使われていませんでした。
実はこのcollision、今回はVolume的な役割を担います。
Volumeはレベルに設置すると、Overlapしてる物を検知したり、Toggleしたり、とても便利です。
が、Volumeはcomponentsに追加できない為、今回は使わずcollisionで代用します。
爆発の影響する範囲のイメージは円形なので、ここではSphereCollisionを使います。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/059ce6770e37d1ba9f2c4561bc240ee7.png)
Detailを設定していきます。
一番大事な部分はcollision設定です。
CollisionPresetsのところをOverlapAllに設定します。
でも時々OverlapAllにしたのに、Overlapしてません!という場合もあります。
そういう場合挙動がおかしくなるのでちゃんと下のリストで全ての項目に
Overlapのチェックが入ってるのを確認してください。
してないなら手動でチェックを入れてください。
ちなみに、blockとIgnoreのチェックは入らないようにしてください。
特にblockをすると、弾丸がcollisionにブロックされてCube_0に届きませんので
Cube自体が爆発しなくなります。。
後はScaleを調整して、collisionを好きな大きさに設定してください。
これで爆発の範囲を好きな大きさにできます。一気に大量のCubeを爆風に巻き込みたいなら、大きく設定すればよいでしょう。
collisionの設定を終えると、またEventgraphに戻ります
Get Overlapping Actors
このノードを使うと、TargetにOverlapしてるActorを参照できる様になります。ここはcollisionのSphereに繋げましょう。
そして名前の通り複数系のActorsですので、Overlapingしてるアクター全てを取って来てくれます、出す内容も配列(Array)です。
変数は物を入れる箱なら、Arrayはそんな箱達が一列に並んでるような物です。
ArraryはIndexとElementがあります、Indexは箱の番号、Elementは箱の内容です。
For Each Loop
もうOverlappingしてるアクター達を取って来てるので、後はそれらはを爆発してるCubeかどうかを
チェックして行きたいのですが、ここで少し問題です。
GetOverlappingActorsが出してくれる内容はArrayですので、そのままCastToノートに繋がらないのです。
一個の箱なら同時に一個分の箱の中身しか入りません。
なのでForEachLoopを使います、このノードは受ったArrayの中身を全部出し切るまでLoopしてくれます。
イメージはコンテナから一個ずつ商品を外に運んでくれるベルトコンベヤーです。
今回必要なのはArrayの中身なので、ArrayElementとCastToのObjectを繋ぎましょう。
白枠「3」の処理について
Cast To
前回ではCubeに当たるのは弾丸かどうかを検査するために使いましたが
今回はOverlapingしてるアクターは爆発してるCubeかどうかを検査するために使います。
今回も右クリックしてCastToでサーチしてみましょう、私の場合はCastToBP_M_cubeでサーチしました。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/8826c8e1d07ac00bc070db473b258d1c.png)
作成したら、As BP_M_Cubeのpinを左側クリックで引っ張ると
サーチWindowが出ます。そこで自分が作成した
エフェクトcomponentの名前を入れましょう。
状態を見たいだけなのでGetしてください。
Is Active
参照してるエフェクトのActive状態を見て
結果によってBoolean値をだします。
Tureなら爆発処理に入ります、Falseならなにもしません。
これで仕様2の爆発すると、近くにあるCUBE達も爆風に巻き込まれて爆発します。も完成しました!
後もう少しです!
仕様3について考える
Cubeについては最後の仕様です。
3 CUBEをランダムな点数で設定して、その点数の高さによってCubeの色と大きさが変わります。
見た限り簡単そうです。最初から点数をいくつを設定して、そしてその中からランダムに点数を選んで
Cubeの変数LifeにSetして、後はBranchで分岐していけばいいと思います。
ただこの一連の処理はConstruction Scriptで組みます。
※Construction Scriptに書かれてるものは処理はゲーム中では行いません。
編集がコンパイルした時にに処理されます、後はレベル上にActorを配置する時等です。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/11f96a760fa2759f47f3a97359262d48-1024x306.png)
ではConstruction Script画面を開いて、作成した結果を見てみます。
「ランダムな点数の設定」と「点数に応じてCubeの色とサイズを変更する」二つの部分で構成されています。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/0b9f52f02dbe95a6eeff086a2427d090-1024x266.png)
Cubeにランダムな数字を設定する仕組みを作ります。
1の部分で最初から設定された整数配列からランダムに一つを選んでCubeの変数、PointとLifeにセットします。
そして2の部分でこの整数の大きさで三つのグループに分けます。
1
まずはPointの整数変数を作成しましょう。Lifeの変数を作成した時と同じ方法で大丈夫です。
忘れた方は前回の爆発するBOXの巻き上の内容を復習してください。
「Life」はCubeのLifeを管理するための変数です。弾がCubeに当たるとLifeの数値が10減りますので
中の数値はゲーム中で変動します。
「Point」はCubeが破壊されると、Scoreに加算する数値を管理する変数です。
この変数は最初にランダムで決めるのですが、ゲーム中では変動しません。
この二つの変数に新しい整数をセットするためのノードを配置しています。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/18260b2a6d58cb164b42aa2a58258c0e.png)
後は点数を収納するための整数配列を作成します。
まずは整数変数を追加作成します、Detailの中のVariableTypeをArrayに変更します。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/84db3d304c65994ae3af09439542bf82.png)
下のⅮefaultValue の部分でArray Elementを追加して、初期値を記入していきます。
簡単に五つの整数を用意しました、10から50まであります。
作成し終えたら、Construction Scriptでこの変数をGetしてください。
Random Array Item
このノードはArray内のItemをRandomに持ってくれます。右側に二つのPinがあります。
上は変数のElementを貰ってくれますが、下はIndexを貰ってくれます。
今回必要なのは中身なので上のPinから引っ張って二つの変数にセットしましょう。
2
点数は五つありますが、サイズと色の種類は三種類にしかないです。
点数の高さで違う処理を行いますので、Branch二つを使います。
一つ目のBranchで45点以上と未満の点数に分岐して、二つ目のBranchで25以上と未満の点数で分岐します。
![](https://historia.co.jp/wp/wp-content/uploads/2024/03/5bda12516933d03f41b2aa2ece925ec0.png)
最後は分岐した結果で違う色とサイズに変更する処理を行います。
Set Overlay Material
Mesh ComponentのMaterialを新しいMaterialにセットします。TargetはCube_0です。
色は三種類ですので、、色を変えた三種類のMaterialをセットします。
Set Actor Scale 3D
Actorの大きさを設定します、NewScale3Dのどころに好きな数字を入れてください。
これでCubeの作成が完了です、お疲れ様です!また仕様を確認してみます。
1 弾が当たると爆発します。<-完成
2 爆発すると、近くにあるCUBE達も爆風に巻き込まれて爆発します。これで連鎖爆発狙えて爽快!<-完成
3 CUBEをランダムな点数で設定して、その点数の高さによってCubeの色と大きさが変わります。<―完成
よし!長かった気もしますが、次回はやっと他の部分に行けます。
まだやらなければならない所が多いですが、次回もよろしくお願いいたします。