ARKit対応アプリ『AR Submarine』制作苦労話⑤「真面目な解説」

2018/4/2(月)

皆さん、こんにちは!

今回は、脱線せずにしっかりと制作のお話をしていきたいと思います!

ゲーム要素の追加

  • 床の認識を広げる程、小魚が増えていくのを利用して、小魚の総数をスコアとして反映させる。
  • サメを撃退してもスコアが入るようにする。
  • サメも一匹だと簡単なので、複数出るように調整。その何匹かはスピードが速いサメにして難易度をあげる。
  • 制限時間を設けて、その時間内でスコアを競う。
  • 最終スコアに応じてボーナス点が入るようにする。
  • UIの作成。その他いろいろ。

箇条書きになってしまいましたが、上記項目を実装していきます。

小魚はリスト化してそれをカウントし、スコアに反映させます。ただし、サメが小魚を食べてしまいますので、数(スコア)の増減が発生します。

サメは「OnCollisionEnter」でミサイルとの衝突を検知できますので、それでスコアに加算させます。また、5秒のインターバルで、ランダムに4か所からスポーンするようにしています。仮に、サメを撃退せずに放置すると、どんどんサメが現れて、画面上がサメだらけのカオス状態になりますので、最大10匹以上は出ないようにします。あと、5匹に1匹はスピードの速いサメが出るようにして、マテリアルで色も変えてます。スコアも通常のサメの倍に。

制限時間は60秒としました。サクッと遊べるように。しかし、60秒にしたことによって、

「制限時間60秒÷サメのスポーンインターバル5秒=12」

結局、サメを撃退せずに放置しても12匹目でゲーム終了になるので、「10匹以上は出ないようにしたけど2匹しか変わらないじゃないか、別にこの設定いらなくね?」と、このブログを書いている時に気付きました。。。←バカ

制限時間は「Time.deltaTime」で実装。見た目を少し工夫しました。

 

文字には「TextMesh Pro」(以前は有料でしたが、今は無料で使える!)を使用しています。数字の部分だけで、あとは画像。

「ToString」で文字列に変換する時に、小数第二位まで表示し、整数部分よりサイズを小さめにしています。また、0で埋めるようにもしています。

//こんな感じです。float型(time)からString型に変換
time.ToString("00.<size=56>00</size>");

この時、「<size=56>00</size>」のようなHTMLみたいなタグを使う場合は、「Rich Text」にチェックが入っていないといけませんのでご注意ください。まあ、デフォルトでチェックが入っていますけど。

Rich_Text_check

スコアも数字部分はTextMesh Proで、4桁0埋め。

score_image

今回、初めて「TextMesh Pro」を使用しましたが、かなり便利なのでおすすめです。タダだし。ちょっとしたリッチなテキストも簡単に作れます。

 

スコアボーナスの演出です。エディタ上のキャプチャですので、カメラスルーではありませんがご了承ください。

文字は全てTextMesh Proで実装しています。簡単にグロー効果を追加できます。テキストの演出はUnityの「Animation」で作って、「Animator」で制御しています。最終スコアに応じてボーナス点が増減します。

続いて、これ。

 

サメが今どこにいるか探知するレーダーです。真ん中の三角がプレイヤー、赤い丸がサメです。これは「Mini Map (Radar) System」というアセットを改造しました。このアセット、私が入手したときは無料だったのですが、今見ると有料になってますね($20)。元々有料で、期間限定で無料にしていたのかな?

やったことといえば、Textureの変更と、アニメーションの追加、スクリプトを少しいじったくらいです。

MiniMap

  • Player Transform:マップの中央に表示されるオブジェクト(真ん中の三角)。これが中心になる。今回はメインカメラを設定。
  • Radar Distance:オブジェクト(赤い丸)がマップに表示される距離。10なら半径10Unitまでが範囲内。(「Unit」はUnityの単位で、1Unit=1メートル)

Radar_Distance

  • Hide Out Of Radius:オンの場合、範囲外のオブジェクト(赤い丸)はマップに表示されない。オフの場合、マップの境界に表示され続ける。
  • Use Opacity:範囲外のオブジェクト(赤い丸)に適用される。オンの場合、距離が遠いほど、オブジェクトが透明になっていく。「Hide Out Of Radius」がオフの場合にのみ適用される。
  • Max Radar Distance:オブジェクト(赤い丸)が、ここで設定した数値より遠ければマップに表示されない。50の場合、半径50Unitより遠いオブジェクトはマップに表示されない。「Hide Out Of Radius」がオフの場合にのみ適用される。
  • Rotate Map:オンにすると、マップが回転する。オフにすると矢印(真ん中の三角)が回転する。
  • Scale:Radar DistanceとMax Radar Distanceのスケールを設定する。値を2にした場合、Radar DistanceとMax Radar Distanceがそれぞれ2倍の値になる。
  • Minimal Opacity:「Use Opacity」をオンにした場合の透明度の最小値。

MiniMapのプレハブをシーンのCanvas内に配置します。続いて、マップに表示したいオブジェクト、ここではサメにスクリプトの「Map Marker」を適用。あとは作ったTextureに差し替え、アニメーションの追加、スクリプトを少し変更すれば完成です。

 

今回は以上です!

5回目にしてようやく真面目な解説ができたような気がします。次回もこの調子で頑張ります!

今回の記事をみてお分かりになったかと思われますが、私は普段は真面目な人間で通ってまして、前回までのようなふざけた記事は、私としても不本意な(略

続く!

 

(Cole!Cole!クリエイターU)