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を知っているか知らないかでかなり効率的な作業が出来るわけです!
それではまた!^^ノシ
ForLoop
どーも!Free_Gamerです!
今回は・・・
ForLoopノードの解説
をしたいと思います!
こちらですね!
ForLoopは、
LoopBodyにつながっている処理をFirstIndexからLastIndexまでの数だけループしてくれる。
ループが終わると、Completedに処理が流れる。
というノードです。
どういうことか解説します。
画像のように処理を組みました。
FirstIndexには「0」
LastIndexには「5」
が、入っています。
そしてLoopBodyにはPrintStringがつながっています。
どうなるかというと・・・
画像左上を注目すると、PrintStringにデフォルトで入っていた「Hello」が「6回」呼び出されていますね。
さっきFirstIndexには「0」、LastIndexには「5」を入れましたね。
ん??そうなると5回表示にならない??だってLastIndexに「5」って・・・と勘違いしている人もいるかもしれないので説明しておくと、
FirstIndex「0」LastIndex「5」というのは
FirstIndex①「0」 ②「1」③「2」④「3」⑤「4」 LastIndex⑥「5」
となります。
つまり、数字の数だけ処理をループしてくれるので、この場合だと⑥回処理をループしてくれることになります!
なので、今度は下のように処理を組むと・・・
さあ、PrintStringのHelloは、何回呼び出されるでしょう??
そうですね!「11回」呼び出されますね!「10回」じゃあないですよ??
さて、ちなみにこのようにした場合はPrintStringが何回呼び出されるでしょう??
この場合は・・・
正解は「6回」呼び出されます!
FirstIndex①「5」 ②「6」③「7」④「8」⑤「9」 LastIndex⑥「10」
なので、正解は「⑥回」でした!
最後にCompletedピンの解説です。
画像のように処理を組みました。LoopBodyにつながっているPrintStringには「Hello」、CompletedにつながっているPrintStringには「OK!」を入れました。
冒頭でも述べましたが、
LoopBodyにつながっている処理をFirstIndexからLastIndexまでの数だけループしてくれる。
ループが終わると、Completedに処理が流れる。
と言いましたね。
つまり・・・
LoopBodyにつながっているPrintString(Hello)が「11回」呼び出され、それが終わるとCompletedにつながっているPrintString(OK!)が呼び出される。という感じです!
さあ!とりあえずForLoopの機能はこれで分かってもらえたかと思いますが、まだ初心者の人には、
「ForLoopの機能は分かったけど、はたしてどう活用できるのだろうか・・・PrintStringで文字を指定回数分表示できるという使い道しか思いつかない・・・」
と思っている人がいるんじゃあないでしょうか??
なので次回は、実際にForLoopがどういうときに役立つのかをお見せしたいと思います!
きっとForLoopのありがたみが分かることでしょう!
それではまた!^^ノシ
カウントダウンの実装方法~後編~最後にアドバイスがあるよ!
どーも!Free_Gamerです!
今回は前回の続き・・・
カウントダウンの実装方法~後編~
を始めていきたいと思います!
前回は、
とりあえずカウントダウン処理を実装することはできました。
ですが・・・
動画(画面の左上)を見てもらえると分かる通り、カウントが「0」になっても、「0」以下まで下がり、「-1」「-2」・・・と下がっていってしまいましたね。
今回はカウントが「0」になったらそこできっちりカウントダウンを止める処理を実装していきたいと思います!
前回のカウントダウン処理のBPを開いてください!
レベルBPにありましたよね。
これですね!
今回はこれにちょっと改良を加えます!
加えるもの!
・Branch
・Integer変数
・<か≦
それではやっていきましょう!
まずInteger変数を作ります!理由はカウントダウン終了時に使いたい重要なものだからです!
レベルBPの画面左側の変数の項目にある「+変数」ボタンをクリックし、Integer型の変数を作ります!
次に、作った変数の名前を決めましょう!
カウントダウン終了時に使いたいので、「FinishCount」とでもしておきましょうか!わかりやすいですね!多分!
さて!一度コンパイルして、ここでInteger型の変数を作ることは終わりました!デフォルト値は「0」のままで!
次に、Branchノードを出しましょう!
Branchノードは、Condition(条件)によって「True」か「False」どちらかの処理を流すノードです!
このノードはよく使います!覚えておきましょう!
このBranchを、Timer変数とPrintStringの間に挟みましょう!
画像のように出来ましたか??
次に、FinishCount変数をセットし、BranchのTrueとつなぎましょう!
出来ましたか??
次に、PrintStringをもう1個出しましょう!
そして、「<(小なり)」ノードを出しましょう!
グラフ内で右クリックし検索欄に「<」と打つと、
「Integer<Integer」か「Integer≦Integer」の2つが出てきます。
どちらでもいいので、今回は「Integer≦Integer」を選びましょう!
このノードは、「「A」が「B」と同等、あるいは「B」より小さい場合、Trueを返す」ノードです。
なぜこのノードを使うのか、後程わかります!
さて!このノードの「A」に、セットTimer変数のピンをつなげ、「B」には「0」の値を入れておきましょう!
そして、「Integer≦Integer」の赤いピン、いわゆるBooleanピンをBranchのConditionにつなぎましょう!
Booleanは、「True」か「False」の値を持つ型ですよ。
出来ましたか??
そして、BranchのFalseを、もう1個のPrintStringにつなぎましょう!
最後に、セットTimer変数のピンをFalseにつながっているPrintStringのピンクのピン、Stringピンにつなぎ、
セットFinishCount変数のピンをすぐ隣につながっているPrintStringのStringピンにつなぎましょう!
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」ノードを出しました!
これのことですね!
そしてあとは同じように処理を組んでいく!
ノリノリで作り、さあ完成!
さあ!プレイスタートだぁあ!
確かめてみると・・・
動画を見てもらうとわかったかと思いますが、0に到達したのにも関わらずそのまま「-1」「-2」・・・と続いてしまいました。
なぜでしょう??この時の僕は本当に悩みました。
さて、勘のいい人ならもう気づいたかもしれませんが、僕は痛恨の勘違いをしています。
いったいどこを勘違いしたというのでしょうか??
変数をミスった??デフォルト値が違う??そもそもこれ本当にUE4??それとも俺のPCがbg(ry・・・
原因はどれでもありません。原因はこれです!
さっきの文章を思い出してみましょう。
「0、つまり「A」が「B」の0と同等の時にTrueにつながっている処理を流すようにしよう!」
と決めました!
なので、「A」と「B」が同等の時にTrueを返すノード「Integer=Integer」ノードを出しました!
さあ気づきましたか??
原因は「Integer=Integer」ノードにあったのです!
くどくて申し訳ないですが、「Integer=Integer」ノードは「A」と「B」が同等の時に「True」を返すノードです。
言い方を変えると、「A」と「B」が同等の時に”しか”Trueを返さないということになります。
つまり、カウントダウン用のTimer変数が0になった時にちゃんと「True」に処理が流れているのですが、「B」と同等になるのは一瞬なので、0以下になった時点ですぐにFalseに処理が戻り、そのまま0以下の数値が表示された。
と、いうことになります。
実際に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ノードを出しましょう!
EventTickノードは毎フレーム呼ばれるイベントです!つまり、EventTickノードにPrintStringをつなげると・・・
画像のように、PrintStringがEventTickによって、毎フレーム呼ばれることになります!よく覚えておきましょう!初めてUE4を触る人がこの記事を見ているかもしれないですからね!
さて!手順に戻りましょう!
EventTickを出したら、次は変数を作ります!何のために作るかというと、カウントダウンの為に使うからです!つまり超重要な主役なのです!
レベルBPで、画面左側の「変数」の項目にある「+」を押し、新規変数を作成しますよ!
新規作成された変数の型を決めます!今回は10秒間のカウントダウンの処理を作りたいので、整数が必要ですね!(整数は1、2,3などの小数点のない数字の事)
なので、整数を扱う場合、Integer型の変数を選びますよ!
画面右側に新規作成された変数の詳細パネルがあるので、詳細パネルの変数の型から、Integerを選びましょう!
そして、変数名は「Timer」とでもしておきましょうか!(まあ名前はお好きにw)
変数を作成したら、作成した変数「Timer」をグラフにD&D(ドラッグ&ドロップ)し、ゲットしセットしましょう!
ゲットとセットの両方出しましたね??
それでは実際にカウントダウン処理を作っていきましょう!
ゲットTimerピンを引っ張り、「ー(マイナス記号)」を入力すると「Integer-Integer」というのが出てくるのでそれをクリックしましょう!
このノードは減算ノードです。つまり引き算をするためのノードですね!
Integer-Integerなので、整数同士の引き算するためのノードですね!
上のAのほうにゲットTimerピンをつなげ、Bのほうには「1」を入れます。
次に、ゲットTimerのデフォルト値を決めます。ゲットTimer変数を選択し、画面右側の詳細パネルの一番下「デフォルト値」の数値を10にしましょう!
※もし、デフォルト値が入れられず、「ブループリントをコンパイルしてください」という表記がある場合、一旦レベルBPをコンパイルしましょう!そうするとデフォルト値を入れられます!
さて!次にセットTimer変数をEventTickとつなげましょう!
画像のようになっていればOKです!
さて、最後にPrintStringをセットTimer変数とつなげて、
セットTimer変数のピンをPrintStringにつなげてあげれば・・・
OKです!
ちなみに、セットTimer変数とPrintStringの間にあるのは自動的に出てくるので安心してください!(セットTimer変数のピンをPrintStringのピンにつなげば自動的に出てきますよ)
さて!このBPの流れを整理すると、
①ゲーム開始時EventTickが毎フレーム呼び出される
②一回呼び出されるごとにTimer変数が計算を開始
③計算結果をPrintStringで表示
です!
それではやってみましょう!
・・・・・・実際にやってみるとものすごい勢いで計算が行われているせいで一瞬にして0以下になりました。
ですが、一応しっかり計算が行われていることはわかりましたね!
しかし、これだけ早いとカウントダウンとしてははっきり言って使えないですよね。だって早すぎですもの(笑)
なので、次はしっかりとした感覚でカウントダウンを行いたいと思います!
非常に簡単です!
Delayノードを使えばいいのです!
DelayノードはDurationに入れた秒数だけ遅延を発生させます。
このノードをEventTickとセットTimer変数の間に入れますよ。
そして、DelayのDurationには「1」を入れましょう!
つまり、1秒置きにカウントダウンを行ってくれるので、今度はいい感じのリズムでカウントダウンが行えると思います!
コンパイルし、実際にプレイしてみましょう!
動画のようになったのなら大成功です!
しかし、肝心の「0になったらカウントダウンを止める」の処理ができていませんよね。
その実装に関しては、次回掲載いたします!
それではまた!^^ノシ
爆弾の作り方
どーも!Free_Gamerです!
今回は・・・
爆弾の作り方
について、法に触れない範囲でお伝えします!
具体的な内容としては、
「3秒後に爆発する爆弾」を作っていきましょう!法に触れないはn(ry
必要なもの!
・スタティックメッシュ(爆弾)
・Timeline
・SpawnEmitteratLocation
・Lerp
・SetSclarParameterValue
・SetVectorParameterValue
・CreatDynamicMaterialInstance
それでは解説していきましょう!
まず、爆弾のBP(ブループリント)を作りましょう!コンテンツブラウザで右クリックし、「ブループリントクラス」をクリックし、一番上の「Actor」をクリックしましょう!
名前は、「BP_Bomb」とでもしておきましょうか。爆弾ですからね。
「BP_Bomb」をダブルクリックし、BP画面に行きましょう!
次に、爆弾となるスタティックメッシュを決めましょう!
ビューポート画面に行き、「コンポーネントを追加」クリックし、「球」というやつをクリックしましょう!Sphere(球)ですね。(もちろんこんな形は気に食わん!というのなら別のものを選んでもらっても構いませんよ!)
次はConstraction Script画面に行きましょう!
Constraction Scriptで、CreatDynamicMaterialInstance(Sphere)ノードを出しましょう!
そしてCreatDynamicMaterialInstanceのReturnValueピンを引っ張り、変数へ昇格をクリックしましょう!
変数に昇格し、その変数の名前をDMI(DynamicMaterialInstanceの略)とでもしておきましょう!わかりやすいですからね。
なぜこの工程が必要なのかは後で解説いたします。
次に、イベントグラフに行きましょう!
イベントグラフでEventBeginPlayからピンを引っ張り、Timelineノードを出しましょう!
Timelineに名前が付けられるので、BombCountとでもしておきましょう!(画像では「BomCount」になっていて「b」が抜けていますが気にしないでください・・・)
Timelineをダブルクリックし、Timelineの画面に行きましょう!
Timelineの画面で、フロートトラックを追加し、追加されたフロートトラックの名前を分かりやすくCountDownにしておきましょう。
TimeLineの長さは4秒にしましょう!
次に、TimeLineに「キー」を打っていきましょう!
1秒、2秒、3秒に値が「1」のキーを打っていきましょう!
0秒と4秒のところに値が「0」のキーを打ちましょう!
そして、0.9秒、1.1秒、1.9秒、2.1秒、2.9秒、3.1秒のところにも値が「0」のキーを打ちましょう!
最終的に、こうなるはずです。
これでTimeLineの工程は以上です!
それでは、イベントグラフに戻りましょう!
画面左側のマイブループリントの変数にある、DMI変数をグラフにGetしましょう!
DMIをGetしたら、DMIのピンを引っ張り、SetSclarPlameterValueとSetVectorParameterValueノードを出しましょう。
さて、前にConstraction Script画面でCreatDynamicMaterialInstanceノードを作成し、DMIという変数を作りましたが、このSetSclarParameterValueとSetVectorParameterValueノードで爆発カウントダウン時に「球(Sphere)」のマテリアルを動的に変えたかったからDMI変数を作ったのです。
CreatDynamicMaterialInstanceノードは任意のマテリアルのインスタンスを作成するノードです。このノードで作成されたインスタンス情報を変数に格納してあげたのです。
そして、マテリアルインスタンス情報が入っているDMI変数をSetSclarParameterValue、SetVectorParameterValueにつないであげて、BPを使って動的にマテリアルを変更したかったのです。
近いうちにCreatDynamicMaterialInstanceの解説もしたいので、とりあえず解説はこの辺にしておきます。
さて、次にTimeLineノードとSetSclarParameterValue、SetVectorParameterValueを使って、マテリアルをカウントダウン時に変えていくのですが、ここでLerpというノードを出しましょう!
LerpはAlphaの値が「0」の時に「A」の値を返し、「1」の時に「B」の値を返します。
TimeLineノードにCountDownという名前のFloat型のピンがあるはずなので、それをLerpのAlphaにつなぎましょう!
もう1個Lerpノードを出し、同じようにAlphaにつなぎます。
そして、1個目のLerpのReturnValueをSetSclarParameterValueのValueピンにつなぎましょう!次にSetSclarParameterValueのParameterNameに「Emissive」と入れましょう!
次にSetVectorParameterValueのValueピンをひっぱり、LinerColorを作成をクリックします。
するとこのノードが出てくるので、
2個目のLerpのReturnValueをLinerColorを作成の一番上Rにつなぎましょう!
そして、SetVectorParameterValueのParameterNameにColorと入れます。
次に、SetSclarParameterValueにつながってるLerpのBの値を「50」にしましょう。そしてSetVectorParameterValueにつながっているLerpのBの値を「1」にします。
そうすると、ここまでできたはずです。
ここまでのBPの処理を整理すると、
①ゲーム開始時
②TimeLineノードが呼び出される
③SetSclarParameterValueのEmissiveパラメーターが1、2、3のタイミングで50になり、SetVectorParameterValueのColorパラメーターのRが1になることで色が赤色に光る。
という感じです。
次に、実際に爆発させる処理を入れてみましょう!
TimeLineのFinishedピンを引っ張り、SpawnEmitterAtLocationノードを出しましょう!
SpawnEmitterAtLocationのEmitterTemplateから爆発エフェクトを選択しましょう!とりあえず「P_Explosion」でいいと思います!(僕は違うのを使いますが)
Locationピンには球(Sphere)の位置を渡してあげましょう!
グラフ内で右クリックしGetWorldLocation(Sphere)をクリックしましょう。そしてLocationピンにつなぎますよ。
これで、Sphereのある位置で爆発エフェクトが出るようになりました!
最後に、SpawnEmitterAtLocationの出力ピンを引っ張り、SetLifeSpanノードを出しましょう!
そして、InLifeSpanに0.2と入れましょう!
こうすることで爆発エフェクトが再生後、爆弾である球(Sphere)が0.2秒後に消えることになります。
ここまで来たら最終的にはこうなります。
ここまでの流れを整理しましょう!
①ゲーム開始時
②カウントダウン開始。Updateに処理が流れ、マテリアルが怪しく光る
③TimeLineの再生が終わるとFinishedピンに処理が流れる
④爆発エフェクト再生
⑤爆弾消滅
といった感じです!
それではコンパイルし、実際に爆発するか見てみましょう!
レベルエディタに行き、レベル内に「BP_Bomb」をドラッグ&ドロップして、ゲームをプレイしてみましょう!
どうでしょうか!動画のようになったのなら大成功です!
ここまでかなりだらだらと長い文章で解説してしまったことお詫びいたします・・・。
それでもついてきてくれた方はありがとうございます!
あとは、TimeLineの時間を変えたり、キーの位置を変えたり、色を変更するなどなどやってみるのもいいと思います!
それではまた!^^ノシ
~追記~
一部説明不足がありました。補足いたします。
爆弾となるスタティックメッシュ(このブログの場合だとSphere)のマテリアルを編集しましょう。
爆弾のBP「BP_Bomb」を開き、画面左上のコンポーネントパネルのSphereをクリックしましょう。爆弾となるスタティックメッシュですね。
そして、画面右側にSphereの詳細パネルにあるMaterialをダブルクリックしましょう。
すると、Sphereのマテリアルエディターに移行すると思うので、次のようにしてください。
赤枠で囲ってあるノードを出しましょう。
「ScalarParameter」と「MultiPly」ノードですね。
「ScalarParameter」には名前を入れられるので、「Emissive」と入れましょう。
そして、次に以下の手順を行ってください。
カラーを決めるノード(1,1,1,0って書いてある奴)にマウスカーソルを重ね、右クリックすると「パラメーターに変換」というのがあるのでそれをクリック。
すると名前を決められるので「Color」にしましょう。
そしてColorという名称にしたノードの白いピンを、右のベースカラーにつなぎましょう。
そして、画面左上にある「適用」ボタンを押して完了です!
説明不足で申し訳ありませんでした。また何かあればご指摘ください!
UE4 キャラを打ち上げる方法
どーも!Free_Gamer
今日からUE4(UnrealEngine4)のテクニックを発信していきます!
もちろんまだまだ初心者なので説明が足りていない部分、間違っている部分などがある可能性があります!
もし、そのようなことがあればお気軽に教えていただけるととてもうれしいです!
それでは今回は!
「キャラを打ち上げる方法」について説明いたします!
さて、キャラを打ち上げる方法というのは、その言葉の通り「キャラを上方に打ち上げる」ということ。
どうやればそのようなことができるか!
非常に簡単です
このノードを使えばいいのです!
「Launch Character」です!
「Launch Character」を使うと、キャラを「上方に打ち上げる」ことができます!
しかし、ただ「Launch Character」ノードを使えばいいというわけではありません。
このようにBP(ブループリント)を組んでゲームを開始しても・・・
・・・・・・微動だにしません。ミクロたりとも動きやしません。
じゃあどうすればいいのかというと、「Launch Character」ノードの「Launch Velocity」の「Z」に打ち上げたい高さの値を入れてあげればよいのです!
すると・・・
打ちあがったああああああ!
大成功です!
もちろん「Launch Velocity」の「Z」の値をもっと上げてあげれば・・・
もっともっと高く打ちあがるわけです!
ちなみに、「Launch Velocity」の「Z」に入れる値は「400」以降が目に見えて打ちあがってくれます。
というのも、例えば「Launch Velocity」の「Z」に「100」を入れても・・・
ほんの僅かにしか打ちあがってません。かなり一瞬です。「200」と「300」も試しましたが、正直微妙だったのでしっかり打ち上げたいなら「400」以降がいいかと思われます。
ちなみに、「Launch Velocity」の「Z」を「0」にして、「X」か「Y」になにかしらの値を入れても打ちあがりません。
おそらく、「Launch Character」ノードは、その名の通り「キャラを打ち上げる」為のノードであり、「Z」に値が入っていることが前提条件になっている為、キャラが打ちあがらないのだと思われます。
なので、例えば「X」方向にピョーン!とキャラを打ち上げたい!といったときは、
「X」「Z」に打ち上げたい値を入れてやると・・・
しっかり「X」に打ちあがったのが分かったかと思います。
いかがでしたでしょうか。この「Launch Character」ノードは一見地味なノードのように思われますが、使い方次第ではなかなか役に立ってくれるのではないかと思います!ぜひ、ご活用ください!
では、最後に「Launch Character」ノードを実際に使った動画を載せておきます!
それではまた!