Skip to main content

Actions

Actions are story nodes that make something happen in the VR experience. Use them to play audio, show UI, move objects, control the player, toggle components, or call custom logic.

Each action uses the same core fields:

NameThe action node type selected in StoryCreator.

QueryThe target GameObjectQuery or system object the action affects.

OptionThe action mode selected in Unity. Each option is explained under the action entry.

DataExtra option-specific fields shown in Unity, such as text, durations, object names, booleans, indexes, colors, or lists.

TypeUnused legacy field. Keep it as 0 for actions.

info

Some story node names differ from their C# class names for legacy reasons. For example, the Objects node is implemented by ObjectAction, ChecklistUIToggle is implemented by ChecklistUIAction, and SFXPlayer is implemented by SFXPlayerAction.

Audio and Feedback Actions​

VoiceOver​

Plays localized voice-over audio for the supplied text.

Query and Scene Setup​

QueryLeave blank. VoiceOver uses the global VO player through ReferenceManager.

Scene setupNo scene object is assigned in this action. Voice selection is handled during VO generation and project TTS setup, not inside this node.

Options​

Play​

Plays the voice-over clip resolved from Data.text for the active locale.

textThe exact line the learner should hear. This is the key used to resolve/generated localized VO audio.

timedSegmentOptional timing metadata used by the VO player.

waitForCompletionIf true, the story waits until the VO clip finishes before continuing.

JSON example
{
"Name": "VoiceOver",
"Query": "",
"Option": "Play",
"Data": "{\"text\":\"Welcome to the training.\",\"waitForCompletion\":true}",
"Type": 0
}

SFXPlayerAction​

Controls sound effect playback through the SFX player. The story node name is SFXPlayer.

Query and Scene Setup​

QueryAssign the queryable object that has, or should receive, an SFXPlayer component. Commonly this is named SFXPlayer.

Scene setupInclude a queryable SFX player object in the scene. The action adds SFXPlayer if it is missing on the query object.

Options​

Play​

Plays the configured sound once.

useCloudAudioIf true, audio is downloaded from audioUrl. If false, audio is loaded from Resources using audioClipName.

audioClipNameLocal Resources clip name. Required when useCloudAudio is false.

audioUrlCloud audio URL. Required when useCloudAudio is true.

audioRangePlayback range used by the SFX audio source.

setVolumePlayback volume.

waitForCompletionIf true, waits for the clip completion event.

PlayLoop​

Starts the configured sound in a loop.

useCloudAudioSame source-selection behavior as Play.

audioClipName / audioUrlLocal clip or cloud URL to loop.

audioRangePlayback range used by the SFX audio source.

setVolumePlayback volume.

Pause​

Pauses the current SFX playback.

FieldsNo source fields are required. The action operates on the queried SFX player.

StopAndSkip​

Stops the current SFX playback and completes immediately.

FieldsNo source fields are required. The action operates on the queried SFX player.

JSON example
{
"Name": "SFXPlayer",
"Query": "SFXPlayer",
"Option": "Play",
"Data": "{\"audioClipName\":\"button-click\",\"setVolume\":0.8,\"waitForCompletion\":false}",
"Type": 0
}

HapticsAction​

Triggers controller haptic feedback.

Query and Scene Setup​

QueryLeave blank. Haptics use the platform haptics manager, not a scene target.

Scene setupThe active platform must provide HapticsManager through PlatformInfoRegister.

Options​

Left​

Plays haptic feedback on the left controller.

Plays haptic feedback on the right controller.

Both​

Plays haptic feedback on both controllers.

hapticIntensityStrength of the haptic pulse. Must be positive.

hapticDurationLength of the haptic pulse in seconds. Must be positive.

waitForCompletionIf true, waits for hapticDuration before completing.

JSON example
{
"Name": "HapticsAction",
"Query": "",
"Option": "Both",
"Data": "{\"hapticIntensity\":0.5,\"hapticDuration\":0.2,\"waitForCompletion\":false}",
"Type": 0
}

ToastMessageAction​

Shows a temporary toast message in VR.

Query and Scene Setup​

QueryLeave blank. Toast messages are global UI feedback.

Scene setupAdd an Experience Panel prefab if the scene does not already include toast UI. Toast rendering is handled by ExperiencePanel / ExperiencePanelUIHandler.

Options​

Empty option​

Toast behavior is data-driven. The option field is normally left empty.

messageVisible toast text shown to the learner.

messageTypeVisual style. Valid values are Default, Wrong, and Correct.

durationHow long the toast remains visible, in seconds. Must be positive.

