unity初心者なんですが、一時停止できるようにしたいです変数(型はbool?enumの方が汎用性が高い?)を作って、それでプレイ中かポーズ中かを判定して処理を実行するかどうか決めるっていうのを思いついたんですが、それでいいんですかね?もっと簡単な方法ありますか?

1件の回答

回答を書く

1164369

2026-01-23 08:05

+ フォロー

簡単にやるなら、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

}

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有