# Dynamic Training Builder Nodes Manual

# Introduction

The Dynamic Training Builder represents the next-generation interaction definition system within the Training Builder, offering enhanced capabilities with more responses and events. It allows for the dynamic introduction of multiple node queries into a single system and the removal of these nodes during runtime, providing unparalleled flexibility. This advanced system is packed with exclusive features that elevate the overall user experience, making it a powerful tool for creating complex and responsive training simulations.

#### Accessing the Dynamic Training Builder

The Dynamic Training Builder is available in **SimLab Composer Mechanical and Ultimate Edition** as well as **VR Studio Pro Edition**.

To access it, simply run the Training Builder from the top workbench.

[![TB.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/tb.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/tb.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-08/scaled-1680-/CIJimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-08/CIJimage.png)

The Dynamic Training Builder menu is divided into four groups:

##### **Sources**

Source Nodes in the Training Builder define the elements that drive interactions, including objects, data types, animation sequences, and scene states. They act as key reference points that connect with events and responses, determining which elements are used within the interaction system. By configuring these sources, users ensure that events are triggered and responses are executed based on defined conditions, creating a dynamic and responsive interaction system.

##### **Events**

Events represent specific triggers or occurrences that initiate actions within the interaction system. They are used to define when particular conditions are met, such as an object entering a specific area or a user performing an action. Events connect Source Nodes to Responses, dictating how the system reacts to changes or interactions.

##### **Responses**

Responses are actions or outcomes triggered by Events. They dictate what happens when specific conditions are met, such as playing an animation, changing a scene, or altering an object’s state. Responses connect to Events to define the system's behavior and ensure the interaction system reacts dynamically to various triggers.

##### **States**

In the Training Builder, State Nodes represent ongoing conditions rather than single triggers. They include nodes for monitoring overlap, variable values, and object grabbing states, as well as logical operations like "and," "or," and "not." State Nodes can trigger responses similarly to events, but they reflect persistent states within the interaction system rather than instantaneous actions.

---

### Adding Nodes to the Diagram

To add nodes to the diagram simple click on one of the icons in the top bench or drag and drop them into the diagram

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-08/scaled-1680-/4O9image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-08/4O9image.png)

An additional method to create nodes is to use the **context menu** that appears when right clicking in an empty area of the diagram.

[![ContextMenu.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/contextmenu.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/contextmenu.jpg)

In the context menu you can navigate towards the nodes you want to create through a submenu system or you can type in the name of a node in the **filter** field to show only the related nodes.

***Note**: In addition to the nodes available in the nodes bench, the context menu features more advanced nodes that aren't listed there. Feel free to explore these additional options as well.*

---

#### Learn More

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="446" src="https://www.youtube.com/embed/1EtxHZ1tcBI" title="Introduction to the Dynamic Training Builder" width="793"></iframe>

To learn more about utilizing the Dynamic Training Builder you can visit our ever-expanding **SimLab Academy**, accessible from the bottom library in SimLab Composer and SimLab VR Studio, there you will find video tutorials with examples that would help you unleash the full potentials of the Dynamic Training Builder.

[![DynamicTBAcademy.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/dynamictbacademy.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/dynamictbacademy.jpg)

---

#### Organize your Dynamic Training Builder with Groups

<div id="bkmrk-vr-experiences-are-v">VR experiences are valuable assets that include custom logic created by users. As more users build advanced experiences—and as these experiences are shared and used over time by multiple creators—we’ve added colored groups and notes to help manage them better.</div><div id="bkmrk--9">  
</div><div id="bkmrk-these-features-make-">These features make it easier to organize related logic into groups and add clear descriptions for each section in the Training Builder, check this [tutorial](https://www.youtube.com/watch?v=p9SMynLbRQY).</div><div id="bkmrk--10"><iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/p9SMynLbRQY" width="560"></iframe>

</div><div id="bkmrk--11">---

</div>#### Feel free to reach out to us on our Discord!

##### [![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png) ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) [SimLab Discord Community](https://www.simlab-soft.com/simlab-discord-community.aspx)

# Sources



# Boolean

### [![Boolean_black.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/ykLboolean-black.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/ykLboolean-black.png) Boolean

Generates a Boolean (True/False) value. [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/image.png)

# Expression

### [![Source_Expression_blk.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/source-expression-blk.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/source-expression-blk.png) Expression<span style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> </span>

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/image.png)

**Expressions** are used to generated values that can be used to trigger events through out the interactive VR experiences. They allow users to define logic related to interactions and can be categorized into Main Sources and Template Sources. For more details on expressions check this [tutorial](https://www.youtube.com/watch?v=6hIvMsl5obs&t=307s). <span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">  
</span>You can find a list of all expressions viable in training builder at this [link](https://www.simlab-soft.com/3d-products/vr-expressions.aspx).

# Material

### [![Source_Material_blk.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/source-material-blk.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/source-material-blk.png) Material 

Select a material from Material Library to use as[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/S09image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/S09image.png)

an input in this source.

# Number

### [![Source_Number_blk.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/C6usource-number-blk.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/C6usource-number-blk.png) Number 

Input a number and use it as a source in your training builder logic

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/W1Bimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/W1Bimage.png)

# Scene Node

### [![Source_SceneNode_blk.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/source-scenenode-blk.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/source-scenenode-blk.png) Scene Node

# Scene Node Query

[![Source_SceneNodeQuery.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/source-scenenodequery.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)<span style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> Scene Node Query</span>

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/8Naimage.png)

The **SceneNode Query** enables the system to identify an object based on its attributes within the VR environment. This node enhances interactivity by allowing responses to be customized for individual objects, triggering specific actions based on **SceneNode attributes** as part of their virtual experience.

#### Example

In this example, the **SceneNode Query** is used to acquire specific attributes from specific objects, in order to perform specific response to them

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/njbimage.png)

Then when user triggers object named **Activate**, and the response connected to the node will be executed to the objects with attribute name **Color** and its value is **Yellow.**

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/9erimage.png)

# Scene State

### [![Source_SceneState_blk.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/source-scenestate-blk.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/source-scenestate-blk.png) Scene State

# Sequence

### [![Source_Sequence_blk.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/source-sequence-blk.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/source-sequence-blk.png) Sequence

# String

### [![Source_String_blk.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/source-string-blk.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/source-string-blk.png) String

# User Query

### [![Source_UserQuery.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/source-userquery.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) User Query

![CDvimage.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/cdvimage.png)

The **User Query node** enables the system to identify a user based on their attributes within the VR environment. This node enhances interactivity by allowing responses to be customized for individual users, triggering specific actions based on **user attributes** as part of their virtual experience.

#### Example

In this example, the **User Query node** is used to acquire specific attributes from specific users, in order to perform specific response to them

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/s7uimage.png)

Once the User enters the object named **Building**, their InBuilding attribute's value becomes **Yes,** then when user triggers object named **Activate**, the users with attribute name **InBuilding** and its value is **Yes** gets teleported to CameraNode named **Outside**'s location.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/VOKimage.png)

# Variable

### ![Source_Variable.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/source-variable.png) Variable

![CDvimage.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/oBkimage.png)

The **Variable** **node** represents the value of a specific variable within the scene and features a variable port that can be connected to nodes requiring variable assignment. This node simplifies complex setups by enabling consistent use of variables throughout the scene, ensuring streamlined connections between different elements in the training builder.

![TrainingBuilder_Variable.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/trainingbuilder-variable.png)

[![TrainingBuilder_Variable_01.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/trainingbuilder-variable-01.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-09/trainingbuilder-variable-01.png)

> [Tutorial about **Variable Sorting** on YouTube](https://www.youtube.com/watch?v=amnTY83rDjo "Tutorial about Variable Sorting on YouTube")

# Sources

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-08/iA9image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)<span style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> Expression</span>

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/image.png)

**Expressions** are used to generated values that can be used to trigger events throughtout the interactive VR experiences. They allow users to define logic related to interactions and can be categorized into Main Sources and Template Sources. For more details on expressions check this [tutorial](https://www.youtube.com/watch?v=6hIvMsl5obs&t=307s). <span style="font-size: 11.0pt; line-height: 107%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: Arial; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">  
</span>You can find a list of all expressions viable in training builder at this [link](https://www.simlab-soft.com/3d-products/vr-expressions.aspx).

[![Source_SceneNodeQuery.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/source-scenenodequery.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)<span style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> SceneNode Query</span>

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/8Naimage.png)

The **SceneNode Query** enables the system to identify an object based on its attributes within the VR environment. This node enhances interactivity by allowing responses to be customized for individual objects, triggering specific actions based on **SceneNode attributes** as part of their virtual experience.

#### Example

In this example, the **SceneNode Query** is used to acquire specific attributes from specific objects, in order to perform specific response to them

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/njbimage.png)

Then when user triggers object named **Activate**, and the response connected to the node will be executed to the objects with attribute name **Color** and its value is **Yellow.**

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/9erimage.png)

---

### [![Source_UserQuery.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/source-userquery.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) User Query

![CDvimage.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/cdvimage.png)

The **User Query node** enables the system to identify a user based on their attributes within the VR environment. This node enhances interactivity by allowing responses to be customized for individual users, triggering specific actions based on **user attributes** as part of their virtual experience.

#### Example

In this example, the **User Query node** is used to acquire specific attributes from specific users, in order to perform specific response to them

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/s7uimage.png)

Once the User enters the object named **Building**, their InBuilding attribute's value becomes **Yes,** then when user triggers object named **Activate**, the users with attribute name **InBuilding** and its value is **Yes** gets teleported to CameraNode named **Outside**'s location.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/VOKimage.png)

---

### ![Source_Variable.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/source-variable.png) Variable

![CDvimage.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/oBkimage.png)

The **Variable** **node** represents the value of a specific variable within the scene and features a variable port that can be connected to nodes requiring variable assignment. This node simplifies complex setups by enabling consistent use of variables throughout the scene, ensuring streamlined connections between different elements in the training builder.

![TrainingBuilder_Variable.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/trainingbuilder-variable.png)

[![TrainingBuilder_Variable_01.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/trainingbuilder-variable-01.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-09/trainingbuilder-variable-01.png)

> [Tutorial about **Variable Sorting** on YouTube](https://www.youtube.com/watch?v=amnTY83rDjo "Tutorial about Variable Sorting on YouTube")

---

# Events



# AI Agent

### ![Event_AiAgent_StartTalk.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-aiagent-starttalk.png) AI Agent Start Talk

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/eqJimage.png)The **AI Agent Start Talk** node activates the exact moment an assigned AI Agent begins delivering its response.

### ![Event_AiAgent_EndTalk.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-aiagent-endtalk.png) AI Agent End Talk

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/6yzimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/6yzimage.png)

The **AI Agent End Talk** node activates as soon as the assigned AI Agent finishes delivering its response.

For more information, please watch the AI Start/End talk tutorial:

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/YEMeCS8QcFY" width="560"></iframe>

# SceneNode \ Dynamic Menu

### ![Event_DynamicMenu_Item_Triggered.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-dynamicmenu-item-triggered.png) Dynamic Menu Item Triggered

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/NdHimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/NdHimage.png)

The **Dynamic Menu Item Triggered** event node acts as a universal listener, activating the moment a user interacts with *any* dynamic menu button within the VR scene. Upon execution, it outputs the specific **SceneNode** the menu is attached to, the **ID** of the clicked button, and the **User** who triggered it.

### ![Event_DynamicMenu_Item_Triggered.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-dynamicmenu-item-triggered.png) Dynamic Menu Item Triggered(ID)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/pnVimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/pnVimage.png)

The **Dynamic Menu Item Triggered (ID)** event node activates only when a button with a specific **ID** is pressed. It ignores all other button interactions, allowing you to trigger a specific function

### ![Event_DynamicMenu_Item_Triggered.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-dynamicmenu-item-triggered.png) Dynamic Menu Item Triggered(Node + ID)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/rOEimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/rOEimage.png)

The **Dynamic Menu Item Triggered (Node + ID)** event node provides the most specific control by activating only when a button with a precise **ID** is pressed on a menu linked to a specific **SceneNode**. This prevents execution overlap by ensuring the logic only triggers for one unique button on one specific object.

**Example:**

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Osbimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Osbimage.png)

In this example, the **Dynamic Menu Item Triggered (Node + ID)** node is configured to act as a "Help" button. By setting the **SceneNode** to "Main Menu" and the **ID** to "3", the system listens exclusively for that exact button press on that specific menu object. Once the user clicks this button, the execution flow passes to a **Show/Hide** node configured to display an "Instructions Window" by setting its state to True. Immediately following this, the flow triggers a **Set Node Glow State** node, which applies a visual highlight to a designated "Hint Object" to guide the user.

### ![Event_DynamicMenu_Item_Triggered.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-dynamicmenu-item-triggered.png) Dynamic Menu Item Triggered(Node)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/KW5image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/KW5image.png)

The **Dynamic Menu Item Triggered (Node)** event node activates only when a button is pressed on a menu attached to a designated **SceneNode**. This node isolates interactions to a single object, ensuring that the logic only runs for the menus linked to that specific item in the scene.

Dynamic Menu Triggered nodes are used in the following add-ons:

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/8NtfNkBr_Z0" width="560"></iframe>

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/7Ct8UpF9ce4" width="560"></iframe>

# SceneNode \ Query

### ![Event_Query_NodeAdded.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-query-nodeadded.png) Node Added to Query

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Ye8image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Ye8image.png)

The Node Added to Query event node constantly monitors the scene and triggers its Execute output whenever a 3D object's attributes are modified to match the specific conditions defined by a connected Scene Node Query. By plugging a query into the node's SceneNode input, it listens for any object that newly meets these criteria—essentially being "added" to the query's list of valid results—and subsequently passes both the execution signal and the specific SceneNode that triggered the event through their respective outputs, allowing for dynamic, attribute-driven logic without needing to manually target individual objects.

##### Example:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Wbgimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Wbgimage.png)

In this example, a Scene Node Query is configured to continuously look for any object that has an attribute named "Parts" with a value containing "Part\_". This query is connected directly to Node Added to Query event node. During the experience, whenever an object has its attributes updated to successfully meet this exact condition, the event node automatically triggers and passes that specific object through its SceneNode output into a Set Node Glow State node.

---

### ![Event_Query_NodeRemoved.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-query-noderemoved.png) Node Removed From Query

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/3MHimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/3MHimage.png)

The Node Removed From Query event node continuously monitors the scene and triggers its Execute output whenever a 3D object's attributes change so that they no longer match the conditions of a connected Scene Node Query. By connecting a query to the node's SceneNode input, it watches for any object that falls out of the query's criteria—essentially being "removed" from the list of valid results.

##### Example:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/8Iximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/8Iximage.png)

In this example, a Scene Node Query is configured to track any object that has an attribute named "Bullet\_Instance". This query is connected directly to the SceneNode input of the Node Removed From Query event node. During the experience, if an object's attributes are altered so it no longer possesses the "Bullet\_Instance" attribute (for example, if the attribute is removed after a collision), the event node automatically triggers and passes that specific object through its SceneNode output into a Delete SceneNode node.

# Scene Node \ Overlap

### [![Event_Node_EntersNode.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-node-entersnode.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/event-node-entersnode.png) Node Enter Node

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/LFQimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/LFQimage.png)

The **Node Enter Node** event is triggered when Scene Node A enters Scene Node B. Both nodes can be any nodes in the assembly tree — for example, Node A could be a screwdriver and Node B could be a screw.

---

### [![Event_Node_ExitsNode.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-node-exitsnode.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/event-node-exitsnode.png) Node Exited Node 

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/hJ3image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/hJ3image.png)

The **Node Excited Node** event is triggered when Scene Node A exits Scene Node B. Both nodes can be any nodes in the assembly tree — for example, Node A could be a screwdriver and Node B could be a screw.

# SceneNode \ Triggered

### [![Event_Node_Triggered.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/event-node-triggered.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/event-node-triggered.png) Node Triggered 

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-12/scaled-1680-/Wjpimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-12/Wjpimage.png)**Node Triggered** event is executed when the selected Scene Node is triggered within VR environment.

### ![Events_SceneNode_Triggered_NodeTriggeredLocation.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/events-scenenode-triggered-nodetriggeredlocation.png) Node Triggered Location

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/Wk8image.png)The **Node Triggered Location** is used to capture the specific location or position of a triggered event within the VR environment. It enables tracking where a particular interaction occurred, which can be useful for dynamic object placement, analytics, or event-triggered responses based on spatial coordinates.

####   


#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/oSEimage.png)

