3Dシューティングゲームの作り方5 ゲーム制御処理とTerrain当たり判定の実装

Unity 3Dシューティングゲームの作り方


Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】

前回までの記事で敵を登場させたり、プレイヤーの体力を減らしたり、弾を撃って敵を倒せるようにしました。

前回の記事:

3Dシューティングゲームの作り方4 敵との戦闘システムを作る(敵・弾丸・HP処理など)
前の記事でプレイヤーをルートに沿うように移動させ、一人称視点のシューティングゲームを作ることができました。 前回の記事: この記事ではシューティングゲームのメイン部分を開発していきます。 敵の生成処理、プレイヤーとの当たり判定&H...

ここまでできるとあとはゲームクリアとゲームオーバー処理を作成するとシューティングゲームの出来上がりです!

スコア処理や地面に激突したときの処理などもここで書いていきましょう。

今回の記事ではゲームの流れとなる最後の部分を作成していきましょう。


【Unity入門の森の最新ゲーム開発講座もお届け】

シーンを管理するSceneManagerを作ろう!

先にシーンを管理するスクリプトを作成します。

次の手順を行なってください。

  • シーンに空のGameObjectを作成し、名前を「SceneManager」にする
  • 「SceneManager」スクリプトを新しく作成する

「SceneManager」スクリプトの内容はひとまず空でOKです。

シューティングゲームのゲームオーバー処理を作る

プレイヤーの体力が0になったらゲームオーバーと画面に表示するようにしましょう。

次の手順でゲームオーバー用のGameObjectを追加してください。

  • 「Canvas」の子GameObjectにUI > Textを作成し、名前を「GameOver」にする
  • 「GameOver」のパラメータを任意で設定する(画面に大きく出てくるように配置)

「SceneManager」スクリプトを使って作成した「GameOver」の表示を管理します。

「SceneManager」スクリプトに次の内容を追加してください。

またコンパイル後に「GameOver」を「SceneManager」コンポーネントにアタッチするのを忘れないでください。

体力は「Player」コンポーネントで管理しているので、その中の体力を減らしている部分に0以下になったか判定する処理を追加し、「SceneManager」コンポーネントのメソッドを呼び出すようにします。

コンパイルに成功したら、プレイヤーのライフが0になった時「GameOver」のテキストが画面に表示されるようになります。

ライフがなくなった時にプレイヤーだけを非表示にしたいので、子GameObjectにしていたカメラを「Player」の親子関係から外しています。

シューティングゲームのクリア処理を作る

次にゲームクリアできるようにしましょう!

先に次の手順でゲームクリア用のGameObjectを追加してください。

  • 「Canvas」の子GameObjectにUI > Textを作成し、名前を「Clear」にする
  • 「Clear」のパラメータを任意で設定する(画面に大きく出てくるように配置)

「Clear」は「SceneManager」コンポーネントを使って表示を管理します。

「SceneManager」スクリプトに次の内容を追加してください。

またコンパイル後に「Clear」を「SceneManager」コンポーネントにアタッチするのを忘れないでください。

下準備ができましたので、次はクリア判定処理を作ります。

この講座では到達したらクリアとするルート上のポイントを作り、それに当たったらクリアとします。

クリア判定に使用するポイントは基本的に「RoutePoint」タグを指定したものの中から選びます。一番最後のPointをClearPointにすればよいでしょう。

ゲームクリア地点にしたいGameObjectのタグには「ClearRoutePoint」を指定しましょう。

それに合わせて「Player」コンポーネントに「ClearRoutePoint」タグを設定されたGameObjectと当たったか判定する処理を追加します。

その中で「SceneManager」コンポーネントのクリア用のテキストを表示するメソッドを呼び出すようにします。

地形に当たったら体力を0にする処理を追加 Terrainとの当たり判定の作り方

次は地形にプレイヤーが当たったら即座に体力を0にするようにしましょう!

シーン上の「Background」オブジェクトのタグを「Background」と設定してください。

設定したら「Player」スクリプトのOnCollisionEnterメソッドを追加してください。

基本的に敵に当たった時と同じ感じになります。

ただし、Terrainには専用のTerrainColliderが用意されており、「Background」には作成された時にそれがアタッチされています。

TerrainColliderは「Is Trigger」を設定できないので、回避策として「Player」のRigidbodyコンポーネントの「Is Kinematic」を無効にし、OnCollisionEnterメソッドで「Background」との当たり判定を行います。

「Is Kinematic」を有効にしているとOnCollisionEnterメソッドは機能しなくなるので注意してください。

コンパイルに成功したら再生してみてください。「Background」と当たった時にゲームオーバーになったら成功です。

ゲームスコアを記録してみよう 敵を撃破したら加点する処理

最後に敵を倒したら、スコアを加算するようにしてみましょう!

スコアの加算処理は「SceneManager」スクリプトの方で行います。

スコア表示の方は先に「ScoreText」として作成していますのでそれを使用します。

次のサンプルコードのコンパイル後に「ScoreText」を「SceneManager」コンポーネントにアタッチするのを忘れないでください。

「SceneManager」コンポーネントを変更したら、次は「Enemy」コンポーネントの方を変更します。

コンパイルに成功したら、再生して敵を倒してみてください。

スコアが増えたら成功です。

シューティングゲームの作り方まとめ

第五回では、

  • ゲームオーバー処理
  • ゲームクリア処理
  • Terrainとの当たり判定処理
  • 敵撃破時のスコア加算処理

を実装することができました。

今回でシューティングゲームを一通り完成させることができました。

この講座でのシューティングゲームは基本的な処理のみをまとめたものになります。

そのため見た目が地味だったり、細かいところで融通が効かない部分がありますが、今回の講座内容をベースにあなたが自由に改良していってもらえたらと思います。

また、Unityではバージョンによって使用できる機能が異なるのでここで説明した以外の機能があったり、もしかしたら一部なくなるようなこともあるかもしれません。

基本的な部分につきましては大体似たものになっていると思いますので、適時読み替えて作業を進めてみてください。

それでは次からはまた別のゲームを作っていきましょう!

Unity3Dシューティングゲーム開発講座へ戻る>>

参考用:スクリプトの完成図

ちなみに今回の記事で作成したスクリプトの完成図は次のようになります。

Unity3Dシューティングゲーム開発講座へ戻る>>


【Unity入門の森の最新ゲーム開発講座もお届け】

コメント

タイトルとURLをコピーしました