試行錯誤
次回作についてアレコレ試行錯誤をしていく中で、『(知る人ぞ知る名作ゲーム)DATA WINGっぽいゲームを作ってみよう』などと、おこがましい考えが頭をよぎったのですが、案の定、早々に挫折してしまい、今のところ3Dシューティングゲームの方向でプロトタイプ版を作成している最中です。
シューティングゲームなので銃弾を発射するのは当たり前なのですが、他のシューティングゲームでもそうであるように、ただ弾丸が前方に飛ぶだけでなく、敵をロックして誘導弾を発射するといったロックオンシステムも実装しよう、と思うわけです。
ここで敵をロックする、ということはそれがプレイヤー側に分かるようにロックオンターゲットを表示する必要があるわけで、今回はこのロックオンターゲットを表示する手法についてのお話
ロックオンターゲットの表示
ロックオンターゲットを表示する手法は色々あるのですが、代表的なものとしては
- uGUIにてターゲットを表示する
- Spriteでターゲットを表示する
といったような手法があります。
どちらの手法でもメリット・デメリットがあり、uGUIを使う場合、ターゲットアイコンはスクリーン上にあるので絶えず同じ形で表示できますが、ロックしたオブジェクトが動くたびにスクリーン上の座標を求めて追従させる必要があります。
また、Spriteを使う場合はターゲットアイコンをロックオブジェクトの子オブジェクトにすれば追従させる必要がないので手軽に実装できますが、親オブジェクトの向きに影響されてしまうので、絶えずスクリーンの方を向いて表示させようとするとちょっと面倒くさいです。
なので、これらのデメリットを解消するためにParticleSystemを使ってロックオンターゲットを表示させることにしました。
参照したのは以下の記事です。
ターゲットのアニメーション設定
ParticleSystemでもSpriteのようなアニメーションを設定することが出来ます。
今回はコマ割り画像を連続表示させてターゲットがグリグリ廻るアニメーションを作ります。
1.アニメのコマ割り画像を並べて一枚の大きな画像(Texture)を作る。
今回はこんな画像を作りました。
2.そのTextureを指定したマテリアルを作る。
Particles/Additiveなどのシェーダを使ったマテリアルに先程のTextureを指定します。
見づらいけどTextureに先ほどの画像を指定しています。
3.Particle SystemのTexture Sheet Animationでアニメーションを設定する
ModeをGridに指定すると、Tilesと言う項目が現れます。
これは『TestureをX/Yのそれぞれに対して何分割するか』を設定しています。
これに加えてAnimationにWholeSheetを設定することで、テクスチャシート全体を順にアニメーションさせるようにします。
その他の設定
上記の設定でターゲットのアニメーションはできました。
次にParticleSystemを以下のように設定していきます。
・LoopingのチェックをONにする
・PreWarmをONにして起動と同時に発生するように
・StartSpeedを0にしてその場に留まるようにする
・RenderのRenderModeをBillboardに設定、併せてRender AlignmentにViewを設定
Billboardに設定することで、ターゲットのParticleは絶えずカメラ方向を向いて表示されるようになります。
あとはこのParticleSystemをロックオンしたオブジェクトの子オブジェクトに設定すればロックオンターゲットの完成となります。
ロックオンしたオブジェクトにターゲットParticle表示
注意事項と追加
LoopingのチェックをONにしているので、Particleの生成を停止(=Stop)しただけではターゲットは消えません。
ターゲットを非表示にするにはStopコール時に生成済みパーティクルを全消去するオプションを設定するか、ParticleSystem自体のSetActiveをfalseにする必要があります。
ロックオンターゲットとしてはこれで十分なのですが、ちょっとコレだけでは地味なので、ターゲットのParticle表示前にロックオン発生のParticleを追加してみました。
こんな感じ
わかりますかね?
ロックオンターゲット表示前に六角形が収縮するParticleを表示しています。
なとなくシューティングゲームっぽくなってきた気がしますが、未だ銃弾を撃てないんですよね。。。