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を知っているか知らないかでかなり効率的な作業が出来るわけです!

 

それではまた!^^ノシ

 

 

 

 

ForLoop

どーも!Free_Gamerです!

今回は・・・

 

ForLoopノードの解説

 

をしたいと思います!

 

f:id:Free_Gamer:20180515223632p:plain

 こちらですね!

 

ForLoopは、

 

LoopBodyにつながっている処理をFirstIndexからLastIndexまでの数だけループしてくれる。

ループが終わると、Completedに処理が流れる。

 

というノードです。

どういうことか解説します。

f:id:Free_Gamer:20180515224518p:plain

画像のように処理を組みました。

FirstIndexには「0」

LastIndexには「5」

が、入っています。

そしてLoopBodyにはPrintStringがつながっています。

どうなるかというと・・・

f:id:Free_Gamer:20180515224902p:plain

画像左上を注目すると、PrintStringにデフォルトで入っていた「Hello」が「6回」呼び出されていますね。

さっきFirstIndexには「0」LastIndexには「5」を入れましたね。

ん??そうなると5回表示にならない??だってLastIndexに「5」って・・・と勘違いしている人もいるかもしれないので説明しておくと、

 

FirstIndex「0」LastIndex「5」というのは

FirstIndex①「0」 ②「1」③「2」④「3」⑤「4」 LastIndex⑥「5」

となります。

つまり、数字の数だけ処理をループしてくれるので、この場合だと⑥回処理をループしてくれることになります!

なので、今度は下のように処理を組むと・・・

f:id:Free_Gamer:20180515225813p:plain

さあ、PrintStringのHelloは、何回呼び出されるでしょう??

f:id:Free_Gamer:20180515225917p:plain

そうですね!「11回」呼び出されますね!「10回」じゃあないですよ??

さて、ちなみにこのようにした場合はPrintStringが何回呼び出されるでしょう??

f:id:Free_Gamer:20180515230119p:plain

この場合は・・・

f:id:Free_Gamer:20180515230146p:plain

正解は「6回」呼び出されます!

 

FirstIndex①「5」 ②「6」③「7」④「8」⑤「9」 LastIndex⑥「10」

 

なので、正解は「⑥回」でした!

 

最後にCompletedピンの解説です。

f:id:Free_Gamer:20180515230711p:plain

画像のように処理を組みました。LoopBodyにつながっているPrintStringには「Hello」、CompletedにつながっているPrintStringには「OK!」を入れました。

冒頭でも述べましたが、

 

LoopBodyにつながっている処理をFirstIndexからLastIndexまでの数だけループしてくれる。

ループが終わると、Completedに処理が流れる。

 

と言いましたね。

 

つまり・・・

f:id:Free_Gamer:20180515230824p:plain

LoopBodyにつながっているPrintString(Hello)が「11回」呼び出され、それが終わるとCompletedにつながっているPrintString(OK!)が呼び出される。という感じです! 

 

さあ!とりあえずForLoopの機能はこれで分かってもらえたかと思いますが、まだ初心者の人には、

 

「ForLoopの機能は分かったけど、はたしてどう活用できるのだろうか・・・PrintStringで文字を指定回数分表示できるという使い道しか思いつかない・・・」    

 

と思っている人がいるんじゃあないでしょうか??

 

なので次回は、実際にForLoopがどういうときに役立つのかをお見せしたいと思います!

きっとForLoopのありがたみが分かることでしょう!

それではまた!^^ノシ 

カウントダウンの実装方法~後編~最後にアドバイスがあるよ!

どーも!Free_Gamerです!

今回は前回の続き・・・

 

カウントダウンの実装方法~後編~

 

を始めていきたいと思います!

 

前回は、

f:id:Free_Gamer:20180513234518p:plain

とりあえずカウントダウン処理を実装することはできました。

ですが・・・


ブログ用 UE4 Timerカウントダウン

動画(画面の左上)を見てもらえると分かる通り、カウントが「0」になっても、「0」以下まで下がり、「-1」「-2」・・・と下がっていってしまいましたね。

今回はカウントが「0」になったらそこできっちりカウントダウンを止める処理を実装していきたいと思います!

 

前回のカウントダウン処理のBPを開いてください!

レベルBPにありましたよね。

f:id:Free_Gamer:20180513234518p:plain

これですね!

今回はこれにちょっと改良を加えます!

 

加えるもの!

・Branch

・Integer変数

