Unityで一時停止(ポーズ画面)の作り方を解説していきます。
スクリプトはコピペ可能なのでぜひ参考にしてください。(解説するポーズ画面は「Time.deltaTime」を使用した処理のみ止めることができます)
準備
解説には画像の二つの四角いオブジェクト二つを使います。
このオブジェクトを右に移動するようにして一時停止のスクリプトで停止できるかテストしていく形ですね。
スクリプトは上のオブジェクトを動かす「cube」、下のオブジェクトを動かす「cube2」、一時停止させる「Paube」の三つのスクリプトを使いますが、実際にみなさんが使うスクリプトは「Paube」だけです。
スクリプト内容
各スクリプトの内容は以下の通りです。
「cube」
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cube : MonoBehaviour
{
float x;
private void FixedUpdate()
{
Vector3 p = new Vector3(x, 3, 0);
x += 3f*Time.deltaTime;
transform.position = p;
}
}
「cube2」
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cube2 : MonoBehaviour
{
float x;
private void FixedUpdate()
{
Vector3 p = new Vector3(x, -2, 0);
x += 0.1f;
transform.position = p;
}
}
「cube」と「cube2」のスクリプトの違いは11行目です。11行目にはオブジェクトを右に移動させるコードが書いてありますが、最初の「cube」のスクリプトでは「Time.deltaTime」というコードがあるのに対して二つ目の「cube2」にはありません。
「Time.deltaTime」はUpdateの処理速度を均一にしてくれるコードです。どういうことかというとUpdateは処理を毎フレーム実行されるメソッドですが、これは環境によって処理速度が変わってしまうんです。
例えば性能の異なるパソコンではUpdateは処理速度が異なってしまう可能性があり、Updateで使われやすいキャラクターの移動速度などが変化してしまうんです。なのでゲーム開発ではなるべくこのTime.deltaTimeは使用した方がいいです。
そしてこのTime.deltaTimeはポーズ画面を作る場合にも必要になります。というのもこれから解説するポーズ画面はこのTime.deltaTimeを使用した処理しか止めることができません。
「Pause」
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pause : MonoBehaviour
{
private void FixedUpdate()
{
if (Input.GetKeyDown(KeyCode.P))
{
Time.timeScale = 0;
}
if (Input.GetKeyDown(KeyCode.L) )
{
Time.timeScale = 1;
}
}
}
こちらが時間を止めるスクリプトになります。スクリプトではPキーを押すと時間を止めてLキーで解除してくれます。
ポーズ画面に関係があるは11行目と15行目で、11行目の「Time.timeScale = 0;」が時間を止めるコードで15行目の「Time.timeScale = 1;」が時間を動かすコードとなっています。
スクリプトができたら適当なゲームオブジェクトにスクリプトを貼り付けて完成です。
実際に確かめてみると上のオブジェクトはPで止まりましたが、下のオブジェクトは止まりませんでしたね。
なのでUpdate内の処理に「Time.deltaTime」を付けて「Time.timeScale = 0;」を読み込むことで簡単に時間を止めることができます。
コメントを残す