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.
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.
Right
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
}