ForLoop~実践編~

どーも!Free_Gamerです!

今回は・・・

 

ForLoopの実践的な使い方!

 

についてお話します!

 

さて、前回はForLoopを使ってPrintStringを指定回数分表示させましたよね。

f:id:Free_Gamer:20180515230119p:plain

f:id:Free_Gamer:20180515230146p:plain

ForLoopの仕組みについては、前回の記事をお読みください。

 

さて!今回紹介する処理は・・・

 

ForLoopを使ったスポーン処理!

 

をやっていきたいと思います!

 

やっていく前に! 

例えば、「キーを押したときに、アクターを1か所から複数スポーンさせたい!」となった時、どうしますか??

まずアクターをスポーンさせるSpawnActorFromClassノードは必要ですよね。

ですが、ForLoopノードを知らない場合こうしてしまうのではないでしょうか??

f:id:Free_Gamer:20180517202715p:plain

別に間違ってはいませんが、これがさらに「50個とかそれ以上にスポーンさせたい!」となった時に、SpawnActorFromClassを50個以上も出すとなると、血涙を流す羽目になるので、はっきり言って非効率ですよね。

なので、効率化するためにForLoopノードを使うのです!

 

まず必要なもの!

・レベルBP

・TargetPoint

・スポーン用のアクター

・ForLoop(当然!)

・Qキー(他のキーでもいいですが)

・SpawnActorFromClass

 

さあ!始めましょう!

まずレベルBPを開きましょう!

そして、キーイベントノードを追加しましょう!

今回は「Q」キーのキーイベントノードを追加しましょう!

f:id:Free_Gamer:20180517182904p:plain

次に、お待ちかね!ForLoopを出しましょう!

そして、QキーイベントのPressedとつなげましょう!

f:id:Free_Gamer:20180517183037p:plain

ForLoopのFirstIndexに「0」、LastIndexに「5」を入れましょう!

さて、レベルBPはここでいったん離れましょう!

 

次にスポーン用のアクターを作りましょう!

親クラスがActorの新規BPを作成し、BPの名前を「BP_SpawnActor」にしておきましょう!

f:id:Free_Gamer:20180517183326p:plain

作成したBPを開き、コンポーネントを追加しましょう!

追加するコンポーネントは、椅子(SM_Chair)にでもしておきましょう!

f:id:Free_Gamer:20180517195804p:plain

そして、SimulatePyhsicsにチェックを入れておきましょう!

コンパイルし、保存してBP_SpawnActorはこれで終了です!

 

次に、スポーンする位置のBPを作りましょう!

新規BPでTargetPointクラスのBPを作りましょう!

f:id:Free_Gamer:20180517184407p:plain

すべてのクラスのところで「TargetPoint」と検索すると出てくるので、それを選びましょう!

TargetPointクラスのBPの名前を「BP_SpawnPoint」としておきましょう!

f:id:Free_Gamer:20180517184616p:plain

BP_SpawnPointをレベル内に配置しましょう!

f:id:Free_Gamer:20180517191330p:plain

 

では、レベルBPに戻りましょう!

レベルBPでForLoopのLoopBodyピンをひっぱり、SpawnActorFromClassノードを出しましょう!

f:id:Free_Gamer:20180517184143p:plain

SpawnActorFromClassのClassは「BP_SpawnActor」を選択しましょう!

次に、BP_SpawnPointを参照しましょう!

BP_SpawnPointを選択状態にしたまま、レベルBPのグラフ内で右クリックすると「BP_SpawnPointのリファレンスを作成」というのがあるので、それをクリックしましょう!

f:id:Free_Gamer:20180517191642p:plain

これでBP_SpawnPointを参照できました。(参照=リファレンス)

f:id:Free_Gamer:20180517191906p:plain

次に参照したBP_SpawnPointのピンをひっぱり、GetactorTranceformノードを出しましょう!それをSpawnActorFromClassのSpawnTranceformに繋ぎましょう!

f:id:Free_Gamer:20180517192112p:plain

コンパイルして終了です!

 

さあ!流れを整理しましょう!

Qキーを押したとき

ForLoopにつながっているSpawnActorFromClassが

FirstIndex~LastIndexの数の分だけBP_SpawnPointからスポーンされる

となります!

 

実際にプレイしてみましょう!

Qキーを押すと・・・

f:id:Free_Gamer:20180517200547p:plain

ものすごい勢いで吹き飛んでいくと思いますww

これは、一つのポイントから複数のアクターが出てきているため、アクター同士が反発しあって吹き飛んでいるのだと思われます。

その証拠に、BP_SpawnActorを1個のみスポーンした場合だと、きれいに「ストンッ」と落ちてくれます。

 

さて、あまりにも勢いよくスポーンしているので簡易的な部屋を作りましょう!

f:id:Free_Gamer:20180517193255p:plain

かなり大きく作ってください。

作ったら部屋の中に、BP_SpawnPointと操作キャラを入れてあげましょう!

f:id:Free_Gamer:20180517193716p:plain

 

もう一度プレイして、Qキーを押すと・・・


ブログ用 ForLoopを使ったスポーン処理

動画のようになったのなら成功ですね!

ちゃんと6個スポーンされているはずです!

FirstIndexには「0」、LastIndexには「5」を入れたので、SpawnActorFromClassが6回呼び出されて、6個スポーンされていますよね。

 

※ただ、メッシュによっては1個だけ勢いのあまり壁を突き抜けてしまう場合があるようです。

例えば、メッシュをキューブにした場合、1個だけ壁を突き抜けてしまうので、「あれ??5個しかない??」と勘違いしてしまいます。(一応ちゃんと6個スポーンされていますが)

 

まあとりあえず、ForLoopの活用方法が分かったのではないかと思います!

もちろん今回以外にも様々な使い方があるので、ぜひご自分で調べて実践してみてください!

ForLoopを知っているか知らないかでかなり効率的な作業が出来るわけです!

 

それではまた!^^ノシ