In this example, the **Node Triggered Location** is used to capture the location where the user triggers the target. When the target is hit, the node records the exact spot, and a bullet hole is placed using the **Set Node Location**. The **Make Node Copy** is used to enable the user to shoot more than one bullet, creating a new bullet hole at each triggered location. This setup allows for repeated interactions, with each shot creating a new bullet hole in the correct spot.

---

<div class="mt-1 flex gap-3 empty:hidden -ml-2" id="bkmrk--6"><div class="items-center justify-start rounded-xl p-1 flex"><div class="flex items-center"><button aria-label="Read Aloud" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="voice-play-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Copy" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="copy-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Regenerate" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="regenerate-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex"><button aria-label="Good response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="good-response-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Bad response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="bad-response-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button>  
</div><div class="flex items-center pb-0"><div class="[&_svg]:h-full [&_svg]:w-full icon-md h-4 w-4"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg>  
</div></div><button aria-expanded="false" aria-haspopup="menu" class="cursor-pointer h-[30px] rounded-md px-1 text-token-text-secondary hover:bg-token-main-surface-secondary" data-state="closed" id="bkmrk--8" type="button"></button></div></div></div><div class="pointer-container" id="bkmrk-%C2%A0-3"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>

# Controller

---

### [![Event_User_Grip_Pressed.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/event-user-grip-pressed.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Grip Pressed

  
![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/EBFimage.png)

The **Grip Pressed node** enables the user to detect when the VR controller's grip is pressed. By connecting a response to this node, the specified action is executed each time the grip is pressed, allowing for interactive controls within the VR Experience.

####   


#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/euiimage.png)

In this example, a **Grip Pressed node** is used to execute a response. Once the Grip press is triggered, the Grip Pressed node checks the boolean value. If the condition is met, the connected response executes, and the animation plays during the VR Experience.

---

### [![Event_User_Grip_Released.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/event-user-grip-released.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Grip Released

  
![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/4kIimage.png)

The **Grip Released node** enables the user to detect when the VR controller's grip is released. By connecting a response to this node, the specified action is executed each time the grip is released, allowing for interactive controls within the VR Experience.

####   


#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/kHOimage.png)

In this example, a **Grip Released node** is used to execute a response. Once the Grip released is triggered, the Grip Released node checks the boolean value. If the condition is met, the connected response executes, and the animation plays during the VR Experience.

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/y1Vimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/y1Vimage.png)Hand

<div id="bkmrk-hand-gestures-in-vr-">Hand gestures in VR are becoming more natural and intuitive than ever. No need for the user to fully close hand to grab objects — now, a drawer can be opened effortlessly using just two fingers, just like in real life.</div><div id="bkmrk--9">  
</div><div id="bkmrk-with-enhanced-gestur">With enhanced gesture control, users can interact with virtual world in a way that feels smooth, and precise, check this [tutorial](https://youtu.be/YkPAQTO5GKE).</div><div id="bkmrk--10"></div><div id="bkmrk--11"><iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/YkPAQTO5GKE" width="560"></iframe>

</div>

# Keyboard

<div id="bkmrk-adding-an-interactiv">Adding an interactive 3D menu in VR is simple, but using the same menu on a desktop can be challenging, as you have to adjust your view every time you want to make a change.</div><div id="bkmrk-">  
</div><div id="bkmrk-to-solve-this%2C-we%E2%80%99ve">To solve this, "**Key Press**" and "**Key Release**" events were introduced. By separating these events, designers now have more control when creating VR experiences.</div>### Key Pressed

Right click in the Dynamic Training Builder and type in the

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/XMVimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/XMVimage.png)

"Keyboard" or look under "**Events**" to get this node. As the name implies when a keyboard key is pressed this event is triggered.

#### Example

<div id="bkmrk--1"></div>### Key Released

Same as above node but when key is released.

Check this [tutorial ](https://youtu.be/ACQPYu1sdf0)to learn more about these events.  
![dLmimage.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/dlmimage.png)

<iframe allowfullscreen="allowfullscreen" height="295" src="https://www.youtube.com/embed/ACQPYu1sdf0" style="width: 526px; height: 295px;" width="526"></iframe>

# User

### ![Event_User_EntersNode.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-user-entersnode.png) User Enter Node

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/F48image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/F48image.png)

The **User Enter Node event node** continuously monitors the physical boundaries of a specific 3D object and activates the moment a user's avatar collides with or enters its volume. While enabled, it passes forward a reference to the specific User involved before continuing the logic flow. This functionality applies to all participants within multiplayer VR collaboration scenes.

---

### ![Event_User_ExitsNode.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-user-exitsnode.png) User Exit Node

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/6ogimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/6ogimage.png)

The **User Exited Node event node** tracks the physical boundaries of a specific 3D object and activates the exact moment a user's avatar stops colliding with or fully exits its volume. While enabled, the node watches the targeted SceneNode and triggers its output as soon as the user completely separates from the object, passing forward a reference to the specific User who left before continuing the execution logic. And like **User Enter Node**, it also applies to all participants within multiplayer VR collaboration scenes.

# Variable

### ![Events_Variable_Change.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/events-variable-change.png) Variable Changed

  
![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/yCFimage.png)The **Variable Changed** event activates when the value of a specified variable is modified. This event helps users detect real-time changes and trigger actions accordingly, enabling dynamic and responsive interactions within the VR Experience.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/VBwimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/VBwimage.png)

<div class="pointer-container" id="bkmrk-%C2%A0-0"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, the **Variable Changed** event is set to monitor changes in the variable **Door**. When the value of this variable is modified, the event triggers the **Play Animation Sequence** node, which activates the **Door Anim** animation sequence.

<div class="mb-2 flex gap-3 empty:hidden -ml-2" id="bkmrk--0"><div class="items-center justify-start rounded-xl p-1 flex"><div class="flex items-center"><button aria-label="Read aloud" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="voice-play-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Copy" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="copy-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex"><button aria-label="Good response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="good-response-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Bad response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="bad-response-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button>  
</div><button aria-label="Edit in canvas" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex items-center pb-0"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg>  
</div><button aria-expanded="false" aria-haspopup="menu" class="cursor-pointer h-[30px] rounded-md px-1 text-token-text-secondary hover:bg-token-main-surface-secondary" data-state="closed" id="bkmrk--2" type="button"></button></div></div></div>

# On Message Received

SimLab Composer 14 introduces WebSocket support, enabling seamless integration with external systems, allowing it to work with external hardware, co-simulation engines, and websites, unlocking numerous possibilities.

Use the node **On Message Received** to trigger an event when a message is received.  
  
The **On Message Received** node triggers an event when an unhandled message is received from the external connection. This node allows you to access the incoming message and take appropriate action based on its content. It is useful for responding to external data or commands and processing messages within the VR Experience.

This node is related to Open External Connection node

[![Screenshot 2025-02-02 161759.jpg](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/screenshot-2025-02-02-161759.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/screenshot-2025-02-02-161759.jpg)

**Input Ports:**

- Enable

**Output Ports:**

- Execute
- Message

  
The WebSocket nodes (Open External Connection, Send Message, and Receive Message) are exclusively available in the Ultimate Edition.

# Voice Command

### [![Response_Gadget_EquipToUser.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-gadget-equiptouser.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Voice Command Recognized 

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/ba6image.png)

The **Voice Command Recognized event** is used to activate a response when the user says a specific command. This event listens for predefined voice commands and triggers the associated actions or responses within the VR environment upon recognizing the command.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/Dkrimage.png)

In this example, a new voice command named "Door Open" is created by accessing the Voice Command section from the Interaction menu and adding the command in the Voice Commands window.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/QIFimage.png)

The **Voice Command Recognized** **event** is used to link the newly created "Door Open" command. When the user says "Open the door", the door open sequence is triggered and plays.

---

# Execution

### [![Event_CustomEvent_Triggered.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-customevent-triggered.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/event-customevent-triggered.png) Custom Event 

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/0hbimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/0hbimage.png)

This event is activated manually by the user. It's useful when you want multiple different paths or actions to lead to the same response.

To set it up, use the [**Trigger Custom Event** response](https://simlab-soft.com/help/link/365#bkmrk-trigger-custom-actio) and assign it a unique ID (e.g., `path1`). You can place this trigger in as many locations as needed.

Whenever a **Trigger Custom Event** is called, it will execute the **Custom Event** that has a matching ID.

If you want to pass additional info, you can use the info field in **Trigger Custom Event** response, this data will be passed to the even in the info port

---

### [![Event_Scene_Start.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-scene-start.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/event-scene-start.png) Scene Start

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/2T1image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/2T1image.png)

This event is triggered automatically when the scene begins. Use it to initialize elements at startup, such as playing videos, running background animations, or any other setup tasks.

> **Note:** Since this event fires the moment the scene loads, it's recommended to add a small delay before making additional scene changes — this ensures all scene elements have fully initialized before anything else runs.

---

### ![Event_Ticker.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-ticker.png) Ticker

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/pYZimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/pYZimage.png)

The **Ticker** event node functions as a continuous, time-based loop that repeatedly activates subsequent nodes at a consistent rate. As long as its Enable input is set to *True*, the node constantly triggers its Execute output every time the duration specified in the numerical Interval input (measured in seconds) elapses. Once activated, it continually outputs this time value through the Period pin, allowing the logic flow to perform recurring actions or background checks for as long as the node remains enabled.

**Example:**

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/OfNimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/OfNimage.png)

In this example, we use the Ticker node to create a loop that randomly changes a material's color every 2.5 seconds:

1. A **Watch Boolean Expression** node continuously monitors the "speed1" variable and activates the **Ticker** node once the value equals 1.
2. While enabled, the **Ticker** node creates a continuous loop that triggers its execution output every 2.5 seconds.
3. The Ticker simultaneously executes three **Set Number Variable By Expression** nodes to generate random values using the `math.random()` function for the variables r1, g1, and b1.
4. These three random numbers are passed into an **RGB To Color** node, where they are combined to formulate a new color.
5. Finally, this new color is sent to a **Set Material Color** node, which immediately applies the randomly generated color to the target material.

# Snapping

### ![Event_Node_Snapping_CanSnap.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-node-snapping-cansnap.png) Node Ready To Snap

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/3Lvimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/3Lvimage.png)

The **Node Ready to Snap** event node activates the exact moment a designated SceneNode enters the valid snapping range of an eligible target. This node is highly useful for triggering immediate visual or audio feedback—such as highlighting a destination socket green or playing a hovering sound—letting the user know the object is ready to be released and snapped.

### ![Event_Node_Snapping_Snapped.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-node-snapping-snapped.png) Node Snapped

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/djHimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/djHimage.png)

The **Node Snapped** event node activates immediately after a SceneNode has successfully completed its snapping action onto a target socket. This event is typically used to seamlessly progress a sequence, such as locking the snapped part in place, playing a mechanical click sound, or advancing the user to the next step of an assembly training scenario.

# sceneNode \ Attributes

### ![Event_Node_Attribute_Added.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-node-attribute-added.png) Node Attribute Added

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/SPvimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/SPvimage.png)

The **Node Attribute Added** event node continuously monitors the targeted SceneNode and activates whenever a completely new attribute is attached to it. This event is typically used in conjunction with **Set Node Attribute nodes** to trigger subsequent actions. Once activated, it outputs the affected SceneNode along with the specific Category and Name of the newly created attribute.

---

### ![Event_Node_Attribute_Changed.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-node-attribute-changed.png) Node Attribute Changed

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Ciwimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Ciwimage.png)

The **Node Attribute Changed** event node observes the targeted SceneNode and activates whenever the value of any of its existing attributes is modified. Once activated, the node outputs the affected SceneNode alongside the exact Category and Name of the altered attribute.

---

### ![Event_Node_Attribute_Removed.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/event-node-attribute-removed.png) Node Attribute Removed

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/0Lcimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/0Lcimage.png)

The **Node Attribute Removed** event node tracks the targeted SceneNode and activates the moment an existing attribute is deleted from the object. This event is typically used alongside the **Remove Node Attribute** node to initiate reactions to data clearance. Once activated, it outputs the affected SceneNode forward along with the specific Category and Name of the deleted attribute.

# Responses



# Scene

<div id="bkmrk-"></div>### [![Response_Node_Capture_Picture.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-node-capture-picture.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Capture Picture

[![aM3image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/N18am3image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-09/N18am3image.png)

The **Capture Picture node** is used to capture an image from a camera within the scene, and the captured image can then be displayed on a 3D object within the scene. This allows the user to take snapshots and show them in the VR environment, such as displaying a captured image on a screen or other surface.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/5wEimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-09/Xn9image.png)

A **Surveillance Monitor** is first created to display the captured images. This monitor is then attached to the VR camera.

[![Add_Example2.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/cT8image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

<div class="pointer-container" id="bkmrk-%C2%A0-0"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, the **Capture Picture Node** is used to capture an image on a picture frame model when the user triggers the Activate event. Before that, the Cast SceneNode is used to identify the picture frame as a 3D object, as the Capture Picture Node only works with 3D objects.

# Scene



# New Page



# AI Agent

### [![Response_AiAgent_Reset.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/5Y3response-aiagent-reset.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-03/5Y3response-aiagent-reset.png)AI Agent Reset Chat History

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/FTTimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/FTTimage.png)The **AI Agent Reset Chat History** node enables the system to clear and reset the ongoing conversation history for a specific AI Agent. It is typically used when you want the AI to start a completely fresh interaction or switch to a new scenario without being influenced by the context of any prior messages.

### ![Response_AiAgent_SendMessage.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-aiagent-sendmessage.png) AI Agent Send Message

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/jCDimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/jCDimage.png)

The **AI Agent Send Message** node enables the system to send a specific text message to an assigned AI Agent for processing. The **Output Voice?** boolean parameter that dictates how the AI agent will deliver its response:

- **False:** The AI agent will respond with text.
- **True:** The AI agent will process the text message and respond with generated voice audio.


### [![Response_AiAgent_StartListen.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-aiagent-startlisten.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) AI Agent Start Listen

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/E5cimage.png)

The **AI Agent Start Listen node** is used to make the AI start listening to the user. When activated, this node enables the AI to process and listen to spoken input from the user, allowing for interactive conversations and commands within the VR environment.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/UjYimage.png)

In this example, an AI Doctor is set up in the AI Agents window. This window can be accessed by clicking the Interaction icon in the viewport menu, then select the AI Agents, and then add the AI name with the desired instructions in the Instructions field. A variable is created to store the AI's responses.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/2wtimage.png)

The **AI Agent Start Listen node** is used to make the AI Agent named Doctor start listening to the user when the object named "Start" is triggered. This setup enables the AI to process and listen to user input as soon as the trigger event is activated.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/TdABZrHXY2g" width="560"></iframe>

---

<div class="pointer-container" id="bkmrk-%C2%A0-8"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>### [![Response_AiAgent_StopListen.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-aiagent-stoplisten.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) AI Agent Stop Listen

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/Iwwimage.png)

The **AI Agent Stop Listen node** is used to make the AI stop listening to the user. When activated, this node halts the AI’s ability to process further user input, allowing the AI to respond based on the information gathered up to that point.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/UjYimage.png)

In this example, an AI Doctor is set up in AI Agents window. This window can be accessed by clicking the Interaction icon in the viewport menu, then select the AI Agents, and then add the AI name with the desired instructions in the Instructions field. A variable is created to store the AI's responses.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/3UZimage.png)

The **AI Agent Stop Listen node** is used to stop the AI Agent from listening to the user when the "Stop" trigger event occurs. This allows the AI agent named Doctor to respond based on the input received before listening was stopped.

### [![Response_AiAgent_StopListen.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-aiagent-stoplisten.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) AI Agent Stop Listen (Text)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Gldimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Gldimage.png)

The **AI Agent Stop Listen (Text) node** is used to make the AI stop listening to the user. When activated, this node halts the AI’s ability to process further user input, allowing the AI to respond based on the information gathered up to that point.

This node has an extra output "Spoken Text", when the node is activated, it outputs the input audio in text format.

---

<div class="pointer-container" id="bkmrk-%C2%A0-12"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>### [![Response_Ai_Valid_Key.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/response-ai-valid-key.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Has Valid AI Key

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/2Xximage.png)

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk--33"><div><div class="pt-0"><div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">  
</div></div></div></div></div>The **Has Valid AI Key** node checks whether a valid AI key is available for AI-related features in Sim Lab Composer. This node ensures that AI functionalities can operate properly by verifying the presence of an active and valid AI key.

#### Example

