ウィンナスのプログラミング忘備録

アプリケーション制作をしている最中に発見したテクニックを忘備録としてまとめていきます。

【Unity2d】ゲームをPauseさせてみた!

今回は、ゲームを一時停止させる方法です!

よくいうところのPauseボタンですね!

 

一般的なのは「Time.timeScale = 0」を使う方法です。

ただし、これはゲーム全体(Animationとか)を止めてしまうのでバグの温床になるらしいです!

ではやっていきます。

 

扱えるUpdateメソッド

初めに注意しなければならないのが、使える関数が限られていることです。

Update関数には以下の3つがあるのですが、停止できるのは「FixedUpadate」のみです!

  • Update()
  • LateUpdate()
  • FixedUpdate()

 

回転しているウィンちゃんを止めてみる!

まずはいつも通りウィンちゃんをど真ん中にセットします。

f:id:win-friendof:20160724223740j:plain

 

ウィンちゃんを置いたら、スクリプト「PauseActivity.cs」をセットします。

「PauseActivity.cs」の中身は下の通りです!

// Update is called once per frame
void Update () {
  //左クリックされたとき
  if (Input.GetMouseButtonDown(0)) {
    //停止中(0)⇒動かす(1)
    if(Time.timeScale == 0)
      Time.timeScale = 1;
    //1倍速⇒2.5倍速にする
    else if(Time.timeScale == 1){
      Time.timeScale = 2.5f;
    }
    //2.5倍速⇒停める
    else if(Time.timeScale == 2.5f)
      Time.timeScale = 0;
  }
}

void FixedUpdate(){
//ウィンちゃんを回す transform.Rotate(0, 0, 5.0f); }

「Time.timeScale == 1」のときは通常の動きです。

「Time.timeScale == 0」のときは停止します。

「Time.timeScale == 2.5」のとき2.5倍速の動きです。

 

ここで中止しなければならないのが、停止させたい処理を「FixedUpdate()」に書かなければならないことです。

つまり、

クリックされたときの処理を「FixedUpdate()」に記述すると、クリックの処理も停止する

ことを覚えておきましょう!

なので、停止させたくない処理は「Update()」もしくは「LateUpdate()」に書きましょう!

f:id:win-friendof:20160622000943g:plain