> ## Documentation Index
> Fetch the complete documentation index at: https://docs-unity.molca.id/llms.txt
> Use this file to discover all available pages before exploring further.

# ScenarioManager

> Scenario state machine, activities, pause, and session integration.

**Namespace:** `MolcaSDK.VR.Scenario`\
**File:** `Assets/_MolcaSDK/_VR/Scripts/Scenario/ScenarioManager.cs`

## Inspector (summary)

* **`scenarioData`** — `BaseScenarioData` (simulation or tour).
* **`activities`** — `ScenarioActivity[]` ordering.
* **`autoStart`**, **`startAllActivitiesSimultaneously`**, **`isDirectCompleteWhenAllActvityComplete`**
* **`useSessionManager`** — ties lifecycle to [Scenario session](/vr/session-loading-and-events).
* **Pause** — `PauseModal` + `InputActionReference`.

## Events

`UnityEvent` hooks for scenario start/pause/resume/complete/timeout/fail and per-activity activated/deactivated/completed.

## Access and session

* **`GetInstance()`** — `FindFirstObjectByType`; use **one** active manager per scenario scene.
* **`SessionManager`** — `RuntimeManager.GetSubsystem<ScenarioSessionManager>()`.

## Timing

`ElapsedTime` / `RemainingTimeLimit` use wall clock; the pause modal does **not** freeze elapsed time (see script comments).

## Mode logic

Simulation vs tour behavior is delegated to [Scenario mode drivers](/vr/scenario-mode-drivers).

## State semantics

See [VR architecture](/vr/architecture) for the full diagram and pause-modal behavior. Summary:

```mermaid theme={null}
flowchart TD
  I[Inactive] -->|StartScenario| A[Active]
  A -->|CompleteScenario| C[Completed]
  A -->|timeout| T[TimedOut]
  A -->|FailScenario| F[Terminated]
```

**Pause:** `PauseScenario` does **not** transition to `Paused`; `CurrentState` remains **`Active`** while the modal is visible.

## Code

Configuration stays in the Inspector; gameplay code usually resolves the scene singleton and drives **`StartScenario`** / completion.

```csharp theme={null}
using MolcaSDK.VR.Scenario;
using UnityEngine;

public class BriefingStart : MonoBehaviour
{
    private void OnEnable()
    {
        ScenarioManager.GetInstance()?.StartScenario();
    }
}
```

Session-backed flows also use **`ScenarioSessionManager`** — see [Session loading and events](/vr/session-loading-and-events).

## Related

* [VR architecture](/vr/architecture) — states, flows, glossary
* [VR content hierarchy](/vr/sdk-content-hierarchy) — modules, scenario, simulation vs tour
* [Runtime and settings overview](/overview/runtime-and-settings) — how ScenarioDataConfig and RuntimeManager connect

## Unity Editor

<Frame hint="Scenario scene: [VR Scenario] or root with ScenarioManager selected — full Inspector." caption="ScenarioManager component in a scenario scene">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/ptmolcateknologinusantara/images/features/vr/scenario-manager-inspector.png" alt="ScenarioManager in Unity Inspector" />
</Frame>