・<か≦

 

それではやっていきましょう!

まずInteger変数を作ります!理由はカウントダウン終了時に使いたい重要なものだからです!

レベルBPの画面左側の変数の項目にある「+変数」ボタンをクリックし、Integer型の変数を作ります!

f:id:Free_Gamer:20180514191810p:plain

f:id:Free_Gamer:20180514191836p:plain

次に、作った変数の名前を決めましょう!

カウントダウン終了時に使いたいので、「FinishCount」とでもしておきましょうか!わかりやすいですね!多分!

f:id:Free_Gamer:20180514191907p:plain

さて!一度コンパイルして、ここでInteger型の変数を作ることは終わりました!デフォルト値は「0」のままで!

次に、Branchノードを出しましょう!

f:id:Free_Gamer:20180514192138p:plain

Branchノードは、Condition(条件)によって「True」か「False」どちらかの処理を流すノードです!

このノードはよく使います!覚えておきましょう!

このBranchを、Timer変数PrintStringの間に挟みましょう!

f:id:Free_Gamer:20180514192319p:plain

画像のように出来ましたか??

次に、FinishCount変数をセットし、BranchのTrueとつなぎましょう!

f:id:Free_Gamer:20180514192926p:plain

f:id:Free_Gamer:20180514192941p:plain

f:id:Free_Gamer:20180514192608p:plain

出来ましたか??

次に、PrintStringをもう1個出しましょう!

f:id:Free_Gamer:20180514193159p:plain

そして、「<(小なり)」ノードを出しましょう!

グラフ内で右クリックし検索欄に「<」と打つと、

f:id:Free_Gamer:20180514193452p:plain

「Integer<Integer」「Integer≦Integer」の2つが出てきます。

どちらでもいいので、今回は「Integer≦Integer」を選びましょう!

f:id:Free_Gamer:20180514193815p:plain

このノードは、「「A」がB」と同等、あるいはB」より小さい場合、Trueを返す」ノードです。

なぜこのノードを使うのか、後程わかります!

さて!このノードのA」に、セットTimer変数のピンをつなげ、B」には「0」の値を入れておきましょう!

そして、「Integer≦Integer」の赤いピン、いわゆるBooleanピンをBranchのConditionにつなぎましょう!

Booleanは、「True」か「False」の値を持つ型ですよ。

f:id:Free_Gamer:20180514194354p:plain

出来ましたか??

そして、BranchのFalseを、もう1個のPrintStringにつなぎましょう!

f:id:Free_Gamer:20180514194526p:plain

最後に、セットTimer変数のピンをFalseにつながっているPrintStringのピンクのピン、Stringピンにつなぎ、

f:id:Free_Gamer:20180514194659p:plain

セットFinishCount変数のピンをすぐ隣につながっているPrintStringのStringピンにつなぎましょう!

f:id:Free_Gamer:20180514194824p:plain

OKです!これで完了です!

さて!ここでBPの流れを整理しましょう!

①ゲーム開始時EventTickが毎フレーム呼び出される

1秒おきにカウントダウンが始まる。

この時まだカウントダウンの秒数は0より上つまり「A」が「B」より大きいためBranchの処理はFalseに流れている。

③カウントダウンが「0」になったとき、A」がB」と同等、それ以降はずっとB」より小さくなるので、「Integer≦Integer」が「True」を返し、Branchの処理は「True」に流れ続ける。

④TrueにつながっているセットFinishCount変数のデフォルト値「0」を、PrintStringによって表示し続ける。

 

といった感じです!

それではコンパイルし、実際にプレイしてみましょう!


ブログ用 カウントダウン処理 修正版

動画のように行きましたでしょうか??

行ったのなら大成功です!よかったですね!^^

 

ちなみに、「Integer<Integer」ノードを使っても結果は変わりません。

実際にやってみるとわかります。

 

さて!うまくいって (((o(*゚▽゚*)o)))ウェーイwwwwwwww としているところで一つアドバイスです!

これは僕が実際にやった間違いなので、よーく覚えといてください!

 

僕は、このカウントダウンの処理を作っているときに、

「0、つまり「A」が「B」の0と同等の時にTrueにつながっている処理を流すようにしよう!」

と決めました!

なので、「A」と「B」が同等の時にTrueを返すノード「Integer=Integer」ノードを出しました!

これのことですね!

f:id:Free_Gamer:20180514202339p:plain

そしてあとは同じように処理を組んでいく!

