[Unity] Unity初心者がゲーム開発してみた(弾避け編2)

どうも、tatsuです!

今回は前回に引き続き、Unityで弾避けゲームを開発していこうと思います!
前回→[Unity] Unity初心者がゲーム開発してみた(弾避け編1)
前回はオブジェクトに動きをつけるところまでやったので、今回は当たり判定を付けていこうと思います。
それでは作っていきましょう!

[Unity] Unity初心者がゲーム開発してみた(弾避け編1)

2017.09.15

当たり判定を付ける

当たり判定の方法にもいろいろありますが、今回はオブジェクトの形を円で近似して当たり判定をしたいと思います。
1.「bulletScript」をダブルクリックして編集画面を開きます。

2.以下のように編集し、保存します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bulletScript : MonoBehaviour {

	GameObject spaceshuttle;

	// ゲーム開始後一度だけ呼ばれるメソッド
	void Start () {
		// ゲーム内に存在するspaceshuttleオブジェクトを取得
		spaceshuttle = GameObject.Find ("spaceshuttle");
	}
	
	// ゲーム開始後フレームごとに呼ばれるメソッド
	void Update () {
		// 左方向へ移動させる
		transform.Translate(-0.2f, 0, 0);

		// 画面外に出たら弾を破棄する(画面外の玉がずっと残ってしまうのを防ぐ)
		if (transform.position.x < -12.0f) {
			// gameObjectはこのスクリプトをくっつけたオブジェクトのことを指します
			Destroy (gameObject);
		}

		// 当たり判定
		Vector2 bulletPosition = transform.position;
		Vector2 spaceshuttlePosition = spaceshuttle.transform.position;
		// 弾と自機の中心座標同士の距離を取得
		Vector2 dir = bulletPosition - spaceshuttlePosition;
		float distance = dir.magnitude;
		// 弾の半径
		float bulletRadius = 0.1f;
		// 自機の半径
		float spaceshuttleRadius = 0.2f;

		// もし中心同士の距離より半径同士の合計の方が大きい場合は接触している
		if (distance < bulletRadius + spaceshuttleRadius) {
			// コンソールに文字を出力
			Debug.Log ("衝突!");
		}
	}
}

3.画面上部のスタートボタンをクリックします。
弾と自機が衝突した時、コンソールに「衝突!」の文字が出ることを確認してください。
※停止はもう一度スタートボタンをクリックします。

接触したらゲームオーバーシーンに切り替える

先程は弾と自機が接触したらコンソールに文字を出力していました。
今回は接触したらゲームオーバーシーンに遷移するようにしてみたいと思います!

ゲームオーバーシーンの作成

1.画面左上から[File]→[New Scene]を選択してください。※先程までのシーンが消えたように見えますが大丈夫です。

2.[File]→[Save Scene as]を選択して名前を付けて保存します。今回はGameOverSceneとしました。

3.保存できたらヒエラルキーから「Main Camera」を選択し、[Background]をゲームオーバーらしい赤色に設定します。
※ここで自分で作成した画像を入れるとより良いと思います。

シーンの登録

今度は「MainScene」と「GameOverScene」を登録します。2つ以上のシーンを使用する場合に必要な手順です。
1.[File]→[Build Settings]を選択します。

2.表示されたダイアログの[Scenes In Build]欄に、「MainScene」と「GameOverScene」をドラッグ&ドロップします。
※「MainScene」を一番上に持ってくるようにしてください。一番上のシーンが最初に表示されます。

スクリプトに処理を記述

最後に「bulletScript」にシーン遷移の処理を記述しましょう。
1.[File]→[Open Scene]を選択し、「MainScene」を選択しておきます。

2.「bulletScript」をダブルクリックして編集画面を開きます。

3.コンソールに文字を出力していた箇所を変更します。
※「using UnityEngine.SceneManagement;」の記述を忘れないようにしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class bulletScript : MonoBehaviour {

	GameObject spaceshuttle;

	// ゲーム開始後一度だけ呼ばれるメソッド
	void Start () {
		// ゲーム内に存在するspaceshuttleオブジェクトを取得
		spaceshuttle = GameObject.Find ("spaceshuttle");
	}
	
	// ゲーム開始後フレームごとに呼ばれるメソッド
	void Update () {
		// 左方向へ移動させる
		transform.Translate(-0.2f, 0, 0);

		// 画面外に出たら弾を破棄する(画面外の玉がずっと残ってしまうのを防ぐ)
		if (transform.position.x < -12.0f) {
			// gameObjectはこのスクリプトをくっつけたオブジェクトのことを指します
			Destroy (gameObject);
		}

		// 当たり判定
		Vector2 bulletPosition = transform.position;
		Vector2 spaceshuttlePosition = spaceshuttle.transform.position;
		// 弾と自機の中心座標同士の距離を取得
		Vector2 dir = bulletPosition - spaceshuttlePosition;
		float distance = dir.magnitude;
		// 弾の半径
		float bulletRadius = 0.1f;
		// 自機の半径
		float spaceshuttleRadius = 0.2f;

		// もし中心同士の距離より半径同士の合計の方が大きい場合は接触している
		if (distance < bulletRadius + spaceshuttleRadius) {
			// ゲームオーバー画面に遷移する
			SceneManager.LoadScene("GameOverScene");
		}
	}
}

4.画面上部のスタートボタンをクリックします。
弾と自機が接触したらゲームオーバーシーンに遷移することを確認してください。
※停止はもう一度スタートボタンをクリックします。

まとめ

今回で弾避けゲームを完成とします。お疲れ様でした。
作ってみた感想として、ゲームとしてはまだまだですがゲームらしい動きを作ることができたのでとても楽しかったです!
この調子でこれからもゲーム開発を継続していこうと思います。
それもブログに書きますので、同じようにUnity初心者の方の参考になればと思います!
では!

[Unity] 作成したゲームをPC用に書き出す

2017.10.22

[Unity] Unity初心者がゲーム開発してみた(メダル集め編3)

2017.10.03

[Unity] Unity初心者がゲーム開発してみた(メダル集め編2)

2017.10.02

[Unity] Unity初心者がゲーム開発してみた(メダル集め編1)

2017.10.01

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です