ForLoop~実践編~
どーも!Free_Gamerです!
今回は・・・
ForLoopの実践的な使い方!
についてお話します!
さて、前回はForLoopを使ってPrintStringを指定回数分表示させましたよね。
ForLoopの仕組みについては、前回の記事をお読みください。
さて!今回紹介する処理は・・・
ForLoopを使ったスポーン処理!
をやっていきたいと思います!
やっていく前に!
例えば、「キーを押したときに、アクターを1か所から複数スポーンさせたい!」となった時、どうしますか??
まずアクターをスポーンさせるSpawnActorFromClassノードは必要ですよね。
ですが、ForLoopノードを知らない場合こうしてしまうのではないでしょうか??
別に間違ってはいませんが、これがさらに「50個とかそれ以上にスポーンさせたい!」となった時に、SpawnActorFromClassを50個以上も出すとなると、血涙を流す羽目になるので、はっきり言って非効率ですよね。
なので、効率化するためにForLoopノードを使うのです!
まず必要なもの!
・レベルBP
・TargetPoint
・スポーン用のアクター
・ForLoop(当然!)
・Qキー(他のキーでもいいですが)
・SpawnActorFromClass
さあ!始めましょう!
まずレベルBPを開きましょう!
そして、キーイベントノードを追加しましょう!
今回は「Q」キーのキーイベントノードを追加しましょう!
次に、お待ちかね!ForLoopを出しましょう!
そして、QキーイベントのPressedとつなげましょう!
ForLoopのFirstIndexに「0」、LastIndexに「5」を入れましょう!
さて、レベルBPはここでいったん離れましょう!
次にスポーン用のアクターを作りましょう!
親クラスがActorの新規BPを作成し、BPの名前を「BP_SpawnActor」にしておきましょう!
作成したBPを開き、コンポーネントを追加しましょう!
追加するコンポーネントは、椅子(SM_Chair)にでもしておきましょう!
そして、SimulatePyhsicsにチェックを入れておきましょう!
コンパイルし、保存してBP_SpawnActorはこれで終了です!
次に、スポーンする位置のBPを作りましょう!
新規BPでTargetPointクラスのBPを作りましょう!
すべてのクラスのところで「TargetPoint」と検索すると出てくるので、それを選びましょう!
TargetPointクラスのBPの名前を「BP_SpawnPoint」としておきましょう!
BP_SpawnPointをレベル内に配置しましょう!
では、レベルBPに戻りましょう!
レベルBPでForLoopのLoopBodyピンをひっぱり、SpawnActorFromClassノードを出しましょう!
SpawnActorFromClassのClassは「BP_SpawnActor」を選択しましょう!
次に、BP_SpawnPointを参照しましょう!
BP_SpawnPointを選択状態にしたまま、レベルBPのグラフ内で右クリックすると「BP_SpawnPointのリファレンスを作成」というのがあるので、それをクリックしましょう!
これでBP_SpawnPointを参照できました。(参照=リファレンス)
次に参照したBP_SpawnPointのピンをひっぱり、GetactorTranceformノードを出しましょう!それをSpawnActorFromClassのSpawnTranceformに繋ぎましょう!
コンパイルして終了です!
さあ!流れを整理しましょう!
①Qキーを押したとき
②ForLoopにつながっているSpawnActorFromClassが
③FirstIndex~LastIndexの数の分だけBP_SpawnPointからスポーンされる
となります!
実際にプレイしてみましょう!
Qキーを押すと・・・
ものすごい勢いで吹き飛んでいくと思いますww
これは、一つのポイントから複数のアクターが出てきているため、アクター同士が反発しあって吹き飛んでいるのだと思われます。
その証拠に、BP_SpawnActorを1個のみスポーンした場合だと、きれいに「ストンッ」と落ちてくれます。
さて、あまりにも勢いよくスポーンしているので簡易的な部屋を作りましょう!
かなり大きく作ってください。
作ったら部屋の中に、BP_SpawnPointと操作キャラを入れてあげましょう!
もう一度プレイして、Qキーを押すと・・・
動画のようになったのなら成功ですね!
ちゃんと6個スポーンされているはずです!
FirstIndexには「0」、LastIndexには「5」を入れたので、SpawnActorFromClassが6回呼び出されて、6個スポーンされていますよね。
※ただ、メッシュによっては1個だけ勢いのあまり壁を突き抜けてしまう場合があるようです。
例えば、メッシュをキューブにした場合、1個だけ壁を突き抜けてしまうので、「あれ??5個しかない??」と勘違いしてしまいます。(一応ちゃんと6個スポーンされていますが)
まあとりあえず、ForLoopの活用方法が分かったのではないかと思います!
もちろん今回以外にも様々な使い方があるので、ぜひご自分で調べて実践してみてください!
ForLoopを知っているか知らないかでかなり効率的な作業が出来るわけです!
それではまた!^^ノシ