見出し画像

【Unity】TimeScaleを管理するクラス

メニュー画面で一時停止したり、ボス撃破でスロー演出を流したり、Time.timeScaleを変更するケースは色々あります。ですが、複数のコードからTime.timeScaleを変更すると不具合になりやすいです。

不具合の例:
スロー演出中にメニューを開いて閉じると、スロー演出が解除されてしまう。

そこで、TimeScaleの変更を管理するクラスを作成しました。

コード

以下から取得できます。リポジトリごとUPMでインポートもできます。

使い方

TimeRequestManagerに一時停止やスローをリクエストします。解除する際は返却されたオブジェクトをDispose()してください。
どこかのUpdate()内でGetTimeScale()で結果を取得し、Time.timeScaleを変更してください。

void FuncA()
{
  // 一時停止開始
  var request = TimeRequestManager.Instance.RequestPause();
  // 何かの処理
  ...
  // 一時停止解除
  request.Dispose();
}

void FuncB()
{
  // スロー開始
  var request = TimeRequestManager.Instance.RequestScale(0.1f);
  // 何かの処理
  ...
  // スロー解除
  request.Dispose();
}

void Update()
{
  Time.timeScale = TimeRequestManager.Instance.GetTimeScale();
}

あとがき

さっそく自分のゲーム開発でも使用しています。前職でも似た用途のManagerクラスを作っていたので、割と使う機能だなと思っています。


この記事が気に入ったらサポートをしてみませんか?