4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unityでゲームを一時停止させたい

Posted at

この記事について

この記事は自分の備忘録的な内容です。

やりたい事

Unityで一時停止ができるようになりたい。
その中で、TimeScale=0;というやり方についてまとめておきます。

結論

  • TimeScale=0にすることでゲーム進行を止めることができる
  • 止めたくない処理はUpdate関数に、止めたい処理はFixedUpdate関数に入れる
  • Update関数の処理を止めたい場合にはdeltaTimeを掛ける

TimeScaleとは

Unity公式

Time.timeScaleは時間の経過速度です。
1が基準となって、1よりも小さいと時間経過が遅くなり、1よりも大きいと時間経過が早くなります。

試しに左右の壁にぶつかり続けるボールを用意してその速度を変えるボタンを用意してみました。
スクリーンショット 2021-06-29 22.30.20.png

実際に動かしてみた動画です。
ezgif-7-84d251278534.gif

なるほどこれで一時停止が作れるね!!!

とはいきませんでした。

不完全な点

まず、この時間を停止させる方法ですがUpdate関数は生きています。
全てが動作不可になると何もできなくなりますからね(メニュー画面を開くとか元に戻すとかができなくなると意味がない)。

これにより動かなくなるのは時間が関係する処理です。

  • FixedUpdate関数内の処理(決められた時間間隔で実行されるUpdate関数)
  • Rigidbodyを利用した処理全般
  • アニメーション(回避方法あり)

なのでUpdate関数内でpositionを操作することで移動している場合、timeScale=0にしても動くことが可能な状態になってしまします。

CubeMoveManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeMoveManager : MonoBehaviour
{
    public float speed;
    // Update is called once per frame
    void Update()
    {
        var pos = transform.position;
        if (Input.GetKey("right"))
        {
            pos = new Vector3(pos.x + speed,pos.y,pos.z);
        }
        if (Input.GetKey("left"))
        {
            pos = new Vector3(pos.x - speed,pos.y,pos.z);
        }
        transform.position = pos;
    }
}

動画
ezgif-7-664b2fdc1740.gif

この状態を避ける方法はとりあえず二つ挙げておく。

  • FixedUpdateに変更する
  • 移動スピードにdeltaTimeをかける

注意点

timeScaleの設定はシーンをロードしてもそのままの状態になるので、シーンを遷移する際には必ずtimeScale=1に設定し直すこと。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?