途中でゲームを一時停止させる方法です。
今回は、「ポーズボタン」を押したときにゲームが一時停止するようにします。
・まずは「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ボタンを画面に表示する」を参考にしてみましょう。




