コンテンツにスキップ

SOAR のライフサイクル (SoarCore)

GameEvent から VariableCollection に至るまで、SOAR のすべてのアセットは、単一の重要な基本クラスである SoarCore を継承します。このクラスはフレームワークの心臓部であり、すべての SOAR アセットが Unity エディター内およびビルドで予測可能かつ確実に動作することを保証する管理されたライフサイクルを提供します。このライフサイクルを理解することは、SOAR をマスターするための鍵です。

SoarCore の主な目的は、シーンの外部に存在する ScriptableObject アセットと、プレイモードへの出入りなどのアプリケーションのランタイムイベントとの間のギャップを埋めることです。

コアライフサイクルメソッド

ライフサイクルは、SoarCore によって OnEnableInitializeOnQuit の3つの主要なメソッドを介して管理されます。

  1. OnEnable()

    • 呼び出されるタイミング: これは、ScriptableObject がロードされたときに呼び出される標準の Unity メッセージです。これは、アプリケーションの起動時、スクリプトの再コンパイル後、またはアセットが最初にインスペクトされたときに発生します。
    • 何をするか: OnEnable での SoarCore の主な仕事は、内部状態を設定し、重要なエディターおよびアプリケーションイベントをサブスクライブすることです。Initialize() は直後に呼び出されます。
  2. Initialize()

    • 呼び出されるタイミング: OnEnable によって自動的に呼び出されます。
    • 何をするか: ここで、各 SOAR アセットの「セットアップ」ロジックが発生します。たとえば、Variable はこのステップ中に現在の値を InitialValue として保存します。Transaction は、内部レスポンスハンドラーを登録します。コールバックも Application.exitCancellationToken に登録され、アプリケーションが閉じるときに OnQuit メソッドが呼び出されるようにします。
  3. OnQuit()

    • 呼び出されるタイミング: アプリケーションが閉じるとき(ビルド内)またはエディターでプレイモードが終了したときに自動的に呼び出されます。
    • 何をするか: これは「クリーンアップ」フェーズです。あるプレイモードセッションのデータが次のセッションに「リーク」するのを防ぐために、SOAR アセットの状態をリセットする責任があります。たとえば、autoResetValue が有効になっている Variable は、InitialValue に戻ります。GameEvent 内のすべてのアクティブなサブスクリプションは、メモリリークを防ぐために破棄されます。

「ドメインリロードの無効化」エッジケース

Unity の「プレイモードに入るオプション」では、より高速なイテレーションのためにドメインリロードを無効にすることができます。SOAR はこのシナリオを正しく処理するように構築されていますが、その動作はわずかに異なります。

  • ドメインリロードあり(デフォルト): プレイモードを終了すると、すべてのスクリプトの状態が Unity によってワイプおよびリセットされます。プレイモードに再入すると、OnEnableInitialize が新しいオブジェクトで呼び出されます。
  • ドメインリロードなし: スクリプトの状態はワイプされません。オブジェクトはプレイモードセッション間で永続します。これには、SoarCore が「セットアップ」と「クリーンアップ」のプロセスを手動で管理する必要があります。

ドメインリロードが無効になっている場合のフローは次のとおりです:

  1. 編集モードの終了(プレイモードへの移行): SoarCoreInitialize() を呼び出して、すべてのアセットが新しいセッションに対して新しい状態であることを確認します。
  2. プレイモードの終了(編集モードへの再移行): SoarCoreOnQuit() を呼び出して、アプリケーションが閉じている場合と同様に、変数をクリーンアップ、リセットし、サブスクリプションを破棄します。

この慎重な管理により、SOAR はプロジェクトの設定に関係なく、一貫して確実に動作します。

なぜこれが重要なのか

このライフサイクルを理解することは、問題を診断し、より堅牢なシステムを構築するのに役立ちます。

  • 初期化順序: VariableInitialValue は、MonoBehaviourStart() メソッドが呼び出される前の、ゲームの非常に早い段階で設定されると想定できます。
  • クリーンな状態: エディターでゲームを停止して開始すると、SOAR アセットはクリーンで予測可能な状態になり、古いデータによって引き起こされるイライラするバグを防ぐことができます。
  • リソース管理: SOAR によって作成されたすべてのイベントサブスクリプションは自動的に破棄され、メモリリークを防ぐことができると信頼できます。