隕石はひとまず置いておいて、ちょっと地球を守る側、ミサイルを作っていきましょうかね。
また Asset Store を覗いてみる
さて、また隕石を見つけた時みたいに、Asset Store を見てみましょう。
なんかいいFree素材あるかなぁ〜?
Missile で検索したら、無料のはなんか出てきませんねぇ〜。ちょっとマニアックすぎたか?
Rocket でも出てこないし...ちょっと検索やめて、素材を全部みていきましょう。
3D Models -> Vehicles -> Space
でどうかな〜?
おぉっ!これとか、ミサイルとして使えるかも?
ちょっとデータ重そうだけど、まぁいっか!
ちょっとダウンロードしてインポートしてみましょうか!
インポートしたモデルの構成はこんな感じ。
では、隕石同様に、プレファブ化をしてみます。
元々のスケールはデカ過ぎたので、大きさを調整。さらに、上向きに Rotation を調整してあります。
ただ...ありがたい事にエンジンからの噴射エフェクトがついているのですが、コレは調整したスケールの影響受けてないにゃ〜。ま、あとで調整しますね。
噴射エフェクトの確認
さて、ではこのミサイル(ほんとはスペースシップだけど)のエフェクトを見て行きましょう。
Hierarchy ビューで見るとこんな感じ。
"Flame" という GameObject が3つ付いてますね。
中を確認すると、どうやら見た目をよくする為に、同じ物を3つ、くっ付けているのかな?という感じです。
※ 補足 ※
それぞれの GameObject が何をやっているか、ざっくりと確認したい時は、まず実行して、それぞれの GameObject を非アクティブにしてみると、ざっくりと確認する事ができます。
是非お試しを!
さて、調整を始めてみましょうか!
噴射エフェクトの調整
さて、噴射エフェクトである、3つある "Flame" のうち2つを非Active にして確認と調整をし易くしてみましょう。
2つ目、3つ目の "Flame" を選択し、Inspector ビューから非アクティブにします。
で、一つ残った "Flame" を Hierarchy ビューでみてみると...
3つの GameObject で構成されてますね。ざっくりとコンポーネントを確認してみると
- InnerCore 白っぽい噴射部分
- OuterCore 青っぽい噴射部分
- LightSource ポイントライト
といった処理を行っているみたい。
LightSource は放っておくとして、まず、InnerCore から行きましょう。
くっ付けてあるコンポーネントは、"Ellipsoid Particle Emitter" だそうで、属に言うパーティクルエフェクトでしょうね。
パーティクルとは、そのまま粒子という事で、たくさんの粒子を一定のルールに従って発生したり動かしたりして、エフェクトを表現するシステムで、最近、というか昔から、基本的にはこれと同じ考え方で、爆発とか、炎とか、煙とか、だいたいこの仕組みを使って表現されていると思います。
さて、Scene ビューでこのエフェクトを横から見てみると、どうやら噴射が流れる向きが変な事になってますね。
Game ビューで言うと、画面後ろに粒子が流れて行ってます。
これは、実際画面下に向かって欲しい粒子なので、そのように変更してみたいと思います。
って、どれだっ?
まず、サイズがデカすぎるからちっちゃくしたいんだけど...
transform のスケールの影響は受けず。
結局、 "Particle Emitter" の頭の2つ、"Min Size" と "Max Size" でした。
その他もテキトーに値を変えてみると、何となく調整してる気分になるかな?
結局調整後の値は、こんな感じ!
ん〜、で、粒子が流れる方向がどうしても変わらないんだけどなぁ〜...
ん?ひょっとしてこれ?
だまされた〜!"Particle Animator" コンポーネントのほうかぁ〜。
なんか、カラーアニメーションだけだと思ってたのに、下の方に、動きの設定もあったのか!
"Force" の値を調整して、動き方のなんとか納得いく形に!
ひとまず、エフェクトの調整はこの辺で置いておいて、ミサイルの動きに移りましょうかね!
エフェクトの調整って、見た目を向上する為の作業なんで、一番楽しい部分でもあるんですけどね!!
ミサイルの移動処理を Asteroid クラスみたいに作ろう
では、今回は、Asteroid.cs ファイルをコピーして、Asteroid クラス同様に、新しい Missile クラスを作ってみます。
Project ビューから Finder を開いて、普通にファイルをコピー。
Unity に戻るとエラーも出ますが、放っておいて MonoDevelop から編集しましょう!
...で、こんな感じ。
結局、今変えたのはクラス名のとこだけですね。
で、Missile コンポーネントを "Missile_root" にくっ付けて実行すると...
あっ、ロケット下向きに移動しちゃいますね。今のコードだと。
じゃ、移動パラメータの fvx (なんでxにしたんだろ?yだよね普通)の初期値を -1f に変更して実行。
で、
ちゃんと動いた!!
エフェクトもロケットが移動すると、さらにいい感じに見えますね。
ま、あとでもうちょっと調整しますが。
ミサイルのエフェクトを減らしてプレファブを更新
ミサイルの見た目も落ち着いてきたので、さっき非アクティブにした2つの "Flame" GameObject 達を削除して、プレファブを更新しておきます。
Hierarchy ビューで、GameObject を右クリックして "delete"。
変更した GameObject を選択した状態で Inspector ビューを見ると、上の方にプレファブ向けのボタンが付いてますね。
試しにもう一個ミサイルを作成してみると...
こんな感じで、プレファブが更新されてるのが確認できました!
ミサイルの発生処理も AsteroidManager みたいにしてみる
でわ、ようやく発生処理。
これも、AsteroidManager をコピーして MissileManager と変更します。
ついでに、発生座標、プロパティ名を変更してこんな感じに。
ホントは fTimer とかもいらないんだけど、これは長くなりそうなので次回で。
出来た MissileManager クラスを、コンポーネントとして Game_root にくっ付け、プロパティ達を設定!
これでどうかなっ?
オッケー!!
大丈夫そう!
おぼろげながら、ミサイルのポイントライトの効果も確認できます!!
なげぇ〜。疲れた...
次回は、クリックした所からちゃんとミサイルが出る様にしましょうかね。
ホントはこんなロケットモデルが欲しかったんだけど...








