簡単にやるなら、TimeクラスをラップしたCustomTimeクラス的なのを作って、ゲーム全般でTime.deltaTimeの代わりにこれを使って動かす。
止めたい時はTimeScaleを0にすればいい。
n倍速とかも作れるな。
Time.timeScale = 0とかだとUIのアニメーションやパーティクルなんかも全部止まるから、もう少し幅広く対応できるな。
とりあえずAIに書かせたからお前の方で適当にいじれ
public static class CustomTime
{
private static float _timeScale = 1f;
/// \u0026lt;summary\u0026gt;タイムスケール変更時のイベント\u0026lt;/summary\u0026gt;
public static event Action\u0026lt;float\u0026gt; OnTimeScaleChanged;
/// \u0026lt;summary\u0026gt;タイムスケール(0以上)\u0026lt;/summary\u0026gt;
public static float TimeScale
{
get =\u0026gt; _timeScale;
set
{
float newValue = Mathf.Max(0, value);
if (Mathf.Approximately(_timeScale, newValue)) return;
_timeScale = newValue;
OnTimeScaleChanged?.Invoke(_timeScale);
}
}
/// \u0026lt;summary\u0026gt;現在のDeltaTime\u0026lt;/summary\u0026gt;
public static float DeltaTime =\u0026gt; Time.deltaTime * _timeScale;
/// \u0026lt;summary\u0026gt;一時停止状態かどうか\u0026lt;/summary\u0026gt;
public static bool IsPaused =\u0026gt; Mathf.Approximately(_timeScale, 0f);
#if UNITY_EDITOR
// エディタでのドメインリロード対策
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
private static void ResetStatics()
{
_timeScale = 1f;
OnTimeScaleChanged = null;
}
#endif
}