[![AI has key.JPG](https://simlab-soft.com/help/uploads/images/gallery/2025-03/ai-has-key.JPG)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/lXbimage.png)

In this example, the **Has Valid AI Key** node is used at the start of the scene to check if the user has an activated AI key. The node is connected to a **Branch** node, where the **False** output (indicating no valid AI key) triggers a message in front of the user, informing them that the AI key must be activated.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/YEMeCS8QcFY" width="560"></iframe>

---

### ![Response_AiKey_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2025-07/response-aikey-set.png) Set AI Key

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-07/scaled-1680-/image.png)

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk--40"><div><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">  
</div></div></div>The **Set AI Key** node allows you to assign an AI API key to a VR experience directly from the Training Builder. This lets the experience use AI features without requiring the user to manually activate an API key in the viewer. You can select the provider (OpenAI, Gemini, or OpenRouter) and embed the corresponding API key into the experience.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-07/scaled-1680-/VH8image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-07/VH8image.png)

In this example, the **Set AI Key** node is connected to a **Scene Start** event to initialize the AI provider as soon as the experience begins. After adding the node and selecting the provider, the API key is pasted into the node’s field. The key is then activated when the scene starts, allowing the AI agent to respond without the user needing their own key. If the embedded key is not active or reaches its usage limit, the experience automatically switches to the user’s API key in the viewer if one is available.

Check this **[tutorial](http://youtube.com/watch?v=qzqNtXBTGY4)** for more about this node.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/qzqNtXBTGY4" width="560"></iframe>

---

### ![Response_AiModel_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2025-07/response-aimodel-set.png) **Set AI Agent Model**

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-07/scaled-1680-/R5Nimage.png)

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk--47"><div><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">  
</div></div></div>The **Set AI Agent Model** node is used to assign a specific AI provider and model to an AI agent in your VR experience. This ensures the AI agent will operate using the selected provider and model for any interactions that occur in the scene. You can choose the AI agent you have created, specify the provider (OpenAI, Gemini, or OpenRouter), and define the model name.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-07/scaled-1680-/XCzimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-07/XCzimage.png)

In this example, the **Set AI Agent Model** node is triggered by pressing a button in the VR scene. When the button is clicked, the node assigns the “Patient” AI agent to the OpenAI provider and sets the model to GPT‑4. This setup allows the AI agent to function with the defined provider and model as soon as the event is triggered.

Check this **[tutorial](http://youtube.com/watch?v=qzqNtXBTGY4)** for more about this node.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/qzqNtXBTGY4" width="560"></iframe>

---

###  Using AI Providers and API Keys in SimLab Composer

SimLab Composer now supports **OpenAI, Google Gemini, and OpenRouter** for integrating AI into your VR experiences. With the new **Set AI Key** and **Set AI Agent Model** nodes, you can connect your experience to these providers .

 **Providers and Models:**

**1️⃣ OpenAI**

- **Provider URL:** `https://api.openai.com/v1/chat/completions`
- **Models:**
    
    
    - gpt‑4.1
    - gpt‑4
    - gpt‑3.5‑turbo

**2️⃣ Google Gemini** (OpenAI‑compatible endpoint)

- **Provider URL:** `https://generativelanguage.googleapis.com/v1beta/openai/chat/completions`
- **Models:**
    
    
    - gemini‑2.0‑flash

**3️⃣ OpenRouter**

- **Provider URL:** `https://openrouter.ai/api/v1/chat/completions`
- **Models:**
    
    
    - openrouter/cypher‑alpha:free
    - nvidia/llama‑3.3‑nemotron‑super‑49b‑v1:free
        
        
        - **OpenAI keys** work with **Chat, Text‑to‑Speech, and Speech‑to‑Text**.
        - **Gemini and OpenRouter keys** work with **Text only.**

<div class="mb-2 flex gap-3 empty:hidden -ml-2" id="bkmrk--53"><div class="items-center justify-start rounded-xl p-1 flex"><div class="flex items-center"><div class="flex"><button aria-label="Good response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="good-response-turn-action-button"></button><button aria-label="Bad response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="bad-response-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button>  
</div><button aria-label="Edit in canvas" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex items-center pb-0"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg>  
</div><button aria-expanded="false" aria-haspopup="menu" class="cursor-pointer h-[30px] rounded-md px-1 text-token-text-secondary hover:bg-token-main-surface-secondary" data-state="closed" id="bkmrk--58" type="button"></button></div></div></div>

# New Page



# User \ Controller

# User \\ Transform

<div id="bkmrk-">  
</div>### [![Response_User_TeleportToCamera.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-user-teleporttocamera.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Teleport To Camera

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/utpimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Teleport To Camera** node enables the user to teleport to a new location by assigning a camera in the **CameraNode** field. Once the teleportation is executed, the user is moved to the position and orientation defined by the specified camera.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/A1Fimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/A1Fimage.png)

In this example, a **Teleport To Camera** response is used to move the user to a new location once the object named Activate is triggered. When triggered, the sound named Teleport\_Sound will play, and the user will be teleported to the location of the camera assigned in the Teleport To Camera node.

# Data Types\Number\Operations

---

#### [![Response_Value_Number_Add.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/response-value-number-add.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Add

[![Add_Node.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/add-node.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Add** response enables user to add two values by either typing in a numerical value in Number A and Number B field or by attaching a value or a variable node to those ports, then once the response is executed the resulting value can be acquired through the **Result** port.

#### Example

[![Add_Example2.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example2.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this Example an **Add Response** is used to add the values of 5 to the value of Variable1 once the user triggers the object named Activate, and the result of the addition is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Value_Number_ceiling.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-ceiling.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Ceiling

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/ceiling-node.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Ceiling** response enables the user to round up a value by either typing in a numerical value in the Number A field or by attaching a value or a variable node to that port. Then once the response is executed, the smallest integral value greater than or equal to the input value can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/vFhimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/vFhimage.png)

In this example, a **Ceiling Response** is used to round up the value of Variable1 to the smallest integral value greater than or equal to it once the user triggers the object named Activate. The result of the ceiling operation is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Value_Number_divide.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-divide.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Divide

[![Divide_node.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/divide-node.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Divide** response enables user to divide a value by another value, by either typing in a numerical value in Number A and Number B field or by attaching a value or a variable node to those ports, then once the response is executed the resulting value can be acquired through the **Result** port.

#### Example

[![Divide_Example.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/divide-example.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this Example a **Divide Response** is used to divide the number 25 by the value of the variable named "Variable1" and the result of the division is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Value_Number_Floor.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-floor.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Floor

  
[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/SF2image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Floor** response enables the user to round down a value by either typing in a numerical value in the Number A field or by attaching a value or a variable node to that port. Then once the response is executed, the largest integral value less than or equal to the input value can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/VmLimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/VmLimage.png)

In this example, a **Floor Response** is used to round down the value of Variable1 to the largest integral value less than or equal to it once the user triggers the object named Activate. The result of the floor operation is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

[![Response_Value_Number_modulo.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-modulo.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)<span data-darkreader-inline-color="" style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> Modulo</span>

  
[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/E5Pimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Modulo** response enables the user to find the remainder of a division by either typing in numerical values in the Number A and Number B fields or by attaching values or variable nodes to those ports. Then once the response is executed, the modulus of the input value with respect to the divisor can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/sptimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/sptimage.png)

In this example, a **Modulo Response** is used to calculate the remainder when the value of the variable named Variable1 is divided by the value of Variable2, once the user triggers the object named Activate. The result of the modulo operation is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Value_Number_Multiply.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-multiply.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Multiply

[![Multiply_Node.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/multiply-node.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Multiply** response enables user to multiply two values by either typing in a numerical value in Number A and Number B field or by attaching a value or a variable node to those ports, then once the response is executed the resulting value can be acquired through the **Result** port.

#### Example

[![Multiply_Node3.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/multiply-node3.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this Example a **Subtract Response** is used to subtract the value of Variable1 from the value of the Variable2, then a **Multiply Response** is used to multiply the subtraction result by 3 once the user triggers the object named Activate, and the result of the multiplication is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Value_Number_SquareRoot.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-squareroot.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Square Root

  
[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/OdMimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Square Root** response enables the user to calculate the square root of a value by either typing in a numerical value in the Number field or by attaching a value or a variable node to that port. Then once the response is executed, the square root of the input value can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/hUtimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/hUtimage.png)


In this example, a **Square Root** response is used to calculate the square root of the value of Variable1 once the user triggers the object named Activate. The result of the square root operation is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Value_Number_subtract.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-subtract.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Subtract

[![Subtract_Node.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/subtract-node.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Subtract** response enables user to subtract a value from another by either typing in a numerical value in Number A and Number B field or by attaching a value or a variable node to those ports, then once the response is executed the resulting value can be acquired through the **Result** port.

#### Example

[![Subtract_Example2.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/subtract-example2.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this Example a **Subtract Response** is used to subtract the value of Variable1 from the value of the variable named Variable2, once the user triggers the object named Activate, and the result of the subtraction is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

# Data Types\Number\ Variable

---

### [![SET.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/set.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Set

Has two options:

[![Add_Node.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/Wp1image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

- **By Value:**

The **Set number variable** response enables user to set a value by either typing in a numerical value in the value field or by attaching a value or a variable node to that port. Then once the response is executed, the variable value can be acquired through the **Value** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/Bdhimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/Bdhimage.png)

In this example, a **Set number variable** is used to assign the value of Variable1 once the user triggers the object named Activate, and the new value is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

[![Add_Node.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/6gRimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

- **By Expression**

The **Set number variable by expression** response enables user to set a value by either typing in an expression in the expression field or by attaching a value or a variable node to that port. Then once the response is executed, the variable value can be acquired through the **Value** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/sGSimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/Bdhimage.png)

In this example, a **Set Number Variable By Expression** is used to set the result of the sum of Variable1 and Variable2 once the user triggers the object named Activate. The new value is then written in the Result variable, which can be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Variable_NumberDecrement.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-variable-numberdecrement.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Decrement Number Variable

  
[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/UoLimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Decrement Number Variable** response enables the user to decrease a variable's value by 1 each time the event connected to it is triggered. Once the response is executed, the updated value can be acquired through the **Value** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/bbzimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/hUtimage.png)


In this example, a **Decrement Number Variable** response is used to decrease the value of Variable1 by 1 once the user triggers the object named Activate. The result of the decrease number variable operation is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

[![Response_Variable_NumberIncrement.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-variable-numberincrement.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)<span data-darkreader-inline-color="" style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> Increment Number Variable</span>

  
[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/0Eyimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Increment Number Variable** response enables the user to increase a variable's value by 1 each time the event connected to it is triggered. Once the response is executed, the updated value can be acquired through the **Value** port.

#### Example

[![Increment.JPG](https://simlab-soft.com/help/uploads/images/gallery/2025-03/increment.JPG)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/hUtimage.png)


In this example, a **Increment Number Variable** response is used to increase the value of Variable1 by 1 once the user triggers the object named Activate. The result of the decrease number variable operation is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

[![Response_Variable_NumberGet.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-variable-numberget.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)<span data-darkreader-inline-color="" style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> Get </span>

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/FbIimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Number Variable Value** response enables the user to get a variable's value each time the event connected to it is triggered. Once the response is executed, the updated value can be acquired through the **Value** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/o5himage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/o5himage.png)


In this example, a **Number Variable Value** response is used to get the new value for Variable1 after it was changed by **Set Number Variable By Expression** once the user triggers the object named GetValueButton. The value of the number variable is then written in a variable named Result, which can then be connected to a variable writer to be displayed during the VR Experience.

---

# Data Types\Number\ Compare

### [![Responses_DataTypes_Numbers_Compare_Equals.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/responses-datatypes-numbers-compare-equals.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Equal (Number)

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/Agnimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

<div class="pointer-container" id="bkmrk-%C2%A0"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>The **Equal (Number)** response enables the user to compare two values by either typing in a numerical value in the Number A and Number B fields or by attaching a value or a variable node to those ports. Then once the response is executed, the result of the comparison can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/S2himage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/S2himage.png)

<div class="pointer-container" id="bkmrk-%C2%A0-1"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, an **Equal Response** response is used to compare the value of Variable1 with the value of Variable2 once the user triggers the object named Activate. The result of the comparison can be acquired through the **Result** port. We have connected this Result port to the **Branch** node, and if the result of the branch is True, the TrueBox will show; if the result is False, the FalseBox will show.

---

### [![Responses_DataTypes_Numbers_Compare_Greater.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/responses-datatypes-numbers-compare-greater.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Greater

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/hBOimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

<div class="pointer-container" id="bkmrk-%C2%A0-4"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>The **Greater** response enables the user to compare two values to determine if one is greater than the other by either typing in a numerical value in the Number A and Number B fields or by attaching a value or a variable node to those ports. Then once the response is executed, the result of the comparison can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/gMmimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/gMmimage.png)

<div class="pointer-container" id="bkmrk-%C2%A0-7"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, a **Greater Response** is used to compare the value of Variable1 with the value of Variable2 once the user triggers the object named Activate. The result of the comparison can be acquired through the Result port. We have connected this Result port to the Branch node, and if the result of the branch is True, the TrueBox will show; if the result is False, the FalseBox will show.

---

### [![Responses_DataTypes_Numbers_Compare_GreaterOrEqual.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/responses-datatypes-numbers-compare-greaterorequal.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Greater Or Equal 

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/hI8image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Greater Or Equal** response enables the user to compare two values to determine if one is greater than or equal to the other by either typing in a numerical value in the Number A and Number B fields or by attaching a value or a variable node to those ports. Then once the response is executed, the result of the comparison can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/dmcimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/dmcimage.png)

In this example, a **Greater Or Equal Response** is used to compare the value of Variable1 with the value of Variable2 once the user triggers the object named Activate. The result of the comparison can be acquired through the Result port. We have connected this Result port to the Branch node, and if the result of the branch is True, the TrueBox will show; if the result is False, the FalseBox will show.

---

### [![Responses_DataTypes_Numbers_Compare_Less.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/responses-datatypes-numbers-compare-less.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Less 

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/ye5image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Less** response enables the user to compare two values to determine if one is less than the other by either typing in a numerical value in the Number A and Number B fields or by attaching a value or a variable node to those ports. Then once the response is executed, the result of the comparison can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/fxoimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/fxoimage.png)

In this example, a **Less** is used to compare the value of Variable1 with the value of Variable2 once the user triggers the object named Activate. The result of the comparison can be acquired through the Result port. We have connected this Result port to the Branch node, and if the result of the branch is True, the TrueBox will show; if the result is False, the FalseBox will show.

---

### [![Responses_DataTypes_Numbers_Compare_LessOrEqual.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/responses-datatypes-numbers-compare-lessorequal.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Less Or Equal

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/q9simage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Less Or Equal** response enables the user to compare two values to determine if one is less than or equal to the other by either typing in a numerical value in the Number A and Number B fields or by attaching a value or a variable node to those ports. Then once the response is executed, the result of the comparison can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/V5nimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/V5nimage.png)

In this example, a **Less** is used to compare the value of Variable1 with the value of Variable2 once the user triggers the object named Activate. The result of the comparison can be acquired through the Result port. We have connected this Result port to the Branch node, and if the result of the branch is True, the TrueBox will show; if the result is False, the FalseBox will show.

---


### [![Responses_DataTypes_Numbers_Compare_NotEqual.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/responses-datatypes-numbers-compare-notequal.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Not Equal

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/3bBimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk-%C2%A0-15"><div class="flex-shrink-0 flex flex-col relative items-end"><div><div class="pt-0"><div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8"><div class="pointer-container" id="bkmrk-%C2%A0-19"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div></div></div></div></div></div></div>The **Not Equal** response enables the user to compare two values to determine if they are different by either typing in a numerical value in the Number A and Number B fields or by attaching a value or a variable node to those ports. Then once the response is executed, the result of the comparison can be acquired through the **Result** port.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/SiNimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/SiNimage.png)

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk-%C2%A0-16"><div class="flex-shrink-0 flex flex-col relative items-end"><div><div class="pt-0"><div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8"><div class="pointer-container" id="bkmrk-%C2%A0-20"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div></div></div></div></div></div></div>In this example, a **Not Equal** is used to compare the value of Variable1 with the value of Variable2 once the user triggers the object named Activate. The result of the comparison can be acquired through the Result port. We have connected this Result port to the Branch node, and if the result of the branch is True, the TrueBox will show; if the result is False, the FalseBox will show.

---

# Data Types\Number\ Conversion

### [![Response_Value_NumberToString.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-numbertostring.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Number To String  
  


[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/Wu3image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

  
The **Number to String** node enables the user to convert a numerical value to a string by either typing in a numerical value in the Number field or by attaching a value or a variable node to that port. Then once the conversion is executed, the resulting string can be acquired through the **String** port.


---

# Data Types\Number\ Expression

This node can evaluate an expression, then[![komeeqn57image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/hulkomeeqn57image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/hulkomeeqn57image.png)

the result of this evaluation can be used to activate other responses.

####   


#### Example

In the example below when the "**Import\_UPS**" geometry is clicked "**Evaluate Number Expression**" is executed. The expression is simple math.sqrt(16), and the result is linked to the "**Set Number Variable**" node, in "**result**" variable. This variable is then linked to a "Variable Writer" to display it.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/7ynimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/7ynimage.png)

# Data Types \ String \ Operations

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/qObimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/qObimage.png) Add String 

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/LKmimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/LKmimage.png)

This node can be used to add two strings to each other.

In the below example a **Score** string variable is input to this node, along with **My Score is** string filled in. The result is input to a Set String Variable node, into another string variable name **MyScore** which is linked to a Variable Writer in the scene to be displayed.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/EsXimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/EsXimage.png)

---

### [![Response_Value_Number_Add.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/response-value-number-add.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Find

[![Add_Node.jpg](https://simlab-soft.com/help/uploads/images/gallery/2025-04/scaled-1680-/5iZimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)The "**Find**" node is used to search for a specific word, group of letters, or substring within a larger sentence or string value. If the specified text is found, the node returns the number of characters from the beginning of the string to the start of the found text. If the specified text is not found, the node returns -1. This allows users to detect and locate specific content inside a string.

#### Example

[![Add_Example2.jpg](https://simlab-soft.com/help/uploads/images/gallery/2025-04/scaled-1680-/852image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this example, the **Find node** is used to search for the word "apple" in a string variable with the initial value "I like apple pie." When the user triggers the object, the Variable with Initial node retrieves the string, and the Find node looks for the word "apple." The resulting index is then stored in a number variable named "Value" using the Set Number Variable node, which can then be connected to a Variable Writer to display the result during the VR experience. If "apple" is found, the Value variable stores the position where "apple" starts in the sentence. If not found, the Value variable is set to -1.

---

### [![Response_Value_String_LowerCase.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/response-value-string-lowercase.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/response-value-string-lowercase.png)Lower Case

The "**Lower Case**" can be used to ![EI7image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/ei7image.png)covert an upper case string to lower case, as shown in the example below.

In this example the string "SIMLAB SOFT" is input inside this node, which is executed when **Activate** scene node is triggered. This will result in updating the valued of LowerCaseName string variable to be simlab soft.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/iz7image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/iz7image.png)

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/pIoimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/pIoimage.png)Replace

**Replace** node can be used to replace specific **Target[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/2yoimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/2yoimage.png)** text string from a **Source** text string with the **Replacement** string.

In the below example the node is executed upon clicking **Activate** node, and has three string inputs. Source which is main string "Hello Name". Target string which is "Name", and Replacement string which is Samia.

The Result greeting from this will be "Hello Samia".

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/QeXimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/QeXimage.png)

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/BDvimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/BDvimage.png)Length 

This node returns the length of a given string.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/F4simage.png)

In the example below the node is triggered by

clicking **Activate** geometry, and it's filled with a long paragraph string. The length result is stored in variable **Result** in the **Set Number Variable** node.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/1rQimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/1rQimage.png)


---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/SKCimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/SKCimage.png)[ ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/BDvimage.png)Upper Case

Contrary to the "**Lower Case**" node this node coverts a loser case string to upper case, as shown in the example below.[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/8F5image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/8F5image.png)

In this example the string "simlab soft" is input inside this node, which is executed when **Activate** scene node is triggered. This will result in updating the valued of UpperCaseName string variable to be SIMLAB SOFT.

####   


#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/t3Wimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/t3Wimage.png)

# Data Types \ String \ Compare

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/SM6image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/SM6image.png) Equal 

A compare node that takes two input strings and compares them if equal or not. [![jxPimage.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/jxpimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/jxpimage.png)

####   


####   


####   


#### Example

In the example below, two not equal strings has been input to this node, thus the output result would be false. The output is used as an input to Show/Hide node for a sphere, that won't be shown in this case.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/asNimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/asNimage.png)


---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/ycFimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/ycFimage.png)Not Equal

Contrary to the previous node this one compares

two input strings for not being equal.[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/uhbimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/uhbimage.png)

#### Example

In the example below, two equal strings has been input to this node, thus the output result would be false. The output is used as an input to Show/Hide node for a sphere. In this case the sphere will be shown.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Renimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/Renimage.png)

# Data Types \ String \ Variable

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/xa2image.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/xa2image.png)Set

With this string variable node a user can set a string variable by Value or Expression.

#### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/N7himage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/N7himage.png)By Value 

Using this node a string variable is set by value, as shown in the example below. The **Greeting** variable is set using string input node with "**Good day sir!**"

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/berimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/berimage.png)

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/993image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/993image.png)


#### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/U5mimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/U5mimage.png)By Expression 

Using this node a string variable is set by expression, as shown in the example below. The **Name** variable is set using an expression input node with string.lower() expression.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/vizimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/vizimage.png)

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/ihsimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/ihsimage.png)


---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/WWvimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/WWvimage.png)Get 

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Ro1image.png)This node is used to get a string variable value. As shown in the example below, the string variable **Greeting** is gotten as input to this node.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Ljeimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/Ljeimage.png)

# Data Types \ String \ Expression

---

### ![Response_Expression_String.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-expression-string.png) Evaluate String Expression

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/ncjimage.png)The **Evaluate String Expression** response enables the system to implement an expression in Lua language. Supported expressions can be found at this **[link](https://devdocs.io/lua~5.4/)**. Once the response is executed, the expression result can be acquired through the Result port.

####   


#### Example

In this example, an **Evaluate String Expression** response enables the system to execute a Lua expression. Once the response is executed, the result of the expression can be retrieved through the **Result** port and can be displayed using a variable writer during the VR Experience.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/rykimage.png)


---

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk--4"><div><div class="pt-0"><div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8"><svg class="icon-md" fill="none" height="41" role="img" viewbox="0 0 41 41" width="41" xmlns="http://www.w3.org/2000/svg"></svg>  
</div></div></div></div></div>

# Data Types \Color

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/uF3image.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/uF3image.png)Color To RGB 

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Zjrimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/Zjrimage.png)


This node converts colors to their RGB components. After that changes can be done to these components.

#### Example

In the below example "**Node Triggered**" node is linked to "**First\_drawer**" geometry that when clicked the "**Get Material Color**" node gets "**Drill\_material**". In "**Color To RGB**" node the color of this material is converted to its RGB components, and then a value of "**1**" is added to its Green component. The RGB components are converted back to color using "**RGB To Color**" node, and the material color is set in the "**Set Material Color**" node.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/nLvimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/nLvimage.png)

