爆弾の作り方
どーも!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という名称にしたノードの白いピンを、右のベースカラーにつなぎましょう。
そして、画面左上にある「適用」ボタンを押して完了です!
説明不足で申し訳ありませんでした。また何かあればご指摘ください!