【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クラスを作っていたので、割と使う機能だなと思っています。
この記事が気に入ったらサポートをしてみませんか?