Below is the effect of changing material color components.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/QiVimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/QiVimage.png)[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/GpFimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/GpFimage.png)

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Jxoimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/Jxoimage.png)RGB To Color 

As in the above example, "**RGB To Color**" converts

RGB components back to color.[![MXfimage.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/mxfimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/mxfimage.png)

# Data Types\Boolean\ Expression

---

This node can be used to generate values (true or false) that can

trigger events throughout the interactive experience.[![WIEimage.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/wieimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/wieimage.png)

#### Example

In the example below when "**3DGeom-7**" is clicked, the expression in "**Evaluate Boolean Expression**" node is checked to execute the node after or not. In this case the expression is simple "**==**" which is true, so the "**3DGeom-7**" geometry will be set to Grabbable.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/GCtimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/GCtimage.png)

# Data Types\Time

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/93yimage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/93yimage.png)Time Interval 

This node calculates the time difference between[![RR5image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Gakrr5image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/Gakrr5image.png)

"**Start**", and "**End**" times. It stores the result in

an integer "**Interval**" out put.

###   


---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/ZqZimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/ZqZimage.png)Update Time

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/FvKimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/FvKimage.png)

This node can be used to store time variables.

#### Example

The example below demonstrates the use of both time nodes above. In it the value of "**inisial\_time**" variable is updated upon Scene Start. Then when "**Box**" geometry is clicked the value of "**current\_time**" variable is updated. Then the "**Time Interval**" node is executed, where "**result**" variable is calculated as difference between both times.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/xvWimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/xvWimage.png)

In the experience the "**result**" variable is connected to[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/NxPimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/NxPimage.png)

a Variable writer to display its value.

# Scene State

---

### Apply 

This node can be used to apply a scene state when an[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/YOwimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/YOwimage.png)

action is done in the 3D area.

#### Example

In the below example when "**Body\_9**" is clicked the "**BlueColor\_pump**" scene state is applied.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/CPiimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/CPiimage.png)

---

### Find By Name

In complicated scenes with large number of scene [![Lgmimage.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/lgmimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/lgmimage.png)

states, this node can come in handy. The user can use

this node to search for a scene state and then apply

it or do any action with it.

#### Example

In the example below this node is used to search for "GreenColor\_pump" and then applied the scene state.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/548image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/548image.png)

# Sequence

---

### Attach Sequence To

[Creating sequences](https://simlab-soft.com/help/books/simlab-composer-help/page/sequence-timeline) can be done from animating an object in the scene. This sequence can be attached to Hand or an Object in VR.

#### Hand

With sequences available in the Sequences Library, a sequence can be attached to the Hand in VR experience using this node in Dynamic Training Builder.

#### Example

Check this [tutorial ](https://www.youtube.com/watch?v=YkPAQTO5GKE)for the example below, where Boolean expressions were created and upon checking the Boolean Expression a sequence is attached to Hand.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/EtGimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/EtGimage.png)

#### Object

This node can be used to connect a controller grabbable object to a sequence in VR.

#### Example

In the example below the "Switch" sequence is attached to "Handle" object, when Controller "Gloves" geometry moves it. In this example a simple grabbable sequence can do the job, but this is just to demonstrate use of this node.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/HOwimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/HOwimage.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Y4ximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/Y4ximage.png)

#### Example 2

In this example we have a path for a box to walk along being controlled by a magnet.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/5Cnimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/5Cnimage.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/095image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/095image.png)

---

### Playback Controls

Used to control sequence behavior.

#### Continue

##### Same Direction

The selected sequence will continue[![J0Simage.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/GDxj0simage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/GDxj0simage.png)

to play in the same direction.

##### Set Direction

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/Niaimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/Niaimage.png)With this node the user can change the selected sequence direction, by selecting Reverse to True.

##### Example

In the below example a number of the above Playback Controls are used. Here on "**Scene Start**","**Play Sequence**" response is executed for "Elevator\_Up" sequence. Followed by a 1 second "**Delay**", then "**Stop Sequence**" for another one second "**Delay**". Then the sequence is continued, followed by another "**Delay**" then "**Resume Animation Sequence**" from start.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/iEZimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/iEZimage.png)

#### Play

##### Play Sequence/Play Sequence From Start

Both controls will play animation sequence, one from current position, and the other -as the name implies- will play it from start.

#### Reverse

##### Reverse

Reverse sequences starts the animation sequence in the reverse mode (from the last frame). The reverse control will start from the last frame not from the current (because it reverses the overall animation)

In the below example the "Elevator\_Up" sequence upon clicking "Elevator\_panel(2)" geometry will be played from start. So if the elevator at that time was at the top position, it would go down then -as the sequence implies- would go up, then wait for 5 seconds, then "Reverse Sequence" that is go down from last frame.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/TSAimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/TSAimage.png)

####   


####   


####   


####   


##### Reverse From End


This control will start the sequence from the end, even if it hasn’t been played yet.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/QSBimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/QSBimage.png)

#### Flip

Flip sequences flips current animation (that is, forward animation will be backward , backward animation will be forward). Think about it like we are opening a door and we pause the animation in the middle, flip control will return the door back from the current frame to original start position.

#### Stop

Stopes the animation sequence, as shown in examples presented in this section.


---

### Playback Properties

#### Current Frame

##### Get Sequence Current Frame

This node will get the value of the current sequence frame, the user can then use this value in any operation. In the example below the value of the current sequence frame is stored in "Current\_Frame" variable, which is set to the "VR Variable Writer" in the scene to display its value.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/0ESimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/0ESimage.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/eqmimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/eqmimage.png)

#####   


##### Set Sequence Current Frame

If the user wants to go to a specific frame in the sequence this is the function to use. In the below example upon clicking node the sequence current frame is set to 10.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/8l6image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/8l6image.png)

To show the result we got the valued of the current frame and assign it to "Current\_Frame" variable that is displayed in the variable writer as shown below.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/PSnimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/PSnimage.png)

#### Full Range

This node can be used to calculate the full range of a sequence.

##### Get End

Gets and outputs the end frame of the selected [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/tddimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/tddimage.png)

sequence, when triggered.

#####   


##### Get Start


Gets and outputs the start frame of the selected [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/b3timage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/b3timage.png)

sequence, when triggered.

#### Looping

Sequences can be set to loop after finishing.

##### Get Sequence Looping

This node will get the looping status of the input[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/2m2image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/2m2image.png)

sequence, whether true or false.

#####   


##### Set Sequence Looping

This node will set the looping status for the input [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/ElPimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/ElPimage.png)

sequence to either true or false.

#### Play Range

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/LKqimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/LKqimage.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/hK7image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/hK7image.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/dyeimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/dyeimage.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-10/scaled-1680-/TQximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-10/TQximage.png)

#### Play Rate (Speed)

#### Swing

#### Is Playing

#### Is Reversing

---

### Find By Name

# User

### ![Response_User_MouseCursor_Show.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-user-mousecursor-show.png) Show Mouse Cursor

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/GhKimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/GhKimage.png)

The **Show Mouse Cursor node** explicitly controls the visibility and functionality of the user's mouse pointer within the VR Viewer. When activated, the node checks the boolean Enable input for the specified User. Setting it to True displays the cursor on-screen, allowing the user to freely move it and click to interact with objects utilizing **Node Triggered** events. It is important to note that while this cursor mode is active, standard navigation is suspended—the user cannot walk or rotate their camera view until the node is activated again with the Enable input set to False, which hides the cursor and restores normal movement.  
  
The **Show Mouse Cursor** mode is used for desktop/PC version of VR Viewer

# User \ Controller

---

### [![Response_Node_AttachToHand.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-node-attachtohand.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Attach To Hand

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/Fq2image.png)

The **Attach to Hand** node enables the user to attach objects to specific parts of the hand in a VR environment by selecting the desired hand part. This node allows for precise placement of objects, such as tools or items, enhancing interactivity within the VR Experience. Once the attachment is configured, the object will remain in the chosen part of the hand during interactions.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/Hp1image.png)

In this example, an **Attach to Hand node** is used to attach a syringe to the index finger once the "Hand Enter Node" event is triggered. The syringe is attached to the specified part of the hand automatically when the event occurs, enabling interaction with the object in the VR environment.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/b1KMBtWP8EQ" width="560"></iframe>

---

### [![Response_Node_DetachFromHand.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-detachfromhand.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/response-node-detachfromhand.png) Detach From Hand 

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/scLimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scLimage.png)

The **Detach From Hand** , detaches an object currently attached by the [Attach To Hand ](https://simlab-soft.com/help/link/369#bkmrk-number-variable-valu)response, so the object no more moves with the hand

---

### [![Response_User_SetShowBeam.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-user-setshowbeam.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Trigger Beam<span style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> </span>  


![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/rWQimage.png)

The **Trigger Beam node** enables the user to control the visibility of a beam coming out of the controller in the VR Experience, once the node is executed.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/woWimage.png)

In this example, a **Trigger Beam node** is used to hide the beam coming out of the controller once the object named Activate is triggered. When the event is triggered, the change is reflected during the VR Experience.

---

# User \ Transform

### ![Response_User_Rotation_Get.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-user-rotation-get.png) Get User Rotation

  
![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/95simage.png)

The **Get User Rotation** response enables the user to get the values of the User's head rotation, and allows them to store the values of the **Pitch**, **Yaw** and **Roll** and the results can be acquired through their output ports.

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk-"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8"><svg class="icon-md" fill="none" height="41" role="img" viewbox="0 0 41 41" width="41" xmlns="http://www.w3.org/2000/svg"></svg>  
</div></div>####   


####   


#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/Hmgimage.png)


In this example, a **Get User Rotation** response is used to check the head rotation angles (Pitch, Yaw and Roll). Once the object named Activate is triggered, the head rotation values (Pitch, Yaw, Roll) of the user with attribute InBuilding and Value Yes are calculated and stored in the variables named Pitch, Yaw, Roll, in order to use them in the VR Experience.

