読者です 読者をやめる 読者になる 読者になる

Jeffry's 開発記録

楽しく学べるアプリの紹介、モバイルアプリ開発記録等

Unityでホーミングレーザーやってみた 前編

シューティングゲーム好きなんです。ホーミングレーザーってあるじゃあないですか、あれって実装難しいよねぇ?いくらUnityでも難しいよねぇ? って思っていたのですが、やってみたらまあまあ出来たという事で記録しておきます。2Dのお話です。

 

Unityは5.3.2f1です。開発環境はMacOSX El Captanです。

Unityのバージョンによっては出来ない場合もあるかもしれません。

 

 

【まえがき】

昔の方法ですと、レーザーとして表示する1つ目のパーツを後ろにコピーしてすべてを移動させるという方法もあったのですが、Unity様では「Trail Renderer」という良い機能がございましたのでそれを使用します。

前準備として、弾が移動するところまで作っておきます。(これができないと先に進みません)スプライトが移動すればOKです。

 

【サンプルイメージ】

縦シューのイメージで、三角が自機、四角が飛行する敵、丸が砲台のつもりです。

赤色と紫色の敵が、緑色とオレンジ色の弾を撃ったところです。

f:id:jeffry1461:20170216170811p:plain

 

緑色の丸い弾をレーザー(的な表現)にします。ちなみにこれはプレファブです。

f:id:jeffry1461:20170216172943p:plain

 

【Trail Renderer】

弾のスプライトに Trail Renderer コンポーネントを追加です。

f:id:jeffry1461:20170216171137p:plain

 

【Material作成】

色を付けるためにMaterialが必要なので、新規で作成します。「Shader」をSpritesに変更してください。色は好きに付けてよいです。

f:id:jeffry1461:20170216171247p:plain

 

こんな感じです。

f:id:jeffry1461:20170216171337p:plain

 

Materialができました。

f:id:jeffry1461:20170216173554p:plain

 

それを先程の弾スプライトの「Trail Renderer」にセットします。MaterialsのElement 0のところに New Materialと入りました(名前変更しておけばよかったかな)

あとTimeで長さ、StartWidthで開始時の幅、EndWidthで終わりの方の幅を設定します。変更して試されると良いかと思います。

f:id:jeffry1461:20170216171456p:plain

 

 

さてこれで実行してみますと・・・だめなんですねーなんでかな。

f:id:jeffry1461:20170216171803p:plain

 

しかし、Sceneの方を3Dで見てみますと、レーザー表現になっているではないですか!! でもゲーム画面では表示されないんですよ、なにゆえ?

f:id:jeffry1461:20170216171704p:plain

 

 

【レイヤー】

どうやらレイヤーのせいだったみたいです。SortingLayerをいくつか作って、弾のスプライトをShotというレイヤーにセット。

f:id:jeffry1461:20170216171845p:plain

 

これだけではまだダメなんです。弾のスプライトに次のコードを追加します。つまりは、現状ではTraiRendererのレイヤーはコードでセットするしかないという事のようです。

 

f:id:jeffry1461:20170216172200p:plain

(もしうまくいかない場合、TraiLenderer専用のレイヤーを作って、TR.sortingLayerNameにセットしてみてください)

 

 

 

 

 【レーザー!】

という事でレーザー的な表現が出来ました。弾の色を緑にしたのがアレでしたが、透明にするか、Materialと色を合わせるかしていただければと思います。

f:id:jeffry1461:20170216172830p:plain

 

 

 

まとめると次の2つです。(この数行だけで良かった?)

 

1)スプライトにTrailRendererをセット

2)Materialを作成しTrailRendererにセット

3)MaterialのShaderをSpritesに設定

4)スプライトにTrailRendererのレイヤーを設定するコードをセット

 

ただ、弾の後ろは絵の表示だけですので、頭以外は当たり判定をコライダーではつけられ無いということになります。いわゆる貫通レーザーというものを作りたい場合は別の表現をする必要がありますね。

 

 

次回はこれをホーミングさせます。

 

 

 

(誤字を複数修正・・)