News Activity Product Learning red Event Contact
Devblog top img

開発ブログ

2017-09-17

草を燃やしてアイテムを出す方法

UE4

writer : murati

 何かをすると草が燃えそこからアイテムが出るというゲームのギミックを作りながら ブループリント内にあるスポーンアクターとアクターのスケール(大きさ)を小さくしながら消していく方法について解説していきます。

 

 

1. 準備

 

 

まず草(Bush),火(Fire),アイテム(Item)のクラスがアクターのブループリントを三つ作ります。

 

 

草はコンポーネントにCubeを追加しStatic MeshとMaterialをそれぞれSM_BushとM_Bushにし、当たり判定用のSphere Collisionを追加しました。

 

 

 

 

火はコンポーネントにParticle Systemを追加しParticlesにP_Fireを選択しました。

 

 

 

 

アイテムは今回何も触りませんがわかりやすいようにStatic MeshがSM_StatueのCubeを追加しました。

 

 

 

 

 

2. 草を燃やす

 

 

 

 まず何かをしたら火が出るようにしていきます!
今回はFirst Personの球が当たったら火が出るようにしましたが他にInputでキーボート入力したら発生するとかでも作ることができます。
 最初にSphere Collisonを右クリックしてAdd EventからOnComponentHitを追加し、イベントグラフが開いたら図のようにノードをCast To FirstPersonProjectitleにつなぎ、Other Actorを球のほうのObjectにつなぎます。これで球が当たったらイベントが発生するようになりました!

 

 

 次にCast to FirstPersonProjectileからSpawnActorをつなぎます(spawnと調べると『クラスからアクターをスポーンします』があるのでそれを選択します)。
そしてClassを作っておいたBP_Fireにし、Spawn TransformにGetActorLocationをつなげます。これでActor(草)の座標を取得し、BP_Fireがスポーンする座標を指定しています。これを変えると全く別の座標にスポーンさせることもできます。 これでいったん左上のコンパイルを押して、BP_Bushをレベルに配置しプレイして球を打ってみましょう。そうすると図のように草から火がでてくるはずです!

 

 

 

 

次に草を徐々に小さくしながら消していきます!
まずSawnActorからSet Life Spanをつなぎます。これはActorが何秒後に消えるかを設定できるものです。今回は4.5秒にしました!

 

 

 

 

 次にSet Actor Scale 3Dをつなぎ、New Scale 3DにVector * FloatをつなぎVectorピンの方にGet Actor Scale 3DをつなぎFloatの値を0.98にします。 これで火が出たら草の大きさが0.98倍になります。

 

 

 

 

 次にこの草のスケールを0.98倍にするのを繰り返して徐々に小さくしていきます。 まずDelayというノードをつなぎます。これは入力した時間(秒)の後、次の処理を行うノードです。Delayする秒数は0.08秒にしておきます。
そしてDelayから先ほど作ったSet Actor Scale 3Dにつなぎましょう。これでプレイしてみると徐々に小さくなっていくはずです!
こうすることで図のように①→②→③→②→③…を繰り返し、そして繰り返しが始まってから4.5秒後に消えるような動作を作ることができます。
Delayの秒数やFloatの倍数を調節するとより滑らかに小さくすることもできますね!

 

 

 

 

 火も同じように徐々に小さくしていきましょう!
BP_Fireを開きイベントグラフでBegin Playから先ほどと同じようにノードをつなげていきましょう!そうすると火も同じように徐々に小さくなっていきます。 火が出た瞬間に草と同じように小さくなるのが不自然に感じる場合、青で囲った所のようにSet Life SpanとSet Actor Scale 3Dの間にDelayを入れると自然になりますね!

 

 

 

 

 またスポーンする火の大きさを変更したい場合はBP_BushでSpawn ActorのSpawn TransformからMake TransformをつなぐとLocation(座標)、Rotation(回転)、Scale(大きさ)を分けて操作することができます。
そしてLocationには先ほどと同じようにGet Actor Locationをつなぎ、ScaleにはVector * Floatで3倍にしてからGet Actor Scale 3Dをつなぐことで、発生する火の大きさを変更することができます!

 

 

 

 

 

3. アイテムを出す

 

 

 

 次に火が消えたらアイテムを出すようにしていきます!
BP_Fireに戻りイベントグラフで先ほどつないだ①のようにSet Life SpanからOn Destroyedを割り当てるをクリックすると②のようになります。
これはDestroyedつまり消えたら次の処理を行うというイベントです。

 

 

そしてOn Destroyedから火を出した時と同じようにSpawn Actorをつなぎ、クラスをBP_ItemにしてTransformにはGet Actor Locationをつなぎましょう。

 

 

これでコンパイルしてからPlayしてみましょう!球を打ったら草が燃えてそこからアイテムが出たら完成です!

 

 

 

4. おまけ

 

 

 

 おまけとして下図のようにデフォルトの画面でスポーンするアイテムや草自体のMeshやMaterialを変更できるようにして作業しやすくしていきたいと思います。

 

 

BP_Fireを開き図のように変数を作り名前はItemなどにして、変数の型をActorのクラスにします。

 

 

そして「インスタンス編集可能」にチェックを入れます、そうすると変数の横に目のマークが開くはずです。こうすることで別のブループリントなどでこの変数を持ってくることができるようになります!
さらに「スポーン時に公開」というところにもチェックを入れておきましょう。これでこのActorがスポーン時に別の情報を渡すことが可能になります。
そして作った変数を取得してSpawn ActorのClassにつなげ、コンパイルします。

次にBP_Bushのイベントグラフを開き先ほどと同じように変数を作ります(名前はSpawn Itemにしました)。「インスタンス編集可能」にチェックを忘れずに入れておきましょう!
そしてSpawn Actorに先ほど作った変数Itemのピンができているのでそこに作った変数を取得してつなげ、コンパイルしましょう。これでスポーンするアイテムをデフォルトで変更できるようになるはずです!

 

 

次にStatic MeshとMaterialをデフォルトで変更可能にしていきます。
まずBP_BushのConstruction Scriptを開きます。

 

 

 

 

Construction ScriptからSet Static Mesh(Cube)とSet Material(Cube)のノードをつなげます。
Construction ScriptはPlayする前に実行されるブループリントです!

 

 

そしてStatic Meshのリファレンス型の変数とMaterialのリファレンス型の変数をそれぞれ作り、どちらも忘れずに編集可能にチェックを入れておきましょう!
それらを取得したら図のようにつなげ,コンパイルしてデフォルト画面で変更できたら完成です!

 

 

 

5. まとめ

 

 

 

 以上がスポーンアクターとアクターのスケールを小さくしながら消していく方法の解説でした。
このギミック自体汎用性が高く、様々な用途に使えると思います。さらに応用すれば全く別の物もつくれそうですね.ぜひ使ってみてください!
またおまけでやったことは作業しているときにとても便利になるのでこれもぜひ使ってみてください!