---

### [![Response_User_TeleportToCamera.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-user-teleporttocamera.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Teleport To Camera

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/utpimage.png)

The **Teleport To Camera** node enables the user to teleport to a new location by assigning a camera in the **CameraNode** field. Once the teleportation is executed, the user is moved to the position and orientation defined by the specified camera, the user can also decide whether this teleportation affect the host only or all the user in the experience (in case of collaboration).

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/A1Fimage.png)

In this example, a **Teleport To Camera** response is used to move the user to a new location once the object named Activate is triggered. When triggered, the sound named Teleport\_Sound will play, and the user will be teleported to the location of the camera assigned in the Teleport To Camera node.

> [![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png) ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)[Tutorial is available on SimLab VR Discord server](https://discord.com/channels/1062715275805470821/1272491882890399814/1272491882890399814 "Tutorial is available on SimLab VR Discord server")

---

### [![Response_User_TeleportToCamera.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/response-attachuser.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Attach User

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/Y9cimage.png)

The **Attach User** node allows users to attach the user to specific objects within the VR Experience. This node ensures that the user moves along with the object, providing an immersive experience where the user is fixed to the selected object throughout the VR environment, this can be decided to affect only the host or all user (in case of collaboration).

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/0dDimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-01/0dDimage.png)

In this example, the **Attach User** node is used to attach the user to a roller coaster at the start of the scene. When the scene starts, the user will be fixed to the roller coaster, moving along with it as it travels through the environment, providing an immersive experience.

> [![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png) ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)[Tutorial is available on SimLab VR Discord server](https://discord.com/channels/1062715275805470821/1298557994208071701/1328733596726333451 "Tutorial is available on SimLab VR Discord server")

---

### [![Response_User_TeleportToCamera.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/Fphresponse-user-detach.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Detach User

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/1jBimage.png)

The **Detach User** node allows users to detach from an object within the VR Experience. This node provides a straightforward way to release the user from an object they were attached to, ensuring they regain control of their own movement and are no longer fixed to the selected object or location.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/Fw9image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-01/Fw9image.png)

In this example, the **Detach User** node is used to detach the user from a roller coaster when the roller coaster's animation ends. Once the animation is complete, the user will be released from the roller coaster.

> [![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png) ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)[Tutorial is available on SimLab VR Discord server](https://discord.com/channels/1062715275805470821/1298557994208071701/1328733596726333451 "Tutorial is available on SimLab VR Discord server")

# User \  Gadget

### [![Response_Gadget_EquipToUser.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-gadget-equiptouser.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Equip To User

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/vvmimage.png)

The **Equip to User** Node enables the user to equip or unequip gadgets, adjacent objects, or HUD elements to the user within the VR environment. This node enhances interactivity by enabling users to interact directly with various items and interface elements as part of their virtual experience.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/ji9image.png)

In this example, the **Equip to User Node** is used to equip a gun controller to the user. Select the gun object, then assign it to the controller by clicking on the plus icon in the User Gadget window.

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/J1kimage.png)

To activate the gun gadget, press the right grip button then the gun will be attached to the User's controller in the VR environment.

---

# User \ Attributes \ String

### [![Response_User_Attribute_StringSet.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-user-attribute-stringset.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Set User Attribute (String)

  
![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/D3Iimage.png)

The **Set User Attribute** response enables user to set a value to an attribute by either typing in a string value in the value field or by attaching a value or a variable node to that port. Then once the response is executed, the variable value can be acquired through the **Value** port.

####   


#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/6ZGimage.png)

[ ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/euiimage.png)

In this example, we added a **String User Attribute** called it **Indoor** with the value **No**

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/TXeimage.png)

<div class="pointer-container" id="bkmrk-%C2%A0-18"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>Once the user enters the object named Building, the **Indoor** attribute's value will be set to **Yes**, then when the object named Teleport Button is triggered, the user(s) with the attribute named **Indoor** and the value **Yes** will be teleported to the **Outside** CameraNode location.

---

# User \  Point To Object

### [![Response_Gadget_EquipToUser.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-gadget-equiptouser.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Point To Object

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/gdNimage.png)

The **Point To Node** enables the user to be guided to the location of a specific place or object within the scene. When this node is activated, an arrow is displayed, pointing to the location of the assigned SceneNode within the VR environment.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/Bd3image.png)

In this example, the **Point To Node** is used to guide the user to the location of an object named button when the Scene Start event occurs. As soon as the scene begins, an arrow appears, pointing directly to the button location, helping the user finding it within the VR environment.

---

# User \ Set Mode

### ![Response_InteractionMode_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/response-interactionmode-set.png) Set Interaction Mode

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/image.png)

The **Set Interaction Mode node** dynamically changes how participants engage with the VR environment. When activated, the node evaluates the targeted User input—which can be configured for either "Host Only" or "All Users" and immediately switches their current control state to the selected Mode. The available interaction modes include:

- **Default:** The standard, baseline interaction and movement mechanics of the VR Viewer.
- **Drawing:** Enables the user to freely draw directly onto 3D surfaces within the scene.
- **Scene Building:** Unlocks spatial editing capabilities, allowing the user to dynamically adjust the location, rotation, and scale of 3D objects to freely move and place models around the environment.
- **Measurement:** Enables the user to draw straight lines across the scene, accurately measuring distances and lengths in meters.

###   


---

### ![Response_Scene_NightMode_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-scene-nightmode-set.png) Set Night Mode

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/rKvimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/rKvimage.png)

**The Set Night Mode node** instantly alter the environmental lighting and skybox of the VR scene to nighttime. Once activated, the node evaluates the boolean Enable input—transitioning the scene's overall environment to a dark night mode.

# User Name & ID

### [![Response_Cloud_USERID_Get.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-cloud-userid-get.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Get User ID

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/xXdimage.png)

The **Get User ID node** is used to retrieve the unique identifier of the user interacting within the VR environment. This ID can be utilized for various purposes, such as tracking user actions or customizing experiences based on the user.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/YZximage.png)