JSON example
{
"Name": "ToastMessage",
"Query": "",
"Option": "",
"Data": "{\"message\":\"Correct action.\",\"messageType\":\"Correct\",\"duration\":2.0}",
"Type": 0
}

Object State and Animation Actions​

Objects / ObjectAction​

Spawns or despawns a target GameObject by changing its active state. The story node name is Objects.

Query and Scene Setup​

QueryThe GameObjectQuery object to show or hide.

Scene setupThe target object must exist in the scene and be registered as a query object.

Options​

Spawn​

Sets the target GameObject active.

Despawn​

Safely hides the target GameObject. If the object is held or placed, the action first releases/removes it so interaction state can clean up.

waitForCompletionUsually false. Spawn/despawn is normally immediate, except despawn may wait one frame for cleanup.

JSON example
{
"Name": "Objects",
"Query": "Wrench",
"Option": "Spawn",
"Data": "{\"waitForCompletion\":false}",
"Type": 0
}

Animation​

Controls Unity Animation or Animator playback on a target object.

Query and Scene Setup​

QueryObject with an Animation or Animator component.

Scene setupConfigure the animation clip/state on the target object in Unity.

Options​

Play​

Plays the named animation clip or animator state.

Clip nameName of the animation clip or state to play.

waitForCompletionIf true, waits for the clip length before completing.

Pause​

Pauses current animation playback.

Stop​

Stops current animation playback.

Resume​

Resumes paused animation playback.

Clip nameOptional. Used when the system needs to identify a specific clip or state.

JSON example
{
"Name": "Animation",
"Query": "MachineDoor",
"Option": "Play",
"Data": "{\"clipName\":\"Open\",\"waitForCompletion\":true}",
"Type": 0
}

ObjectAnimationAction​

Animates a target object's transform toward a named destination transform.

Query and Scene Setup​

QueryThe object being animated.

Scene setupCreate a queryable marker/target object at the final pose and reference it in targetTransform.

Options​

Position​

Copies only the target transform position.

Rotation​

Copies only the target transform rotation.

Scale​

Copies only the target transform scale.

PositionRotation​

Copies target position and rotation.

PositionScale​

Copies target position and scale.

RotationScale​

Copies target rotation and scale.

PositionRotationScale​

Copies target position, rotation, and scale.

targetTransformGameObjectQuery name of the destination transform.

lerpDurationInterpolation time in seconds.

waitForCompletionIf true, waits until the animation finishes.

JSON example
{
"Name": "ObjectAnimationAction",
"Query": "Drawer",
"Option": "PositionRotation",
"Data": "{\"targetTransform\":\"DrawerOpenTarget\",\"lerpDuration\":1.0,\"waitForCompletion\":true}",
"Type": 0
}

Player and Flow Actions​

Player​

Controls player movement and camera transitions.

Query and Scene Setup​

QueryLeave blank or use the player/system object convention in your project. Runtime resolves the player rig from ReferenceManager.

Scene setupThe scene must have a player rig registered with ReferenceManager. Teleport also needs a queryable target transform.

Options​

Teleport​

Moves the player to a target transform.

targetTransformGameObjectQuery name of the teleport destination.

shouldFadeIf true, runs a fade during teleport.

fadeDurationFade duration in seconds when fade is enabled.

waitForCompletionIf true, waits for player action completion callback.

LockMovement​

Disables player locomotion.

UnlockMovement​

Re-enables player locomotion.

FieldsNo option-specific fields are required.

CameraFade​

Runs a camera fade effect.

fadeTypeFade mode: FadeIn, FadeOut, or FadeInOut.

fadeDurationFade duration in seconds.

waitForCompletionIf true, waits for fade completion.

JSON example
{
"Name": "Player",
"Query": "",
"Option": "Teleport",
"Data": "{\"targetTransform\":\"SpawnPoint_A\",\"shouldFade\":true,\"fadeDuration\":0.4,\"waitForCompletion\":true}",
"Type": 0
}

TimerAction​

Starts, resets, or stops a countdown timer.

Query and Scene Setup​

QueryTimer object or any query object that should own the CountDownTimerController.

Scene setupNo dedicated timer prefab was found. The action adds CountDownTimerController to the queried object if missing.

Options​

Start​

Starts the countdown timer.

durationTimer length in seconds.

waitForCompletionIf true, the story waits until the timer ends.

Stop​

Stops the active timer.

Reset​

Resets the timer state.

FieldsNo option-specific fields are required.

JSON example
{
"Name": "TimerAction",
"Query": "CountDownTimer",
"Option": "Start",
"Data": "{\"duration\":30,\"waitForCompletion\":false}",
"Type": 0
}

