(この記事の使用環境: Unity 2017.1.0f1 Personal、Windows10


今回はUnity公式チュートリアルから、「Space Shooter」を紹介します。

Unity - スペースシューター
https://unity3d.com/jp/learn/tutorials/projects/space-shooter-tutorial
スペースシューター

簡単なトップダウン式のアーケードシューティングゲームを作りながら、もっと Unity の操作に慣れましょう。

Unity が提供する基本アセットやビルトインコンポーネントを使ったり、簡単なカスタムコードを書いたりしてみましょう。それらをとおし、インポートしたメッシュモデル、オーディオ、テクスチャ、マテリアルなどの使い方を学びます。
スクリーンショット (28)

チュートリアルの構成はこんな感じ。玉転がしゲームと比べると一気に複雑になっています。

Introduction
  1. Introduction to Space Shooter
     Space Shooterの導入、概要説明
1. Game setup, Player and Camera
  1. Setting up the project
     プロジェクトのセットアップ
  2. The Player GameObject
     プレイヤーゲームオブジェクトの配置。Mesh Colliderをアタッチ。
     コライダー用にシンプルな形状のメッシュを適用する。
  3. Camera and lighting
     シーンの背景色設定、プレイヤーオブジェクトを照らすライトの設定(三点照明)。
  4. Adding a background
     背景の設定。Quadオブジェクトにテクスチャをセット。
     背景がライティングの影響を受けて暗くならないように、シェーダーをUnlit/Textureに変更。
  5. Moving the Player
     プレイヤーオブジェクトをスクリプトで動かせるようにする。
     プレイヤーオブジェクトが画面外に移動できないよう範囲設定する。
     移動限界座標を設定するPublicクラス Boundary はPlayerController.cs内に定義し、属性[System.Serializable]を付けることによってインスペクターに表示させる。
     また、左右移動の際に機体を移動方向に傾ける(チルト)。
  6. Creating shots
     プレイヤーが発射するレーザーショット(Bolt)を作成する。Quadにレーザーのマテリアルをセットする。
     シェーダーは背景が透過するようMobile/Particles/Additiveを選択する。
     CapsuleCollider(isTrigger)とRigidbody(UseGravityをオフ)をアタッチする。
     スクリプト(Mover.cs)で、生成されたレーザーショットが前方に飛んでいくようにする。
     レーザーショットオブジェクト(Bolt)をプレハブ化する。
  7. Shooting shots
     ショット発射位置と発射スパンを指定し、ショットを発射できるようにする。
2. Boundaries, Hazards and Enemies
  1. Boundary
     余計なオブジェクトを残さないよう、ショットが画面外に出たらショットオブジェクトをDestroyする(DestroyByBoundary.cs、OnTriggerExit使用)。
  2. Creating hazards
     Asteroid(小惑星)オブジェクトを作成、ランダムに回転させる(RandomRotator.cs)。
     他のオブジェクトとの衝突により、衝突したオブジェクトとともにDestroyされる(DestroyByContact.cs)。
  3. Explosions
     Asteroidが他のオブジェクトと衝突したとき、爆発エフェクトを再生するようにする(DestroyByContact.cs)。
     また、プレイヤーオブジェクトがAsteroidと衝突したとき、専用の爆発エフェクトを再生するようにする。
     Asteroidが画面下に向けて移動するようにする(Mover.cs)。
     Asteroidをプレハブ化する。
  4. Game Controller
     GameControllerスクリプトを作成し、スクリプトからAsteroidインスタンスを生成する。
     生成時のAsteroidインスタンスの位置および回転を指定する。
  5. Spawn Waves
     一定間隔ごとにAsteroid群が生成されるようにする(GameController.cs)。
     各種爆発エフェクトが一定時点後にDestroyされるようにする(DestroyByTime.cs)。
3. Scoring, Finishing and building the game
  1. Audio
     爆発時・ショット発射時の効果音およびBGMを追加する。音量を調整する。
  2. Counting points and display the score
     スコアの計算と画面表示。Asteroidを壊すたびにスコアを加算し、画面に表示する。
  3. Ending the game
     プレイヤーがAsteroidにぶつかると画面にGame Overテキストを表示する。
     次いで、リスタートのためにはRキーを押すよう促すメッセージを画面に表示する。
     この状態でキーボードのRキーを押すとゲームリセットのためシーンを再読み込みする(GameController.cs)。
  4. Building the game
     WebGL用にビルドする。
さて、ここまででベースとなるゲームが完成します。
動かしてみるとこんな感じ。




チュートリアルはまだ続きます。
(ここまでは以前にやってことがあったのですが、これ以降は今回初めてやりました)

4. Extending Space Shooter
  1. Extending Space Shooter: Enemies, More Hazards, Scrolling BG...
    ※ 説明動画が2時間以上ある(かつ、説明もかなりくどい)ので覚悟が必要。
     ・Asteroidを1種類から3種類に増やす。
     ・背景にParticleSystemによる星々を加える(StarField)。
     ・背景オブジェクト(Background)を複製し、Vキーでドラッグして、元のオブジェクトとつなげる。
     ・EnemyShip(敵)オブジェクトの作成。(※engines_enemyのRotationはインスペクターで 90, -90, 0 に設定した)
     ・EnemyBolt(敵の弾)オブジェクトの作成。EnemyShipから発射されるようにする。
     ・EnemyShipにMover.csをアタッチして縦方向に移動させる。
     ・EnemyShipの左右移動(回避移動)のためにEvasiveManeuver.csスクリプトを作成し、設定を行う。
     ・EnemyShipオブジェクトをプレハブ化する。
     ・GameController.csのインスペクターで、hazardsにEnemyShipを加える。
     ・Playerが3方向にショットを発射するようにする。
  2. Mobile Development: Converting Space Shooter to Mobile
     すみません。ここで挫折。このパートも説明動画が1時間半以上あります。
ということで、最後のパートを前にして挫折しましたが、こんな感じです。




今回は以上です。