ノリノリで作り、さあ完成!

f:id:Free_Gamer:20180514201503p:plain

 

さあ!プレイスタートだぁあ!

確かめてみると・・・


ブログ用 カウントダウン処理 間違いバージョン

動画を見てもらうとわかったかと思いますが、0に到達したのにも関わらずそのまま「-1」「-2」・・・と続いてしまいました。

なぜでしょう??この時の僕は本当に悩みました。

さて、勘のいい人ならもう気づいたかもしれませんが、僕は痛恨の勘違いをしています。

いったいどこを勘違いしたというのでしょうか??

変数をミスった??デフォルト値が違う??そもそもこれ本当にUE4??それとも俺のPCがbg(ry・・・

原因はどれでもありません。原因はこれです!

さっきの文章を思い出してみましょう。

 

「0、つまり「A」が「B」の0と同等の時にTrueにつながっている処理を流すようにしよう!」

と決めました!

なので、「A」と「B」が同等の時にTrueを返すノード「Integer=Integer」ノードを出しました!

f:id:Free_Gamer:20180514202339p:plain

さあ気づきましたか??

原因は「Integer=Integer」ノードにあったのです!

くどくて申し訳ないですが、「Integer=Integer」ノードは「A」と「B」が同等の時に「True」を返すノードです。

 

言い方を変えると、「A」と「B」が同等の時に”しか”Trueを返さないということになります。

 

つまり、カウントダウン用のTimer変数が0になった時にちゃんと「True」に処理が流れているのですが、「B」と同等になるのは一瞬なので、0以下になった時点ですぐにFalseに処理が戻り、そのまま0以下の数値が表示された。

と、いうことになります。

実際にBPの処理がどう流れているかの映像も含めて動画にしました。見てみるとよくわかると思います。


ブログ用 カウントダウン処理 間違いBP

おわかりいただけただろうか。

僕の言った通り、「A」と「B」が同等になった時だけ「True」に流れ、それ以降はすぐに「False」の処理に戻りましたね。

 

僕と同じようなミスをしないよう皆さんにお伝えしました。

まあ僕がバカなだけってのもありますが(真顔)

 

もし、カウントダウン処理のあるゲームを作りたいということであれば、参考にしてみてください!

それではまた!^^ノシ

 

 

 

 

 

 

 

カウントダウンの実装方法~前編~

どーも!Free_Gamerです!

今回は、

 

カウントダウンの実装方法について

 

説明していきます!

 

例えば、制限時間があるゲームを作るとして、10秒間の制限時間を設け、0秒になると爆弾が爆発!というゲームを作る場合。

 

ゲームスタート時、カウントダウンが始まります!

10、9、8・・・時間は迫ってきています・・・!

0秒になり爆弾が爆発!ヒャッハー!芸術はばくはt(ry

しかし、カウントダウンは0秒になっても止まらず、-1、-2、-3・・・と続いてしまいます・・・

 

正直言っておかしいですよね(笑)

 

今回はそうならずに0秒になったらそこでカウントダウンを止める処理を紹介します!

ですが、長くなりそうなので今回はとりあえずカウントダウン処理の実装方法をお伝えします(汗)

0秒になったらカウントダウンを止める処理は次回で!

 

方法は至って簡単です!

必要なもの!

・レベルBP

・Delay

・Integer型変数

・PrintString

・EventTick

 

たったこれだけです!なので、前回の記事みたいにgdgdになることはないはずです!(絶対嘘)

 

まず!レベルBPを開きます!

そしたら、EventTickノードを出しましょう!

f:id:Free_Gamer:20180513224558p:plain

EventTickノードは毎フレーム呼ばれるイベントです!つまり、EventTickノードにPrintStringをつなげると・・・

f:id:Free_Gamer:20180513224810p:plain

f:id:Free_Gamer:20180513224827p:plain

画像のように、PrintStringがEventTickによって、毎フレーム呼ばれることになります!よく覚えておきましょう!初めてUE4を触る人がこの記事を見ているかもしれないですからね!

さて!手順に戻りましょう!

EventTickを出したら、次は変数を作ります!何のために作るかというと、カウントダウンの為に使うからです!つまり超重要な主役なのです!

レベルBPで、画面左側の「変数」の項目にある「+」を押し、新規変数を作成しますよ!

f:id:Free_Gamer:20180513225345p:plain

新規作成された変数の型を決めます!今回は10秒間のカウントダウンの処理を作りたいので、整数が必要ですね!(整数は1、2,3などの小数点のない数字の事)

なので、整数を扱う場合、Integer型の変数を選びますよ!

画面右側に新規作成された変数の詳細パネルがあるので、詳細パネルの変数の型から、Integerを選びましょう!

f:id:Free_Gamer:20180513225921p:plain

そして、変数名は「Timer」とでもしておきましょうか!(まあ名前はお好きにw)

f:id:Free_Gamer:20180513230138p:plain

変数を作成したら、作成した変数「Timer」をグラフにD&D(ドラッグ&ドロップ)し、ゲットしセットしましょう!

f:id:Free_Gamer:20180513230750p:plain

f:id:Free_Gamer:20180513230811p:plain

ゲットセットの両方出しましたね??

それでは実際にカウントダウン処理を作っていきましょう!

ゲットTimerピンを引っ張り、「ー(マイナス記号)」を入力すると「Integer-Integer」というのが出てくるのでそれをクリックしましょう!

f:id:Free_Gamer:20180513231608p:plain

f:id:Free_Gamer:20180513231710p:plain

このノードは減算ノードです。つまり引き算をするためのノードですね!

Integer-Integerなので、整数同士の引き算するためのノードですね!

f:id:Free_Gamer:20180513232321p:plain

上のAのほうにゲットTimerピンをつなげ、Bのほうには「1」を入れます。

次に、ゲットTimerのデフォルト値を決めます。ゲットTimer変数を選択し、画面右側の詳細パネルの一番下「デフォルト値」の数値を10にしましょう!

 

※もし、デフォルト値が入れられず、「ブループリントをコンパイルしてください」という表記がある場合、一旦レベルBPをコンパイルしましょう!そうするとデフォルト値を入れられます!

 

さて!次にセットTimer変数をEventTickとつなげましょう!

f:id:Free_Gamer:20180513232954p:plain

画像のようになっていればOKです!

さて、最後にPrintStringをセットTimer変数とつなげて、

f:id:Free_Gamer:20180513233257p:plain

セットTimer変数のピンをPrintStringにつなげてあげれば・・・

f:id:Free_Gamer:20180513233338p:plain

OKです!

ちなみに、セットTimer変数とPrintStringの間にあるのは自動的に出てくるので安心してください!(セットTimer変数のピンをPrintStringのピンにつなげば自動的に出てきますよ)

さて!このBPの流れを整理すると、

①ゲーム開始時EventTickが毎フレーム呼び出される

一回呼び出されるごとにTimer変数が計算を開始

計算結果をPrintStringで表示

です!

それではやってみましょう!

f:id:Free_Gamer:20180513233709p:plain

・・・・・・実際にやってみるとものすごい勢いで計算が行われているせいで一瞬にして0以下になりました。

ですが、一応しっかり計算が行われていることはわかりましたね!

しかし、これだけ早いとカウントダウンとしてははっきり言って使えないですよね。だって早すぎですもの(笑)

なので、次はしっかりとした感覚でカウントダウンを行いたいと思います!

非常に簡単です!

Delayノードを使えばいいのです!

f:id:Free_Gamer:20180513234242p:plain

DelayノードはDurationに入れた秒数だけ遅延を発生させます。

このノードをEventTickとセットTimer変数の間に入れますよ。

f:id:Free_Gamer:20180513234518p:plain

そして、DelayDurationには「1」を入れましょう!

つまり、1秒置きにカウントダウンを行ってくれるので、今度はいい感じのリズムでカウントダウンが行えると思います!

コンパイルし、実際にプレイしてみましょう!


ブログ用 UE4 Timerカウントダウン

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

しかし、肝心の「0になったらカウントダウンを止める」の処理ができていませんよね。

その実装に関しては、次回掲載いたします!

それではまた!^^ノシ

 

 

爆弾の作り方

どーも!Free_Gamerです!

今回は・・・

 

爆弾の作り方

 

について、法に触れない範囲でお伝えします!

具体的な内容としては、

「3秒後に爆発する爆弾」を作っていきましょう!法に触れないはn(ry

必要なもの!

・スタティックメッシュ(爆弾)

・Timeline

・SpawnEmitteratLocation

・Lerp

・SetSclarParameterValue

・SetVectorParameterValue

・CreatDynamicMaterialInstance

 それでは解説していきましょう!

 

まず、爆弾のBP(ブループリント)を作りましょう!コンテンツブラウザで右クリックし、「ブループリントクラス」をクリックし、一番上の「Actor」をクリックしましょう!

f:id:Free_Gamer:20180512195607p:plain

名前は、「BP_Bomb」とでもしておきましょうか。爆弾ですからね。

f:id:Free_Gamer:20180512195701p:plain

「BP_Bomb」をダブルクリックし、BP画面に行きましょう!

次に、爆弾となるスタティックメッシュを決めましょう!

ビューポート画面に行き、コンポーネントを追加」クリックし、「球」というやつをクリックしましょう!Sphere(球)ですね。(もちろんこんな形は気に食わん!というのなら別のものを選んでもらっても構いませんよ!)

f:id:Free_Gamer:20180512191850p:plain

次はConstraction Script画面に行きましょう!

Constraction Scriptで、CreatDynamicMaterialInstance(Sphereノードを出しましょう!

そしてCreatDynamicMaterialInstanceReturnValueピンを引っ張り、変数へ昇格をクリックしましょう!

f:id:Free_Gamer:20180512192708p:plain

変数に昇格し、その変数の名前をDMI(DynamicMaterialInstanceの略)とでもしておきましょう!わかりやすいですからね。

f:id:Free_Gamer:20180512193759p:plain

なぜこの工程が必要なのかは後で解説いたします。

次に、イベントグラフに行きましょう!

イベントグラフでEventBeginPlayからピンを引っ張り、Timelineノードを出しましょう!

f:id:Free_Gamer:20180512200055p:plain

Timelineに名前が付けられるので、BombCountとでもしておきましょう!(画像では「BomCount」になっていて「b」が抜けていますが気にしないでください・・・)

Timelineをダブルクリックし、Timelineの画面に行きましょう!

Timelineの画面で、フロートトラックを追加し、追加されたフロートトラックの名前を分かりやすくCountDownにしておきましょう。

f:id:Free_Gamer:20180512201122p:plain

f:id:Free_Gamer:20180512201323p:plain

TimeLineの長さは4秒にしましょう!

次に、TimeLine「キー」を打っていきましょう!

1秒、2秒、3秒に値が「1」のキーを打っていきましょう!

0秒4秒のところに値が「0」のキーを打ちましょう!

そして、0.9秒、1.1秒、1.9秒、2.1秒、2.9秒、3.1秒のところにも値が「0」のキーを打ちましょう!

最終的に、こうなるはずです。

f:id:Free_Gamer:20180512202547p:plain

これでTimeLineの工程は以上です!

それでは、イベントグラフに戻りましょう!

画面左側のマイブループリント変数にある、DMI変数をグラフにGetしましょう!

f:id:Free_Gamer:20180512203730p:plain

f:id:Free_Gamer:20180512203819p:plain

DMIGetしたら、DMIのピンを引っ張り、SetSclarPlameterValueSetVectorParameterValueノードを出しましょう。

f:id:Free_Gamer:20180512204538p:plain

さて、前にConstraction Script画面でCreatDynamicMaterialInstanceノードを作成し、DMIという変数を作りましたが、このSetSclarParameterValueSetVectorParameterValueノードで爆発カウントダウン時に「球(Sphere)」のマテリアルを動的に変えたかったからDMI変数を作ったのです。

CreatDynamicMaterialInstanceノードは任意のマテリアルのインスタンスを作成するノードです。このノードで作成されたインスタンス情報を変数に格納してあげたのです。

そして、マテリアルインスタンス情報が入っているDMI変数をSetSclarParameterValue、SetVectorParameterValueにつないであげて、BPを使って動的にマテリアルを変更したかったのです。

f:id:Free_Gamer:20180512211218p:plain

近いうちにCreatDynamicMaterialInstanceの解説もしたいので、とりあえず解説はこの辺にしておきます。

 

さて、次にTimeLineノードとSetSclarParameterValue、SetVectorParameterValueを使って、マテリアルをカウントダウン時に変えていくのですが、ここでLerpというノードを出しましょう!

f:id:Free_Gamer:20180512214939p:plain

LerpAlphaの値が「0」の時に「A」の値を返し、「1」の時に「B」の値を返します。

TimeLineノードにCountDownという名前のFloat型のピンがあるはずなので、それをLerpAlphaにつなぎましょう!

もう1個Lerpノードを出し、同じようにAlphaにつなぎます。

f:id:Free_Gamer:20180512220841p:plain

そして、1個目のLerpReturnValueSetSclarParameterValueValueピンにつなぎましょう!次にSetSclarParameterValueParameterName「Emissive」と入れましょう!

f:id:Free_Gamer:20180512222022p:plain

次にSetVectorParameterValueValueピンをひっぱり、LinerColorを作成をクリックします。

f:id:Free_Gamer:20180512222405p:plain

するとこのノードが出てくるので、

f:id:Free_Gamer:20180512222510p:plain

2個目のLerpReturnValueLinerColorを作成の一番上Rにつなぎましょう!

そして、SetVectorParameterValueParameterNameColorと入れます。

次に、SetSclarParameterValueにつながってるLerpBの値を「50」にしましょう。そしてSetVectorParameterValueにつながっているLerpBの値を「1」にします。

そうすると、ここまでできたはずです。

f:id:Free_Gamer:20180512223934p:plain

ここまでのBPの処理を整理すると、

①ゲーム開始時

TimeLineノードが呼び出される

SetSclarParameterValueEmissiveパラメーターが1、2、3のタイミングで50になり、SetVectorParameterValueColorパラメーターのRになることで色が赤色に光る。

という感じです。

次に、実際に爆発させる処理を入れてみましょう!

TimeLineFinishedピンを引っ張り、SpawnEmitterAtLocationノードを出しましょう!

f:id:Free_Gamer:20180512232241p:plain

SpawnEmitterAtLocationEmitterTemplateから爆発エフェクトを選択しましょう!とりあえず「P_Explosion」でいいと思います!(僕は違うのを使いますが)

Locationピンには球(Sphere)の位置を渡してあげましょう!

グラフ内で右クリックしGetWorldLocation(Sphere)をクリックしましょう。そしてLocationピンにつなぎますよ。

これで、Sphereのある位置で爆発エフェクトが出るようになりました!

最後に、SpawnEmitterAtLocationの出力ピンを引っ張り、SetLifeSpanノードを出しましょう!

f:id:Free_Gamer:20180512233925p:plain

そして、InLifeSpan0.2と入れましょう!

こうすることで爆発エフェクトが再生後、爆弾である球(Sphere)が0.2秒後に消えることになります。

ここまで来たら最終的にはこうなります。

f:id:Free_Gamer:20180512234115p:plain

ここまでの流れを整理しましょう!

①ゲーム開始時

②カウントダウン開始。Updateに処理が流れ、マテリアルが怪しく光る

③TimeLineの再生が終わるとFinishedピンに処理が流れる

④爆発エフェクト再生

⑤爆弾消滅

といった感じです!

それではコンパイルし、実際に爆発するか見てみましょう!

レベルエディタに行き、レベル内に「BP_Bomb」をドラッグ&ドロップして、ゲームをプレイしてみましょう!


ブログ用 爆発チュートリアル

どうでしょうか!動画のようになったのなら大成功です!

ここまでかなりだらだらと長い文章で解説してしまったことお詫びいたします・・・。

それでもついてきてくれた方はありがとうございます!

あとは、TimeLineの時間を変えたり、キーの位置を変えたり、色を変更するなどなどやってみるのもいいと思います!

それではまた!^^ノシ

 

~追記~

一部説明不足がありました。補足いたします。

爆弾となるスタティックメッシュ(このブログの場合だとSphere)のマテリアルを編集しましょう。

爆弾のBP「BP_Bomb」を開き、画面左上のコンポーネントパネルのSphereをクリックしましょう。爆弾となるスタティックメッシュですね。

f:id:Free_Gamer:20180514002030p:plain

 そして、画面右側にSphereの詳細パネルにあるMaterialをダブルクリックしましょう。

f:id:Free_Gamer:20180514002229p:plain

すると、Sphereのマテリアルエディターに移行すると思うので、次のようにしてください。

f:id:Free_Gamer:20180514002627p:plain

赤枠で囲ってあるノードを出しましょう

「ScalarParameter」「MultiPly」ノードですね。

「ScalarParameter」には名前を入れられるので、「Emissive」と入れましょう。

f:id:Free_Gamer:20180514004940p:plain

そして、次に以下の手順を行ってください。

f:id:Free_Gamer:20180514003136p:plain

カラーを決めるノード(1,1,1,0って書いてある奴)にマウスカーソルを重ね、右クリックすると「パラメーターに変換」というのがあるのでそれをクリック。

すると名前を決められるので「Color」にしましょう。

f:id:Free_Gamer:20180514003607p:plain

そしてColorという名称にしたノードの白いピンを、右のベースカラーにつなぎましょう。

f:id:Free_Gamer:20180514003814p:plain

そして、画面左上にある「適用」ボタンを押して完了です!

説明不足で申し訳ありませんでした。また何かあればご指摘ください!

 

UE4 キャラを打ち上げる方法

どーも!Free_Gamer

今日からUE4(UnrealEngine4)のテクニックを発信していきます!

もちろんまだまだ初心者なので説明が足りていない部分、間違っている部分などがある可能性があります!

もし、そのようなことがあればお気軽に教えていただけるととてもうれしいです!

それでは今回は!

「キャラを打ち上げる方法」について説明いたします!

さて、キャラを打ち上げる方法というのは、その言葉の通り「キャラを上方に打ち上げる」ということ。

どうやればそのようなことができるか!

 

非常に簡単です

 

このノードを使えばいいのです!

f:id:Free_Gamer:20180512154307p:plain

「Launch Character」です!

「Launch Character」を使うと、キャラを「上方に打ち上げる」ことができます!

しかし、ただ「Launch Character」ノードを使えばいいというわけではありません。

f:id:Free_Gamer:20180512154654p:plain

このようにBP(ブループリント)を組んでゲームを開始しても・・・

f:id:Free_Gamer:20180512154802p:plain

・・・・・・微動だにしません。ミクロたりとも動きやしません。

じゃあどうすればいいのかというと、「Launch Character」ノードの「Launch Velocity」「Z」に打ち上げたい高さの値を入れてあげればよいのです!

f:id:Free_Gamer:20180512155218p:plain

すると・・・

f:id:Free_Gamer:20180512155240p:plain

打ちあがったああああああ!

大成功です!

もちろん「Launch Velocity」「Z」の値をもっと上げてあげれば・・・

f:id:Free_Gamer:20180512155713p:plain

f:id:Free_Gamer:20180512155733p:plain

もっともっと高く打ちあがるわけです!

ちなみに、「Launch Velocity」「Z」に入れる値は「400」以降が目に見えて打ちあがってくれます。

というのも、例えば「Launch Velocity」「Z」「100」を入れても・・・

f:id:Free_Gamer:20180512160339p:plain

f:id:Free_Gamer:20180512160309p:plain

ほんの僅かにしか打ちあがってません。かなり一瞬です。「200」「300」も試しましたが、正直微妙だったのでしっかり打ち上げたいなら「400」以降がいいかと思われます。

ちなみに、「Launch Velocity」「Z」を「0」にして、「X」「Y」になにかしらの値を入れても打ちあがりません。

おそらく、「Launch Character」ノードは、その名の通り「キャラを打ち上げる」為のノードであり、「Z」に値が入っていることが前提条件になっている為、キャラが打ちあがらないのだと思われます。

なので、例えば「X」方向にピョーン!とキャラを打ち上げたい!といったときは、

f:id:Free_Gamer:20180512163238p:plain

「X」「Z」に打ち上げたい値を入れてやると・・・

f:id:Free_Gamer:20180512163326p:plain

f:id:Free_Gamer:20180512163352p:plain

f:id:Free_Gamer:20180512163413p:plain

しっかり「X」に打ちあがったのが分かったかと思います。

いかがでしたでしょうか。この「Launch Character」ノードは一見地味なノードのように思われますが、使い方次第ではなかなか役に立ってくれるのではないかと思います!ぜひ、ご活用ください!

では、最後に「Launch Character」ノードを実際に使った動画を載せておきます!

それではまた!


ブログ用 Launch Characterでキャラを打ち上げてみたwwww


ブログ用 爆弾でキャラを吹き飛ばしたったwwww

初めまして!

初めまして!Free_Gamerと申します!

趣味はゲーム、UE4、たまーに絵を描きます!

 

UE4・・・(UnrealEngine4というゲーム製作エンジン名の略)

 

 好きなゲームは、デビルメイクライ、ブラッドボーン、ジャストコーズ3etc...

このブログでは、自分の趣味で体験したことを主に発信していきます!

例えば、ゲームの感想!UE4でのゲーム製作進捗報告!時には世間話とかも!etc...

読んでくれている方々にとって役に立つようなブログにしていきます!

最近はUE4で遊んでいるので、UE4関連のお話が主になってくるかと思います!

これからよろしくお願いいたします!