TargetGuidanceArrowAction​

Controls the target guidance arrow system.

Query and Scene Setup​

QueryObject with TriggerQueryObjectGuider.

Scene setupUse the scene's trigger guider object. For override, the override target must also be a queryable object.

Options​

Enable​

Shows the guidance arrow using the guider's current target.

Disable​

Hides the guidance arrow.

waitForCompletionOptional completion setting.

Override​

Points the guidance arrow at a different target object.

targetGameObjectGameObjectQuery name of the override target.

waitForCompletionOptional completion setting.

JSON example
{
"Name": "TargetGuidanceArrowAction",
"Query": "TriggerQueryObjectGuider",
"Option": "Override",
"Data": "{\"targetGameObject\":\"NextTool\",\"waitForCompletion\":false}",
"Type": 0
}

UI and Media Actions​

MCQResponseAction​

Configures and displays a Multiple Choice Question evaluation panel.

Query and Scene Setup​

QueryMCQ panel GameObject with MCQEvaluationHandler.

Scene setupAdd an MCQ panel prefab with MCQEvaluationHandler, such as MCQEvaluationPanelUI.prefab or MCQPanelVRseUI.prefab.

Options​

Empty option​

This action is data-driven. It populates the MCQ panel with the question and answer options.

questionIndexQuestion number/index shown or tracked by the panel.

questionTextQuestion prompt displayed to the learner.

optionsListArray of answer choices.

correctOptionIndexOne-based index or indexes of correct answers. Runtime converts these to zero-based indexes.

showAnswerDurationHow long answer feedback is shown.

JSON example
{
"Name": "MCQResponseAction",
"Query": "MCQPanel",
"Option": "",
"Data": "{\"questionIndex\":1,\"questionText\":\"What should you inspect first?\",\"optionsList\":[\"Valve\",\"Pump\"],\"correctOptionIndex\":[1],\"showAnswerDuration\":3}",
"Type": 0
}

ChecklistUIAction​

Updates or configures checklist UI state. The story node name is ChecklistUIToggle.

Query and Scene Setup​

QueryChecklist panel GameObject with ChecklistUI. The default checklist from ReferenceManager is also updated when available.

Scene setupAdd a checklist prefab with ChecklistUI, such as ChecklistUI.prefab or ChecklistVRseUI.prefab.

Options​

Check​

Marks one checklist item as checked.

indexOne-based checklist item index.

moveToNextIf true, advances the current item after checking.

waitForCompletionOptional completion setting.

Uncheck​

Marks one checklist item as unchecked.

indexOne-based checklist item index.

Current​

Marks or highlights one checklist item as the current item.

indexOne-based checklist item index.

Configure​

Populates the checklist title and entries.

titleTextChecklist heading.

toggleInfosArray of checklist item labels.

waitForCompletionOptional completion setting.

JSON example
{
"Name": "ChecklistUIToggle",
"Query": "ChecklistPanel",
"Option": "Configure",
"Data": "{\"titleText\":\"Inspection Checklist\",\"toggleInfos\":[\"Check valve\",\"Check pump\"],\"waitForCompletion\":false}",
"Type": 0
}

TextMediaAction​

Enables or disables text media display.

Query and Scene Setup​

QueryText media panel GameObject with MultiMediaPlayer.

Scene setupAdd a text media panel prefab, such as TextPanel.prefab or TextPanelMetaXR.prefab.

Options​

Enable​

Shows text content in the panel.

contentText to display.

waitForCompletionOptional completion setting.

Disable​

Hides text content.

FieldsNo option-specific fields are required.

JSON example
{
"Name": "TextMediaAction",
"Query": "InstructionTextPanel",
"Option": "Enable",
"Data": "{\"content\":\"Inspect the valve.\",\"waitForCompletion\":false}",
"Type": 0
}

ImageMediaAction​

Enables or disables image media display.

Query and Scene Setup​

QueryImage media panel GameObject with MultiMediaPlayer.

Scene setupAdd an image media panel prefab, such as ImagePanel.prefab or ImagePanelMetaXR.prefab.

Options​

Enable​

Shows image content in the panel.

contentImage path/reference used by the media player.

waitForCompletionOptional completion setting.

Disable​

Hides image content.

FieldsNo option-specific fields are required.

JSON example
{
"Name": "ImageMediaAction",
"Query": "ReferenceImagePanel",
"Option": "Enable",
"Data": "{\"content\":\"inspection-reference.png\",\"waitForCompletion\":false}",
"Type": 0
}