In this example, the **Get User ID node** is used to create a student attendance system. When the user triggers the Activate event, the "Get User ID" retrieves the Student ID number and stores it in the "`attendance_ID"` variable using the "Set Number Variable" node.

**Note:** To retrieve the User ID, the experience must be run from a **logged-in** account in SimLab VR Viewer.

---

[![Response_User_Name_Get.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-user-name-get.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)<span style="color: rgb(34, 34, 34); font-size: 2.333em; font-weight: 400;"> </span><span style="color: rgb(34, 34, 34); font-size: 2.333em;">Get User Name</span>

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/5fXimage.png)

The **Get User Name node** is used to retrieve the name of the user interacting within the VR environment. This name can be utilized for various purposes, such as personalizing interactions or saving progress tied to a specific user.

<div class="mt-1 flex gap-3 empty:hidden -ml-2" id="bkmrk--9"><div class="items-center justify-start rounded-xl p-1 flex"><div class="flex items-center"><button aria-label="Read Aloud" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Copy" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Regenerate" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex"><button aria-label="Good response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Bad response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button>  
</div><div class="flex items-center pb-0"><div class="[&_svg]:h-full [&_svg]:w-full icon-md h-4 w-4"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg>  
</div></div><button aria-expanded="false" aria-haspopup="menu" class="cursor-pointer h-[30px] rounded-md px-1 text-token-text-secondary hover:bg-token-main-surface-secondary" data-state="closed" id="bkmrk--18" type="button"></button></div></div></div>#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/0aDimage.png)

In this example, the "Get User Name" node is used to create a student attendance system. When the user triggers the Activate event, the "Get User Name" retrieves the student's name and stores it in the `attendance_UserName` variable using the "Set String Variable" node.

  
**Note:** To retrieve the User Name, the experience must be run from a **logged-in** account in SimLab VR Viewer.

---

# Material

### ![Response_Material_Copy.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-material-copy.png) Copy Material

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/7KYimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/7KYimage.png)

The Copy Material node duplicates an existing material and create a completely independent instance. Upon triggering the Execute input, the node takes the specified Material input and outputs a newly generated Copy of that material, which can then be freely modified without altering the original source.

---

### ![Response_Material_CopyProperties.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-material-copyproperties.png) Copy Material Properties

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/6MLimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/6MLimage.png)

The Copy Material Properties node transfers visual attributes directly from one material to another without generating a new instance. When the Execute input is triggered, the node takes the characteristics of the Source Material input and applies them directly to the Target Material input, instantly overwriting the target's previous properties.

##### Example:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/9lXimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/9lXimage.png)

In this example, triggering the "Change Color" object prompts the system to execute the Copy Material Properties node. Once activated, the node takes all the visual attributes from the "cabinets" source material and immediately applies them to the "tables" target material, causing any 3D objects using the tables material to instantly match the appearance of the cabinets.

# Material \ Texture

### ![Response_Material_Texture_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-material-texture-set.png) Set Texture From File  
  


[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/YgPimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/YgPimage.png)

This node replaces the current texture of a specified material with a 2D image file stored in your Resource Management system. By inputting the exact file name, you can dynamically update the visual appearance of any object using that material during the experience.

# Execution

### ![Response_BranchExpression.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-branchexpression.png) Branch on Expression

  
![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/q8Mimage.png)The **Branch on Expression** response enables the user to evaluate an expression with the possible outputs of True or False each time the event connected to it is triggered. Once the response is executed, the result of the evaluation can be acquired through the **True** or **False** ports.

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk-"><div><div class="pt-0"><div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8"><svg class="icon-md" fill="none" height="41" role="img" viewbox="0 0 41 41" width="41" xmlns="http://www.w3.org/2000/svg"></svg>  
</div></div></div></div></div>#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/WPEimage.png)


In this example, a **Branch on Expression** response is used to evaluate an expression once the user triggers the object named Activate. The result of the expression, which will be either True or False, if the result was true, the object named "Variable\_01" will be shown, if it was false, the object named "Variable\_02" will be shown.

---

### [![Response_Delay.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-delay.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/response-delay.png) Delay

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/UO0image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/UO0image.png)

**The Delay node** waits for the specified **Duration** (in seconds), then executes the node linked to its **Execute** output.

Duration can be an integer or a float less than one to achieve sub-second delays.

---

### ![Response_Loop.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-loop.png) Loop

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/72Yimage.png)

The **Loop node** enables the user to repeatedly execute a connected response for a specified number of times as defined in the Number of Loops field. Each time the event connected to the loop is triggered, the response is executed repeatedly, and the loop continues until the assigned number of repetitions is completed.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/tagimage.png)


In this example, a **Loop node** is used to repeatedly execute the connected response that decreases the value of a number variable by one. The Decrement response is repeated for the number of times specified in the **Number of Loops** field, with the duration between each repetition set in the **Interval** field. Once the assigned number of repetitions is completed, the sound named **Countdown\_Over** plays.

---

### ![Responses_execution_RunScript.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/responses-execution-runscript.png) Run Script

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/untitled-1.png)

The **Run Script** node allows the user to execute advanced functions using the **Lua programming language**. This node provides flexibility by enabling custom scripts to be triggered when an event occurs. Allowing for complex operations and logic to be carried out as defined in the script. This node is ideal for scenarios requiring functionality beyond the standard nodes, offering advanced customization and control over the system.

You can read about Lua Scripting in SimLab Training builder through the following Blog:

<span style="text-decoration: underline;">**[Lua Scripting Blog](https://blog.simlab-soft.com/lua-scripting-in-simlab-training-builder-from-beginner-to-beyond/ "Lua Scripting Blog")**</span>

> **[Lua Documentation for SimLab Training Builder](https://www.simlab-soft.com/3d-products/docs/help/scripting/English/Lua/ "Lua Documentation for SimLab Training Builder")**

---

### [![Response_CustomEvent_Trigger.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-customevent-trigger.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/response-customevent-trigger.png) Trigger Custom Action

[![xyLimage.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/xylimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/xylimage.png)

Calling this **Trigger Custom Action** will execute the corresponding [**Custom Action** event ](https://simlab-soft.com/help/link/581#bkmrk-custom-event%C2%A0)(based on the matching ID), passing along any optional information provided in the info field.

This is useful when you want multiple paths in your experience to produce the same response — without duplicating it each time.

---

# SceneNode \ Management

### [![Responses_SceneNode_NodesManagement_CastSceneNode.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/responses-scenenode-nodesmanagement-castscenenode.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Cast SceneNode

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/DPOimage.png)

The **Cast SceneNode** enables the user to change the type of a SceneNode by selecting a typeInfo from the list, such as sound, 3D object, video, gadget, or camera. This node identifies the assigned SceneNode as the chosen type, allowing it to function accordingly within the VR environment.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/d0fimage.png)

In this example, Animals sounds are assigned to the animals as **SceneNode** type

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/c2vimage.png)

A **Cast SceneNode** is used to identify the SceneNode of an animal object (dog, cat, and horse) as a sound. An attribute named "Sound" is added to all three animals, and the corresponding sound is assigned to each. When the user triggers the animal SceneNode, the **Cast SceneNode** plays the sound assigned in the attribute.

---

### [![Response_Node_Parent_Reset.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/responses-scenenode-nodesmanagement-enablecollision.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Set Node Collision Enabled

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)The **Set Node Collision Enabled** node is used to enable or disable collision for the user. This can be utilized to allow the user to pass through objects or be blocked by them within the VR environment.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/KNtimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/S2himage.png)

<div class="pointer-container" id="bkmrk-%C2%A0-11"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, the **Set Node Collision Enabled** node is used to disable collision for the user when the scene starts. The wall is assigned as the target object, and the collision is set to "False," allowing the user to pass through it.

This is shown in the following tutorial

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/QlagX08XJE0" width="560"></iframe>

<div class="mb-2 flex gap-3 empty:hidden -ml-2" id="bkmrk--19"><div class="items-center justify-start rounded-xl p-1 flex">  
</div></div>---

### [![Response_Node_Parent_Reset.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/responses-scenenode-nodesmanagement-enablecollision.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Delete SceneNode

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/kyTimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)

The **Delete SceneNode** node enables users to remove a specified object from the scene during a VR Experience. This node allows for dynamic scene modifications by deleting objects based on interactions or conditions, making the environment more interactive and adaptable. Once executed, the specified object is permanently removed from the scene.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/0QSimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/0QSimage.png)

<div class="pointer-container" id="bkmrk-%C2%A0-14"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, the **Delete SceneNode** node is used to remove a trigger box from the scene. The **Node Triggered** event is activated when the user triggers or clicks on an object named "Remove." As soon as the object is triggered, the **Delete SceneNode** node removes the trigger box from the scene, preventing further interactions with it.

---

###   


### ![Response_Node_Collision_WalkThrough.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-collision-walkthrough.png) Enable Walk-Through

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Eoyimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Eoyimage.png)

The **Enable Walk-Through node** explicitly controls the physical collision properties of a targeted 3D object within the VR Viewer. When activated, the node uses the boolean Enable input to determine the collision state of the specified SceneNode—allowing users to seamlessly pass directly through the object without physical obstruction if set to *True.*

---

### ![Response_Node_FindByName.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-findbyname.png) Find Node By Name

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/zXiimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/zXiimage.png)

The **Find Node By Name node** searches the VR environment and dynamically locate a specific 3D object based on its assigned text identifier. When activated, the node takes the exact string provided in the Name input, searches the scene to find the corresponding object, and outputs that specific SceneNode reference.

###   


[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/yeKimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/yeKimage.png)

###   


---

### ![Response_Node_Name_Get.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-name-get.png) Get Node Name

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Ynximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Ynximage.png)

The **Get Node Name node** retrieves the exact text identifier of a specific 3D object within the scene. When activated, the node takes the targeted SceneNode input, extracts its assigned name, and outputs this text as a string value through the Result pin.

---

### ![Response_Node_MakeCopy.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-makecopy.png) Make Node Copy

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/m3ximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/m3ximage.png)

The **Make Node Copy node** duplicates a specific 3D object along with an independent copy of its material. Once activated, the node takes the targeted SceneNode input and generates a completely separate Copy, ensuring that any subsequent material or texture changes applied to this new object do not affect the original source.

---

### ![Response_Node_MakeInstance.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-makeinstance.png) Make Node Instance

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/HRAimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/HRAimage.png)

The **Make Node Instance node** generates a direct clone of a specific 3D object in the scene. When activated, the node takes the targeted SceneNode input and creates a new Instance that shares the exact same material properties as the original.


##### Example:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/PCVimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/PCVimage.png)

In this example, we create a simple shooting mechanic where firing a gun generates and shoots a bullet toward a target:

1. A **Node Is Grabbed** node continuously checks if the user is holding the "Gun" object, enabling the next node if the condition is met.
2. A **Grip Pressed** event node listens for the user to press the right hand's grip button, acting as the trigger to fire the weapon.
3. Once the grip is pressed, the **Make Node Instance** node activates, immediately generating a new instance of the "Bullet" object in the scene.
4. A **Get Node Location** node is then used to retrieve the exact X, Y, and Z coordinates of a specific "AimTarget" object.
5. Finally, a **Set Node Location (Animated)** node takes the newly generated bullet instance and smoothly moves it to the AimTarget's coordinates over a quick duration of 0.2 seconds, simulating a flying projectile.

<div class="flex items-center" id="bkmrk--47"><button aria-expanded="false" aria-haspopup="menu" class="cursor-pointer h-[30px] rounded-md px-1 text-token-text-secondary hover:bg-token-main-surface-secondary" data-state="closed" id="bkmrk--56" type="button"></button></div><div class="flex items-center" id="bkmrk--48"></div>---

<div class="flex items-center" id="bkmrk--50"></div><div class="flex items-center" id="bkmrk--51"></div>### ![Response_Node_SimulatePhysics.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-simulatephysics.png) Set Node Simulate Physics

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/eVHimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/eVHimage.png)

The **Set Node Simulate Physics node** activates or deactivates real-time physics calculations for a specific 3D object within the VR Viewer. When activated, the node uses the boolean Enable input to determine the object's physical state, allowing the object to react to gravity, collisions, and user interactions based on its assigned material physics properties

[![Untitled-1.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/untitled-1.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/untitled-1.png)

To configure how an object behaves during simulation, navigate to the Properties panel and select the Material tab. Under the Physics Properties section, you can adjust specific physical attributes for that material, such as its Density, Friction, and Restitution, which directly impact how the object interacts with the environment when physics are enabled.

# SceneNode \ Transform

### ![Response_Node_Transform_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-transform-set.png) Get Node Transform

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/3kSimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/3kSimage.png)

The **Get Node Transform node** retrieves the complete spatial data—including the exact location, rotation, and scale values—of a specific 3D object in the scene. When activated, the node takes the targeted SceneNode input, extracts its current transform matrix, and outputs this combined information through the Transform pin.

---

### ![Response_Node_Transform_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/SKsresponse-node-transform-set.png) Set Node Transform

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Inximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Inximage.png)

The **Set Node Transform node** instantly applies a complete set of spatial data—encompassing location, rotation, and scale—to a specific 3D object. Once activated, the node evaluates the targeted SceneNode and immediately updates its physical presence in the scene to perfectly match the data provided through the Transform input.

---

### ![Response_Node_Transform_Set_Animated.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-transform-set-animated.png) Set Node Transform (Animated)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/hFSimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/hFSimage.png)

The **Set Node Transform (Animated) node** functions similarly to the standard set transform node, but it smoothly transitions the 3D object to the new location, rotation, and scale over a defined period. When activated, the node takes the targeted SceneNode and seamlessly tweens its spatial data to match the provided Transform input over the specific amount of time defined by the numerical Duration input (measured in seconds).

---

### ![Response_Node_Transform_Swap.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-transform-swap.png) Swap Nodes Transform

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/aiximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/aiximage.png)

**The Swap Nodes Transform node** instantly exchanges the complete spatial data—including location, rotation, and scale—between two distinct 3D objects in the scene. When activated, the node evaluates the targeted objects provided in the SceneNode A and SceneNode B inputs and simultaneously swaps their placements, rotations, and proportions.

# SceneNode \ Transform \ Location

### [![Visual.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Y8Yvisual.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Y8Yvisual.png)Visual \\ Get Node Visual Location

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/z1Kimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/z1Kimage.png)

The **Get Node Visual Location** node enables the system to retrieve the exact X, Y, and Z coordinates of a SceneNode based on its absolute visual representation in the 3D scene.

Unlike standard location nodes that calculate position relative to a parent object, this node fetches the true visual position of the object within the environment, completely unaffected by the scene's parent-child hierarchy system.

<div _ngcontent-ng-c761594330="" class="container" id="bkmrk--0"><div _ngcontent-ng-c2150360127="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color" dir="ltr" id="bkmrk--31" inline-copy-host=""></div></div>### [![Visual.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Y8Yvisual.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Y8Yvisual.png)Visual \\ Set Visual Location

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/R0Timage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/R0Timage.png)

The **Set Node Visual Location** node enables the system to instantly move a SceneNode to specific X, Y, and Z coordinates within the absolute visual space of the 3D scene. By directly altering where the object appears visually, this node completely bypasses any positional offsets or transformations that the object might normally inherit from its parent hierarchy.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/nVwimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/nVwimage.png)

In this example, an interaction is set up to match the positions of two independent objects.

1. Upon interacting with the "Ball" object, the **Node Triggered** event initiates the execution flow.
2. The **Get Node Visual Location** node extracts the true visual X, Y, and Z coordinates of the "Ball" in the scene.
3. These coordinate values are then fed directly into the X, Y, and Z inputs of a **Set Node Visual Location** node assigned to a "Target" object. This instantly moves the Target to the exact visual location of the Ball, regardless of how deeply nested either object is within the scene's hierarchy.

### [![Visual.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Y8Yvisual.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Y8Yvisual.png)Visual \\ Set Node Visual Location (Animated)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/2Vlimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/2Vlimage.png)

The **Set Node Visual Location (Animated)** node enables the system to smoothly move a SceneNode to specific X, Y, and Z coordinates within the absolute visual space of the 3D scene over a set period.

Similar to the standard **Set Node Visual Location** node, this movement completely bypasses any positional offsets or transformations inherited from the object's parent hierarchy. However, this animated variant includes an additional **Duration** parameter. Instead of instantly snapping the object to the new coordinates, this node creates a smooth transition (tweening) from its current visual location to the target location over the specified number of seconds.

---

### ![Response_Node_Location_FalltoSurface.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-location-falltosurface.png) Fall To Surface

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/SiBimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/SiBimage.png)

The F**all To Surface node** instantly repositions a specific 3D object directly onto the nearest 3D surface located immediately below it in the scene. When activated, the node takes the targeted SceneNode input and immediately updates its vertical placement to simulate a sudden, instantaneous drop, resting the object perfectly against the underlying geometry.

### ![Response_Node_Location_FalltoSurface.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-location-falltosurface.png) Fall To Surface (Animated)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/nXaimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/nXaimage.png)

The **Fall To Surface (Animated) node** functions similarly to the standard fall node, but instead of an instant drop, it smoothly transitions the 3D object down to the nearest underlying surface over a defined period. Once activated, the node takes the targeted SceneNode and seamlessly tweens its vertical descent until it rests on the geometry below, completing the fall animation over the exact amount of time specified by the numerical Duration input (measured in seconds).

---

### [![Response_Node_Location_Get.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-node-location-get.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Get Node Location

  
![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/lDximage.png)

The **Get Node Location** response obtains the X, Y, and Z coordinates of an object's location each time the event connected to it is triggered. Once the response is executed, the coordinates can be acquired through the **X**, **Y**, and **Z** ports.

####   


#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/j1rimage.png)


<div class="pointer-container" id="bkmrk-%C2%A0-24"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, a **Get Node Location** response is used to obtain the X, Y, and Z coordinates of an object named Table once the user triggers the object named Activate. The coordinates are then stored in variables named X, Y, and Z, which can be connected to a variable writer to be displayed during the VR Experience.

---

### [![Response_Node_Location_AnimatedSet.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-node-location-animatedset.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Set Node Location

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/fliimage.png)

The **Set Node Location** response enables the user to set the location of an object to specific X, Y, and Z coordinates by either typing in the numerical values or by attaching a variable node to those ports. Once the response is executed, the object's new location is applied using the provided coordinates.

####   


#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/w9timage.png)


<div class="pointer-container" id="bkmrk-%C2%A0-25"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>In this example, a **Set Node Location** response is used to assign the X, Y, and Z coordinates stored in variables named X, Y, and Z to an object named Pot once the user triggers the object named Activate. The object's new location is set based on these coordinates, allowing the updated position to be reflected during the VR Experience.

### [![Response_Node_Location_AnimatedSet.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-node-location-animatedset.png) ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)Set Node Location (Animated)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/JRIimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/JRIimage.png)

The **Set Node Location (Animated)** node enables the system to smoothly move a SceneNode to a specific global coordinate in the 3D space over a set period. this node creates a seamless tweening effect from the object's current position to its new target destination

This differs significantly from the standard **Set Node Location** node, which instantly snaps or teleports the object to the new coordinates without any transition. The animated variant is ideal for creating moving platforms, sliding doors, or moving vehicles.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/a35image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/a35image.png)

In this example, an interactive elevator mechanism is created.

1. Upon interacting with the button object, the **Node Triggered** event initiates the execution flow.
2. The **Get Node Location** node is used to retrieve the current X, Y, and Z global coordinates of the "Elevator" object.
3. To move the elevator up, the Y-axis coordinate is passed into an **Add** node, where 5 units are added to its current value. The X and Z coordinates remain unchanged.
4. Finally, the **Set Node Location (Animated)** node applies these new coordinates to the elevator object. The **Duration** parameter is set to 3, meaning it will take exactly 3 seconds for the elevator to smoothly transition (tween) to its new position 5 units higher.


---

# SceneNode \ Grab

### ![Response_Node_Grabbing_Ignore.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-grabbing-ignore.png) Ignore grabbing

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/zRnimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/zRnimage.png)

The **Ignore Grabbing node** explicitly prevents a specific 3D object from being picked up or interacted with by the user's hands during the VR experience. When activated, the node disables the grabbable state of the targeted SceneNode if set to True. This node is highly useful for complex models where you want to enforce realistic interactions by restricting grip points, allowing you to easily exclude certain parts of a grouped object from being grabbed without having to detach or separate the components from the main assembly.

##### Example:

In this example, we configure a screwdriver so that the user can only pick it up by its handle, preventing them from grabbing it awkwardly by the metal rod or tip:

If **Set Node Grabbable State node** is used on the handle part of the screw driver alone, only the handle will move along with the grabbing hand, leaving the rest of the screw driver's assembly in place. Instead, **Ignore Grabbing** node should be used to exclude unwanted parts from being grabbed:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/ccwimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/ccwimage.png)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/RgNimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/RgNimage.png)

1. A **Set Node Grabbable State** node is activated to make the entire "Philips Screw Driver" parent group grabbable.
2. The execution flow immediately continues into an **Ignore Grabbing** node.
3. The specific "Screw driver head" object is assigned to the SceneNode input, and the Ignore boolean is set to True.
4. As a result, the metal tip is excluded from being a valid grab target, forcing the user to grab the tool properly by its handle while still ensuring the entire screwdriver assembly moves together as one cohesive object in the user's hand.

---

### ![Response_Node_GrabbableSequenceSet.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-grabbablesequenceset.png) Set Grabbable Sequence

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/rDjimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/rDjimage.png)

The Set Grabbable Sequence node makes a specific 3D object interactively grabbable by assigning an animation sequence to it during the VR experience. Once activated, the node evaluates the targeted SceneNode and attaches the specified Sequence input, defining exactly how the object animates when grabbed and manipulated by the user. This versatile node can be used to add a sequence, dynamically switch between different sequences on the fly, or completely remove an existing sequence from a grabbable object before continuing the logic flow.

##### Example:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/68Bimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/68Bimage.png)

In this example, we use the Set Grabbable Sequence node to create a dynamic gear stick that changes states based on the user's interactions:

1. A **Set Grabbable Sequence** node is used to make a "Gear Stick" object grabbable and attaching an animation sequence that, when grabbed, shifts the gear to first.
2. A **Watch Boolean Expression** node continuously monitors a string variable named "Clutch".
3. When the "Clutch" variable is set to "pressed", the watch node passes its OnTrue execution path to a second **Set Grabbable Sequence** node, which changes the grabbable object's sequence to a "Shift Gear To Second" sequence.

##### Tip:

Using the Set Grabbable Sequence node without attaching a sequence will disable the grabbing state of an object.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/bkIimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/bkIimage.png)

Here, another **Watch Boolean Expression** node is used to monitor a variable called "engineStatus". When the "engineStatus" variable is set to "off", it triggers a **Set Grabbable Sequence** node targeting the gear stick, but this time with no sequence attached (Empty). Leaving the sequence input empty completely disables the grabbing interaction, turning the gear stick back into a still, non-interactable object.

---

### ![Response_Node_GrabbableSet.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-grabbableset.png) Set Node grabbable State

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/5Nvimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/5Nvimage.png)

**The Set Node Grabbable State node** evaluates the boolean Enable input to determine the targeted SceneNode's grabbable status—making the object fully grabbable by the user if set to True, or disabling grab interactions entirely to make it a static object if set to False.

# Resource

---

### ![Response_Resource_DeleteResource.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-resource-deleteresource.png) Delete Resource

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/lM9image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/lM9image.png)

The **Delete Resource** node enables the system to remove specific resources currently stored in the SimLab File Vault. This node simply requires the exact "FileName" of the target file as an input to execute the deletion. It outputs a "Success" boolean to confirm whether the specified file was successfully removed from the vault.

---

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/T47image.png) ](https://simlab-soft.com/help/uploads/images/gallery/2025-09/T47image.png) Download Resource

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-09/scaled-1680-/QXZimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-09/QXZimage.png)

The **Download Resource** node enables the system to download a specific file directly from the SimLab File Vault while a user is actively engaged inside a VR experience. This node requires the exact URL of the vault file to be linked into the node's input. Upon execution, it retrieves the file and provides a "Success" status alongside the downloaded "FileName" to be used in subsequent logic.

For more information, refer to SimLab Vault tutorial below:

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/ZrGcO0HZmDI" width="560"></iframe>

---

### ![Response_Resource_GetPathFromResource.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-resource-getpathfromresource.png) Get Path From Resource

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/rPtimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/rPtimage.png)

The **Get Path From Resource** node enables the system to retrieve the exact URL or local file path of a specific resource or file. This node requires the exact "FileName" of the target file as an input.

---

### [![Response_Resource_SaveVRPackage.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-resource-savevrpackage.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-03/response-resource-savevrpackage.png)Save VRPackage

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/jgoimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/jgoimage.png)

The **Save VRPackage** node enables the system to save the current, active VR experience as a standalone `.vrpackage` file, directly from within the VR session itself. It requires a "FileName" to name the new package and includes a "User" dropdown (e.g., "Host Only") to specify which user is authorizing the save. It outputs a "Success" boolean and the final "FileName" to confirm the action.

###   


---

### ![Response_Resource_UploadMediaFromUser.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-resource-uploadmediafromuser.png) Upload Media From User

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/yl5image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/yl5image.png)

The **Upload Media From User** node functions similarly to the standard **Upload Resource** node by sending files to the SimLab File Vault via a designated URL. This node is specifically designed for multiplayer VR Collaboration environments.

It allows an administrator or host to target a specific user (via the "User" dropdown) and upload a file from *that user's* local device directly to the central File Vault. This is crucial for sharing media when a file exists only on an individual participant's machine and not on the host's device. Like the standard upload node, it outputs a "Success" boolean.

---

###   


### ![Response_Resource_UploadToURL.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-resource-uploadtourl.png) Upload Resources

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Zkrimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Zkrimage.png)

The **Upload Resource** node enables the system to send and save resources to the SimLab File Vault during a live VR experience. This node requires the destination URL for the file vault, as well as the assigned "FileName" for the file being uploaded and outputs a "Success" boolean.

For more information, refer to SimLab Vault tutorial below:

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/hUZvEgmD5Ls" width="560"></iframe>

# External Connection \ WebSocket

### [![OpenExternalConnection.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/openexternalconnection.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Open External Connection

SimLab Composer 14 introduces WebSocket support, enabling seamless integration with external systems allowing it to work with external hardware, co-simulation engines, and websites, unlocking numerous possibilities.

The WebSocket nodes (Open External Connection, Send Message, and <span style="text-decoration: underline; color: rgb(35, 111, 161);">[On Message Received](https://simlab-soft.com/help/books/dynamic-training-builder-nodes-manual/page/on-message-received)</span>) are exclusively available in the Ultimate Edition.

The **Open External Connection** node enables the opening of a WebSocket connection to an external system. When the **Auto Handle Lua** is set to **true**, incoming messages containing Lua scripts will be automatically executed. This allows for real-time interaction between SimLab Composer and external systems, such as co-simulation engines or hardware, with the ability to dynamically execute Lua code as part of the interaction.

[![Screenshot 2025-02-02 162338.jpg](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/screenshot-2025-02-02-162338.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/screenshot-2025-02-02-162338.jpg)

**Input Ports:**

- Execute
- URL: WebSocket URL that includes the server IP address, port, channel (optional). Example: ws://server1.simlab-soft.com:8765/robots\_1
- Auto Handle Lua: Incoming messages containing Lua scripts will automatically execute those scripts If enabled (True). <div class="container_b7e1cb" id="bkmrk--25"><div class="visualMediaItemContainer_f4758a"><div class="oneByOneGrid_f4758a oneByOneGridSingle_f4758a"><div class="mosaicItem__6c706 mosaicItemNoJustify__6c706 mosaicItemMediaMosaic__6c706 hideOverflow__6c706"><div class="imageContent__0f481 embedWrapper_b7e1cb itemContentContainer_f4758a mosaicItemContent__6c706">  
    </div></div></div></div></div>

**Output Ports:**

- Execute
- URL
- Auto Handle Lua

---

###   
[![MessageSent.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/messagesent.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Send Message Node

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/h5mimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/h5mimage.png)

The **Send Message** node allows you to communicate with the WebSocket server by sending messages. It is essential to ensure that the message format follows the protocol that the server and other clients can process. This node enables real-time interaction with external systems, making it possible to transmit data or commands to connected servers or clients.

**Input Ports:**

- Executive
- URL: WebSocket URL that includes the server IP address, port, and channel (optional). Example: ws://server1.simlab-soft.com:8765/robots\_1
- Message

**Output Ports:**

- Execute
- URL
- Message

# Media

### ![Response_Node_MessageBoxShow.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-messageboxshow.png) Message Box \\ Show Message Box

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/EC3image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/EC3image.png)

The **Show Message Box node** displays a floating text panel directly above a specific 3D object in the VR scene. Once activated, the node takes the targeted SceneNode input and generates a visible UI element containing the text strings provided in the Title and Body inputs, to provide contextual information or instructions to the user.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/lYyimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/lYyimage.png)

### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/7O8image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/7O8image.png)

###   


###   


---

###   


### ![Response_Node_MessageBoxHide.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-messageboxhide.png) Message Box \\ Hide Message Box

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/3urimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/3urimage.png)

The **Hide Message Box node** removes an active text panel currently displayed above a specific 3D object. When activated, the node takes the targeted SceneNode input and immediately dismisses its attached message box from the user's view.

---

### [![Response_Node_Capture_Picture.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-node-capture-picture.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Capture Picture

[![aM3image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/N18am3image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-09/N18am3image.png)

<div class="pointer-container" id="bkmrk-%C2%A0-12"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Copy Link" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>The **Capture Picture node** is used to capture an image from a camera within the scene, and the captured image can then be displayed on a 3D object within the scene. This allows the user to take snapshots and show them in the VR environment, such as displaying a captured image on a screen or other surface.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/5wEimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-09/Xn9image.png)

A **Surveillance Monitor** is first created to display the captured images. This monitor is then attached to the VR camera.

[![Add_Example2.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/cT8image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this example, the **Capture Picture Node** is used to capture an image on a picture frame model when the user triggers the Activate event. Before that, the Cast SceneNode is used to identify the picture frame as a 3D object, as the Capture Picture Node only works with 3D objects.

---

### ![Response_WebBrowser_SetURL.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/response-webbrowser-seturl.png) Set Web Browser URL

![web URL.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/web-url.png)

The **Set Web Browser URL** node sets the URL for a web browser within the VR Experience. This node enables users to open and navigate to a specified webpage, making it possible to display web content like videos or instructional resources directly within the VR environment.

<div class="mb-2 flex gap-3 empty:hidden -ml-2" id="bkmrk--13"><div class="items-center justify-start rounded-xl p-1 z-10 -mt-1 bg-token-main-surface-primary screen-arch:mt-1 md:absolute flex"><div class="flex items-center"><button aria-label="Read aloud" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="voice-play-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Copy" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="copy-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Edit in canvas" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex items-center pb-0">  
</div></div></div></div><div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk--14"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8"><svg class="icon-md" fill="none" height="41" role="img" viewbox="0 0 41 41" width="41" xmlns="http://www.w3.org/2000/svg"></svg>  
</div></div>#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/G1Pimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/G1Pimage.png)


![web URL PLANE.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/Bkxweb-url-plane.png)

In this example, the **Set Web Browser URL** node is used to open the SimLab website. The **Node Triggered** event is activated when the user triggers an object named "activate." As soon as the object is triggered, the **Set Web Browser URL** node is triggered, setting the URL to the SimLab website. The website then loads and is displayed on a web browser plane within the VR environment.

> [![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png) ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)[Tutorial is available on SimLab VR Discord server](https://discord.com/channels/1062715275805470821/1298557994208071701/1312684216776916994 "Tutorial is available on SimLab VR Discord server")

<div class="mb-2 flex gap-3 empty:hidden -ml-2" id="bkmrk--18"><div class="items-center justify-start rounded-xl p-1 flex"><div class="flex items-center"><button aria-label="Read aloud" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="voice-play-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Copy" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="copy-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex"><button aria-label="Good response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="good-response-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Bad response" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="bad-response-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button>  
</div><button aria-label="Edit in canvas" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex items-center pb-0"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg>  
</div><button aria-expanded="false" aria-haspopup="menu" class="cursor-pointer h-[30px] rounded-md px-1 text-token-text-secondary hover:bg-token-main-surface-secondary" data-state="closed" id="bkmrk--20" type="button"></button></div></div></div>

# Media \ Variable Writer \

### ![Color.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/color.png) Get/Set Variable Writer Color

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-05/scaled-1680-/image.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-05/image.png)

The **Set / Get Variable Writer Color** nodes are used to control the color of the text displayed by a Variable Writer in the VR environment. The Set node allows you to change the text color dynamically based on events or conditions, while the Get node retrieves the current color of the Variable Writer. This is useful for customizing the visual appearance of displayed values, such as indicating status or drawing attention to changes.

---

### ![Prefix.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/prefix.png) Get/Set Variable Writer Prefix:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-05/scaled-1680-/stCimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-05/stCimage.png)

The **Set / Get Variable Writer Prefix** nodes are used to modify or retrieve the prefix text displayed before the variable value in a Variable Writer. The Set node allows you to add custom text before the value, such as labels or units, while the Get node retrieves the current prefix. This helps provide context to the displayed value, making it clearer for the user.

---

### [![Suffix.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/JqVsuffix.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/JqVsuffix.png) Get/Set Variable Writer Suffix:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-05/scaled-1680-/30Kimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-05/30Kimage.png)

The **Set / Get Variable Writer Suffix** nodes are used to modify or retrieve the suffix text displayed after the variable value in a Variable Writer. The Set node allows you to add custom text after the value, while the Get node retrieves the current suffix. This helps make the displayed value more informative and user-friendly.

### ![Response_VariableWriter_Value_Get.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-variablewriter-value-get.png) Get Variable Writer Value

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/YYCimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/YYCimage.png)

The **Get Variable Writer Value** node retrieves the pure data value from a designated **SceneNode** (the target Variable Writer object) and outputs this core **Value** for use in your logic.

###   


### ![Response_VariableWriter_Value_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-variablewriter-value-set.png) Set Variable Writer Value

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/F5iimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/F5iimage.png)

The **Set Variable Writer Value** node dynamically updates the core data of a target **SceneNode** (the Variable Writer object). By inputting a new string or numerical **Value**, the node overrides the writer's pure value while keeping any existing prefixes and suffixes perfectly intact.

### ![Response_Scene_Font_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-scene-font-set.png) Set Scene Font

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/W3Ximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/W3Ximage.png)

The **Set Scene Font** node updates the typography globally by changing the font of every Variable Writer object currently present in the VR scene. This node requires the exact **FileName** of a TrueType Font (`.ttf`) as its input. To function correctly, the designated `.ttf` file must first be imported into your project via the Resource Management tab in SimLab Composer.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/sEximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/sEximage.png)

###   


<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/rThSaw78sKU" width="560"></iframe>

### ![Response_VariableWriter_Font_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-variablewriter-font-set.png) Set Variable Writer Font

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Dimimage.png)The **Set Variable Writer Font** node allows for targeted typography changes by updating the font of a single, specific Variable Writer rather than the entire environment. By assigning the target **SceneNode** and providing the **FileName** of a valid `.ttf` font file (previously imported through the Resource Management tab), this node applies the new text style exclusively to the selected object, leaving all other text in the scene unaffected.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/l1Oimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/l1Oimage.png)

---

### [![variable.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/25Jvariable.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/25Jvariable.png) Set Variable Writer Variable:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-05/scaled-1680-/Lvcimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-05/Lvcimage.png)

The **Set Variable Writer Variable** node is used to assign or change the variable displayed by an existing Variable Writer. This allows you to update the displayed content dynamically during the VR experience by switching the linked variable at any time.

# Media \ Dynamic Menu

### ![Response_Node_DynamicMenu_Visibility_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-dynamicmenu-visibility-set.png) Set Dynamic Menu Visibility

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/LmLimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/LmLimage.png)

The **Set Dynamic Menu Visibility** node controls whether dynamic menus (specifically used with the Objects Menu and Group Menus add-ons) are shown or hidden during a VR experience, using a boolean toggle where **True** displays the menu and **False** hides it.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/8NtfNkBr_Z0" width="560"></iframe>

---

# Media \ Sound

### ![Response_Sound_RecordSound.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-sound-recordsound.png) Record Sound

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/F1Uimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/F1Uimage.png)

The **Record Sound** node initiates an audio recording session within the VR experience. This node utilizes a **User** dropdown parameter to determine whether the system captures microphone audio exclusively from the host or from all participating users. It outputs a **Success** boolean when the recording successfully starts.

---

### ![Response_Sound_File_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-sound-file-set.png) Set Sound File

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/2umimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/2umimage.png)

The **Stop Sound Recording** node halts an active audio recording session. This node requires a specified target **User** and an exact **FileName**. Upon execution, it stops the capture process and stores the resulting audio file directly into the project's Resource Management tab under the provided name

---

### ![Response_Sound_Volume_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/CZZresponse-sound-volume-set.png) Set Sound Volume

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/RDGimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/RDGimage.png)

The **Set Sound Volume node** is used to adjust the audio playback level of a specific 3D sound object within the scene. The numerical Volume input operates strictly within a range of 0 (muted) to 4 (maximum amplification)

---

### ![Response_Sound_PlayPause.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-sound-playpause.png) Sound Play

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/b8Gimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/b8Gimage.png)

The **Sound Play node** controls the playback of the audio file stored within a specific 3D sound object. When activated, the node uses the boolean Play input to determine the action for the targeted Sound Node—triggering the sound to start playing from the start of the audio file, or stopping the audio and seeking to the start.

---

### ![Response_Sound_Seek.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-sound-seek.png) Sound Seek

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/09limage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/09limage.png)

The **Sound Seek node** instantly jumps to a specific moment within the audio file attached to a 3D sound object. When activated, the node takes the targeted Sound Node and moves its playback position to the exact duration specified by the numerical Time input, measured in seconds.

---

### ![Response_Sound_Toggle.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-sound-toggle.png) Sound Toggle

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/rxDimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/rxDimage.png)

The **Sound Toggle node** easily switches between playing and pausing a specific 3D sound object in the scene. Once activated, the node evaluates the targeted Sound Node and automatically reverses its current playback status—pausing it if it is currently playing, or playing it if it is currently paused.

---

### ![Response_Sound_StopSoundRecording.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-sound-stopsoundrecording.png) Stop Sound Recording

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/yRAimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/yRAimage.png)

The **Set Sound File** node dynamically attaches or updates the audio source of a designated **Sound Node** object in the scene. This node requires the exact **FileName** of an audio file previously imported into the Resource Management tab, strictly including its file extension (for example, "welcome.mp3"). It outputs a **Success** boolean to confirm that the sound file was located and attached properly.

# Media \ Video

### ![Response_Video_File_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-video-file-set.png) Set Video File

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/W9Ximage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/W9Ximage.png)

The **Set Video File** node allows you to dynamically attach or change the media source of a specific Video Node within your scene. By assigning the target **Video Node** and inputting the exact **FileName** of your desired video (such as an `.mp4`), this node updates the object's media. For this to function correctly, the video file must first be imported into your project through the Resource Management tab. It also outputs a **Success** boolean to verify that the file was found and loaded.

##### Example

##### [![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/tRGimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/tRGimage.png)

In this example, an interaction is set up to load a short film onto a TV screen and immediately begin playback.

1. Upon interacting with the "Play Button" object, the **Node Triggered** event initiates the execution flow.
2. The **Set Video File** node is executed, assigning the previously imported video file "Short Film.mp4" directly to the "TV" video node object.
3. Once the file is successfully attached, the execution flow passes to the **Video Play** node (with the Play toggle set to **True**), which instantly starts playing the newly loaded short film on the TV screen.

---

### ![Response_Video_PlayPause.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-video-playpause.png) Video Play

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/VFGimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/VFGimage.png)

The **Video Play** node provides direct control over the playback of a **Video Node** through a boolean **Play** input. Setting the toggle to **True** starts the video, while **False** stops it.

### ![Response_Video_Seek.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-video-seek.png) Video Seek

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/nfcimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/nfcimage.png)

The **Video Seek** node immediately moves the playback of the target **Video Node** to a specific **Time** defined in seconds. It enables precise navigation to any timestamp within the video's total duration.

### ![Response_Video_Toggle.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-video-toggle.png) Video Toggle

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/cLoimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/cLoimage.png)

The **Video Toggle** node switches the playback state of the assigned **Video Node** between playing and paused. Each execution reverses the current state of the video material, making it ideal for simple play/pause button interactions.

# Cloud

### [![Response_Cloud_get_Attribute.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-cloud-get-attribute.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Get Cloud Attribute

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/plqimage.png)

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk--7"><div><div class="pt-0"><div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">  
</div></div></div></div></div>The **Get Cloud Attribute** node enables the user to retrieve saved progress for a specific VR Experience by assigning the attribute in the Attribute Name field. The progress can be saved for either the scene, the user, or both. Once the node is executed, the retrieved value can be acquired through the **Result** port.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/hALimage.png)

In this example, a **Get Cloud Attribute** node is used to retrieve stored data from Cloud. When the user enters the object named FinishLine, the object named Scoreboard will be shown. The data saved for this specific scene for all users is retrieved and stored in a variable named Scoreboard, which can then be displayed during the VR Experience.

---

### [![Response_Cloud_get_Attribute.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/response-cloud-get-attribute.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Set Cloud Attribute

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/JyBimage.png)

<div class="flex-shrink-0 flex flex-col relative items-end" id="bkmrk--15"><div><div class="pt-0"><div class="gizmo-bot-avatar flex h-8 w-8 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm flex items-center justify-center bg-token-main-surface-primary text-token-text-primary h-8 w-8">  
</div></div></div></div></div>The **Set Cloud Attribute** node enables the user to store data for a specific VR Experience by assigning the attribute in the Attribute Name field then set the value of it. the data can be stored for either the user, the scene, or both. Once the node is executed, the specified data is saved accordingly.

#### Example

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/orJimage.png)

In this example, a **Set Cloud Attribute** node is used to store data in Cloud. When the user enters the object named **FinishLine**, the value of the variable **Time** will be converted to String and stored under the **attribute named Time** for the **Scene Only**, meanwhile the value of the variable **Coins\_Count** will be converted to String and then stored under **the attribute Score** for the **User Only**.

**Note:** To retrieve the Cloud data, the experience must be run from a logged-in account in SimLab VR Viewer.

# Scene

###   


### [![Response_Scene_Load.png](https://simlab-soft.com/help/uploads/images/gallery/2024-11/response-scene-load.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Load Scene

[![Screenshot 2024-11-04 160632.png](https://simlab-soft.com/help/uploads/images/gallery/2024-11/scaled-1680-/w6Gimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)The **Load Scene node** is used to teleport between different scenes within your VR Experience. Enhancing the overall immersion and interactivity of the experience.

####   


#### Example

[![Add_Example2.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-11/scaled-1680-/WFMimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this example, the **Load Scene Node** is used to transition the user from one scene to another. This node facilitates changing scenes, allowing for a dynamic experience as users navigate through different environments within the VR application.

> [![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)[ Tutorial is available on SimLab VR Discord server](https://discord.com/channels/1062715275805470821/1307969317068869664 "Tutorial is available on SimLab VR Discord server")

---

### [![Response_Scene_Home.png](https://simlab-soft.com/help/uploads/images/gallery/2024-11/response-scene-home.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Home Scene

[![Screenshot 2024-11-04 160632.png](https://simlab-soft.com/help/uploads/images/gallery/2024-11/screenshot-2024-11-04-160632.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)The **Home Scene node** enables users to return to the initial scene of the VR Experience. This node provides a straightforward way for users to reset the VR Experience to the starting point, ensuring a user-friendly navigation experience.

####   


#### Example

[![Add_Example2.jpg](https://simlab-soft.com/help/uploads/images/gallery/2024-11/scaled-1680-/image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-example.jpg)

In this example, the **Home Scene Node** is used to return the user to the main scene when the trigger event occurs. This allows you to teleport back to the primary environment, enhancing the user experience by providing a clear and intuitive way to return to the starting point.

> <span style="color: rgb(0, 0, 0);">[![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)[ Tutorial is available on SimLab VR Discord server](https://discord.com/channels/1062715275805470821/1307969317068869664 "Tutorial is available on SimLab VR Discord server")</span>

---

### [![Response_Scene_Home.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/response-scene-import.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Import Scene

[![Screenshot 2024-11-04 160632.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/Mg3image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)The **Import Scene** node is used to load an external scene into the current VR Experience. This allows users to dynamically bring in additional environments, objects, or elements as needed during runtime.

####   


#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/xguimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-01/xguimage.png)[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-01/scaled-1680-/NMTimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-01/NMTimage.png)

In this example, the **Import Scene node** is used to load a car model into the scene when the "Import" object is triggered. The Node Triggered event detects user interaction and executes the Import Scene node, which then loads the specified car model from an external VR package file. This allows the car to appear dynamically within the VR environment.

---

<div class="mb-2 flex gap-3 empty:hidden -ml-2" id="bkmrk--13"><div class="items-center justify-start rounded-xl p-1 flex"><div class="flex items-center"><button aria-label="Read aloud" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="voice-play-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><button aria-label="Copy" class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary" data-testid="copy-turn-action-button"><svg class="icon-md-heavy" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div class="flex">  
</div><div class="flex items-center pb-0"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg>  
</div><button aria-expanded="false" aria-haspopup="menu" class="cursor-pointer h-[30px] rounded-md px-1 text-token-text-secondary hover:bg-token-main-surface-secondary" data-state="closed" id="bkmrk--14" type="button"></button></div></div></div>

# Integration

### [![OpenExternalConnection.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/openexternalconnection.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Open External Connection

SimLab Composer 14 introduces WebSocket support, enabling seamless integration with external systems allowing it to work with external hardware, co-simulation engines, and websites, unlocking numerous possibilities.

The WebSocket nodes (Open External Connection, Send Message, and <span data-darkreader-inline-color="" style="text-decoration: underline; color: rgb(35, 111, 161);">[On Message Received](https://simlab-soft.com/help/books/dynamic-training-builder-nodes-manual/page/on-message-received)</span>) are exclusively available in the Ultimate Edition.

The **Open External Connection** node enables the opening of a WebSocket connection to an external system. When the **Auto Handle Lua** is set to **true**, incoming messages containing Lua scripts will be automatically executed. This allows for real-time interaction between SimLab Composer and external systems, such as co-simulation engines or hardware, with the ability to dynamically execute Lua code as part of the interaction.

[![Screenshot 2025-02-02 162338.jpg](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/screenshot-2025-02-02-162338.jpg)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/screenshot-2025-02-02-162338.jpg)

**Input Ports:**

- Execute
- URL: WebSocket URL that includes the server IP address, port, channel (optional). Example: ws://server1.simlab-soft.com:8765/robots\_1
- Auto Handle Lua: Incoming messages containing Lua scripts will automatically execute those scripts If enabled (True). <div class="container_b7e1cb" id="bkmrk--25"><div class="visualMediaItemContainer_f4758a"><div class="oneByOneGrid_f4758a oneByOneGridSingle_f4758a"><div class="mosaicItem__6c706 mosaicItemNoJustify__6c706 mosaicItemMediaMosaic__6c706 hideOverflow__6c706"><div class="imageContent__0f481 embedWrapper_b7e1cb itemContentContainer_f4758a mosaicItemContent__6c706">  
    </div></div></div></div></div>

**Output Ports:**

- Execute
- URL
- Auto Handle Lua

---

### ![Response_Report_Completed.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-report-completed.png) Report Completed

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/Bukimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/Bukimage.png)

The **Report Completed** node functions similarly to the **Report Score** node, but it records both a score and a completion time simultaneously. It is ideal for finalizing tasks, exams, or training scenarios where both accuracy and speed are evaluated. Like the Report Score node, the recorded data is safely stored and utilized within the SimLab VR Assessment Portal for instructor review.

Key parameters:

- **Object Name:** The name of the exam, task, or entity being evaluated.
- **Score:** The numerical score or grade achieved.
- **Duration:** The total time taken to complete the evaluated task.

---

###  

### ![Response_Report_Score.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-report-score.png) Report Score

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/6Q4image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/6Q4image.png)

The **Report Score** node enables the system to register and record a specific value as a score when the node is executed. This is highly useful for tracking user performance, evaluating task completion, or logging quiz results within a training scenario.

The node utilizes the following key parameters to define the recorded data:

- **Object Name:** Specifies the name of the exam, task, or specific entity being evaluated.
- **Score:** The numerical input field where the final score value is passed or entered.
- **Report Type:** A dropdown menu that determines the classification or outcome of the score. The available options are **Passed**, **Scored**, and **Failed**.

The node stores the score and its associated information to be used primarily in the **SimLab VR Assessment Portal**, where instructors and administrators can securely view and evaluate the reported values.

##### Example

In this example, the system records a student's final score the moment they finish a test.

1. Upon interacting with the "Finish Quiz" object, the **Node Triggered** event initiates the execution flow.
2. The **Number Variable Value** node is used to retrieve the current numerical value stored in the `FinalScore` variable.
3. This retrieved value is passed directly into the **Score** input of the **Report Score** node.
4. The **Report Score** node is configured with the **Object Name** set to "Student Final Score" and the **Report Type** set to "Scored," which officially logs the student's result into the system's evaluation records when executed.

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/bkUimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/bkUimage.png)

---

### [![MessageSent.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/messagesent.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Send Message Node

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2025-02/scaled-1680-/h5mimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2025-02/h5mimage.png)

The **Send Message** node allows you to communicate with the WebSocket server by sending messages. It is essential to ensure that the message format follows the protocol that the server and other clients can process. This node enables real-time interaction with external systems, making it possible to transmit data or commands to connected servers or clients.

**Input Ports:**

- Executive
- URL: WebSocket URL that includes the server IP address, port, and channel (optional). Example: ws://server1.simlab-soft.com:8765/robots\_1
- Message

**Output Ports:**

- Execute
- URL
- Message

# SceneNode \ Snapping

### [![Response_Node_Transform_Snap_Can.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-transform-snap-can.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/response-node-transform-snap-can.png) Can Snap Node

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/HBgimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/HBgimage.png)

The **Can Snap Node** checks whether a specific SceneNode is currently within the eligible snapping range of another object. This node evaluates the spatial relationship between objects and outputs a "Possible" boolean to confirm if a snap can occur, alongside referencing the "Other Node" and its spatial "Transform" data for further logic use.

---

###  

### [![Response_Node_Transform_Snap.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-transform-snap.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/response-node-transform-snap.png) Node Snap

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/UwFimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/UwFimage.png)

The **Snap Node** instantly snaps a designated SceneNode directly to the nearest eligible target socket or node. Executing this node forces the object to immediately align and attach itself to the valid snapping destination without any transition time.

---

###  

### ![Response_Node_Transform_Snap_Animated.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-transform-snap-animated.png) Node Snap (Animated)

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/gZEimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/gZEimage.png)

The **Snap Node (Animated)** securely aligns and attaches a SceneNode to its nearest eligible target, but does so with a smooth visual transition. This node utilizes a "Duration" input to smoothly interpolate the object's movement into its snapped position over the specified number of seconds, rather than snapping instantly.

# SceneNode \ Hierarchy

### [![Responses_SceneNode_NodesManagement_GetNodeChildren.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/responses-scenenode-nodesmanagement-getnodechildren.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Get Node Children

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/Zlrimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)The **Get Node Children** enables the user to retrieve child SceneNodes from a specified parent node within the hierarchy in the scene browser. This function allows users to access the children of a parent node in the VR environment, facilitating more complex interactions and hierarchies.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/mPyimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/S2himage.png)

In this example, the **Get Node Children** enables the user to retrieve the child of a group named "Ball Parent" on the Trigger event. When the user triggers the Activate object, the Get Node Children retrieves the child node, and the Get Node Attribute (String) is used to acquire the child’s attribute.

---

### [![Response_Node_Parent_Reset.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-node-parent-reset.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png) Reset Parent Node

[![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/YMCimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/add-node.jpg)The **Reset Parent Node** enables the user to reset all transformations applied to an object and return it to its original position relative to its main parent. This can be done by linking the node to an event or condition within the scene. Once the reset is executed, the object will revert to its default state under the main parent.

#### Example

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/uD6image.png)](https://simlab-soft.com/help/uploads/images/gallery/2024-08/S2himage.png)

In this example, a **Reset Parent Node** is used to reset the transformations of a car object to its original state relative to its main parent once the "Car Move" sequence ends. When the user triggers the Activate object, the car move animation sequence will play. After the sequence concludes, the Reset Parent Node is triggered automatically, returning the car to its default position under the main parent.

> [![Discord_Icon.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/discord-icon.png) ](https://simlab-soft.com/help/uploads/images/gallery/2024-08/response-value-number-add.png)[Tutorial is available on SimLab VR Discord server](https://discord.com/channels/1062715275805470821/1239178616877875354/1239178616877875354 "Tutorial is available on SimLab VR Discord server")

# SceneNode \ Appearance

### ![Response_Node_Visibility_Get.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/response-node-visibility-get.png) Is Node Visible

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/MNnimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/MNnimage.png)

This node checks the current visibility state of a specified 3D object within the VR Viewer. It evaluates whether the targeted object is currently rendered (shown) or hidden in the scene, and outputs this status as a boolean value (True or False).

##### Example:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-03/scaled-1680-/DtJimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-03/DtJimage.png)

In this example, triggering the "Assembly" object prompts the system to check if the "Gear" node is currently visible. If the gear is visible, the True branch executes, setting the gear to glow and playing a "Remove Gear" animation sequence. However, if the gear is already hidden, the False branch executes instead, displaying a "Help Panel" to the user.

# SceneNode \ Curve

### ![Response_Curve_Create.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/response-curve-create.png) Create Curve

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/5FWimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/5FWimage.png)

The **Create Curve node** initializes a new 3D cylindrical line within the VR scene. This is highly useful for creating dynamic visual elements like charts, graphs, or data visualizations.

When activated, it generates a base curve using four primary inputs: a unique text **Name** (which acts as an identifier required by all other curve-related nodes to target this specific line), a **Color**, a numerical **Thickness** value, and a **CurveType** dropdown that dictates whether the overall line behaves as a smooth curve or rigid straight lines. It then outputs a reference to the newly created CurveNode to continue the logic flow.

---

### ![Response_Curve_Point_Add.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/response-curve-point-add.png) Add Curve Point

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/BI7image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/BI7image.png)

The **Add Curve Point node** builds upon an existing curve by generating a new point in 3D space. Once activated, the node locates the specific curve identified by the **Name** input and places a new point at the provided **X, Y, and Z** coordinates. The system automatically draws a line connecting this newly created point to the previously established point, seamlessly extending the curve. Crucially, this node outputs an **Index** value—a unique number assigned to this specific point in the sequence (e.g., the 3rd point created gets an index of 3)—which is used to target this point later.

##### Example:

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/yV8image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/yV8image.png)

In this expanded example, we build an interaction where clicking a button initializes a new curve and sequentially places two connected points based on a target object's location:

1. A **Node Triggered** event node continuously listens for the user to interact with a specific "Button" object in the scene.
2. Once the button is clicked, it activates a **Create Curve** node, which initializes a new curve named "dataCurve" with a distinct green color, a thickness value of 7, and a "Curved" line type.
3. The execution flow immediately proceeds to a **Get Node Location** node, which retrieves the exact X, Y, and Z spatial coordinates of a target 3D object named "Point".
4. The first **Add Curve Point** node is activated. It takes the "dataCurve" identifier and utilizes the precise X, Y, and Z coordinates retrieved from the target object to generate the first anchor point of the curve.
5. Simultaneously, an **Add** math node receives the original Y coordinate from the "Point" object and adds a numerical value of 2 to it.
6. Following the creation of the first point, a second **Add Curve Point** node is executed. It uses the same "dataCurve" identifier and the original X and Z coordinates, but it uses the newly calculated result from the Add node (Y + 2) for its vertical placement. This generates a second point exactly 2 units directly above the first, automatically drawing a connected line between them.

---

### ![Response_Curve_Point_Remove.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/response-curve-point-remove.png) Remove Curve Point

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/hWoimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/hWoimage.png)

The **Remove Curve Point node** is used to permanently delete a specific point from an active curve. Once activated, it takes the curve's **Name** and the specific **Index** number of the point you wish to erase. Upon deletion, the curve automatically bridges the gap between the remaining adjacent points to maintain a continuous, unbroken line.

---

### [![Response_Curve_Thickness_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/response-curve-thickness-set.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-04/response-curve-thickness-set.png)Set Curve Thickness

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/5qKimage.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/5qKimage.png)

The **Set Curve Thickness node** dynamically adjusts the physical width of an existing curve during the VR experience. When activated, it targets the curve specified by the **Name** input and instantly changes its visual bulk to match the number provided in the **Value** input, allowing you to easily scale the visual prominence of the line on the fly.

---

### [![Response_Curve_Type_Set.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/response-curve-type-set.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-04/response-curve-type-set.png)Set Curve Type

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/iW3image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/iW3image.png)

The **Set Curve Type node** instantly alters how the connections between a curve's points are visually rendered in the scene. Once activated, it locates the curve by its **Name** and applies the newly selected **CurveType** from the dropdown menu. This allows you to toggle a curve between "Curved" (which renders smooth, sweeping connections between the points) and "Linear" (which renders sharp, perfectly straight lines between the points) at any time.

---

### [![Response_Curve_Point_Update.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/response-curve-point-update.png) ](https://simlab-soft.com/help/uploads/images/gallery/2026-04/response-curve-point-update.png)Update Curve Point

[![image.png](https://simlab-soft.com/help/uploads/images/gallery/2026-04/scaled-1680-/wE1image.png)](https://simlab-soft.com/help/uploads/images/gallery/2026-04/wE1image.png)

The **Update Curve Point** node allows you to dynamically change the 3D location of a previously created point on an existing curve. When activated, it targets the curve using the **Name** input and isolates a specific point using its numerical **Index** value. It then instantly moves that point to the newly provided **X, Y, and Z** coordinates. The line connecting the points will automatically recalculate and redraw itself to reflect the point's new location in the scene.

# States



# Node Is Grabbed

### ![State_Node_Grabbed.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/state-node-grabbed.png) Node Is Grabbed

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/1itimage.png)

The **Node Is Grabbed** node enables the user to check if the assigned node is grabbed with **OnTrue/OnFalse** ports to execute responses or **Output Boolean** port that is compatible with event nodes.

#### Examples

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-09/scaled-1680-/97Qimage.png)

In this example, a **Node Is Grabbed** node is used to check if the node assigned is grabbed. Once the object named **Activate** is triggered, the sound named Instructions will play, and the object named Key will show up and become grabbable. Once the object named **Key** is grabbed, the sequence named **Door\_Open** will play.



---

# Watch Boolean Expression

### ![State_Expression_Boolean.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/state-expression-boolean.png) Watch Boolean Expression

![Ceiling Node.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/5dMimage.png)

The **Watch Boolean Expression** node enables the user to check the value of specific variable(s) with **OnTrue/OnFalse** ports to execute responses or **Output Boolean** port that is compatible with event nodes.

#### Examples

![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/Of8image.png)

In this example, a **Watch Boolean Expression** node is used to check the value of **a string variable** to determine if it is true or false, depending on the result, the object named Activate can be triggered. Once the event is triggered, the object named Table will be shown during the VR Experience.


![image.png](https://simlab-soft.com/help/uploads/images/gallery/2024-08/scaled-1680-/1PWimage.png)

In this example, a **Watch Boolean Expression** node is used to check the value of **a number variable** to determine if it is true or false, depending on the result, the object named Activate can be triggered. Once the event is triggered, the object named Table will be shown during the VR Experience.


---