3)一時停止ボタン(ポーズボタン)を設置する

途中でゲームを一時停止させる方法です。

今回は、「ポーズボタン」を押したときにゲームが一時停止するようにします。

・まずは「Canvas」上に「Button」を1つ作成して、名前を「PauseButton」に変更しましょう。

*アイコンは「ButtonIcon」フォルダ内にある「PauseButton」を使用します。

・ボタンの位置を調整しましょう。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-12-6-32-10

ボタンの位置が決まったら次はスクリプトを作成します。

新たにC#スクリプトを1つ作成して、名前を「Pause」に変更しましょう。

作成できたらダブルクリックして下記のコードを記載してください。

using UnityEngine;
using System.Collections;

public class Pause : MonoBehaviour {

	private bool isPause = false;
	private GameObject canvas;
	private GameObject shotButton;

	public void OnPauseButtonClicked(){

		if(isPause == false){

			// フレームの更新を止める(FixUpdate内の更新が停止する)
			Time.timeScale = 0;
			isPause = true;

			// ShotButtonを画面から消す
			canvas = GameObject.Find("Canvas");
			shotButton = canvas.transform.FindChild("ShotButton").gameObject;
			shotButton.SetActive(false);

		} else {

			// フレームの更新が元に戻る(FixUpdate内の更新が再開する)
			Time.timeScale = 1;
			isPause = false;

			// ShotButtonを画面に表示する
			shotButton.SetActive(true);
		}
	}
}

*今回のロジックの一番のポイントは「Time.timeScale = 0」です。

これは「FixedUpdate」メソッドの更新を止める機能を持っています。

コードが記載できたらチェック。

次に、スクリプトをボタンに付けます。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-12-6-43-44 %e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-12-6-43-51 %e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-12-6-44-01 %e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-12-6-44-14

(ここがポイント!)

次に、今回のゲームで「停止させたい動き」が記載されている「Update」メソッドを「FixedUpdate」に変更します。(★の部分)

*ここでは「EnemyShotShell」スクリプトを修正して、敵の攻撃を停止させています。

using UnityEngine;
using System.Collections;

public class EnemyShotShell : MonoBehaviour {

	public GameObject shellPrefab;
	public float shotSpeed;
	public AudioClip shotSound;

	private int count = 0;

	// ★「Update」→「FixedUpdate」に変更する。
	void FixedUpdate(){
		count += 1;

		if(count % 100 == 0){
			EnemyShot();
		}
	}


	public void EnemyShot(){
		GameObject shell = Instantiate(shellPrefab ,transform.position, Quaternion.identity) as GameObject;

		Rigidbody shellRigidbody = shell.GetComponent<Rigidbody>();

		shellRigidbody.AddForce(transform.forward * shotSpeed);

		AudioSource.PlayClipAtPoint(shotSound, transform.position);

		Destroy(shell, 1.0f);
	}
}

ここまでできたら再生してみましょう。

ポーズボタンを押した時、「敵の攻撃」等が停止する。「ShotButton」が画面から消える。

これらができていたら成功です。

(復習)

「ポーズボタン」を押した時、「BoostButton(ダッシュボタン)」が画面から消えるように修正してみましょう。

<ヒント>

「Pause」スクリプの中の「ShotButtonボタンを画面から消す」「ShotButtonボタンを画面に表示する」を参考にしてみましょう。