VideoMediaAction​

Enables or disables video media display.

Query and Scene Setup​

QueryVideo media panel GameObject with MultiMediaPlayer and a video player.

Scene setupAdd a video media panel prefab, such as VideoPanel.prefab or VideoPanelMetaXR.prefab.

Options​

Enable​

Shows and plays video content.

contentVideo path/reference used by the media player.

waitForCompletionIf true, waits until video playback finishes.

Disable​

Hides video content.

FieldsNo option-specific fields are required.

JSON example
{
"Name": "VideoMediaAction",
"Query": "TrainingVideoPanel",
"Option": "Enable",
"Data": "{\"content\":\"intro-video.mp4\",\"waitForCompletion\":false}",
"Type": 0
}

UIPropertyChangeAction​

Changes text content in UI elements.

Query and Scene Setup​

QueryObject with UIPropertyChanger.

Scene setupAttach/configure UIPropertyChanger on the UI object to be edited.

Options​

ChangeText​

Replaces the UI text with the supplied value.

AppendText​

Adds the supplied value to the existing UI text.

textText to write or append.

waitForCompletionOptional completion setting.

JSON example
{
"Name": "UIPropertyChangeAction",
"Query": "InstructionLabel",
"Option": "ChangeText",
"Data": "{\"text\":\"Step complete.\",\"waitForCompletion\":false}",
"Type": 0
}

Interaction Property Actions​

GrabbablePropertyChangeAction​

Changes grabbable object behavior at runtime.

Query and Scene Setup​

QueryObject with IGrabbableWrapper.

Scene setupUse a grabbable Building Block or convert the object to a grabbable.

Options​

ChangeHandType​

Changes which hand mode the grabbable accepts.

handTypeValid values include Any, LeftOnly, RightOnly, SingleHandSwappable, SingleHandUnswappable, and BothHandsRequired.

swappableDelayUsed when handType is SingleHandSwappable.

requireBothHandsToStartGrabUsed when handType is BothHandsRequired.

ChangeIsGrabbable​

Enables or disables whether the object can currently be grabbed.

isGrabbableTrue enables grabbing. False disables grabbing.

ChangeResetTransformOnRelease​

Controls whether the object resets to its original transform after release.

resetTransformOnReleaseTrue resets on release. False leaves the object where released.

ChangeEnableGrabbableAnimated​

Controls animated enable/disable behavior for grabbable state.

enableGrabbableAnimatedTrue enables animated behavior. False disables it.

JSON example
{
"Name": "GrabbablePropertyChangeAction",
"Query": "ValveHandle",
"Option": "ChangeIsGrabbable",
"Data": "{\"isGrabbable\":true,\"waitForCompletion\":false}",
"Type": 0
}

AllGrabbablePropertyToggleAction​

Globally enables or disables grabbable behavior on relevant objects.

Query and Scene Setup​

QueryUsually blank. This action finds grabbables globally.

Scene setupScene must contain grabbable objects with IGrabbableWrapper.

Options​

Enable​

Enables grabbable behavior globally.

Disable​

Disables grabbable behavior globally.

waitForCompletionOptional completion setting.

JSON example
{
"Name": "AllGrabbablePropertyToggleAction",
"Query": "",
"Option": "Disable",
"Data": "{\"waitForCompletion\":false}",
"Type": 0
}

GrabLockAction​

Locks or unlocks grabbing on a grabbable object.

Query and Scene Setup​

QueryObject with IGrabbableWrapper.

Scene setupUse a grabbable object or Building Block.

Options​

GrabLock​

Turns on grab locking for the object.

waitForCompletionOptional completion setting.

GrabUnlock​

Turns off grab locking for the object.

forceReleaseIf true, releases the object while unlocking.

JSON example
{
"Name": "GrabLockAction",
"Query": "Tool",
"Option": "GrabLock",
"Data": "{\"forceRelease\":true,\"waitForCompletion\":false}",
"Type": 0
}

MetaLayerAction​

Controls object meta layers such as outline, label, highlighter, and ghost hand.

Query and Scene Setup​

QueryBase item or grabbable object with meta layer components.

Scene setupTarget object should have the layer being controlled, such as outline, label, highlighter, or ghost hand.

Options​

SetActive​

Enables or disables one or more meta layers.

Layer keysUse keys like Outline, Label, Highlighter, and GhostHand with boolean values.

Edit​

Changes meta layer properties.

OutlinesetActive, outlineColor, and outlineWidth.

LabelsetActive and labelText.

HighlightersetActive and material.

