MRが楽しい

MRやVRについて学習したことを書き残す

Unityでスクリプトから一時停止の有効/無効の状態変化を取得する

本日はUnityの小ネタ枠です。
Unityでスクリプトから一時停止の有効/無効の状態変化を取得する手順についてです。

スクリプトから一時停止の有効/無効の状態変化を取得する

EditorApplication-pauseStateChangedは一時停止の有効/無効の状態変化を通知します。
この通知を受け取るには事前にイベントハンドラーを追加しておく必要があります。
docs.unity3d.com
docs.unity3d.com

有効無効が切り替わったタイミングで通知され、引数からどの状態変化が発生したか取得できます。
本通知はシーンの再生が実行中でも停止中でも行われます。

状態名 説明
Paused エディタが一時停止するとすぐに発生します
Unpaused エディタの一時停止が解除されるとすぐに発生します

イベントハンドラーは再生開始を行う前に追加する必要があるのでInitializeOnLoadAttributeまたはInitializeOnLoadMethodを利用して登録しておきます。

サンプルスクリプト

以下のpauseStateChangedの通知を利用して、一時停止時にログを出力するサンプルスクリプトを作成しました。
・PauseStateChangedTest.cs

using UnityEditor;

public class PauseStateChangedTest
{
    // 再コンパイル時に本メソッドが実行される
    [InitializeOnLoadMethod]
    static void Initialize()
    {
        // プレイモードの状態変化を監視するイベントハンドラーを登録
        EditorApplication.pauseStateChanged += OnPauseStateChanged;
    }

    static void OnPauseStateChanged(PauseState state)
    {
        // 取得した状態と再生モードの状態をログ出力
        UnityEngine.Debug.Log($"PauseState: {state}, IsPlaying: {EditorApplication.isPlaying}");
    }
}

以下の通り、再生状態に関わらず一時停止ボタンを押すとその状態変化を検知してログが出力されます。