> ## 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.

# VR step auxiliaries

> StepInfo titles for Scenario UI task lists, scoring, haptics, controller hints, mode-aware events, and analog UI helpers.

**Folder (auxiliary types):** `Assets/_MolcaSDK/_VR/Scripts/Scenario/Steps/Auxiliary/`\
**Related UI (not under Auxiliary/):** `AnalogFeedbackUI`, `ProgressFeedbackUI`, **`ValveFeedbackUI`** under `Scenario/Steps/` (and a second **`ValveFeedbackUI`** under `Scripts/UI/` for alternate wiring — search the project).

All **`StepAuxiliary`** types are added on each [Step](/core/step) via the **SerializeReference / Auxiliaries** list in the Inspector (menu paths come from **`[AuxiliaryMenu(...)]`** on each class).

## When to use

| Need                                                                   | Use                                                                                                                                                                                                                                                     |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Step **title** (and often description) for HUD **task lists** + modals | **`StepInfo`** auxiliary — see below                                                                                                                                                                                                                    |
| Per-step points / time / binary scoring + optional session post        | **[StepScoringAuxiliary](/vr/scoring/step-scoring-auxiliary)**                                                                                                                                                                                          |
| Pulses or continuous buzz on begin / complete / reset                  | **VRHapticAuxiliary**                                                                                                                                                                                                                                   |
| Floating labels + button rim highlights on controllers                 | **VRControllerInfoAuxiliary**                                                                                                                                                                                                                           |
| Different UnityEvents for tutorial vs training vs assessment           | **StepModeAwareEvent**                                                                                                                                                                                                                                  |
| Radial / text feedback for valve, knob, gaze                           | **`AnalogFeedbackUI`**, **`ProgressFeedbackUI`**, **`ValveFeedbackUI`** (referenced from [ValveStep](/vr/steps/valve-step) / [KnobStep](/vr/steps/knob-step) / [LookAtStep](/vr/steps/look-at-step) via [SceneObjectReference](/core/reference-system)) |

### StepInfo (task list + copy)

**`StepInfo`** is a **`StepAuxiliary`** (same **Auxiliaries** list on [Step](/core/step)) that holds the **human-facing title** and related copy for a step.

* **[Scenario UI](/vr/scenario-ui)** — in-scenario HUD often includes a **task / checklist** UI: it walks the active steps (via the running [SequenceController](/core/sequence-controller) / [ScenarioActivity](/vr/scenario-activity)) and shows each step’s **`StepInfo`** title as a row so trainees see **what to do next** and what’s already done.
* **Modals** — steps such as [Popup step](/vr/steps/popup-step) read **`StepInfo`** for title/body text on confirmation dialogs.
* **Subclasses** — you can derive from **`StepInfo`** to add fields (extra labels, icons, CSV-imported metadata). [CSV Step Importer](/core/csv-step-importer) supports a custom **`StepInfoType`** and **`RegisterExtraColumnMapping`** so imported steps get your derived auxiliary. Scenario UI and importers that cast to your type can show the extra data; the stock **task list** typically relies on the **base title** (and localization) from **`StepInfo`**.

Add **`StepInfo`** through **Auxiliaries →** the menu entry your SDK exposes (often under a **VR / Scenario** or **Info** path). Keep titles **localized** (e.g. **`DynamicLocalization`**) when the task list and modals use the same keys as the rest of the UI.

### Auxiliary types (summary)

| Type                          | Role                                                                                                                                                                                            |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **StepInfo**                  | **Title/description** (and subclasses for extra fields); feeds **[Scenario UI](/vr/scenario-ui)** task-list rows and modal copy ([Popup step](/vr/steps/popup-step)).                           |
| **StepScoringAuxiliary**      | Embedded **ScoringConfig**; **`OnStepUpdate`** refreshes time-based scores; **`FinalizeScore`** on complete/end; optional **`PostStepScoreAsync`**.                                             |
| **VRHapticAuxiliary**         | **`HapticImpulse[]`** via **`HapticImpulsePlayer`** on [VRPlayerManager](/vr/vr-player-manager) controller visuals (or scene fallback by name). Optional **continuous** haptics until complete. |
| **VRControllerInfoAuxiliary** | **`InfoDisplayUtility`** + **`VRInfoDisplay[]`** (hand, button, **`DynamicLocalization`**, optional prefab). Toggles controller appearance mode and **`SetButtonRim`** while active.            |
| **StepModeAwareEvent**        | **`beginExecutionModes`** / **`completeExecutionModes`** flags vs **`ScenarioDataConfig.ExecutionMode`**; invokes **`UnityEvent`** when mode matches.                                           |

## Code

**Add an auxiliary in the Editor** — expand the Step component → **Auxiliaries** → add **VR/Haptic Feedback**, **VR/Controller Info**, **VR/Scenario/Mode Event**, or **Scoring/Step Scoring**. No code required for haptics or mode events if you wire impulses / UnityEvents in the Inspector.

**Runtime: drive binary / accuracy scoring** (e.g. from a custom script listening to your own validation):

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

// step = hosting Step MonoBehaviour
var aux = step.GetAuxiliary<StepScoringAuxiliary>();
aux.SetCorrect();           // binary
aux.SetAccuracy(0.85f);     // 0–1 for Accuracy type
aux.SetAccuracyPercent(85f);
```

**Analog / progress UI** — steps call **`AnalogFeedbackUI.Setup(IAnalogInteraction, target, start)`** then **`Show()`** / **`Hide()`**; **`ProgressFeedbackUI.SetProgress(0..1)`** from gaze dwell.

## Troubleshooting

* **Auxiliary never runs** — Confirm it lives on the **same Step** instance the [SequenceController](/core/sequence-controller) activates; check **IsEnabled** on the auxiliary instance if your version exposes it (**StepModeAwareEvent** bails when disabled).
* **VRHapticAuxiliary: no channels** — Add **`HapticImpulsePlayer`** to **`VRControllerVisual`** children or ensure controller objects include **left/right** in the name for fallback search.
* **VRControllerInfoAuxiliary: no popups** — Place **`InfoDisplayUtility`** in the scene; **`localizedInfo`** must not be **disabled**; **`GetButtonTransform`** must exist for the chosen **`VRControllerVisual.ButtonType`**.
* **Mode event never fires** — **`ScenarioDataConfig.GetInstance()`** must return config with expected **`ExecutionMode`**; masks must include that mode in **begin** / **complete** flags.
* **Analog UI blank** — Call **`Setup`** before **`Show`**; **`IAnalogInteraction`** must be the live valve/knob; radial **Image** must use **Filled** + **Radial** per inspector tooltips.
* **Task list shows wrong or empty titles** — Each listed step needs a **`StepInfo`** auxiliary with **title** (and localization) set; confirm **Scenario UI** references the same **SequenceController** / activity the player is training on.

## Related

* [Scenario UI](/vr/scenario-ui) — completion + in-scenario HUD (task list uses **`StepInfo`** titles)
* [Step scoring auxiliary](/vr/scoring/step-scoring-auxiliary)
* [ScoringConfig](/vr/scoring/scoring-config)
* [Step (base class)](/core/step)
* [VR player manager](/vr/vr-player-manager)
* [Scenario Data Config](/setup/scenario-data-config) — execution mode

## Unity Editor

<Frame hint="Step Inspector — Auxiliaries list with + to add StepScoringAuxiliary." caption="Step auxiliaries on a VR Step">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/ptmolcateknologinusantara/images/features/vr/steps/step-auxiliaries-inspector.png" alt="Unity Inspector Step auxiliaries list" />
</Frame>