GhostHandghostHandsState maps ghost hand objects to active states.

JSON example
{
"Name": "MetaLayerAction",
"Query": "Wrench",
"Option": "SetActive",
"Data": "{\"Outline\":true,\"Label\":false}",
"Type": 0
}

MaterialPropertyChangeAction​

Changes material properties on a target object, currently focused on emission toggling.

Query and Scene Setup​

QueryObject whose material emission should change.

Scene setupThe action adds/uses MaterialPropertyChanger on the target object.

Options​

EnableEmission​

Turns material emission on.

DisableEmission​

Turns material emission off.

FieldsNo option-specific fields are required.

JSON example
{
"Name": "MaterialPropertyChangeAction",
"Query": "StatusLight",
"Option": "EnableEmission",
"Data": "{}",
"Type": 0
}

Specialized Mechanic Actions​

ForcepsAction​

Configures and locks forceps-specific interaction behavior.

Query and Scene Setup​

QueryForceps object.

Scene setupAdd Forceps_Block.prefab from VRseBlocks.

Options​

SetProperties​

Assigns the forceps target place point and target grabbable object.

placePointNameGOTarget place point object name.

grabbableNameTarget grabbable object name.

ClearProperties​

Clears previously assigned forceps target properties.

ForcepLock​

Locks forceps behavior.

ForcepUnlock​

Unlocks forceps behavior.

waitForCompletionOptional completion setting.

JSON example
{
"Name": "ForcepsAction",
"Query": "Forceps",
"Option": "SetProperties",
"Data": "{\"placePointNameGO\":\"TrayPlacePoint\",\"grabbableName\":\"CottonBall\",\"waitForCompletion\":false}",
"Type": 0
}

TransformBoundsAction​

Controls movement or rotation constraints for transform-bound objects.

Query and Scene Setup​

QueryTransform Bounds block with ITransformBounds.

Scene setupAdd the matching MetaXRTransformBounds_*_Block.prefab from VRseBlocks.

Options​

Lock​

Locks the transform. Can optionally snap to exact bounds.

snapToExactBoundsIf true, snaps exactly to bounds while locking.

Unlock​

Unlocks the transform.

Enable​

Enables bounds checking.

Disable​

Disables bounds checking.

FieldsNo option-specific fields are required.

CreateCombination​

Creates a named bound combination on the object.

combinationNameName for the created combination.

boundsArray of bound names included in the combination.

lockOnTriggerIf true, lock when the combination triggers.

snapToExactBoundsIf true, snap when locking.

RemoveCombination​

Removes a named bound combination.

combinationNameName of the combination to remove.

SetThreshold​

Changes the bound detection threshold.

thresholdPositive tolerance value for bound detection.

JSON example
{
"Name": "TransformBoundsAction",
"Query": "SlidingDrawer",
"Option": "Lock",
"Data": "{\"snapToExactBounds\":true,\"waitForCompletion\":false}",
"Type": 0
}

PivotRotateLimiterAction​

Controls rotation limits and lock states on pivot-rotating objects.

Query and Scene Setup​

QueryPivot Rotate Limiter block with IPivotRotateLimiter.

Scene setupAdd the matching MetaXRPivotRotateLimiter_*Axis_Block.prefab from VRseBlocks.

Options​

SetToMin​

Moves the rotator to its minimum limit.

SetToMax​

Moves the rotator to its maximum limit.

LockOnMin​

Locks rotation when the minimum limit is reached.

LockOnMax​

Locks rotation when the maximum limit is reached.

Unlock​

Clears the rotation lock.

Enable​

Enables rotation constraints.

Disable​

Disables rotation constraints.

FieldsNo option-specific fields are required.

SetToSpecific​

Moves the rotator to a specific rotation value.

LockOnSpecific​

Locks rotation when the specific rotation value is reached.

specificSpecific rotation value used by this option.

JSON example
{
"Name": "PivotRotateLimiterAction",
"Query": "ValveWheel",
"Option": "SetToMax",
"Data": "{\"waitForCompletion\":true}",
"Type": 0
}

TransformerSwitcherAction​

Switches the active transformer on an object.

Query and Scene Setup​

QueryObject with ITransformerSwitcher.

Scene setupConfigure the available transformers on the query object.

Options​

Switch​

Switches to the transformer at the supplied index.

indexTransformer index to activate.

waitForCompletionOptional completion setting.

JSON example
{
"Name": "TransformerSwitcherAction",
"Query": "TwoHandTool",
"Option": "Switch",
"Data": "{\"index\":1,\"waitForCompletion\":false}",
"Type": 0
}