途中でゲームを一時停止させる方法です。
今回は、「ポーズボタン」を押したときにゲームが一時停止するようにします。
・まずは「Canvas」上に「Button」を1つ作成して、名前を「PauseButton」に変更しましょう。
*アイコンは「ButtonIcon」フォルダ内にある「PauseButton」を使用します。
・ボタンの位置を調整しましょう。
ボタンの位置が決まったら次はスクリプトを作成します。
新たに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」メソッドの更新を止める機能を持っています。
コードが記載できたらチェック。
次に、スクリプトをボタンに付けます。
(ここがポイント!)
次に、今回のゲームで「停止させたい動き」が記載されている「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ボタンを画面に表示する」を参考にしてみましょう。