# Breakroom Documentation > Documentation for the Breakroom virtual-worlds platform and its Lua scripting API. ## Advanced Tutorials ### ADVANCED TUTORIALS #### [πŸ—ƒUploading your own Region](/advanced-tutorials/uploading-your-own-region.md) [9 items](/advanced-tutorials/uploading-your-own-region.md) --- ### Creating and copying avatar shapes #### Overview[​](#overview "Direct link to Overview") Body shapes can be created in Breakroom using the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md). Body shape data can then be copied and added to clothing items in Unity, which will change the body shape of the user when the item is worn. info Within our advanced documentation, you may see different words used to describe the same concept or tool. This is because Breakroom is based on the Sinespace virtual world platform. Please be aware of the following: * When you [install](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) the Breakroom SDK, you may notice that certain tools and menus refer to *Sinespace, Sinespace components,* or the *Sinespace SDK*. This is normal and has no effect on performance. * When testing and uploading virtual items, you may see documentation, menus, and buttons that refer to Breakroom Worlds as *grids*. info The instructions provided in this section presume an advanced working knowledge of Breakroom, virtual assets, and third-party 3D software. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. #### Creating a new body shape[​](#creating-a-new-body-shape "Direct link to Creating a new body shape") ![](/assets/images/Shapes_001-894cc380b32046cc7c61ce316bb0309d.png) *Highlighted: The location of the Details sub-tab.* The tools under the [Outfit window > Appearance tab](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-appearance-tab) can be used to create a custom avatar shape. Avatar customization is covered in greater detail in our [Getting Started section](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#customizing-your-head-and-body-shape), but the steps below will serve as a quick-start guide for creating a new outfit and editing your avatar shape. 1. Open the Outfit window by clicking the **Outfit button** in the[ bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 2. Click the **Create New Outfit button** located at the bottom of the preview window. ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABQCAYAAACH+lLXAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gF2CPQ0oqdYOOXwNOlUQ9icP4rLNx2j/vV3oMEEqSXLVYKeAQE6PmgcJCm4wgkyeyhIbXfMqRB/IU+83rqSXqjzz+DNbVPMonI32GsF0Fi86kN6NoxGMi8qCHkYUR0xIwDNr6FhTTev7CtsMVuk4aZH2WAlpMc3tL9e317H2YaGdkcGbWNQCPI4mbB+aMXgSDPR7i4BqT+EL+7elA+gInWVmVKPudaQAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAGIbfpkpVIgp2EHHIUJ3soiKOUsUiWChthVYdTC79gyYNSYqLo+BacPBnserg4qyrg6sgCP6AODs4KbpIid8lhRYx3nHcw3vf+3L3HSA0KkyzuuYATbfNVDwmZXOrUugVvRAxSFOUmWUk0osZ+I6vewT4fhflWf51f45+NW8xICARzzHDtIk3iGc2bYPzPnGYlWSV+Jx4wqQLEj9yXfH4jXPRZYFnhs1Map44TCwVO1jpYFYyNeJp4oiq6ZQvZD1WOW9x1io11ronf6GY11fSXKc1ijiWkEASEhTUUEYFNqK066RYSNF5zMc/4vqT5FLIVQYjxwKq0CC7fvA/+N1bqzA16SWJMaD7xXE+xoDQLtCsO873seM0T4DgM3Clt/3VBjD7SXq9rUWOgIFt4OK6rSl7wOUOMPxkyKbsSkFaQqEAvJ/RN+WAoVugb83rW+scpw9Ahnq1fAMcHALjRcpe93l3T2ff/q1p9e8HYGlyn6r0ghYAAA12aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjI1MGZhNDkyLTg1OTEtNDhlNi04Y2EwLTY5ZGMyMDYxNGQ1MCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjYmYyZWNkNC01YTIzLTQzMjMtODFiMS05ZTE0OTYyM2JiZTAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjMjJjNjc2YS02MDQ5LTQxMWItYTllYy1hZGMyYjE2MDQzOWUiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTcyNjE1ODAyODgwNzUxMyIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM4IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNDowOToxMlQxMjoyMDoyNy0wNDowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjQ6MDk6MTJUMTI6MjA6MjctMDQ6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2NmQ5YmM3Ny0yOWQxLTQyYTctYmY1MS0zMDE2NjFmMGQzODUiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDktMTJUMTI6MjA6MjgiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+m1clPgAAAAZiS0dEAP0AZgBcZ2CF3gAAAAlwSFlzAAASdAAAEnQB3mYfeAAAAAd0SU1FB+gJDBAUHFeMxuwAABDRSURBVHja7VxLiBzHGf6qpnqeq33NrMaK0UhgRTIbYyFhJ44xCSEOdkA45KKDwacQC/LCYJJTbsktGJyEHOSQSwwm+BIQPsRgTA7GCQRkbIRAUpw4qzjyZh/a9+xM93Tl0NPdf/1V3TuzOxMrYRuWnVdXV331v/+/fvHoF57WOLxGdkmtD/Ec1RWGISQAHII6GjABRIAegjoaMA1AD0E9OJgAoPgPtNb4y9u/BLQGhEj/pz8wPxMCCMPovxAANID+ff2XyTj0ovfF47rG1IjGpHOgcxEy+l5rQEpyX//hAulrxP8EoOmz06/TsZHea6w//fKRr37fVkpO2OPFU1ApIFKav43fxyDG90mRgssB4QDGf5p/R74H25xkAxEBm9wXjwfynoCm+Ub2h9F0/f21JGuDOZ8sLe/8lC4QMB/Of0PBcVKyg6q1435OKVkgup5l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) *Pictured: The Create New Outfit button.* 3. A pop-up will appear, prompting you to select a basic body morphology. Make your choice by clicking either the **Masculine** or **Feminine button**. 4. Enter a **name** for your new outfit, and click the **Save button**. 5. Once your new outfit is set up, click on the **Appearance tab.** Use the presets available under the Appearance tab and the face and body sliders available under the **Details tab** to create your desired head and body shape. 6. When you are happy with your shape, click the **Save button**. warning Masculine and feminine body shape templates differ in how they are set up. Therefore, body shapes that have been created for one gender template will not work when applied to an outfit built on the other gender template. #### Copying a body shape for use in Unity[​](#copying-a-body-shape-for-use-in-unity "Direct link to Copying a body shape for use in Unity") ![](/assets/images/Shapes_003-6727b3d857ec9c2e5bade92dd145398f.png) *Highlighted: The location of the "Copy your current body shape to clipboard" button.* To copy Breakroom body shape data to your computer clipboard, follow these steps. 1. Open the Outfit window by clicking the **Outfit button** in the[ bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 2. Click on the **Appearance > Details tab.** 3. Click the **"Copy your current body shape to clipboard" button** located at the top of the Head tab. #### Applying a body shape to a clothing item in Unity[​](#applying-a-body-shape-to-a-clothing-item-in-unity "Direct link to Applying a body shape to a clothing item in Unity") ![](/assets/images/Shapes_004-5cecc01b545f9bcde87329f645a20446.png) *Pictured: A clothing item selected in Unity.* To apply the copied Breakroom body shape data to a clothing item in Unity, follow these steps. 1. Open Unity and import the desired item of clothing. This can be a clothing item you've created, or you can obtain clothing templates at . 2. Next, make sure the clothing model is selected in the Hierarchy and click the **Add Component button.** Search for "clothing," and add the **Clothing Item Settings component** to the model. ![](/assets/images/Shapes_005-90023506f814a555713d7eafb81cedac.png) *Pictured: The same clothing item, now with the Clothing Item Settings component added.* 3. [Prepare your clothing item for upload](/advanced-tutorials/uploading-your-own-virtual-clothing.md) following the linked instructions. 4. Before uploading your clothing item, click the **Shapes tab** in the **Clothing Item Settings component,** and paste in the shape details you copied from Breakroom. ![](/assets/images/Shapes_006-a402d26c9fb00560eabf3196eef12706.png) *Pictured: Shape data copied into the Clothing Item Settings component in Unity.* 5. Finally, [prefab and upload](/advanced-tutorials/uploading-your-own-virtual-clothing.md#prefabbing-and-uploading-your-clothing) your clothing item. Once uploaded, your clothing item will be available for testing on the [preview server](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md). When you have tested the item and are happy with how it performs, you can push it to the [live server](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) for your users. --- ### Installing the Quest System #### Overview [](#overview)[​](#overview- "Direct link to overview-") Breakroom's Quest System leverages the power of Unity to build narrative structures in your virtual spaces. Usually driven by interactions with NPCs, quests can lead users through gameplay-driven socialization, learning, or training modules. You can also use them to guide tours, tell stories, or create other step-based points of engagement. ![](/assets/images/Quest_System_001-9535297b22e8eef84b0a72f659eeddf1.png) *Pictured: A quest in action.* info Within our advanced documentation, you may see different words used to describe the same concept or tool. This is because Breakroom is based on the Sinespace virtual world platform. Please be aware of the following: * When you [install](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) the Breakroom SDK, you may notice that certain tools and menus refer to *Sinespace, Sinespace components,* or the *Sinespace SDK*. This is normal and has no effect on performance. * When testing and uploading virtual items, you may see documentation, menus, and buttons that refer to Breakroom Worlds as *grids*. info The instructions provided in this section presume an advanced working knowledge of Breakroom, virtual assets, and third-party 3D software. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. #### Understanding the quest system[​](#understanding-the-quest-system "Direct link to Understanding the quest system") Quests are depicted by a blue exclamation mark located above a **Quest Giver,** which can be any type of clickable game object equipped with a collider component. Clicking on a Quest Giver object calls up the first **Quest Dialog Box** (this step is numbered 0 in Unity), along with Start and Cancel options. The Quest Dialog Box displays the Name and the Description of the current step. As soon as a user accepts the quest, their next steps will be indicated by blue question marks. Below the mini map, the **Quest Name** ([Quest Designer Component](/advanced-tutorials/installing-the-quest-system.md#the-quest-designer)) will appear, along with the number of steps included in the quest and a hint for the user. Hints are related to a future step the user needs to take (usually the very next step). Therefore, the hint will need to be entered into the next step the user needs to reach. For this reason, there is no need to write a hint inside step 0 (the opening step), unless the quest brings the user back to the Quest Giver. #### Setting up a quest[​](#setting-up-a-quest "Direct link to Setting up a quest") ##### The Quest Giver[​](#the-quest-giver "Direct link to The Quest Giver") All quests are started by clicking on a particular objectβ€”the so-called **Quest Giver**, or **Quest NPC**. After reviewing the quest information, users have the option to continue or to cancel the quest. To turn any object in your scene into a Quest NPC, add the **Quest NPC component** to it. You can use a humanoid NPC if you wish, but you can add the Quest NPC component to any object with a collider on it. Using the [**Statue component** **object**](/advanced-tutorials/installing-the-quest-system.md#statue-component), render the NPC as a character, and then add the **Quest NPC component**. ![](/assets/images/Quest_System_002-ac6344d9b6493718dc91b5cdfd6007bc.png) *Pictured: The Quest NPC component.* Quest NPCs are placed into the **Destination NPC field** in any Step Inspector of your quest. ##### The Quest Designer[​](#the-quest-designer "Direct link to The Quest Designer") ![](/assets/images/Quest_System_003-2777fa267b125ecb7cf671750b5aac6f.png) *Pictured: The Quest Designer component.* Create an empty game object in your scene, set its location to 0,0,0, and then add the **Quest Designer** **component** to it. Give the quest a name and a description, and then customize the following fields to meet your specifications. ###### **Quest type descriptions**[​](#quest-type-descriptions "Direct link to quest-type-descriptions") * Daily: Users can play through the quest once every day * Main: Users can play the quest only once * Side: This quest can only be triggered by another quest * Activity: Users can replay the quest continually * Temporary: (This function is not currently supported) ###### **Quest ID**[​](#quest-id "Direct link to quest-id") Click the **Reserve ID button** in the Inspector to assign a unique ID to your quest. The quest ID is generated automatically. danger **DO NOT** delete the quest ID Inspector field. If you don't remember the quest ID number, you will need to reserve a new one. If a particular quest is a used in a dependency list, you will need to edit all of the quests that depend on it after you change the quest ID. ###### **Quest Dependency IDs**[​](#quest-dependency-ids "Direct link to quest-dependency-ids") You can chain quests together using **Quest Dependency IDs**. To get started, click the **arrow** to the left of the field to expand this section. Set the **Size field** to the number of quests that will need to be completed before this quest is available. Click **Enter**, and that number of fields will appear. In each empty field, add the individual quest ID of one of the quests that must be completed by the user prior to the start of this *particular* quest. This option allows you to have multiple quests initiated by the same quest NPC, in a series. ###### **Reward ID**[​](#reward-id "Direct link to reward-id") You can set a reward for successful completion of a quest using the **Reward ID field**. Simply enter the Curator ID for any virtual good item you have uploaded. You can get this from the Virtual Good component attached to the reward object (once it has been uploaded), or from the Item panel in [Curator](https://curator.sine.space/). Please note that the reward object must be [live](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) before it can be distributed by a live quest. ###### **Open Canvas button**[​](#open-canvas-button "Direct link to open-canvas-button") The **Open Canvas button** opens a Quest Designer Canvas, which allows you to build your quest by adding steps. To get started, add the first step, and reference the **Quest NPC object** (by placing the object into the Quest NPC field). #### Adding and managing quest steps[​](#adding-and-managing-quest-steps "Direct link to Adding and managing quest steps") After you've set up your Quest Giver object and customized your basic quest functionality, you can add quest steps one at a time in order to flesh out your story. Each time you add a step, it will duplicate your last step. ##### Add a step[​](#add-a-step "Direct link to Add a step") ![](/assets/images/Quest_System_004-3420023a783c414d499cf945c6e4b6f4.png) *Pictured: Options available under the Quest Designer Canvas.* Open the Quest Designer Canvas by clicking the **Open Canvas button**. Then click the **Add Step button**. ##### Delete a step[​](#delete-a-step "Direct link to Delete a step") You can delete any step within a chain; its children will be reconnected to the parent step. You cannot delete the first step. ##### Reorder a step[​](#reorder-a-step "Direct link to Reorder a step") Click the **arrow** at the top left corner in the Step Inspector window to reorder your steps. You cannot reorder the first step. If there are only two steps in your quest, you won't see the arrow for the second step. #### Step types explained[​](#step-types-explained "Direct link to Step types explained") ##### NPC steps[​](#npc-steps "Direct link to NPC steps") The NPC step type is mandatory for starting the quest. Step 0 will always be an NPC step, and you cannot edit it to make it a different type. Other steps can also be NPC steps. You can use a Game Object (or any object) and attach the [**Quest NPC component**](/advanced-tutorials/installing-the-quest-system.md#the-quest-giver) to it, placing it in the **Destination NPC field**. ##### Activity steps[​](#activity-steps "Direct link to Activity steps") ![](/assets/images/Quest_System_005-9805e0c1a9455ee4c598a76955d5b5ad.png) *Pictured: An Activity step equipped with a startable.* Activity steps are general steps which you can use to deploy a wide range of activities the user must complete before the next step initiates. Here's a breakdown of the various fields. ###### **Activity**[​](#activity "Direct link to activity") You can drag any **Startable component** into into the **Activity field** in this step. The quest system includes a range of standard [startables](/advanced-tutorials/installing-the-quest-system.md#startables) you might want to useβ€”for example, you might require a user to wear a particular clothing item or sit on a particular furniture item. You can also write your own startables, which can be full game rounds or learning modules. After proper setup, the user will need to complete each startable before moving on with the quest. ###### **Autoplay**[​](#autoplay "Direct link to autoplay") Check the "Autoplay" option if you want this step to start immediately after the prior step is completed. If you leave the Autoplay option unchecked, the user will need to click the quest NPC to cue the next step. You may need to leave Autoplay unchecked if your prior step is one that is registered as complete at the start of the step, and the user will still be engaged in an unrecorded activity. For instance, if the prior step was an activity step using *StartableGestureRequirement*, the quest system will register the user as having completed the step when they initiate a gestureβ€”but that gesture may take thirty seconds to play, during which you may not want the next step to initiate. ###### **Replay Discussion NPC**[​](#replay-discussion-npc "Direct link to replay-discussion-npc") The **Replay Discussion NPC** is the object in the scene the user needs to click if they have failed to complete the quest step. This may be because the quest step is a game component which can be failed, such as a learning component with a passing grade. Or it may be because they logged out, or were disconnected halfway through the deployment of the startable. The Replay NPC can be your original Quest NPCβ€”but if that is geographically some distance away from the relevant quest step, you may chose to put another object near the quest step activity which the user can click to restart the step. This can be any object with the **Quest NPC component** added to it, dragged into the **Replay Discussion NPC field** in the step. ###### **Area Hint**[​](#area-hint "Direct link to area-hint") If you are using [NavMesh](https://learn.unity.com/tutorial/navigation-basics) to guide your users around the quest, the area hint will tell them where to go. This might be the same object as the Replay Discussion NPC, but it can also be any game object you drag into the field. ##### Quest steps[​](#quest-steps "Direct link to Quest steps") ![](/assets/images/Quest_System_006-0ffc7c79a40fac854906511a87e9b17b.png) *Pictured: A quest step.* Quest steps allow you to embed one quest inside another. This is a great way to move users from one Region to another. (You can also use the **Quest Game Object component** to spawn teleportation portals at the right moment in front of the user, leading them to the next Region.) ###### **Subquest ID**[​](#subquest-id "Direct link to subquest-id") This is the field where you'll paste the ID of the child quest. ##### Visit location steps[​](#visit-location-steps "Direct link to Visit location steps") ![](/assets/images/Quest_System_007-2e4c6a86aaab5ae2c50022b3ab34ff3d.png) *Pictured: A Visit Location step.* Visit location steps require the user to go to a specific place in your Region to continue the quest. ###### **Area to Visit**[​](#area-to-visit "Direct link to area-to-visit") Drag any game object, including any NPC, into this field to require the user to visit this location before the quest continues. This step can be used in conjunction with [NavMesh](https://learn.unity.com/tutorial/navigation-basics) to lead users to their goal via a visible path. ###### **Proximity (meters)**[​](#proximity-meters "Direct link to proximity-meters") This creates a "proximity halo" around the target objects, within which a user's presence will be registered. For instance, you may want to specify that users must travel within one meter of an object. ##### Collection steps[​](#collection-steps "Direct link to Collection steps") ![](/assets/images/Quest_System_008-24fc75b7a38b3b3e8c8052e72fd838a0.png) *Pictured: A Collection step.* A Collection step requires the user to click on and "collect" a specific game object in the scene. ###### **Collectible Item**[​](#collectible-item "Direct link to collectible-item") Add the **Quest NPC component** to the object you want the user to click on and collect. Drag the object into the **Collectible Item field** in the quest step. Make sure it has a collider on it so the user can click on it. ###### **Area Hint**[​](#area-hint-1 "Direct link to area-hint-1") If you want [NavMesh](https://learn.unity.com/tutorial/navigation-basics) to lead a user to the collectible, you can drag it into the **Area Hint field**. If you want users to have to search without a hint, leave it empty or add your original Quest NPC to guide users back to the quest area in the event they leave the Region during this step. ##### Counter steps[​](#counter-steps "Direct link to Counter steps") ![](/assets/images/Quest_System_009-fa30079cca3ea3868ba744d39f541e78.png) *Pictured: A Counter step.* A Counter step requires users to collect a defined number of counters. Use this step in conjunction with objects in the scene that have either the **Quest Counter Clickable** or **Quest Counter Proximity component** attached. You may also want to use the **Startable Timed Counter,** which offers similar functionality to this step when added to the Activity step, but on a timed basis. ###### **Number required**[​](#number-required "Direct link to number-required") This field specifies the number of counters the user needs to collect. This can match the total number available in the scene, or there can be far more in the scene than the required number, depending on the nature of your game. ###### **Quick ID Picker/Token ID**[​](#quick-id-pickertoken-id "Direct link to quick-id-pickertoken-id") Add whatever ID you have manually applied to the **Counter ID field** of the **Quest Counter Clickable** or **Quest Counter Proximity component** attached to your counters. ###### **Area Hint**[​](#area-hint-2 "Direct link to area-hint-2") Use this field in conjunction with the [NavMesh](https://learn.unity.com/tutorial/navigation-basics) feature to guide people to an area, or drag your Quest NPC here to guide users back to the start of the step should they relog before completion. ##### Conversation steps[​](#conversation-steps "Direct link to Conversation steps") ![](/assets/images/Quest_System_010-d398c23e01279b60f5aa2d0a6237d9ad.png) *Pictured: A Conversation step.* Conversation steps allow you to build cutscenes into the quest, with successive combinations of dialogue, camera, audio, and animation assigned to both the NPC and the player. To edit a conversation step, open the Quest Designer Canvas (using the **Open Canvas button** at the bottom of the quest chain in the Inspector window). Then look for and edit the following fields. ###### Conversation Actors[​](#conversation-actors "Direct link to Conversation Actors") ![](/assets/images/Quest_System_011-de1b7b9349b5aa9aae149d4e0b426e67.png) The conversation actors can be one or more NPCs and the player themselves. Add an actor and drag any object with the **Quest NPC component** attached to it to the **NPC Object field**. ###### **Actor Name**[​](#actor-name "Direct link to actor-name") This name will appear in dialogue panels during the conversation. ###### **Is Player**[​](#is-player "Direct link to is-player") Check this box to use the player as your actor. Enter %PLAYER% into the **Actor Name field** to use the player's own username in dialogue. ###### **Move to Location**[​](#move-to-location "Direct link to move-to-location") Add an empty game object in the scene to this field to move your player to the location of that object for the duration of the conversation. This allows you to align the player with specific camera shots defined by you during the conversation. ###### **Conversation Dialogues**[​](#conversation-dialogues "Direct link to conversation-dialogues") ![](/assets/images/Quest_System_012-9ae6213dd07e5b478a26cf7a5a5e63cf.png) Once you have defined the actors in your conversation, you can add as many steps to the conversation as you like. ###### **Actor**[​](#actor "Direct link to actor") Choose the actor narrating the dialogue step. ###### **Text**[​](#text "Direct link to text") Enter the text as it should appear in the dialogue panel. ###### **Animations**[​](#animations "Direct link to animations") Add an animation to the NPC or the player. ###### **Wait for Continue?**[​](#wait-for-continue "Direct link to wait-for-continue") Check this box if you want the dialogue step to remain on the screen until the user clicks **Continue**. ###### **Wait Timeout**[​](#wait-timeout "Direct link to wait-timeout") Define a time in seconds if you want one set of dialogue to end and the next to start automatically without the user clicking **Continue.** ###### **Camera Angle**[​](#camera-angle "Direct link to camera-angle") Create an empty game object in your scene and position it so that it looks where you want the user's camera to look during the dialogue. You can position your view in the scene within Unity, and then highlight the game object. In the top menu, go to **GameObject > Align with view** to move the position and rotation of the game object to your view. ###### **Dialogue Audio**[​](#dialogue-audio "Direct link to dialogue-audio") You can add audio clips to the dialogue by dragging an audio file from your project into this field. ###### **Use Lip Sync**[​](#use-lip-sync "Direct link to use-lip-sync") Check this box if you want the mouth of the actor to be animated by your audio file. ###### **Cutscene Dialogue Canvas**[​](#cutscene-dialogue-canvas "Direct link to cutscene-dialogue-canvas") To use the Conversation step, you need to drag the **Cutscene Dialogue Canvas prefab** into your scene. This screenspace canvas displays the dialogue during cut scenes, and contains the **Continue button** users can access if you decide to include that function in your dialogues. *Make sure the Panel, which is a child of the Canvas, is disabled (the checkbox at the top of the Inspector).* This ensures that the panel will only be visible to users during the conversation steps of a quest. Left on, it will be permanently applied to the screen of everyone in the Region. Avoid putting the Cutscene Dialogue Canvas into a parent objectβ€”or, if you do, ensure the parent object is located at 0,0,0 in your scene. Otherwise the canvas will be offset or invisible to the players. ##### Branch NPC steps[​](#branch-npc-steps "Direct link to Branch NPC steps") ![](/assets/images/Quest_System_013-98b4496faeedc35828741184f6ec6ecc.png) *Pictured: A Branch NPC step.* Branch NPC steps allow you to set up several options from which your players can choose. This can lead to different quest steps based on the user's choice. #### Startables[​](#startables "Direct link to Startables") Startables are components that you can drag into the [Activity step](/advanced-tutorials/installing-the-quest-system.md#activity-steps) of a quest. You must attach the startable component to a relevant game object; it some cases, this might be an empty game object created just to house the startable. You can then drag that object into the **Activity field** of an Activity step. ##### Startable Gesture Requirement[​](#startable-gesture-requirement "Direct link to Startable Gesture Requirement") ![](/assets/images/Quest_System_014-6d6d6b9efd96a339fb1ba33878837d5c.png) *Pictured: The Startable Gesture Requirement fields.* This startable will require the user to play a specific gesture in order to continue the quest. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive "Direct link to is-exclusive") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Item ID**[​](#item-id "Direct link to item-id") This field contains the item ID number for the specific gesture you want the user to play. You can get this ID number from the VirtualGood component attached to the gesture once it has been submitted, or from your item list in [Curator](https://curator.sine.space/). ###### **Any**[​](#any "Direct link to any") If you are willing to accept any gesture to complete the quest step (as opposed to a specific one), you may check this box. ###### **Min Participants**[​](#min-participants "Direct link to min-participants") This option defines the minimum number of gesture participants required to complete the step. For instance, you can set this option to "2" and tick **Any** to require the user to do any two person gesture with another user. ##### Startable Clothing Requirement[​](#startable-clothing-requirement "Direct link to Startable Clothing Requirement") ![](/assets/images/Quest_System_015-66356f9e83f009cf10b5fcf0f496ca98.png) *Pictured: The Startable Clothing Requirement fields.* This startable will require the user to wear a specific clothing item in order to continue the quest. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive-1 "Direct link to is-exclusive-1") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Clothing Item ID1/ID2**[​](#clothing-item-id1id2 "Direct link to clothing-item-id1id2") These fields allow you to specify two items of clothing that can be worn to fulfill the requirement. For instance, you may specify one male and one female clothing item. You can get this ID number from the VirtualGood component attached to the clothing item once it has been submitted, or from your item list in [Curator](https://curator.sine.space/). ##### Startable Sit Requirement[​](#startable-sit-requirement "Direct link to Startable Sit Requirement") ![](/assets/images/Quest_System_016-a21fa4f03c0b40957936f94fe195c5c7.png) *Pictured: The Startable Sit Requirement fields.* This startable will require the user to sit on a specific furniture item in order to continue the quest. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive-2 "Direct link to is-exclusive-2") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Target Object**[​](#target-object "Direct link to target-object") Add the **SeatImproved component** to any game object in your scene, and then drag that game object into the **Target Object field**. Remember that this item can also be animatedβ€”so you could, for instance, use this step to fly someone from one part of your region to another. The quest step will complete as soon as the user sits down. If sitting down initiates a sequence that you want to play out before the next quest step launches, you may want to make the next step not initiate automatically. Instead, you might require the user to click another [Quest NPC object](/advanced-tutorials/installing-the-quest-system.md#the-quest-giver) to continue. ##### Startable Item Requirement[​](#startable-item-requirement "Direct link to Startable Item Requirement") ![](/assets/images/Quest_System_017-e74f5157c1491380b414caa51c3645c8.png) *Pictured: The Startable Item Requirement fields.* This startable will require the user to have a specific item in their Inventory in order to continue the quest. They do not need to use the item, merely possess it. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive-3 "Direct link to is-exclusive-3") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Item ID**[​](#item-id-1 "Direct link to item-id-1") This is the item you want the user to possess in order to continue. You can get this ID number from the VirtualGood component attached to the item once it has been submitted, or from your item list in [Curator](https://curator.sine.space/). ##### Startable Room Visit[​](#startable-room-visit "Direct link to Startable Room Visit") ![](/assets/images/Quest_System_018-cbfde20b9b251c88437552d495f19f0d.png) *Pictured: The Startable Room Visit fields.* This startable will require the user to visit a specific Region in order to continue the quest. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive-4 "Direct link to is-exclusive-4") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Background ID**[​](#background-id "Direct link to background-id") Put the Region ID in this field to specify where the user needs to go. If you own the Region, you can find this ID number on your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md) or in [Curator](https://curator.sine.space/). ##### Startable Snapshot[​](#startable-snapshot "Direct link to Startable Snapshot") ![](/assets/images/Quest_System_019-20cc2d1281cf1ed76c66d19dece443de.png) *Pictured: The Startable Shapshot fields.* This startable will require the user to take a snapshot with the in-world [snapshot feature](/exploring-breakroom/snapshots.md) in order to continue the quest. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive-5 "Direct link to is-exclusive-5") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Number of Snapshots**[​](#number-of-snapshots "Direct link to number-of-snapshots") Here you can specify the number of snapshots the user needs to take in order to complete the step. ##### Startable Teleport[​](#startable-teleport "Direct link to Startable Teleport") ![](/assets/images/Quest_System_020-b816a99be6aa1b7757a40de911456285.png) *Pictured: The Startable Teleport fields.* This startable will teleport the user to a specific location in the same Region in order to continue the quest. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive-6 "Direct link to is-exclusive-6") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Target**[​](#target "Direct link to target") Drag any game object in your scene into the target field to teleport the user to the location of that object in-world. To ensure that users do not arrive on top of a tree or similar, it usually makes sense to create an empty game object exactly where you want them to arrive. ###### **Delay**[​](#delay "Direct link to delay") This option allows you to add a time delay before the teleportation takes place. A small delay (around 1 second) is recommended to ensure all actions as part of the prior step have time to complete. A longer delay might, for instance, be used in conjunction with a specific gesture playing in the prior step. ##### Startable Timed Counter[​](#startable-timed-counter "Direct link to Startable Timed Counter") ![](/assets/images/Quest_System_021-340c356b0e98790df81d748980c4bc2d.png) *Pictured: The Startable Timed Counter fields.* Startable Timed Counter is a game component you can add to your quest, requiring the user to collect a number of counters inside a specified time frame. Use this startable in conjunction with objects in the scene that have either the [Quest Counter Clickable](/advanced-tutorials/installing-the-quest-system.md#quest-counter-clickable) or [Quest Counter Proximity](/advanced-tutorials/installing-the-quest-system.md#quest-counter-proximity) component attached. The individual fields are detailed below. ###### **Is Exclusive**[​](#is-exclusive-7 "Direct link to is-exclusive-7") This option is available on all startable components. Checking this box will make it so that a user cannot initiate the specified activity *if another activity is already in progress.* For example, if one quest is waiting for a user to press a button, then they will not be able to initiate this quest at the same timeβ€”they will need to complete the button-pressing quest first. ###### **Number Required**[​](#number-required-1 "Direct link to number-required-1") Here you can specify the number of counters the user needs to collect. This can match the total number available in the scene, or there can be far more in the scene than the required number, depending on the nature of your game. ###### **Seconds Limited**[​](#seconds-limited "Direct link to seconds-limited") This option defines the duration of the round. If the user fails, they can re-click the NPC to try again. ###### **Counter ID**[​](#counter-id "Direct link to counter-id") In this field, add whatever ID you have manually applied to the Counter ID field of the [Quest Counter Clickable](/advanced-tutorials/installing-the-quest-system.md#quest-counter-clickable) or [Quest Counter Proximity](/advanced-tutorials/installing-the-quest-system.md#quest-counter-proximity) component attached to your counters. #### Other components[​](#other-components "Direct link to Other components") ##### Statue component[​](#statue-component "Direct link to Statue component") ![](/assets/images/Quest_System_022-5df01d9186ef19cb6c1ab66e917afb07.png) *Pictured: The Statue component.* The Statue component is most commonly used for creating[ NPCs](https://docs.breakroom.tech/customization/installing-the-quest-system#the-quest-giver) within a scene. It allows you to dress your NPC using **any** clothing or accessory items you can own in-worldβ€”both your own virtual goods, as well any items you buy or receive from another creator. To use the script, apply it to an **empty capsule collider** in your scene, or use the **NPC template prefab** in your Space Editor Pack. You can then edit the fields that appear, which are described in more detail below. ###### **Name**[​](#name "Direct link to name") NPCs are easily distinguished from real avatars in-world, seeing as they do not have hover text displaying their name overhead. However, you can still give your NPC a name using this field. This name will appear in quest dialogue steps. ###### **Player Outfit ID**[​](#player-outfit-id "Direct link to player-outfit-id") ![](/assets/images/Default_Avatars_002-1bbc3b0b2868cd4cb1d4451468814511.png) *Pictured: The Outfit window, with an outfit ID highlighted.* In Breakroom, every saved avatar or avatar look has an associated outfit ID number. You can use this number to apply a saved avatar look to any NPC. ![](/assets/images/Quest_System_024-3e719063730aa90c9bf5007a521b6bec.png) *Highlighted: The Outfit ID field for your NPC.* To do so, note the outfit ID number that you want to use. In Unity, add this number to the **Player Outfit ID box** on the **NPC Statue component**, then upload the NPC as normal. ###### **Rendering settings**[​](#rendering-settings "Direct link to rendering-settings") If you want to apply a material on top of the NPC, you can add it here. This can result in NPCs that look like holograms, stone statues, etc. If you want store mannequins that show off a specific item while otherwise appearing like plastic or stone, just add the store ID of the item you want to show off to the **Skip Material Change ID field.** This will allow you, for instance, to create a silver mannequin with just the sunglasses you are selling retaining their original materials. You can find the item ID in the Virtual Good component attached to it or by using [Curator](https://curator.sine.space/); the ID will appear as soon as the item is submitted. ###### **Scale**[​](#scale "Direct link to scale") You can enlarge your NPC until it's a giant towering over the scene, or shrink it down to the size of a sprite. Statues (and avatars in general) will **not** respect Unity embedded scales on the Transform. This is to prevent them from being scaled when you have them seated on an object which is not 1,1,1. ###### **Disable Shadows / Cull Distance**[​](#disable-shadows--cull-distance "Direct link to disable-shadows--cull-distance") You can use the NPC system to deploy crowd scenes. Disabling shadows and optimizing draw distance on each NPC will improve performance. ###### **Custom Animation**[​](#custom-animation "Direct link to custom-animation") By default, your NPC will use the standard idle animations. You can override this by adding your own animations. ###### **Random Animation Position**[​](#random-animation-position "Direct link to random-animation-position") Check this box, and your chosen animation will launch at a random point in its timeline. This is useful for generating crowd scenes where you do not want multiple NPCs performing identical animations in sync on the screen. ##### Quest Counter Clickable[​](#quest-counter-clickable "Direct link to Quest Counter Clickable") ![](/assets/images/Quest_System_025-453f96a9ee551d705275b709f654c154.png) *Pictured: Pictured: The Quest Counter Clickable component.* Add the **Quest Counter Clickable component** to counters the user must click on to collect. Enter an ID of your own creation into the **Counter ID field**, and then add that same ID to the Counter ID field of a relevant [Counter quest step](/advanced-tutorials/installing-the-quest-system.md#counter-steps) or the **Startable Timed Counter component**. ##### Quest Counter Proximity[​](#quest-counter-proximity "Direct link to Quest Counter Proximity") ![](/assets/images/Quest_System_026-40f551d6fd6fea0e8260b5af0992959f.png) *Pictured: Pictured: The Quest Counter Proximity component.* Add the **Quest Counter Proximity component** to counters the user must be within a certain proximity of in order to collect. Enter an ID of your own creation into the **Counter ID field**, and then add that same ID to the Counter ID field of a relevant [Counter quest step](/advanced-tutorials/installing-the-quest-system.md#counter-steps) or the **Startable Timed Counter component**. Specify the distance from the object that will trigger a successful collection in the **Trigger Distance field**. ##### QuestGameObject[​](#questgameobject "Direct link to QuestGameObject") This component allows you to rez and and derez items in your scene during specified quest steps. Objects can only be seen by the player. Configurable parameters include: * QuestID * MinStep * MaxStep Attach this component to other objects (preferably a parent group, if you're updating multiple objects in a single step). It will enable or disable the object it is on, based on whether the user is inclusively on any step between the specified Min and Max. ##### PlaceAtOrigin[​](#placeatorigin "Direct link to PlaceAtOrigin") This component will place an object at the origin of the avatar; 0,0,0 relative to that avatar, non-attached. To offset an object, place the empty parent object with **PlaceAtOrigin script** and then offset the visible object from the invisible parent. ##### %PLAYER%[​](#player "Direct link to %PLAYER%") Use this in quest text fields to add the player name to in-game dialogue. ##### Replay NPC[​](#replay-npc "Direct link to Replay NPC") If it's possible to fail an activity step, drag the Quest NPC into the **Replay NPC field**. It will show a "!" asking the user to repeat the step. ##### Avatar Effect NPC[​](#avatar-effect-npc "Direct link to Avatar Effect NPC") ![](/assets/images/Quest_System_027-5787ca18433b567f04d5e47a7b6c8b45.png) Apply this component to NPCs designed to automatically accept gesture invites. --- ### Registration and grid APIs #### Overview[​](#overview "Direct link to Overview") Breakroom APIs require specific access to be granted to your account. If you are the World Owner, this access should be automatically enabled on your user account. In this section of the documentation, you will see Breakroom Worlds referred to as *grids*. Because Breakroom is based on the Sinespace virtual world platform, you may also see the name *Sinespace* used instead of Breakroom. info You may send parameters as either POST form\_data, or as Query parameters on the URL. info **All APIs require you send three additional POST parameters:**`adminname, adminpwd,`and `gridid.`These should be the username and password of an account on the grid with administrator rights, along with the grid with which you intend to interface. We recommend creating a new user for this role specifically. #### User Management APIs [](#user-management-apis)[​](#user-management-apis- "Direct link to user-management-apis-") ##### Register User [](#register-user)[​](#register-user- "Direct link to register-user-") *`POST`* `https://sine.space/worldapi/externalapi/add_user` This endpoint allows you to register new users automatically. **Query Parameters** | Name | Type | Description | | -------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | gridid | integer | The unique grid ID where the user will be registered. | | password | string | The user's initial password. | | email | string | The user's e-mail address. We will not send any messages to this address unless requested by the user (e.g., password reset). | | username | string | The desired username. If a particular username is already taken, an iteration on the provided name will be assigned to the account (e.g. "User Name01"). | | playeroutfitid | integer | The "Outfit ID" the user should be wearing when they first log in. As this creates "free" copies of items that may be listed as paid items on the Sine Wave Shop, the creator of the items must be an Administrator of the grid in question. | * 200 User account has been created. * 400 Bad or invalid input, or similar. ```text 2099396 ``` ```text 0A user account with that name already exists. ``` ##### Delete User[​](#delete-user "Direct link to Delete User") *`POST`* `https://sine.space/worldapi/externalapi/delete_user` Deletes or disables a user account. ###### Path Parameters[​](#path-parameters "Direct link to Path Parameters") | Name | Type | Description | | ------ | ------- | --------------------------------------------- | | userid | integer | The user ID associated with the user account. | * 200 ```text 1 ``` ##### Update User[​](#update-user "Direct link to Update User") *`POST`* `https://sine.space/worldapi/externalapi/update_user` Changes information about a user account. ###### Query Parameters[​](#query-parameters "Direct link to Query Parameters") | Name | Type | Description | | -------- | ------- | --------------------------------------------- | | userid | integer | The user ID associated with the user account. | | email | string | Updates the user's e-mail address. | | password | string | Updates the user's password. | * 200 ```text 1 ``` ##### Get User[​](#get-user "Direct link to Get User") *`POST`* `https://sine.space/worldapi/externalapi/get_users` Returns a bulk list of users associated with the grid. ###### Query Parameters[​](#query-parameters-1 "Direct link to Query Parameters") | Name | Type | Description | | ------- | ------- | -------------------------------------------------------------------------------------------------------------- | | userids | string | A comma separated list of user IDs you are interested in returning information about. | | offset | integer | The query will return a maximum of 100 records. If more are available, use "offset" to return past this point. | * 200 ```text 2099560usernameusername@test1.comM2099559username2username2@test1.comF ``` ##### Get User By Email[​](#get-user-by-email "Direct link to Get User By Email") *`POST`* `https://sine.space/worldapi/externalapi/get_user_by_email` Retrieves information about an individual user via their email address. ###### Query Parameters[​](#query-parameters-2 "Direct link to Query Parameters") | Name | Type | Description | | ----- | ------ | ----------------------------------------------- | | email | string | The e-mail address associated with the account. | * 200 ```text 2099560usernameusername@test1.comM ``` ##### Update Login Region[​](#update-login-region "Direct link to Update Login Region") *`POST`* `https://sine.space/worldapi/externalapi/update_login_region` Updates the user, and sets their login scene to the specified ID. ###### Query Parameters[​](#query-parameters-3 "Direct link to Query Parameters") | Name | Type | Description | | -------- | ------- | ------------------------------------------------------------------------------------------- | | userid | integer | The particular user whose login scene you want to update. | | regionid | integer | The scene you want to set as the user's login scene. Set to zero to return to grid default. | * 200 ```text 1 ``` #### Region APIs[​](#region-apis "Direct link to Region APIs") ##### Create Region[​](#create-region "Direct link to Create Region") *`POST`* `https://sine.space/worldapi/externalapi/create_region` Creates a new Region on the grid. ###### Query Parameters[​](#query-parameters-4 "Direct link to Query Parameters") | Name | Type | Description | | ----------- | ------- | --------------------------------------------------------------------------------------------------------------------- | | owner | integer | The user ID to be marked as owner of the Region. | | templateid | integer | The item ID for the Region template to use. | | accesslevel | integer | Either "0" for no access, "1" for free-for-all access, "2" for friends-only access, and "3" for approved only access. | | regionname | string | The name of the Region you wish to create. | * 200 Region was created successfully. * 400 An error was found in the inputs. ```text 152860 ``` ```text 0Room template not available, please try another. ``` ##### Set Region Role[​](#set-region-role "Direct link to Set Region Role") *`POST`* `https://sine.space/worldapi/externalapi/set_region_role` Sets or changes a user's role within a particular Region. ###### Query Parameters[​](#query-parameters-5 "Direct link to Query Parameters") | Name | Type | Description | | -------- | ------- | --------------------------------------- | | regionid | integer | The ID of the Region. | | userid | integer | The ID of the user in question. | | role | string | Either "Normal," "Admin," or "Blocked." | * 200 * 400 ```text 1 ``` ```text 0The data provided is incorrect: role = abc ``` ##### Get Regions[​](#get-regions "Direct link to Get Regions") *`POST`* `https://sine.space/worldapi/externalapi/get_regions` Requests a list of Regions on the grid. ###### Query Parameters[​](#query-parameters-6 "Direct link to Query Parameters") | Name | Type | Description | | --------- | ------- | ---------------------------------------------------------------------- | | offset | integer | Offsets the results if there are too many to return in a single query. | | owner | integer | Return Regions owned by a particular owner's account. | | regionids | string | A CSV list of Region IDs to return information about. | * 200 ```text 50000040regionname209956411350000039regionname22099563111 ``` ##### Update Region[​](#update-region "Direct link to Update Region") *`POST`* `https://sine.space/worldapi/externalapi/update_region` Updates information about a particular Region. ###### Query Parameters[​](#query-parameters-7 "Direct link to Query Parameters") | Name | Type | Description | | ----------- | ------- | ----------------------------------------------------------------------------------------------------- | | regionid | integer | The Region ID to update information about. | | regionname | string | If present, changes the name of the Region. | | templateid | integer | If present, changes the template of the Region to the specified template ID. | | accesslevel | integer | Either "0" - no access, "1" - free access, "2" - friends-only access, and "3" - approved only access. | * 200 ```text 1 ``` --- ### Uploading your own Region #### iOverview[​](#ioverview "Direct link to iOverview") ![](/assets/images/Uploading_Region_001-76d2f9bc1b7481b5db456b74108e79a7.png) If you have access to Unity developer resources, you can download the [Breakroom SDK](/release-notes/breakroom-sdk.md) and upload custom Regions and furniture items to Breakroom. This section contains illustrated guides outlining each step of the process. info Within our advanced documentation, you may see different words used to describe the same concept or tool. This is because Breakroom is based on the Sinespace virtual world platform. Please be aware of the following: * When you[ install](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) the Breakroom SDK, you may notice that certain tools and menus refer to *Sinespace, Sinespace components,* or the *Sinespace SDK*. This is normal and has no effect on performance. * When testing and uploading virtual items, you may see documentation, menus, and buttons that refer to Breakroom Worlds as *grids*. info The instructions provided in this section presume an advanced working knowledge of Breakroom, virtual assets, and third-party 3D software. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. #### Quick-start guide[​](#quick-start-guide "Direct link to Quick-start guide") If you'd like to build and upload your own custom Region, here's a quick guide to getting started: 1. [Install](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) the Breakroom SDK into a clean Unity project. 2. [Import](/advanced-tutorials/uploading-your-own-region/uploading-a-region-from-unity-to-breakroom.md#starting-a-new-scene-in-unity) your 3D scene or 3D model into a Breakroom/Sinespace scene in Unity. (If you are using large CAD files of buildings or machinery, you may need to reduce the size of those files using [decimation tools](/advanced-tutorials/uploading-your-own-region/reducing-poly-counts-on-cad-files.md).) 3. [Upload](/advanced-tutorials/uploading-your-own-region/uploading-a-region-from-unity-to-breakroom.md#editing-the-virtual-good-component) the scene or 3D model to your Breakroom World, using the Sinespace Virtual Goods component in Unity. 4. Test your scene or 3D model on the [preview server](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md), and push it to the [live server](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) once you're ready. Once you successfully upload a custom Region, it will appear as a Region template option on your Dashboard. You can [enable](/building-new-worlds/creating-and-managing-regions.md) a copy and turn it into a [Default Landing Region](/building-new-worlds/default-landing-and-orientation-regions.md), [Orientation Region](/building-new-worlds/default-landing-and-orientation-regions.md#orientation-regions), or [Featured Region](/building-new-worlds/creating-and-managing-regions.md#featuring-a-region). After the custom Region is live in your World, you can install the required [conference system components](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md). You can then configure the screens, voice zones, and other components to work with the layout of your [custom build](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md). --- ### Breakroom Basic Emojis [YouTube video player](https://www.youtube.com/embed/4ysyhaUvGXQ) #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Toolkit_Emoji_001-b5ea73f8d557b23497a22b174425df6a.png) Clicking on the [**Emoji button**](/getting-started/using-the-conference-system.md#raise-hand-and-emoji-buttons) reveals a menu of emojis designed to let users express their (naturally quite positive!) feelings about your event. These emojis will be displayed in a fun, brief animated burst above the avatar's head. warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Deleting or deactivating the Emoji button [](#removing-or-deactivating-the-emoji-button)[​](#deleting-or-deactivating-the-emoji-button- "Direct link to deleting-or-deactivating-the-emoji-button-") The Emoji button comes pre-installed in many Breakroom Region templates. To remove the Emoji button from a Region that currently contains it, or to temporarily disable the Emoji button without removing it, follow these steps. 1. Open the [Region Editor](https://docs.breakroom.tech/customization/using-the-region-editor) by clicking the **Edit Region button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). Then click the **Objects button**. 2. In the Objects window, expand the [room floor](/creating-custom-experiences/using-the-region-editor.md#the-objects-window) by clicking the **> arrow** located to the left of its name. Locate the **Breakroom Basic Emojis object**. (Alternatively, you can search for *"Emoji"* in the search field.) 1. **To delete the Emoji button:** To the right of the Breakroom Basic Emojis object, you'll see a **trash can icon**. Click this icon to delete the object from the Region. 2. **To temporarily disable the Emoji button:** To the right of the Breakroom Basic Emojis object, you'll see an **eye icon**. Click this icon to temporarily disable or "mute" the button. 3. Click the **Save button** in the bottom right corner to save your work. Click the **Close button** to exit the Region Editor. #### Installing or reactivating the Emoji button [](#installing-or-reactivating-the-emoji-button)[​](#installing-or-reactivating-the-emoji-button- "Direct link to installing-or-reactivating-the-emoji-button-") To install the Emoji button in a Region, or to reactivate it, follow the steps below. 1. Open the [Region Editor](https://docs.breakroom.tech/customization/using-the-region-editor) by clicking the **Edit Region button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 2. **To install the Emoji button:** 1. Open your Inventory by clicking on the **Inventory button** at the bottom of the screen. 2. Within your inventory, locate the starter pack item called *Breakroom Basic Emojis*. It's represented by this icon: ![](/img/breakroom/Toolkit_Emoji-icon.png) 3. Click on the object icon. Then click on a location in your Region to place the Breakroom Basic Emojis object down. (Note: This object is invisibleβ€”you can place it anywhere. However, we encourage you to locate it at 0,0,0 in your region by manually editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component).) 3. **To reactivate a disabled Emoji button:** In the Objects window, expand the room floor. Locate the **Breakroom Basic Emojis object**. Click the **eye icon** associated with the object. 4. Click the **Save button** in the bottom right corner to save your work. Click the **Close button** to exit the Region Editor. --- ### Breakroom Start Here UI [YouTube video player](https://www.youtube.com/embed/kDlE_2Jw0S8) #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/UI_Tour_2026_009-590f6e3638f7e8f1d6d54b317919fe04.png) *Pictured: The Start Here panel.* The Breakroom Start Here UI (sometimes referred to as the *Start Here panel*) forms an integral part of the Breakroom [conference system](/getting-started/using-the-conference-system.md), and comes pre-equipped in most Breakroom [Region templates](/building-new-worlds/region-template-descriptions.md). Depending on the setup of the Region, you may be able to: * [Teleport](/getting-started/using-the-conference-system.md#navigating-an-event) to key areas of interest * Take an animated [camera tour ](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md)of the Region * Select an avatar from the [default avatar collection](/creating-custom-experiences/selecting-default-avatars/default-avatar-collections.md) * Teleport to a specialized triage location for technical support In your Inventory, you'll see the Breakroom Start Here UI object represented by this icon: ![](/img/breakroom/Toolkit_Starthere-icon.png) warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Deleting or deactivating the Start Here UI[​](#deleting-or-deactivating-the-start-here-ui "Direct link to Deleting or deactivating the Start Here UI") ![](/assets/images/Toolkit_Start_Here_001-22c834294466ae17e302dcc24ad25efa.png) *Pictured: The Region Editor, with the location of the Start Here UI highlighted in the Objects window.* When hosting events on Breakroom, there may be occasions when you don't want the Start Here UI to appear (for example, if you're hosting an event for seasoned Breakroom users who won't require access to default avatars). To delete the Start Here UI from a Region that currently contains it, or to temporarily disable the Start Here UI without deleting it, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). Then click the **Objects button**. 2. In the Objects window, expand the [room floor](/creating-custom-experiences/using-the-region-editor.md#the-objects-window) by clicking the **> arrow** located to the left of its name. Locate the **Breakroom Start Here UI object**. (Alternatively, you can search for *"Start Here UI"* in the search field.) 1. **To delete the Start Here UI:** To the right of the Breakroom Start Here UI, you'll see a **trash can icon**. Click this icon to delete the object from the Region. 2. **To temporarily disable the Start Here UI:** To the right of the Breakroom Start Here UI, you'll see an **eye icon**. Click this icon to temporarily disable or "mute" the panel. 3. Click the **Save button** in the bottom right corner to save your work. Click the **Close button** to exit the Region Editor. #### Installing or reactivating the Start Here UI[​](#installing-or-reactivating-the-start-here-ui "Direct link to Installing or reactivating the Start Here UI") To install the Breakroom Start Here UI in a region, or to reactivate it, follow the steps below. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. **To install the UI panel:** 1. Open your Inventory by clicking on the **Inventory button** at the bottom of the screen. 2. Within your Inventory, locate the starter pack item called *Breakroom Start Here UI*. It's represented by this icon: ![](/img/breakroom/Toolkit_Starthere-icon.png) 3. Click on the object icon. Then click on a location in your Region to place the Start Here UI down. (Note: This object is invisibleβ€”you can place it anywhere. However, we encourage you to locate it at 0,0,0 in your region by manually editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component).) 3. **To reactivate a disabled UI panel:** In the **Objects window**, expand the room floor. Locate the Breakroom Start Here UI object. Click the **eye icon** associated with the object. 4. Click the **Save button** in the bottom right corner to save your work. Click the **Close button** to exit the Region Editor. Once these steps are completed, the Breakroom Start Here UI will appear on your screen. --- ### Creating and uploading custom chairs #### Overview[​](#overview "Direct link to Overview") In order to offer your users a truly unique virtual experience, you may wish to create customized, functional chairs or other seating options that tie in with Breakroom's conference system. Please note that the instructions below presume a basic working knowledge of Unity, and that you must have Unity and the Breakroom SDK[ installed on your computer](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. info The instructions provided in this section presume an advanced working knowledge of Breakroom, virtual assets, and third-party 3D software. #### Creating an empty game object[​](#creating-an-empty-game-object "Direct link to Creating an empty game object") In Unity, right click in the Hierarchy and create an empty parent game object. Change the transform and rotation values to **0/0/0** in the Inspector panel***,*** and rename the object as required. We will use this empty game object as the "container" for Breakroom's Room Furniture and Virtual Good components, which we will install later in this tutorial. ![](/assets/images/Chairs_001-3a1308f4f34bfc8bea38d3ceb91ff799.png) *Pictured: Unity, with the Hierarchy and Inspector panels highlighted. Our game object is called "Chair Demo."* #### Importing your chair model into Unity[​](#importing-your-chair-model-into-unity "Direct link to Importing your chair model into Unity") There are two ways you can import the 3D model you want to use for your chair object into Unity. 1. Navigate to **Assets > Import New Asset**. This will launch a standard file import window. Select the 3D model file on your computer, and then click the **Import Button**. 2. Locate the **3D model file** in Windows Explorer and click on it. Then drag the model file into Unity's **Project Asset folder** directly. Both FBX and OBJ file types are supported. FBX is the preferred format. ![](/assets/images/Chairs_002-e8aeff1086d4835b3252235d62869f6c.png) *Pictured: The Import New Asset window, with a 3D model file selected.* #### Adding the chair model to the Hierarchy[​](#adding-the-chair-model-to-the-hierarchy "Direct link to Adding the chair model to the Hierarchy") Select the **chair model file** in the Project Asset folder, and drag it onto the **empty parent game object** in the Hierarchy. Make any needed changes to the position and rotation of the object, and then name the chair (see suggested [naming convention](/advanced-tutorials/uploading-your-own-region/creating-and-uploading-custom-chairs.md#naming-conventions)s below). While the chair model is still selected in the Hierarchy, click the **Add Component button** located at the bottom of the Inspector panel and add a mesh collider. We will use this further on in the tutorial. ![](/assets/images/Chairs_003-4460965b03041d3707b91b21baa070e1.png) *Pictured: Unity, with arrows showing the chair model selected within the Hierarchy.* #### Adding the Seat Position component[​](#adding-the-seat-position-component "Direct link to Adding the Seat Position component") While your mouse cursor is positioned over the parent game object, right click and select the option to **create a *****new***** empty game object**. Name this object "Seat Position." We will use this object as a container for the Seat Position component, allowing us to move the seat animation independently from the chair model in order to make necessary adjustments. Select the new Seat Position game object. In the Inspector panel, click the **Add Component button** near the bottom, and add the **Seat Position component**. You will notice a green rectangle appear over the chair model. ![](/assets/images/Chairs_004-ef1c57f370f3a0c1d3a0869b9cac1bc8.png) *Pictured: Unity, with the Seat Position object highlighted in the Hierarchy.* #### Adding animations to the chair[​](#adding-animations-to-the-chair "Direct link to Adding animations to the chair") Animations can be imported into the Project Asset folder the same way you imported the chair model. After you import an animation file, ensure the animation is set to *Humanoid animation type* under the **Rig tab**. Drag the animation file into the **Animation slot** under the Seat Position component. You should now see a wireframe view of the animation appear within the green rectangle. ![](/assets/images/Chairs_005-27ba044835b0cfdca24ee30f3838ba28.png) *Pictured: Animation slots can be found within the Seat Position component.* Once you add the animation, you may find that it forces your avatar through the chair, or otherwise needs to be adjusted. You can do this by selecting the **Seat Position game object** in the Hierarchy and moving it into the correct position using Unity's movement tools. ![](/assets/images/Chairs_006-678c2cf4f8d93227d7973cc57e4ee85b.png) *Pictured: Adjusting the Seat Position component allows you to fix animations that are too low or too high for your chosen chair.* info If different animations are necessary for male and female avatars, you can use the Male/Female Animation slots and leave the Universal Animation slot empty. #### Making final adjustments[​](#making-final-adjustments "Direct link to Making final adjustments") You can now make any final adjustments to the model or animation positions prior to uploading. The wireframe animation also serves as an excellent guide for adjusting the overall size of the chair model. ![](/assets/images/Chairs_007-cb21c271357a004d90b8dd34b9a75349.png) *Pictured: Adjusting the size/position of the chair model and the position of the linked animation. Unity's movement tools are highlighted.* #### Adding the Room Furniture component[​](#adding-the-room-furniture-component "Direct link to Adding the Room Furniture component") In order to upload the chair object to Breakroom, we will need to add the Room Furniture component. Select the **parent game object** in the Hierarchy, and then add the Room Furniture component by clicking the **Add Component button** located at the bottom of the Inspector panel. Breakroom requires that all chair objects be placed on the floor, so check the "Place on Floor" option under **Placement.** Finally, select the **chair model** itself in the Hierarchy and drag it to the **Main Collider slot**. The chair model contains the mesh collider we installed earlier. ![](/assets/images/Chairs_008-797d8637d9597f7b5aa7941ecfaef946.png) *Pictured: Unity, with relevant portions of the Room Furniture component highlighted.* #### Adding the Virtual Good component[​](#adding-the-virtual-good-component "Direct link to Adding the Virtual Good component") Next, we will add the Virtual Good component to the parent game object. This is the main settings component for the game object, and contains information such as the item's name, category, inventory image, etc. Select the **parent game object** in the Hierarchy, and add the Virtual Good component by clicking the **Add Component button** located at the bottom of the Inspector panel. Pay close attention to the instructions in this component. A red warning icon indicates that required information is missing, while a yellow caution icon indicates that information is strongly advised, but not required. For this tutorial, we will set the **Type** to *Furniture*, the **Category** to *Furniture/Chair*, and give the chair a name and description. We will also give it a brand name and author under the **Author tab**. ![](/assets/images/Chairs_009-359b21d7acd14a1786a7d732e6132f57.png) *Pictured: Unity, with relevant portions of the Virtual Good component highlighted.* #### Prefab and upload[​](#prefab-and-upload "Direct link to Prefab and upload") To complete your chair, you will need to drag the **parent game object** into the Project panel to create a prefab. You can then **right click on that prefab** and select **Upload to Sinespace** to upload the item. ![](/assets/images/Chairs_010-470bd1da1c7215d2c8bf6b566a1666d1.png) *Pictured: Drag the parent game object to the Project panel to finish fabrication.* #### Integrating custom chairs with the conference system[​](#integrating-custom-chairs-with-the-conference-system "Direct link to Integrating custom chairs with the conference system") danger This section is currently under construction. If you have any questions that aren't answered here, please contact our [Customer Success Team](/help/where-to-find-support.md#contacting-the-customer-success-team). #### Useful information[​](#useful-information "Direct link to Useful information") ##### Naming conventions[​](#naming-conventions "Direct link to Naming conventions") When integrating chairs into the conference system, Breakroom uses a nametag allow/ignore system. For ease of setup, we strongly advise that you institute and follow a simple naming convention. For example, a series of auditorium chairs might be named Auditorium\_Chair 1, Auditorium\_Chair 2, etc. ##### Multiple seat bundles[​](#multiple-seat-bundles "Direct link to Multiple seat bundles") You can upload a group of seats/furniture as a single game object instead of uploading them individually. Just make sure that you follow a naming convention, as explained above. ##### Permitting in-world editing[​](#permitting-in-world-editing "Direct link to Permitting in-world editing") You can permit furniture to be edited in-world by selecting *Full* from the **Inworld Customization menu**, which is located under the **Details tab** of the [Virtual Good component](/advanced-tutorials/uploading-your-own-region/creating-and-uploading-custom-chairs.md#adding-the-virtual-good-component). --- ### Installing the conference system components #### Overview[​](#overview "Direct link to Overview") In this walkthrough, we'll take an empty [Breakroom Conference Region template](/building-new-worlds/region-template-descriptions.md#breakroom-conference) and set up the [conference system ](/getting-started/using-the-conference-system.md)from scratch, with all the tools necessary to run an event. By following the steps below, you can install the conference system components in any [custom Region](/advanced-tutorials/uploading-your-own-region.md) that you have uploaded. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning After using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to add or edit a voice zone, always remember to click the **Reset Zones button** to reset the conferencing system. If this doesn't seem to push your changes forward, try saving your work, leaving the Region, and entering it again. warning The Breakroom conference system component source files are not available for individual distribution. #### The core conference system[​](#the-core-conference-system "Direct link to The core conference system") The core conference system components are distributed as part of the [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md). While additional conference system items can be added to your Region (such as the [Start Here UI](/advanced-tutorials/uploading-your-own-region/breakroom-start-here-ui.md) and [Emojis](/advanced-tutorials/uploading-your-own-region/breakroom-basic-emojis.md)), for the purposes of this tutorial we are concerned with five key components. ##### Breakroom Combined Media Core[​](#breakroom-combined-media-core "Direct link to Breakroom Combined Media Core") ![](data:image/png;base64,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) *Pictured: The Breakroom Combined Media Core icon.* The Breakroom Combined Media Core is the backbone of the entire conference system, and is required for the conference system to function. It contains Breakroom's primary tools, such as voice chat, webcam and screen sharing capabilities, as well as the [moderator tools](/running-your-event/moderator-tools.md). ##### Breakroom Camera System[​](#breakroom-camera-system "Direct link to Breakroom Camera System") ![](data:image/png;base64,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) *Pictured: The Breakroom Camera System icon.* The Breakroom Camera System controls all of the [camera operations](/getting-started/using-the-conference-system.md#seats-and-gestures) built into the conference system. ##### Breakroom Gestures Standard[​](#breakroom-gestures-standard "Direct link to Breakroom Gestures Standard") ![](/assets/images/Installing_Conference_003-39b311f3d0e16ad43567006aaa58638e.png) *Pictured: The Breakroom Gestures Standard icon.* The Breakroom Gestures Standard item contains all the [gesture actions](/getting-started/using-the-conference-system.md#seats-and-gestures) built into the conference system. ##### Breakroom Navigation UI[​](#breakroom-navigation-ui "Direct link to Breakroom Navigation UI") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA+iSURBVHhe7d0HdFVVvsfxfwqEFkBJKAGJIP1RpEkTiIAi2ADHoVoQQUdYNnQclKeIo/JY79EERR0kiDDDjILMCC4FVALOUJ5UqaJh6KGHAEmAwDv7+meWvHtzg5Nyzsn+ftbaZP//Ya0kl/w4Zd9zToT8TP2GHWOdD8OdcYczbnRGOWcA8IdMZ6xzxgJnvLtj24oM0zT+FXQn5F2cD7OdkRBoAPCzI864zwn7clMEgu6E/Dbnw0JnlDI1gGIjyYQ9wgl5eafY5gy25EDxY7bsN0Q6fzzoDEIOFE/xznjUBH1AoARQXPUyQW/80xxAMdXcBJ0lNKB4K2OCDqCYI+iABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABQg6YAGCDliAoAMWIOiABSLqN+x4SeeeVbZsGel4cxtp06a51K5VU6pWrSxlypSWiIgI/RtA4bt48aKcOpUhqal7Zeu27+Wbv6+VzZu3yaVLno+Qt4Neu3aiDBs6UG7vfouUKhWjXcA79u8/JLM//Ej+NG+hZGVla9d7PBl0s7V+duRj0vfXd0tUVJR2Ae86evS4vDJ2gixZmqIdb4mKi08co3NPqFPnekl+f5J06thWIiM5hQB/MBunnj26SFzctYFderOb7yWeSlLLFk1k7odvSS3nOBzwo35975FJE8dKTIy3DjU9E/S6dWvL22/9l5QvX047gD917XKzjB/3oqf2SD2x6252e2bNnCRVqsRrB/A3cwhqzsavWbtBO+7yxMk4c+LtkSEDtMrb5WWOCxdytAMUvtKlSwWWen+J3n2GyLbt32vlHteDXq9ebVnw8Yw8z66bUH+y8DNZtGiZrFu/WbKzz+lngKJzzTUV5NZunaR/v17SsGFd7eYuJWWVDHvst1q5x/Vd96eeHCqNGzfQKrTdu/fKo86LZdYq9+07KDk5bMnhDrNWvmXrTpn357/K6TNnpV3blmGPxRMTa8iKlWskLe2Idtzh6tkCsxt01523ahVaauoeGTBouGz+brt2AG9ITp4nvxv1ep7vjOvTu4fO3ONq0Dt0aB32HW9md/3pkWPk+PGT2gG85W+fLpEP58zXKjSzvu72GXhXv3rrVjfqLLRPFy2R7dt3aQV404QJ78jZs5laBYuNLSc33JColTtcDbo5ERfO/PmLdQZ4V2ZWlnz51TdahVavbvjf9cLmatCrhlk3N0toGzdt1Qrwtk15/K6aKy7d5Ory2orlCyQ+vpJWV0pPPyVt2t2pVbBKla6RJo0balXw1qxdn+vuWHR0tNzc4SatCt6OnT/IwYNpWgVr3fpGKVvml63nXq2Dh9Jkx44ftApm9sISqlXVqmCdzcyUNWvWa+Uv3bsnyeSJY7UKNnXazMBwi6tBX5nySeAigFBOnEiXdh3u0ipYUuf2Mv3tcVoVvJ53DJIfU/dodSVzzLV2deEdVox+abx89NGnWgX728JZUrduLa0Klvm65uvnZszLIwPv5y4M5vU2r7sfde3aUaa9+ZpWwdwOurunAgEUCYIOWICgAxYg6IAFCDpgAYIOWMC3y2vmDrG9e92uVcGbmTwv1/fYx8SUlBHDB2tV8L74YnnYi3gefOC+XF+3/Nq8ebt8sWS5VsG6desozZo20qpgmdfbvO5+5PXlNd8GHfAS1tEBuI6gAxYg6IAFCDpgAYIOWICgAxbw/fJa5cpxMqB/L0lMvE4iI3mMMgrOmTNn5R+rvg3cYjyvZ6mxjh5GfoPeonmTwDXp5cvHagcoeMuWrZCnnhkj58+f104w1tELSVRkpIx74wVCjkJnQjz4ob5a+ZNvg960WSOpWbO6VkDh6tmzi878ybdBLx/LU1dRdCpWrKAzf/Jt0CMiWDAArhZpASxQbO8C6+YZTvhT7149pHr10LeyPpR2RJJuuVerYCyvhVGYQW/QqJPOgKvzQfJkuemm5lpdye9BZ9cdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBBywQUb9hx0s6L3IrUz6RuLhrtbrSiRPp0q7DXVoFS+rcXqa/PU6rYA88+ITOgKszatQT0rBBHa2udCjtiCTdcq9Wwbp27SjT3nxNq2BTp80MDLcU26ADBcnvQWfXHbAAQQcs4NugZ2Vn6QwofFmZ/v59823QN2zYIpk+f/HhHxs2btGZP/l3i56VLRMnvacVUHiOHz8pU6bM0MqffH2M/sHsv8jzo16THTt+kJycHO0CBePMmbPy+RdfS78Bv5EDB9O060++XV4DvITlNQCuI+iABQg6YAGCDliAoAMWIOiABYrF8lpsbFlJrFlDoqKjtOMtl5xX+PDhI3Lo0BHtXL2EhKoSb16jCG14zIULObJ7997AmvMvEe38W9WunSilS5fSjvecPn1WUlP3yMWLF7WTOy5TDSO/QS9RIlp+9/wI+fV9dwfmXvf113+XV8ZOkIOHDmsnd4k1q8vYV56TNm1aaMe7TBD+MOOPMnnye5JzFaHo3et2eebpRyU+vpJ2vOvw4aMy+qXxkpKySjuhsY5eiEY+85gMHNDHFyE3kpLay7vvjJeYmBjthFauXFlJnjnJFyE3IiMjZdjQgfL0U8O0k7vbbussr782yhchNypXjpN3p4+XZk0baceffBv0atUqywP3/0or/6hbt7b07NFFq9DuvKOb8/NV0co/hgzpHziMCmfwQ30lIsKjxyFhDB7cV2f+5Nug166VGNiS+FG9erV1FlqTxg105i8mwOa4O5wG9UPfqsnr2KK7pESJEjrzn5Ilw3/vkVH+PaKKjgp/GOXX/5wjfPp9X+bv7x7AVSHogAWK7V1gt+/YJd9t3q5V0TJnlDt3bqdVsDlz58urv5+kVbA3Xh8lvXv10CrY0qUpcvLkKa2KVosWTcIehw8cNEK+XbdJq2Ab1y+VmJiSWl0pI+O0fP7511oVvXvu6Z7rISG3e86Hwgz6e3+YI/8z4R2titZNrW+UD2ZN0SpYfoPeu8/Dsm37Lq2K1piXR0q/vvdoFSw/Qf8xdY/0vGOQVkVv7erFEhtbTqsrcbtnAJ5H0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELFNvLVI8cOSYHDhzSqug1a/YfOguW38tUd+78QTIzs7QqWjVqJEilStdoFSw/l6kaGzdu0VnRa9y4gURFhX42ANej50NhBt3L8ht0L8tv0L2K69EBeB5BByzg26Bnn8vWmf+cyz6ns9DOn7+gM//Jzg7/73L+/Hmd+UteP5fX+TboGzdulSyfvvj/u26zzkLbtGmrzvzF3Nzx+12pWoW2bn34n92rzO+bn/k26GfPZsq0acla+cfylFXy1VffaBXaRx8vkk2bt2nlH9PenuVs+cLvrbzl/J3MLHdWDP5d6ekZ8ubU97XyJ18fo5s7vb485r9lz5792vGu9FMZge/3qadfuqrH8A4Y+LjMm7dQTp8+ox3v+vHHPfLi6HGSnDxPO7nbsGGLDB36nKxZu0FycnK0603mEGrFitUy6P4RsnfvAe36k68fm/xz5n7ckZHefXhfXlu6cLy8HHXp0iU5d+7fO+42j2fy8pNwTdCv5j9lg3X0MAoy6ICbWEcH4DqCDliAoAMWIOiABQg6YAHfnnUvW7aMJCRU0cpf0k+eksNHjmkVrEqVeClfPvRTPb1u376DYS+hrVPneomI8O4yaG4uXMiR1NQ9WgVjeS0MLlMNjctUvYfLVAF4HkEHLEDQAQsQdMACBB2wAEEHLODZ5bWTJ9Olbfvcl9caNaonjzzcXyt/WfnNWpm/YLFWwfr36yWtWzXTyl/enDYz7Hrz+HGjJTo69C2VvexkeoaMfXWCVsG6deskU6f8XqtgVq+jf7n0z5KQUFWrK5lrnJs17xa43hnwOvO+B/P+h9xMmvyeTH9ntlZFz9Vd9+PHT+osWMmSJeT6xBpaAd5m3vEXzrFjJ3TmDleDnrp7r85Cu/XWTjoDvMvc2ei2PH5Xd+fxu17YXA365jxugPjw4H6B97QDXnb3Xd3luuuqaxXs/IULsmXrTq3c4WrQly1bqbPQKlasIC++8IRWgPdUq1ZZfvvc41qFtuof3wbuWuwmV4O+/8ChPO/z3ad3Txn9wpMSncvD7wC31KxZXd6fMVGuvbaidkJb/NmXOnOPq0E35s5doLPcDRp0ryQnT5Z2bVv68hJHFC/lypWV4Y8/JAs+niG1rr9Ou6GlpR2RRYuXauUeV5fXLpv3p+nSrGkjrcIzj0Nes3a9HD16wvP3BUfxYTYwZcqUluoJVaVVq2ZSqlSMfia8sa9OlLl/zHtjVtg8EfQmTRrKnNlTA0tqQHGRsmKVPPrY8554L4jru+6GOfv++htTtAL8z9xBaPR/jvfMG76i4uITx+jcVd9t2SFRUVG+fesncFl6+il5ZOiz8s9/7tOO+zwTdGP16nWSlZUtbdu24KQbfOnAgTR5ZNizsn37Lu14g6eCbpjltq3bvpeWLZtKbLmy2gW8zyyjDR/xguzbf1A73uGJk3GhmN34x3/zoNw/6Fe+vSMq7LDFOeyc/u5sWbIkRTve49mgXxYdHS29e90uSUntpVXLZlKhQqx+BnCHOcFm3ruesmK1LPtypaxZs14/412eD/r/V7lynFStWlnKlintfPfaBIrAxYuX5NSpDNm374BkZHj/ufU/57ugA/jlPLGODqBwEXTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsABBByxA0AELEHTAAgQdsIAJ+umfpgCKqQwT9O9+mgMopjaaoM//aQ6gmPoson7DjiWcyW5nJARaAIqTA85oELlj24rzzmSIM7JMF0CxYTJ9v5PxjChTHTu6Z1dcfOI6Z3qLM2JND4CvmS15fyfkS00RYf64THfjn3TGvc5o6owyzgDgD2edsckZc5wxy2zJTVNE5P8AgqAfvdZYYs4AAAAASUVORK5CYII=) *Pictured: The Breakroom Navigation UI icon.* The Breakroom Navigation UI controls the [navigation and teleport tools](/getting-started/using-the-conference-system.md#navigating-an-event) built into Breakroom. ##### Breakroom Auditorium 90 / 200[​](#breakroom-auditorium-90--200 "Direct link to Breakroom Auditorium 90 / 200") ![](/assets/images/Installing_Conference_005-dc4c1521662050050d65404e6ac5c133.png) *Pictured: The Breakroom Auditorium 90 / 200 icon.* Finally, the standard 90-seat or 200-seat auditoriums that feature in several of Breakroom's default Region templates are included for your use. *These components are optional.* #### Installing the core components[​](#installing-the-core-components "Direct link to Installing the core components") ![](/assets/images/Installing_Conference_006-d9439ccd824484a53744a861b3f08dff.png) *Pictured: The Region Editor in an empty Region, with the Inventory and Objects windows open. The location of the Inventory button is highlighted.* To install the core components in an empty Region, follow the steps below. 1. Navigate to the Region you want to edit. 2. Click the **Edit Region** **button** located at the bottom of the screen. This will launch the Region Editor. 3. Click the **Inventory button** located at the bottom of the screen. This will open your **Inventory window**. 4. Drag the following core components from your Inventory window to the floor near your avatar. 1. Breakroom Combined Media Core 2. Breakroom Gestures Standard 3. Breakroom Camera System 4. Breakroom Navigation UI 5. When you are finished, click the **Save button**. ![](/assets/images/Installing_Conference_007-a5aab41af66f38b12ab9a28075d8c9e5.png) *Pictured: The four key components of the conference system, highlighted in an example Inventory window.* The positioning of the core components is not important. However, to keep things tidy, it is best practice to position them at 0/0/0. To precisely reposition an object, follow these steps. 1. While still in the Region Editor, click the **Objects button** located on the bottom right. This will launch the **Objects window**. 2. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 3. Click on one of the four core components listed under the Room Floor heading (for example, the **Breakroom Combined Media Core**). This will launch the **Inspector window** for that object. 4. In the Inspector window, click the **> arrow** next to **Transform component** to expand it. 5. Locate the **Local Position property**. This property contains three fields. Set each field to the numeral 0, for a combined position of 0/0/0. 6. Repeat these steps for each of the core components. 7. When you are done installing and editing the core components, click the **Save button,** followed by the **Close button**. ![](/assets/images/Installing_Conference_008-c17a6b3c16bbac005e2902b24b1a531f.png) *Pictured: The Objects and Inspector windows, with the Local Position property highlighted.* After you save your work and close the Region Editor, you will notice that the conference system UI elements are now visible on your screen. This completes basic setup of the conference system. You can now [edit and configure](/running-your-event/understanding-the-conference-system.md) the conference system components to meet your needs. #### Setting up the default auditorium[​](#setting-up-the-default-auditorium "Direct link to Setting up the default auditorium") We've simplified the setup of some common areas. This includes a 90-seat or 200-seat auditorium with built-in camera and screen positions, as well as its own [Presenter voice zone](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md#presenter). You can install this item in your Region by following these steps. 1. Navigate to the Region you want to edit. 2. Click the **Edit Region button** at the bottom of the screen. 3. Click the **Inventory button** located on the bottom right to open the **Inventory window**. 4. Drag the **Breakroom Auditorium 90 / 200 object** from the Inventory window to the floor near your avatar. 5. Click the **Save** button. ![](/assets/images/Installing_Conference_009-4bea3ab1457d6e2f0c731c490485e6cf.png) *Pictured: The Breakroom Auditorium 90 object placed in a Region, as viewed through Region Editor.* You can now use the Region Editor to position the auditorium as necessary. When positioning is complete, click the **Save button** again to store your changes. ![](/assets/images/Installing_Conference_010-194a380cb657362fee814e52eeb4b603.png) *Pictured: The Breakroom Auditorium 90 object, successfully positioned within an auditorium area.* ##### Editing the presenter seats[​](#editing-the-presenter-seats "Direct link to Editing the presenter seats") Both auditorium objects are configured to work "out of the box," with all conference system communication and navigation functions built in. After positioning the entire auditorium object, the only thing you'll need to do is edit the presenter seats to meet your needs. In a [Presenter zone](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md#presenter), only the individuals who sit on the presenter seats will be able to turn on their webcams or share their computer screens. ![](/assets/images/Installing_Conference_011-fbca5ebc6b8d98cd19cb180ca835158a.png) *Pictured: The Breakroom Combined Media Core, highlighted in the Objects window.* To edit the presenter seats, follow these steps. 1. While still in the Region Editor, click the **Objects button** located on the bottom right. This will launch the **Objects window**. 2. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 3. Locate the **Breakroom Auditorium 90 / 200** object. Click the **> arrow** to expand it. 4. Locate the **Presenters** object and click on it. This will launch the **Inspector window** for that object. Selecting this object will also isolate and highlight the presenter seats. ![](/assets/images/Installing_Conference_012-697a9767728e3925496557c849cbd39a.png) *Pictured: The location of the Presenters object, highlighted in the Objects window.* You can now move the presenter seats to your desired location by hand-keying values into the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) or by using the [Region Editor positioning tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#moving-objects-using-the-region-editor). When you're happy with your changes, make sure to click the **Save button.** ![](/assets/images/Installing_Conference_013-b802d149deeae20b50bc1031a0d8e22f.png) *Pictured: An example of how presenter seats may appear on a stage.* ##### Disabling and enabling presenter seats[​](#disabling-and-enabling-presenter-seats "Direct link to Disabling and enabling presenter seats") ![](/assets/images/Installing_Conference_015-0584d732c239cb3e08954fe5a01cd132.png) *Pictured: The Presenters object, expanded and highlighted in the Objects window.* The default auditorium objects come with 9 built-in presenter seats. You can customize how many seats appear by following these steps. 1. Click the **Edit Region** **button** at the bottom of the screen. 2. Click the **Objects button** located on the bottom right. This will launch the **Objects window**. 3. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 4. Locate the **Breakroom Auditorium 90 / 200** object. Click the **> arrow** to expand it. 5. Locate the **Presenters** object. Click the **> arrow** again to expand it. 1. To disable seats: Click the **eye icon** located to the right of any enabled presenter seat. The icon will turn gray and the blue seat tag will disappear in-world. 2. To enable seats: Click the **eye icon** located to the right of any disabled presenter seat. The icon will turn white and the blue seat tag will appear in-world. 6. Click the **Save button** to store your changes. In the example image above, seats six through nine have been disabled, leaving five active presenter seats. Please visit our [Running Your Event section](/running-your-event.md) to learn more about [adding additional clusters of presenter seats](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md#adding-presenter-seats), [positioning individual presenter seats](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md#adding-presenter-seats), and [restricting presenter seat access](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md#restricting-presenter-seat-access). ##### **Testing position with a live avatar**[​](#testing-position-with-a-live-avatar "Direct link to testing-position-with-a-live-avatar") ![](/assets/images/Installing_Conference_014-a8d5b0d82b8a707d0b154e626bbfdb12.png) *Pictured: An avatar "seated" on a presenter seat while in Region Editor. Note the movement gizmo.* If you sit on one of the presenter seat tags while the Region Editor is closed, then open the Region Editor while remaining seated, your avatar will travel with the presenter seat tags when you position them. This is a useful quality check to ensure that your avatar is facing the right way and isn't sinking into the floor. #### Setting up breakout rooms and voice zones[​](#setting-up-breakout-rooms-and-voice-zones "Direct link to Setting up breakout rooms and voice zones") ![](/assets/images/Installing_Conference_016-5159e7c02ac759be701000f0df8195f8.png) *Pictured: Custom voice zones being edited in the Region Editor.* Breakroom's [prefab breakout rooms and booths](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md), like the default auditorium objects discussed above, come pre-equipped with seats, gestures, voice zones, and teleport UI functionality. These convenient virtual areas are designed to set themselves up; all you need to do is [add them to your Region](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) using the Region Editor. [Custom voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) are blank voice zones that can be placed wherever you like in your Region. They can contain any items or features you choose, and can even be nested. You can edit the [RoomFurniture component ](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#the-roomfurniture-component)so they appear in the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakout-rooms-panel), or you can direct any button in the [General Navigation panel](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md#customizing-the-general-navigation-panel) to teleport users to a custom voice zone. #### Customizing the General Navigation panel[​](#customizing-the-general-navigation-panel "Direct link to Customizing the General Navigation panel") ![](/assets/images/Using_Conference_System_003-079284abeb432cebe478b14a4aa26d2e.png) The [General Navigation panel](/getting-started/using-the-conference-system.md#the-general-navigation-panel) contains quick teleport links to key areas in the event Region. If seats are available, you will be seated automatically upon arrival. | | | | ---------- | --------------------------------------------------------------------------------------- | | Button | Target location | | Auditorium | Teleports your avatar to the auditorium. | | Entrance | Teleports your avatar to the Region entrance or to a designated information booth. | | Networking | Teleports your avatar to the designated lounge or networking area. | | Floor | Teleports your avatar to the main "floor" of the event (e.g. vendor booths, game area). | danger Note: The following instructions apply only to a General Navigation panel that you have installed **in your own blank Region**. You cannot edit the General Navigation panels that come pre-installed in Breakroom's [Region templates](/building-new-worlds/region-template-descriptions.md). ##### Removing buttons from the General Navigation panel[​](#removing-buttons-from-the-general-navigation-panel "Direct link to Removing buttons from the General Navigation panel") ![](/assets/images/Installing_Conference_017-5f04ae93573db029f9d78a641f92389d.png) *Highlighted: The location of the General Navigation bar buttons.* You can remove one or more buttons from the General Navigation panel by following these steps. 1. Click the **Edit Region button** at the bottom of the screen. 2. Click the **Objects button** located on the bottom right. This will launch the **Objects window**. 3. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 4. Locate the **Breakroom Navigation UI** object. Click the **> arrow** to expand it. 5. Locate the **Crowd Manager Navigation UI** object. Click the **> arrow** again to expand it. 6. Locate the **Canvas** object. Click the **> arrow** again to expand it. 7. Locate the **General Navigation** object. Click the **> arrow** again to expand it. 8. You will see the General Navigation panel buttons (highlighted above). 1. To disable buttons: Click the **eye icon** located to the right of any enabled button. The icon will turn gray and the button will disappear in-world. 2. To enable seats: Click the **eye icon** located to the right of any disabled button. The icon will turn white and the button will appear in-world. 9. Click the **Save button** to store your changes. 10. Click the **Reset Zones button** to reset the conference system. ##### Changing the General Navigation panel landing zones[​](#changing-the-general-navigation-panel-landing-zones "Direct link to Changing the General Navigation panel landing zones") If you like, you can change the location that each button in the General Navigation panel points to. This can be done either by repositioning the landmark objects within Region Editor, *or* by editing a voice zone's [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#the-roomfurniture-component). Both sets of instructions are offered below. ###### **Repositioning the landmark objects in Region Editor**[​](#repositioning-the-landmark-objects-in-region-editor "Direct link to repositioning-the-landmark-objects-in-region-editor") ![](/assets/images/Installing_Conference_018-41ed7d7b44fe8daff009b020c1411368.png) *Pictured: The Landmarks object expanded and highlighted.* 1. Click the **Edit Region button** at the bottom of the screen. 2. Click the **Objects button** located on the bottom right. This will launch the **Objects window**. 3. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 4. Locate the **Breakroom Combined Media Core** object. Click the **> arrow** to expand it. 5. Locate the **Crowd Manager Core** object. Click the **> arrow** again to expand it. 6. Locate the **Landmarks** object. Click the **> arrow** again to expand it. 7. You will see the General Navigation panel landmark objects (highlighted above). Click on the name of the landmark you would like to move (e.g., Entrance). 8. Physically reposition the landmark object within the Region using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#moving-objects-using-the-region-editor), or by entering the appropriate values in that object's [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component). 9. Click the **Save button** to store your changes. 10. Click the **Reset Zones** **button** to reset the conference system. ![](/assets/images/Installing_Conference_019-01fd94cd9b486e7efaa5c4b25dd64b0e.png) *Pictured: The invisible Entrance landmark object being moved. Note the movement gizmo.* ###### Editing the RoomFurniture component[​](#editing-the-roomfurniture-component "Direct link to Editing the RoomFurniture component") ![](/assets/images/Installing_Conference_020-6cb4513d9403be8d5fdf12833852a689.png) *Pictured: The Objects and Inspector windows in the Region Editor, with a custom voice zone selected.* Using this method, you can point any button in the General Navigation panel to a custom voice zone or a prefab breakout area of your choice. 1. Click the **Edit Region** **button** at the bottom of the screen. 2. Click the **Objects button** located on the bottom right. This will launch the **Objects window**. 3. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 4. Locate the voice zone or prefab breakout area you want to edit, and click on it. The **Inspector window** will launch. 5. In the Inspector window, click the **> arrow** located next to the **RoomFurniture component** to expand it. 6. Locate the **Zone Name** property. Type in the name of the General Navigation bar button you would like to point to this voice zone (e.g., *Auditorium, Entrance, Networking,* or *Floor*). 7. Click the **Save button** to store your changes. 8. Click the **Reset Zones** button to reset the conference system. info If you use this method, the landmark object associated with the Zone Name (*Auditorium, Entrance, Networking,* or *Floor*) will be overridden. There is no need to manually disable it. However, if you would like to use that landmark object again, you will need to rename any custom voice zones or breakout areas using its name. #### Advanced navigation system configuration[​](#advanced-navigation-system-configuration "Direct link to Advanced navigation system configuration") Breakroom's conference system contains multiple navigation tools. * The [General Navigation panel](/getting-started/using-the-conference-system.md#the-general-navigation-panel), located in the top left corner of the screen, makes use of landmark objects built into the conference system. By [editing the position of these landmark objects](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md#repositioning-the-landmark-objects-in-region-editor) (or by [assigning their identifying names to custom voice zones](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md#editing-the-roomfurniture-component)), users can teleport to those locations with a single click. * The [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakout-rooms-panel), located in the top right corner, displays a teleport button for each voice zone that includes the prefix "Breakout" in its **Zone Name** property. (For example, *Breakout 1*, *Breakout 2*, etc.) When you add a [prefab breakout area](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) to a Region, an associated teleport button will automatically appear in the Breakout Rooms panel. You can also edit the Breakout Rooms panel [manually](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md#editing-breakout-area-details). In addition to these navigation panels, there is a third: the Areas of Interest panel. ![](/assets/images/Using_Conference_System_017-062a960856fcd1d1ea6cfb00a6fc3591.png) *Pictured: An example of the Areas of Interest teleport panel.* This panel is visible on the right side of the screen only when activated. The Areas of Interest panel can teleport users to any voice zone that has the "Zone Visible" option enabled in its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-visible). *Zones already linked in either the General Navigation panel or Breakout Rooms panel will be ignored by the Areas of Interest panel.* This makes it a flexible solution for offering teleport options to your users. When speaking about these three navigation tools in aggregate, two new options emerge for advanced Region configuration: * Removing navigation tools from the Region entirely * Activating and customizing the Areas of Interest panel ##### Removing navigation tools from a Region[​](#removing-navigation-tools-from-a-region "Direct link to Removing navigation tools from a Region") ![](/assets/images/Installing_Conference_021-94bc1571d18120c86f9b95d59a3339ac.png) *Pictured: The Objects and Inspector windows in the Region Editor, with the Breakroom Navigation UI object selected.* To enable or disable the three individual tools that make up Breakroom's navigation system, follow these steps. 1. Click the **Edit Region button** at the bottom of the screen. 2. Click the **Objects button** located at the bottom right. This will launch the **Objects window**. 3. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 4. Locate the **Breakroom Navigation UI** object and click on it. The **Inspector window** will launch. 5. In the Inspector window, click on the **> arrow** next to the **RoomFurniture component** to expand it. 6. You will see three properties listed under the RoomFurniture component: 1. Navigation Breakouts: This refers to the Breakout Rooms bar. 2. Navigation General: This refers to the General Navigation bar. 3. Navigation Others: This refers to the Areas of Interest panel. 7. If you want a menu to appear in your Region, type **"yes"** into the corresponding field. If you want to remove a particular menu from your Region, type **"no"** into the field. 8. Click the **Save button** to store your changes. 9. Click the **Reset Zones button** to reset the conference system. ##### The Areas of Interest panel[​](#the-areas-of-interest-panel "Direct link to The Areas of Interest panel") ![](/assets/images/Installing_Conference_022-89792224f9c547916e5e7817fa5b5c52.png) *Pictured: The Objects and Inspector windows in the Region Editor, with a Breakroom Voice Zone object selected.* If you choose to make the Areas of Interest panel visible to your users, you can follow the instructions below to populate it with clickable teleport buttons. 1. Click the **Edit Region** **button** at the bottom of the screen. 2. Click the **Objects button** located at the bottom right. This will launch the **Objects window**. 3. In the Objects window, click the **> arrow** located beside the Room Floor heading to expand it. 4. Locate the **breakout area** or **Breakroom Voice Zone object** you want to include under Areas of Interest, and click on it. The **Inspector window** will launch. 5. In the Inspector window, click on the **> arrow** next to the **RoomFurniture component** to expand it. 6. There are two key properties listed under the RoomFurniture component that you will need to edit: 1. **Zone Name**: This is **the name of your area,** and the name that will appear in the corresponding teleport button in the Areas of Interest panel. (For example, "Coffee Bar.") 2. **Zone Visible**: This property governs whether the zone is listed under the Areas of Interest panel. Type **"yes"** into the field if you want the zone to be added to the panel. Type **"no"** into the field if you want to remove the voice zone from all panels. 7. Click the **Save button** to store your changes. 8. Click the **Reset Zones button** to reset the conference system. --- ### Installing Unity and the Breakroom SDK #### Overview[​](#overview "Direct link to Overview") If you would like to create and upload custom items to the Breakroom platform, you will need to download a compatible version of the Unity real-time development platform and install the Breakroom SDK. Instructions for downloading and installing these components can be found below. warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. info The virtual asset files that were used to create Breakroom's [Region templates](/building-new-worlds/region-template-descriptions.md) (e.g., the plants, buildings, furniture, etc.) are not available for individual distribution. 3D assets for use in Unity can be purchased through the [Unity Asset Store](https://assetstore.unity.com/), or any other 3D content warehouse. #### Downloading Unity [](#downloading-unity)[​](#downloading-unity- "Direct link to downloading-unity-") For the best possible development experience, we recommend that creators use Unity version 2018.4.x up to and including 2018.4.36. This software can be obtained by visiting the [Unity download archive](https://unity3d.com/get-unity/download/archive). Later versions of Unity may work, but we cannot guarantee their compatibility. Please review Breakroom's [system requirements](/help/system-requirements.md#unity-and-sinespace-sdk-requirements) for more information. #### Installing Unity[​](#installing-unity "Direct link to Installing Unity") ![](/assets/images/Unity_SDK_001-3fb514b54d2cff096c3496ffc36a3d7e.png) *Pictured: The Unity download assistant.* Once you've downloaded a compatible version of Unity, launch the download assistant. Click the **Next button**, and follow the installation instructions. A standard install of Unity is all that is required to begin creating in Breakroom. ![](/assets/images/Unity_SDK_002-a9a6395389a95adaf0aea9eece1b8398.png) *Pictured: The Unity download assistant, with the standard install of Unity selected.* To begin using Unity, you will need to register for a Unity ID. You can create one during the sign-in process, or visit the [Unity website](https://store.unity.com/#plans-individual) in order to sign up. ![](/assets/images/Unity_SDK_003-20b66505eccdc048571d9737dcc3f1c7.png) *Pictured: The Unity ID sign-in panel. Click the "create one" link if you do not have a Unity ID.* info Unity is free to use for individuals earning under $100K USD in revenue or funding per year. Please review all of the terms and conditions published on the [Unity website](https://store.unity.com/#plans-individual). #### Downloading the Breakroom SDK [](#downloading-the-breakroom-sdk)[​](#downloading-the-breakroom-sdk- "Direct link to downloading-the-breakroom-sdk-") ![](/assets/images/Unity_SDK_004-a94b75f90f13ca7cb1534d34620b166a.png) *Highlighted: The location of the Dashboard > Your Apps tab and the Breakroom SDK download button.* The Breakroom SDK comes packaged as a standard .unitypackage file. You can find the file download link under the **Your Apps tab** on the[ Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). To download the SDK, click the **Breakroom SDK button** and save the file to your local drive. You can also copy the download link to share with collaborators who may not have access to the Dashboard. #### Installing the Breakroom SDK [](#installing-the-breakroom-sdk)[​](#installing-the-breakroom-sdk- "Direct link to installing-the-breakroom-sdk-") Once you have installed Unity and signed in, you can create a new project by clicking the **Create button**. Give your project a name. Make sure the 3D template is selected, and then click the **Create button** again to start Unity. ![](/assets/images/Unity_SDK_005-2d7a2b052a76b4899e438e28c53147d9.png) *Pictured: The project creation window, with the 3D template selected.* Once Unity has fully launched, navigate to **Assets > Import Package > Custom Package**. This will launch a standard file import window. ![](/assets/images/Unity_SDK_007-c18e60cccde4a96675dc639ea5eb35c2.png) *Pictured: The Custom Package import window, with the Breakroom SDK selected for import.* Locate the Breakroom SDK file on your computer's hard drive and select it. Then click the **Open button**. ![](/assets/images/Unity_SDK_008-91f0c6b0b506f24b22d72acf82e6d2e4.png) *Pictured: The Import Unity Package window, with asset files expanded.* Next, a window will appear listing the assets that will be installed with the SDK. Click the **Import button** to continue the install. info During the installation process, you may see a Restart button appear. This is normal. Click the **Restart button** to continue the install. ![](/assets/images/Unity_SDK_009-1354c1b86ba853da35cc5cf22c6176e9.png) *Highlighted: The location of the Sinespace > Install Editor Pack Settings function.* Once the SDK install has completed, click on the **Sinespace menu** located at the top of the screen and select **Install Editor Pack Settings**. ![](/assets/images/Unity_SDK_010-72a17859f8721864b57f502f1ee779b7.png) *Highlighted: The location of the Sinespace > Sign In function.* Click on the **Sinespace menu** again and select **Sign In**. You will be prompted to sign in to the SDK. As a new creator, you will be required to sign up for a creator account. You can do this by clicking the **Create Account button** located in the Inspector panel on the right. If you have already signed up for a creator account, you can log in using your pre-existing username and password. #### Special tips for Mac users[​](#special-tips-for-mac-users "Direct link to Special tips for Mac users") Mac users are required to use the native Mac uploader. To access this, click the **Sinespace menu** at the top of the screen and navigate to **Tools > Install > Native Mac Uploader.** ![](/assets/images/Unity_SDK_011-4e334bc75236e014dc53f227e2d8f636.png) *Pictured: The location of the Sinespace > Tools > Install > Native Mac Uploader.* --- ### Pushing items to the live server #### Overview [](#overview)[​](#overview- "Direct link to overview-") Curator is a control panel that allows [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) to manage items that have been uploaded to Breakroom. Curator can be used to view, edit, and delete items, as well as to "push" items from the [preview server](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md) to the live server. Curator can also be used to review Sine Wave Shop transactions when items have been listed for sale, and to request payouts (in order to convert in-game [Gold](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies) to real currency). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. info When testing and uploading virtual items, you may see documentation, menus, and buttons that refer to Breakroom Worlds as *grids*. Because Breakroom is based on the Sinespace virtual world platform, you may also see the name *Sinespace* used instead of Breakroom. #### Testing and review permissions[​](#testing-and-review-permissions "Direct link to Testing and review permissions") Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can review and approve content uploaded to the preview server. If you grant a user Administrator or Developer permissions, they will need to [log in to Curator](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md#accessing-curator) and accept the Terms and Conditions before they can access the preview server. #### Accessing Curator[​](#accessing-curator "Direct link to Accessing Curator") ![](/assets/images/Live_Server_001-e68ec1cf304dbeabfc0fef268407932b.png) *Pictured: The Dashboard page header.* You can access Curator from the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md) by clicking on either your **username** or the **Advanced button** located at the top of the page. You can also access Curator directly by entering [http://curator.sine.space](http://curator.sine.space/) into your browser. If you navigate to Curator using the Advanced button on your Dashboard, you will be logged in automatically. If you navigate to Curator using the link above, you will need to log in with your Breakroom credentials. If you are new to Curator, you will be prompted to accept the Developer Terms and Conditions. #### Managing grids and items [](#managing-grids-and-items)[​](#managing-grids-and-items- "Direct link to managing-grids-and-items-") For most tasks, you will need to access information about your grids by clicking the **Grids tab** located at the top of the screen. The Grids tab lists all the Breakroom Worlds (hereafter referred to as "grids") to which you currently have access, and contains the tools you need to manage the content hosted on those grids. The UI you see may vary depending on your [permissions level.](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) ![](/assets/images/Live_Server_002-93e49baf9c98e95662d458377ad61291.png) *Pictured: An example of how Curator may appear, with the Grids tab active.* In the image above, you can see that this user account has access to one grid (Upward Con #322). In addition to some basic information about the grid, the grid listing also features three buttons: * Items * Item Edits * Dashboard These buttons can be used to navigate between Curator and Dashboard, or to access additional information and Curator functions. We will now explore the purpose of each button in more detail. ##### Items[​](#items "Direct link to Items") ![](/assets/images/Live_Server_003-c446a7f6288acdac1fa5cbb377e5e300.png) The **Items button** is available to both World Owners and World Developers. Clicking it opens the Items panel, which lists of all of the virtual content that has been uploaded to a particular grid. When reviewing the Items panel and the item listings, you will see an assortment of informational fields, components, and buttons. Here is a brief overview of the combined UI. | Component or button | Function | | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Search by item (*field #1*) | Allows you to search for content by item name or ID number. | | Search by user (*field #2*) | Allows you to search for content by the name of the Developer who uploaded it. | | Item ID button | Sorts by Item ID, in ascending or descending order. | | Updated button | Sorts by time or date updated, in ascending or descending order. | | Item name (*line #3*) | Identifies the name and item ID of a single Item listing. | | Item type and status (*line #4*) | Lists the content type and its current status (see below for details). | | Add to Inventory button | Places a copy of the object in your Inventory on the [preview server](testing-items-on-the-preview-server) for review purposes. Does not affect the status of an object or push it to live. | | Edit button | Allows you to [edit details](pushing-items-to-the-live-server#editing-individual-item-details) for a specific item. | ###### Content Types[​](#content-types "Direct link to Content Types") The item type and status field (labeled as *line #4* in the image above) identifies what kind of item has been uploaded. Item types include: * VirtualGood: Furniture items (content that can be placed in a Region) * Region: Region templates that your guests can visit * Clothing: Clothing items or avatar attachments * Pattern: Textures that are uploaded for use with clothing or furniture items ###### Status Types[​](#status-types "Direct link to Status Types") The item type and status field also identifies the item's status, which will be one of the following: * Uploaded: Content is uploaded and awaiting processing by the servers * Processing: Content is being processed by the servers * Staging: Content is available for review on the preview server * Live: Content is available on the live server Additionally, each item listing allows you to identify who created an item, its brand name, its associated grid, and its creation and update dates. ###### Editing individual item details[​](#editing-individual-item-details "Direct link to Editing individual item details") ![](/assets/images/Live_Server_004-52f1cd0e603c57a8c168c3e885c81815.png) *Pictured: The Edit panel for a single item.* Clicking the **Edit button** in an individual item listing will open the Edit panel. Here you can edit an item's name, its associated brand and copyright information, its description, and its [sale information](/advanced-tutorials/uploading-your-own-virtual-clothing.md#edit-the-pricing-information-or-restrict-the-item-from-sale). Once you are happy with your changes, click the **Save Edit button**. ##### Item Edits[​](#item-edits "Direct link to Item Edits") Clicking this button will push any changes you've made in Curator to the live server. ##### Dashboard[​](#dashboard "Direct link to Dashboard") Clicking this button will take you to the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md) for that specific grid. #### Pushing content to the live server[​](#pushing-content-to-the-live-server "Direct link to Pushing content to the live server") ![](/assets/images/Live_Server_005-37894f0069e4b909044071809ca25129.png) *Pictured: An example item listing, with the status listed as "staging."* If you've tested a virtual item on the preview server and would like to push it to the live server, you can do so by following the steps below. 1. Navigate to [Curator](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md#accessing-curator) and log in. 2. Click on the **Grids tab** located at the top of the screen. 3. Find the grid that contains the item you want to push to live. Click the **Items button** in that Grid panel. 4. Locate the item that you want to push to the live sever. Make sure that the item has a status of "staging." 5. Click the **Send to Review button** in that item panel, and you will notice several new buttons appear. These include buttons labeled **Accept Item**, **Reject Item**, and **Cancel Review**. ![](/assets/images/Live_Server_006-8f896310925ef8cb93fc3383b8e3e88c.png) *Pictured: The same example item listing, updated with new buttons.* 6. Click the **Accept Item button** to push the content to the live server. The status of the item will change to "live" to reflect this. warning It is the responsibility of World Owners, World Administrators, or World Developers to review and approve all virtual items uploaded to the preview server. Without final approval, virtual items will remain on the preview server and will not be added to the live Breakroom World. ##### Updating content[​](#updating-content "Direct link to Updating content") To update content that was previously pushed to the live server, upload your item again using the [same process](/advanced-tutorials/uploading-your-own-virtual-objects.md). Once uploaded, your updated item's status will revert to "staging." You can then [preview it](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md) and [push it to live](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md#pushing-content-to-the-live-server) using the steps outlined above. info Important notes about updates: * Once you push updated content the live server, Breakroom's cloud servers will also need to process that update. During this delay, you will still see the old version of your item on the live server. This issue should resolve itself after 15-20 minutes. * If you issue an update for an item that was previously distributed to other users or sold through the Sine Wave Shop (for example, branded t-shirts), those users will automatically receive the updated version when it is pushed to live. For this reason, please ensure the item has been thoroughly tested prior to submission. #### Tips and important notes[​](#tips-and-important-notes "Direct link to Tips and important notes") * Breakroom staff will not review any items uploaded to user grids, either for basic approval or for content and quality. Your team may want to consider implementing its own internal review processes to streamline content creation. * As a general rule, we would advise that you let uploaded content sit in staging status for at least ten minutes before you submit it to the live server. --- ### Reducing poly counts on CAD files #### Overview [](#overview)[​](#overview- "Direct link to overview-") If you want to use a 3D CAD file to create a virtual item for Breakroom (for instance, if you have a CAD file of your corporate headquarters), you may need to reduce the polygon count to achieve optimal performance in a runtime environment. You can consult our [Review Policies](https://wiki.sine.space/index.php?title=Review_Policies) for more information about recommended poly counts. #### Reducing poly counts in Blender [](#reducing-poly-counts-in-blender)[​](#reducing-poly-counts-in-blender- "Direct link to reducing-poly-counts-in-blender-") You can use the Decimate modifier in Blender to lower the polygon count of your model. Start by importing your model into Blender. Select the model in the Hierarchy. ![](/assets/images/CAD_001-fa3bc048ad2d5f3d4eb66667a80f79f8.png) *Pictured: Blender, with a high-poly model imported for use and selected.* With the model selected, click the **wrench icon** in the bottom right panel. Click on the **Add Modifier drop-down menu,** and select **Decimate**. ![](/assets/images/CAD_002-47669d243c86a5846346890ba2d82d15.png) *Pictured: The location of the wrench icon and the Add Modifier menu.* In the Decimate panel, you can see that the face count for this object is currently 1,007,616. Adjust the **Ratio slider** to reduce the face count, and then click the **Apply button**. ![](/assets/images/CAD_003-49e01eba2479086b4b0b07ff70ae30f2.png) *Pictured: The Decimate panel, with the ratio slider and Apply button visible.* In the picture above, you can see that the ratio has been reduced to 0.8, which is 80% of the original. This gives us an adjusted face count of 806,092. info More information on using the Decimate modifier can be found in [Blender's own documentation](https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/decimate.html). #### Recommended software [](#recommended-software)[​](#recommended-software- "Direct link to recommended-software-") In addition to Blender, there are a number of software solutions for reducing polygon count on large files. We recommend the following: --- ### Testing items on the preview server #### Overview[​](#overview "Direct link to Overview") When developing Regions, clothing, or other content for your Breakroom World, you may want to run a final quality check before offering these items to your users. This is where the preview server comes into play. The preview server gives World Owners (and other users with [appropriate permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md)) a safe place to test their creations before "pushing them to live." The preview server is not linked to the live server where users log in, so changes can be made and content can be re-uploaded as many times as required. warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. info When testing and uploading virtual items, you may see documentation, menus, and buttons that refer to Breakroom Worlds as *grids*. Because Breakroom is based on the Sinespace virtual world platform, you may also see the name *Sinespace* used instead of Breakroom. #### Testing and review permissions[​](#testing-and-review-permissions "Direct link to Testing and review permissions") Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can review and approve content uploaded to the preview server. If you grant a user Administrator or Developer permissions, they will need to [log in to Curator](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md#accessing-curator) and accept the Terms and Conditions before they can access the preview server. #### Accessing items for preview server testing[​](#accessing-items-for-preview-server-testing "Direct link to Accessing items for preview server testing") Any items that you personally [upload to Breakroom](/advanced-tutorials/uploading-your-own-virtual-objects.md) will appear in your Inventory when you log in to the preview server. You can then use the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) and other Breakroom tools to deploy and test those items. If you want to test an item another user has uploaded (for example, if you are a World Owner and you want to QA an item that a Developer has uploaded), you will need to add a copy of that item to your preview server Inventory by following these steps. 1. Navigate to [http://curator.sine.space ](http://curator.sine.space)and log in. 2. Click the **Grids tab** located at the top of the screen. 3. Find the grid that contains the item you want to preview. Click the **Items button** in that grid panel. 4. Locate the item that you want to preview. Make sure that the item has a status of "staging." 5. Click the **Add to Inventory button** in the item panel. 6. A copy of the item will be sent to your preview server Inventory. You can now[ log in to the preview server](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md#logging-in-to-the-preview-server) and access the item for testing. #### Logging in to the preview server[​](#logging-in-to-the-preview-server "Direct link to Logging in to the preview server") *You must access the preview server using your World's* [*custom desktop application*](/opening-the-doors/desktop-viewers.md)*. World Stream access is not available at this time.* To begin, launch the desktop application and wait for it to display the login screen. In the upper right corner of the screen, locate the Settings button. ![](/assets/images/Preview_Server_001-62bdf67e6827ffcf45aec8ff2e64cf81.png) *Highlighted: The location of the Settings button.* Click the **Settings button** to open the Settings panel. Click the **UI tab** on the left-hand side, and then check the **"Enable Login to Preview" option**. ![](/assets/images/Preview_Server_002-16193d7a0c368597dba078529aa878f8.png) *Highlighted: The "Enable Login to Preview" option.* Close the Settings panel, and you will see that a **"Login to Preview Server" option** has appeared in the login panel. To access the preview server, check this box and log in as normal. ![](/assets/images/Preview_Server_003-4cbb3d2ce69d2e63cc97489e40a8d104.png) *Highlighted: The "Login to Preview Server" option. Check this box to log in to the preview server.* #### Tips and important notes[​](#tips-and-important-notes "Direct link to Tips and important notes") * The preview server is designed to be used as a testing area, so that you can examine and troubleshoot items and 3D models prior to [making them available on the live server](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md). * Furniture items placed in preview Regions using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) will *not* be sent to the live server when you make the Region live. * Once you log in, Regions uploaded for testing can be found by clicking the [**Regions button**](/getting-started/ui-tour.md#the-bottom-toolbar) in the bottom toolbar. --- ### Uploading a Region from Unity to Breakroom #### Overview[​](#overview "Direct link to Overview") After you've created a Region or other 3D model, only a few additional steps are required to upload it to Breakroom. Please note that the instructions below presume a basic working knowledge of Unity, and that you must have Unity and the Breakroom SDK[ installed on your computer](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. info The instructions provided in this section presume an advanced working knowledge of Breakroom, virtual assets, and third-party 3D software. #### Starting a new scene in Unity[​](#starting-a-new-scene-in-unity "Direct link to Starting a new scene in Unity") In Unity, click on the **File menu**, and then click **New Sinespace Scene**. This will add the necessary components to a new scene to begin your Region upload. ![](/assets/images/Uploading_Unity_Breakroom_001-89b8681445df8f5e39b65b8aaddee309.png) *Pictured: The location of File > New Sinespace Scene.* When you create a standard Unity scene, it will include a Main Camera and a Directional Light. A new *Sinespace* scene creates a specific setup for use in Breakroom, and includes some additional elements: * Landmark: This controls where your users will land when they teleport to the Region. * Sun: This is a renamed Directional Light. * Cube: This is a simple floor. This would normally be replaced by your Region's models and designs. * Scene Export Settings: This contains specific information that you will need to edit. This is covered in more detail below. * Post Processing Settings: You will normally not need to make changes to these settings. Throughout this document, the default cube pictured is representative of a scene. Remember that normally, this cube will be replaced by your own custom models. ![](/assets/images/Uploading_Unity_Breakroom_002-cee8bade2d4ab30ad3c9737e76a21b78.png) *Pictured: How Unity may appear during the process described above, with the example cube. Note the Virtual Good component in the Hierarchy.* #### Editing the Virtual Good component[​](#editing-the-virtual-good-component "Direct link to Editing the Virtual Good component") In order to upload your Region, you'll need to make some changes to the Virtual Good component. To begin, click on the **Scene Export Settings component** in the Hierarchy. In the Inspector panel, you will see the **Virtual Good component.** ![](/assets/images/Uploading_Unity_Breakroom_003-d0065ff9fba04eeabfc38dd4574061a5.png) *Pictured: The Virtual Good component > Basic tab, featuring a number of information fields.* From here, you'll need to navigate through the Virtual Good component tabs and edit their contents to complete setup of your Region. Here are the key steps you'll need to take. ##### 1. Provide basic item information[​](#1-provide-basic-item-information "Direct link to 1. Provide basic item information") Under the Basic tab, you must: 1. Specify the item type and category (e.g. *Region*) using the **Type drop-down menu** and **Category search field.** 2. Enter a name for the Region in the **Name field**. 3. Enter a description in the **Description field**. 4. And finally, enter a brand name in the **Brand field**. If you don't have an in-world brand, this would normally be your company name. ##### 2. Edit the Inworld Customization setting[​](#2-edit-the-inworld-customization-setting "Direct link to 2. Edit the Inworld Customization setting") ![](/assets/images/Uploading_Unity_Breakroom_004-d13cface9fda9b9f50dd6f3c89188288.png) *Pictured: The Virtual Good component > Detail tab.* After you're done editing the Basic tab, click on the **Detail tab.** The settings located under this tab are optional, and usually left in their default state. The sole exception is the **Inworld Customization setting**, which is highlighted in the image above. Using the drop-down menu, set this to *Full*\*\*.\*\* ##### 3. Edit the Pricing information[​](#3-edit-the-pricing-information "Direct link to 3. Edit the Pricing information") ![](/assets/images/Uploading_Unity_Breakroom_005-1d20ba75823fb9e4a3bd46739aa6d755.png) *Pictured: The Virtual Good component > Pricing tab.* Next, click the **Pricing tab** and check the box beside the "Not for Sale" option. You can skip the Icons tab, as this tab is only used if you intend to [sell](/advanced-tutorials/uploading-your-own-virtual-objects.md) your Region as a product in the [Sine Wave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md). ##### 4. Edit the Author information[​](#4-edit-the-author-information "Direct link to 4. Edit the Author information") ![](/assets/images/Uploading_Unity_Breakroom_006-60f9284cfe1492eefbec5cbc8e68d99a.png) *Pictured: The Virtual Good component > Author tab.* Click the **Author tab,** and then enter the relevant information for your upload. If in doubt, leave the **Unique Status drop-down menu** set to *Available Elsewhere*, enter your name into the **Developer Name field**, and set the **Copyright field** to your company name. ##### 5. Add your grid number[​](#5-add-your-grid-number "Direct link to 5. Add your grid number") ![](/assets/images/UPloading_Unity_Breakroom_007-61ed8d675a662f70d6e19c7543677995.png) *Pictured: The Virtual Good component > Upload tab, with relevant settings highlighted.* Under the **Upload tab**, add your grid number to the **Grid field**. You can obtain your grid ID from multiple places. **Finding your grid ID on Dashboard** 1. Navigate to your[ Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Look in the top left corner of the screen. You will see your World name followed by an ID number. This ID number is your grid ID. **Finding your grid ID on Curator** 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click either your **account name** or the **Advanced button** located at the top of the page. This will take you to Curator. 3. In the Curator window that opens, click the **Grids heading**. 4. Locate the **grid card** for your World. Your grid ID will be displayed next to the World name. ##### 6. The Scene Save Settings component[​](#6-the-scene-save-settings-component "Direct link to 6. The Scene Save Settings component") While still in the Upload tab, locate the **Scene Save Settings component.** Here you will need to add two images. One will be your Region-specific "splash screen," and the smaller one will be your logo. Splash screen: This image will appear in the [Explore window](/exploring-breakroom/using-the-explore-window.md), and when users are teleporting to your Region. It should be 1920x1080, PNG format preferred, and no larger than 5MB. Logo: The image should be 512x256, PNG format preferred, and no larger than 5MB. Once you have uploaded these images, click on the **Automatic Submission button** to complete your upload. #### Video tutorial[​](#video-tutorial "Direct link to Video tutorial") The tutorial below is designed for Sinespace, but the advice is consistent with Breakroom. [YouTube video player](https://www.youtube.com/embed/1teukGep67s) --- ### Uploading your own virtual clothing #### Overview[​](#overview "Direct link to Overview") Virtual clothing items can be uploaded as individual pieces that integrate with Breakroom's standard humanoid avatars, or they can take the form of self-contained costume avatars. You can restrict use of these items to your World or list them for sale in the [Sine Wave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md), making them available to users throughout the Breakroom/Sinespace Metaverse. info Within our advanced documentation, you may see different words used to describe the same concept or tool. This is because Breakroom is based on the Sinespace virtual world platform. Please be aware of the following: * When you [install](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) the Breakroom SDK, you may notice that certain tools and menus refer to *Sinespace, Sinespace components,* or the *Sinespace SDK*. This is normal and has no effect on performance. * When testing and uploading virtual items, you may see documentation, menus, and buttons that refer to Breakroom Worlds as *grids*. info The instructions provided in this section presume an advanced working knowledge of Breakroom, virtual assets, and third-party 3D software. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. #### Importing your clothing items and textures[​](#importing-your-clothing-items-and-textures "Direct link to Importing your clothing items and textures") To get started, locate the clothing template and textures you want to use. You can import clothing made in Blender or another 3D modeling application, and you are also welcome to utilize our [library](https://mod.io/g/sinespace) of clothing templates. These templates were designed specifically for the Breakroom platform, and are completely free to use. Item templates can be formatted as FBX or OBJ files. Textures can be formatted as PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, or PICT files. Once you have your clothing template and textures selected, you can import all of your files either by dragging them into the Project Asset panel in Unity, or by clicking the **Assets drop-down menu > Import Asset.** #### Setting up your clothing item[​](#setting-up-your-clothing-item "Direct link to Setting up your clothing item") Once you've imported your clothing template into Unity, you can drag it into the **Hierarchy**. ![](/assets/images/Clothes_001-9c558f0544508664aca638f1589ac0fd.png) *Pictured: An example clothing item, added to the Hierarchy and currently highlighted.* Next, drag your **texture** onto the clothing, and add the normal, height, and occlusion maps as required. ![](/assets/images/Clothes_002-a172b20734c3a2c2e83f143bbba88b81.png) *Pictured: The same highlighted clothing item, with textures applied.* ##### Adding the Clothing Item Settings component[​](#adding-the-clothing-item-settings-component "Direct link to Adding the Clothing Item Settings component") Next, make sure the clothing model is selected in the Hierarchy and click the **Add Component button.** Search for "clothing," and add the **Clothing Item Settings component** to the model. ![](/assets/images/Clothes_003-1950033b90f3a9a48abcdc5845b027e2.png) *Pictured: The same highlighted clothing item, with the Clothing Item Settings component added.* ##### Setting the skeleton and selecting clothing type[​](#setting-the-skeleton-and-selecting-clothing-type "Direct link to Setting the skeleton and selecting clothing type") In the Clothing Item Settings component, we will now set our skeleton. The item should be set to the same skeleton for which it was rigged in the original 3D software. You have the choice of unisex, base male, and base female skeletons. ![](/assets/images/Clothes_004-92f22bafd687e7cb75b248f249213c6b.png) *Pictured: The Clothing Items Setting, with the Base Female skeleton selected.* Expand the **Clothing** **tab** by clicking the arrow located to the left, and select the clothing type. As we are uploading clothing, we will select **Rigged Clothing.** ![](/assets/images/Clothes_005-bf048ffb5cb80ebe6c4bd505817b21c9.png) *Pictured: The Clothing tab expanded, and Rigged Clothing selected as the clothing type.* ##### Selecting layers and slots[​](#selecting-layers-and-slots "Direct link to Selecting layers and slots") Expand the **Fittings & Slots tab** by clicking the arrow located to the left. You will be asked to choose which layer the clothing item will occupy. You can visualize virtual clothing layers just as you would physical clothing layersβ€”for example, layering a t-shirt under a pullover, with the t-shirt tucked under the pullover. *Underwear* is the default setting, and the layer that sits closest to the avatar skin. Each layer. working downwards through the menu, will be laid on top of the previous layer. In this tab, you will also select the slot your clothing will occupy on the avatar. The slot and the layer work in conjunction with each other in the avatar wardrobe. You can only wear one item per layer/slotβ€”trying to wear two items in the same layer/slot will remove the first item that was worn. Selecting one or more slots will add a wireframe avatar to the scene view. This can be used to ensure that your clothing is positioned correctly on the avatar. warning Care should be taken to only check the slots that are required. For example, a t-shirt would occupy the upper chest and back, leaving other slots open for use. ![](/assets/images/Clothes_006-912f860aa2de284baad33b2e238ff65a.png) *Pictured: The item positioned on a wireframe avatar. A layer and several slots have been selected.* ##### Editing materials and patterns[​](#editing-materials-and-patterns "Direct link to Editing materials and patterns") Next, we will take a look at the **Materials & Patterns** **tab** located under the Clothing Item Settings component. You can expand this tab by clicking the arrow located to the left. If you are using only one material for your clothing item, you will need to check the box beside the "Keep Materials Always" option. Failing to enable this option will cause the material to be removed upon processing. ![](/assets/images/Clothes_007-fc3b370fe03f93b2dcc51d942b37fa42.png) *Pictured: The Materials & Patterns tab expanded, and "Keep Materials Always" enabled.* ##### Auto-rigging and weighting clothing[​](#auto-rigging-and-weighting-clothing "Direct link to Auto-rigging and weighting clothing") Finally, you will need to auto-rig and weight your clothing in preparation for upload. This can be achieved by expanding the **Automatic Skin Weighting tab**, and then clicking the **Convert to Skinned** **button**. ![](/assets/images/Clothes_008-dd7c3c5d3351097856d712b31dae8ebf.png) *Pictured: The Automatic Skin Weighting tab, with the Covert to Skinned button highlighted.* When rigging is complete, you'll notice that the Automatic Skin Weighting tab will update to detail bone counts and bind counts, and offer the ability to re-rig if necessary. ![](/assets/images/Clothes_009-28daa7e2ae896657c779f5b06ae7f29d.png) *Pictured: The expanded Automatic Skin Weighting tab, updated with rigging information.* You will also see that the Finalize/Prepare button has changed to a bright cyan. This tells us that the clothing item is now ready for finalization. Click the **Finalize/Prepare button** to complete the clothing setup. info It's normal for clothing preparation to take a few minutes, depending on the complexity of the clothing item. ![](/assets/images/Clothes_010-a43e4860bbbef122f402824ff202956e.png) *Highlighted: The location of the Finalize/Prepare button.* #### Adding the Virtual Good component[​](#adding-the-virtual-good-component "Direct link to Adding the Virtual Good component") In order to upload the finished clothing item to your grid, you will need to add the **Virtual Good component.** Select your clothing item in the Hierarchy, and then click the **Add Component button** in the Inspector window. Search for "virtual good," and add the Virtual Good component. ![](/assets/images/Clothes_011-be31b09ca6ed39d19b3be914c0bea882.png) *Pictured: A finished clothing item, with the Virtual Good component added.* From here, you will need to navigate through the Virtual Good component tabs and edit certain information to complete setup of your clothing item. Here are the key steps you will need to take. ##### 1. Provide basic item information[​](#1-provide-basic-item-information "Direct link to 1. Provide basic item information") In the Virtual Good component, under the **Basic tab**, you will need to select the clothing type and the clothing category. The clothing category you select will influence where your item appears in your users' inventories and/or where your item is displayed within the Sine Wave Shop. For example, selecting the Clothes/Tops/Shirts category for the vest pictured above will file the item under the Tops tab of the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md), and also under the Tops tab of the Shop should you decide to list your item for sale. There are additional details under the Basic tab that you will need to provide: * Name: The item's name. * Description: A brief description of the item. This will be used to describe your item in the Shop, so it's an excellent place to list your item's features. * Brand: Your clothing brand name. ![](/assets/images/Clothes_012-5ad5cf6ba69cb970d20df0a74db04f5a.png) *Pictured: Here a clothing item has been named, described, and branded.* ##### 2. Edit the Pricing information or restrict the item from sale[​](#2-edit-the-pricing-information-or-restrict-the-item-from-sale "Direct link to 2. Edit the Pricing information or restrict the item from sale") ![](/assets/images/Clothes_013-d2e75ff5a79b8214e17c5492905676bd.png) *Pictured: An example of how the Pricing tab may appear.* If you want to sell your item in the Sine Wave Shop, you will need to enter your desired price in [Silver or Gold](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies) under the **Pricing** **tab.** (You can list a price in both currencies if you wish.) There are also several other options that you can enable or disable as the seller. | Option | Sales Result | | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Derivation Allowed | Enabling this option permits purchasers to edit your original product and list their edited version for sale in the Shop. (For example, a user may change the upholstery texture on a chair you created and then sell their derivative version.) | | Allow Use In Promotions | As explained in the image text above, this option encompasses two different types of promotions. For items that sell for Silver, Breakroom/Sinespace may include your goods on starter avatars or in special giveaways. For items that sell for Gold, Breakroom/Sinespace may include your items in platform operated sales events. | | Max Discount in Sales | If you opt into promotions for your Gold-listed items, you can set a maximum discount for platform operated sales. (For example, you may indicate that your products should never be sold for more than 20% off.) | | Max Owned | As explained in the image text above, setting this number higher than zero will limit the maximum copies a user can own at any one time to the number specified. This option cannot be enabled if your item is on sale for Gold. | danger If you do not intend to sell your item, *do not* enter a price into either the Price Gold or Price Silver fields. Instead, be sure to check the box beside the "Not for Sale" option. ##### 3. Edit the Icons information[​](#3-edit-the-icons-information "Direct link to 3. Edit the Icons information") The **Icons tab** allows you to associate images with your item, such as a store image, inventory image, or brand logo. Click on the **Select buttons** to pick the images you would like to use. ![](/assets/images/Clothes_014-7278b093bd006ec864db51fc7b59caa2.png) *Pictured: An example of how the Icons tab may appear.* info You can use the **Take Screenshots** **button** located under the **Icons** **tab** to auto-generate images for your item based on the Unity model. You will need to finish prefabbing your item before this function will work. See the section that follows about[ prefabbing and uploading your clothing item](/advanced-tutorials/uploading-your-own-virtual-clothing.md#prefabbing-and-uploading-your-clothing). ##### 4. Edit the Author information[​](#4-edit-the-author-information "Direct link to 4. Edit the Author information") The Author tab allows you to add relevant author information, such as the developer name and copyright. ![](/assets/images/Clothes_015-2cc84d8cf81892cc467a9e93ec9fe4b9.png) *Pictured: An example of how the Author tab may appear.* If in doubt, leave the **Unique Status drop-down menu** set to *Available Elsewhere*, enter your name into the **Developer Name field** (as the grid Owner), and set the **Copyright field** to your company name. ##### 5. Edit the Upload information[​](#5-edit-the-upload-information "Direct link to 5. Edit the Upload information") When uploading a clothing item intended for sale, you do not need to make any changes to the information listed under the Upload tab. If you want to upload a clothing item to your grid alone, however, you will need to specify your grid ID. You can obtain your grid ID from multiple places. **Finding your grid ID on Dashboard** 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Look in the top left corner of the screen. You will see your world name followed by an ID number. This ID number is your grid ID. **Finding your grid ID on Curator** 1. Navigate to your[ Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click the **Advanced button** at the top of the page. This will take you to Curator. 3. In the Curator window that appears, locate the **Grid listing** for your World. Your grid ID will be displayed next to the World name. ![](/assets/images/Clothes_016-80cc98783a44f4a6dc571a7b3872e171.png) *Pictured: An example of what you might see in Curator.* Now that you have your grid ID, it can be entered into the **Grid ID field** under the **Upload** **tab** as shown. ![](/assets/images/Clothes_017-d6c2b18a1486674a379d46cccd5170f3.png) *Pictured: The Upload tab, with the grid number entered into the appropriate field.* #### Prefabbing and uploading your clothing[​](#prefabbing-and-uploading-your-clothing "Direct link to Prefabbing and uploading your clothing") To complete setup on your clothing item, you will need to prefab it by dragging the model from the Hierarchy to the Project Asset panel. Once the item is prefabbed, you can right click on the clothing item in the Project Asset panel and select **Upload to Sinespace** to upload your item. ![](/assets/images/Clothes_018-2f0fed02a7f6fe3bb3bc5bed4e67941a.png) *Pictured: You will need to drag your completed model to the Project Asset folder to prefab it.* Once uploaded, your clothing item will be available for testing on the [preview server](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md). When you have tested the item and are happy with how it performs, you can push it to the [live server](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) for your users. --- ### Uploading your own virtual objects #### Overview[​](#overview "Direct link to Overview") A virtual object is any in-world item that is not a full Region or clothing item. Common virtual objects include [chairs](/advanced-tutorials/uploading-your-own-region/creating-and-uploading-custom-chairs.md) and other pieces of furniture, avatar animations, and 3D models (such as a company logo). Once these items are uploaded to your World, you can deploy them through the use of the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) and other means. info Within our advanced documentation, you may see different words used to describe the same concept or tool. This is because Breakroom is based on the Sinespace virtual world platform. Please be aware of the following: * When you [install](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) the Breakroom SDK, you may notice that certain tools and menus refer to *Sinespace, Sinespace components,* or the *Sinespace SDK*. This is normal and has no effect on performance. * When testing and uploading virtual items, you may see documentation, menus, and buttons that refer to Breakroom Worlds as *grids*. info The instructions provided in this section presume an advanced working knowledge of Breakroom, virtual assets, and third-party 3D software. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning Only [World Owners, World Administrators, and World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom items to Breakroom. #### Import or create your virtual object in Unity[​](#import-or-create-your-virtual-object-in-unity "Direct link to Import or create your virtual object in Unity") In order to follow the steps outlined below, you must already have Unity and the Breakroom SDK [installed](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) on your computer. ##### Merging items in Unity[​](#merging-items-in-unity "Direct link to Merging items in Unity") ![](/assets/images/Objects_001-cb6ae07bcb06e8f34d8131d67b5521e5.png) *Pictured: An example objectβ€”a globe on top of a cube.* As an example object, let's take a look at the globe sculpture pictured above. It consists of two itemsβ€”a sphere placed on top of a cube. To merge these two items into a single item and upload it to your World, first right click on an empty area in the **Hierarchy panel** and select **Create Empty** in the menu that appears. Rename this object to something meaningfulβ€”for example, "My First Object." Now drag the cube and the sphere into this object. ![](/assets/images/Objects_002-1095baf0cc25fe50af118a0384faf3ff.png) *Pictured: The original sphere and cube items, now merged under "My First Object."* ##### Turning your item into a virtual good[​](#turning-your-item-into-a-virtual-good "Direct link to Turning your item into a virtual good") ![](/assets/images/Objects_003-380b9fbba06ca97f3c68a745fa607f09.png) *Pictured: The Sinespace menu, with the Virtual Goods sub-menu expanded.* Click on **My First Object** to highlight it, and then click on the **Sinespace menu** and navigate to **Virtual Goods > Turn selection into furniture.** Clicking this action will convert your object into a virtual good that can be uploaded to your World. You do not need to alter the Room Furniture component that was just added. ![](/assets/images/Objects_004-9669e6c774972a8994a57731f64d5348.png) *Pictured: "My First Object," with the Virtual Good and Room Furniture components added.* #### Editing the Virtual Good component[​](#editing-the-virtual-good-component "Direct link to Editing the Virtual Good component") Scroll down to the **Virtual Good component**. To complete setup of your item, you'll need to navigate through the Virtual Good component tabs and change certain information. Here are the key steps you'll need to take. ##### 1. Provide basic item information[​](#1-provide-basic-item-information "Direct link to 1. Provide basic item information") ![](/assets/images/Objects_005-7db98cbca651f1fd6915b7c0209527c1.png) *Pictured: The Virtual Good component, with the Basic tab active. Note that the item type is set to *Furniture*.* In the Virtual Good component, under the **Basic tab**, you will need to select the item type and category. The category you select will influence where your item appears in your Inventory. There are additional details under the Basic tab that you'll need to provide: * Name: The item's name * Description: A brief description of the item * Brand: Your brand name (corporate clients may want to use their company name) ##### 2. Edit the item details[​](#2-edit-the-item-details "Direct link to 2. Edit the item details") ![](/assets/images/Objects_006-a1017b5c0a9776dd84d8fbd57cf730e1.png) *Highlighted: The Inworld Customization setting, under the Detail tab. This must be set to *Full*.* Next, click on the **Detail tab**. The settings listed under this tab are optional, and usually can be left in their default stateβ€”except for the **Inworld Customization setting**. You will need to set this to *Full*. ##### 3. Edit the Pricing information[​](#3-edit-the-pricing-information "Direct link to 3. Edit the Pricing information") ![](/assets/images/Objects_007-d8978d069dfe57dccf0d560685a53df7.png) *Pictured: The Pricing tab, with the "Not for Sale" option checked.* Next, click on the **Pricing tab**. Check the box to enable the "Not for Sale" option. ##### 4. Edit the Icons information[​](#4-edit-the-icons-information "Direct link to 4. Edit the Icons information") You can skip the Icons tab, as this is only used if the item will be sold in the Sinewave Shop. ##### 5. Edit the Author information[​](#5-edit-the-author-information "Direct link to 5. Edit the Author information") ![](/assets/images/Objects_008-2b07498db80a617b7072766394570d0e.png) *Pictured: The Author tab, where you can specify creation details about your item.* Click on the **Author tab**. Fill in the details that best suit your upload. If in doubt, leave the item's **Unique Status** as *Available Elsewhere*, edit the **Developer's Name field** to include your name, and edit the **Copyright field** to include your company name. ##### 6. Edit the Upload information[​](#6-edit-the-upload-information "Direct link to 6. Edit the Upload information") ![](/assets/images/Objects_009-3e404b1ef27fafc0dbe6232ebccfed1c.png) *Pictured: The Upload tab, with the Grid ID field highlighted.* Lastly, click the **Upload tab**. In the **Grid ID field,** enter your Breakroom World's unique grid ID number. There are multiple places where you can obtain your grid ID number. **Finding your grid ID on Dashboard** 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Look in the top left corner of the screen. You will see your world name followed by an ID number. This ID number is your grid ID. **Finding your grid ID on Curator** 1. Navigate to your[ Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click the **Advanced button** at the top of the page. This will take you to Curator. 3. In the Curator window that appears, locate the **Grid listing** for your World. Your grid ID will be displayed next to the World name. ![](/assets/images/Objects_010-6a49b1f4c8cbbeb55d05f9c510d89dad.png) *Highlighted: The location of your grid ID in Curator.* Once you have your grid ID, it can be entered into the **Grid ID field** under the **Upload** **tab** as shown. #### Converting your item to a Unity prefab[​](#converting-your-item-to-a-unity-prefab "Direct link to Converting your item to a Unity prefab") Create a new folder in your Unity project by right clicking on the Project Assets panel. Call this folder "**Uploads**," and double click on it. ![](/assets/images/Objects_011-120cf05d2eb47e18c4a06ed750ff504f.png) *Pictured: How to create a new folder in your Unity project.* Now drag the parent object from the Hierarchy to the "Uploads" folder in the **Project panel.** ![](/assets/images/Objects_012-a59827e4630d424c2ade7ac71a2b067d.gif) *Pictured: Dragging the parent object from the Hierarchy into the "Uploads" folder.* Next, right click on this new prefab object and select **Upload to Sinespace** in the menu that appears. ![](/assets/images/Objects_013-d31745f312cb914debb27fa8baeecbeb.png) *Pictured: The location of the Upload to Sinespace action.* Finally, confirm the upload. ![](/assets/images/Objects_014-16a4d813d9c2b376c9bb67f76b25f15e.png) *Confirm the upload by clicking the Upload Item button.* You will be asked to save the scene before the upload can proceed. We do recommend saving, as you may have other items in the scene and this will make editing easier in the future. #### Completing your upload[​](#completing-your-upload "Direct link to Completing your upload") For your next steps, you'll want to test your item on the [preview server](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md) and then push it to the[ live server](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md). Detailed instructions can be found in the linked documentation. --- ### Video streaming #### Overview[​](#overview "Direct link to Overview") Breakroom gives you the tools you need to stream live video to your guests. This can be achieved either by using the [presentation controls](/running-your-event/moderator-tools/presentation-controls.md) located within the [moderator tools](/running-your-event/moderator-tools.md), or by entering an RTMP or HLS streaming address into a [Breakroom Video Player](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-video-player.md) object. warning HLS streaming is the preferred method of streaming live video, as it is "lighter-weight" and offers increased compatibility with client video players. #### Broadcast provider (streaming server)[​](#broadcast-provider-streaming-server "Direct link to Broadcast provider (streaming server)") To stream live video content to your guests, you will need to source an RTMP/HLS broadcast provider. There are many providers to choose from, and you can easily search for them online. Your broadcast provider will supply you with a **stream address** and **login key**, which you will need to enter into your streaming software of choice. ![](/assets/images/Video_001-ad5fdba724026b04295c5edc539ec940.png) *Pictured: An example of an RTMP streaming address and streaming key, taken from the broadcast provider Castr.* warning Broadcast providers charge an upfront fee for their services. It is possible to set up a broadcast server on your own hardware, but this is generally inadvisable unless you have an extremely robust Internet connection. warning HLS streams sometimes need to be requested prior to use, and can take 24-48 hours to set up depending on your provider. #### OBS Studio (streaming software)[​](#obs-studio-streaming-software "Direct link to OBS Studio (streaming software)") ![](/assets/images/Video_002-59f0291f63f06fb26840c208002bcbb4.png) *Pictured: The OBS Studio main window.* OBS Studio is a free open-source video recording/streaming software suite available for both Windows and macOS. It contains the toolset you will need to capture your webcam, film your desktop, or collect images, all of which can then be streamed to your clients. ##### OBS Studio settings[​](#obs-studio-settings "Direct link to OBS Studio settings") Settings for OBS Studio can be found by clicking the **Settings button** in the right control panel. ![](data:image/png;base64,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) In the settings panel, you will need to adjust or customize several streaming factors using the instructions provided below. ##### Entering the stream address and key[​](#entering-the-stream-address-and-key "Direct link to Entering the stream address and key") ![](/assets/images/Video_004-9f26c8f78637a3b0aa91b0e8389bd80a.png) *Highlighted: The location of the Settings > Stream tab.* In the settings panel, you will need to enter the stream address and key generated by your [broadcast provider](/advanced-tutorials/video-streaming.md#broadcast-provider-streaming-server). To do so, follow these steps. 1. Click on the **Stream tab** in the left-hand panel. 2. Select *Custom* from the **Service drop-down menu** that appears in the center of the screen. 3. Enter the stream address and key into the relevant fields. 4. Click **Apply** to save your changes. ##### Managing video quality[​](#managing-video-quality "Direct link to Managing video quality") ![](/assets/images/Video_005-63b755eea8445cc0efff2d5d3c1c2b27.png) *Pictured: The Settings > Output tab.* The quality of your streaming video will vary depending on your use case. For a high-quality HD stream, we would recommend using the x264 encoder with a constant bit rate set at 3500 to 5000 Kbps and a key frame of 2. To manage these settings in OBS Studio, follow these steps. 1. Click on the **Output tab** in the settings panel. 2. Select *Advanced* in the **Output Mode drop-down menu.** 3. Enter the settings depicted in the image above. 4. Click **Apply** to save your changes. ##### Managing audio quality[​](#managing-audio-quality "Direct link to Managing audio quality") ![](/assets/images/Video_006-d567401b9e1a0f497249bcf40e4f62cb.png) *Highlighted: The location of the Settings > Output tab > Audio tab.* Audio settings can also be found under the **Output tab**, by clicking the **Audio tab** in the center window. We recommend using an audio bitrate of 128 Kbps. To change this setting, follow the steps below. 1. Click on the **Output tab** in the settings panel. 2. Click the **Audio tab** in the center window. 3. Select *Advanced* in the **Output Mode drop-down menu.** 4. Set the audio tracks you will be using to 128 kbps. 5. Click **Apply** to save your changes. ##### Managing video resolution[​](#managing-video-resolution "Direct link to Managing video resolution") ![](/assets/images/Video_007-ea6beb527c4c0a4eaefeb4426245bbaa.png) *Pictured: The location of the Settings > Video tab.* Video resolution will depend on your use case. For a high-quality HD stream, we would recommend using 1920x1080 at 30 frames per second. You can adjust these details by following the steps below. 1. Click on the **Video tab** in the settings panel. 2. Enter the settings depicted in the image above. 3. Click **Apply** to save your changes. Now that you have OBS Studio configured, you can use the **Start Streaming button** in the right control panel to stream your live video. ![](data:image/png;base64,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) *Highlighted: The location of the Start Streaming button.* #### Streaming video in-world[​](#streaming-video-in-world "Direct link to Streaming video in-world") Your broadcast provider will supply you with an external viewing address. This address can be entered into either the [Breakroom Video Player](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-video-player.md) or the [presentation controls](/running-your-event/moderator-tools/presentation-controls.md) built into the conference system. Please consult the linked documentation for step-by-step instructions. ![](/assets/images/Video_009-d7dfc57350ca095ea6f1acfa0682660a.png) *Highlighted: An example of RTMP and HLS external addresses taken from Castr.* --- ## Breakroom For Training ### Breakroom for Training #### [πŸ“„οΈInstalling Breakroom for Training](/breakroom-for-training/installing-breakroom-for-training.md) [With Breakroom for Training, you can gather real metrics about virtual education. Learn how to create courses complete with consent waivers, quizzes, and student- or instructor-led content modules.](/breakroom-for-training/installing-breakroom-for-training.md) --- ### Creating and managing courses #### Overview[​](#overview "Direct link to Overview") In the Breakroom for Training system, *courses* contain all of the information required for administration of a single class *or* an entire academic or vocational course. Courses can consist of [waivers](/breakroom-for-training/waivers.md), [quizzes](/breakroom-for-training/quizzes.md), and [syllabuses](/breakroom-for-training/syllabuses.md), which may be administered individually or included as part of student- or Instructor-led content modules. Once students interact with a particular course's content, [student information](/breakroom-for-training/reviewing-student-information.md) and progress can be tracked and reviewed as needed. Courses can also be [archived](/breakroom-for-training/creating-and-managing-courses.md#archiving-courses), which preserves their contents and prevents them from being edited. #### Adding a new course[​](#adding-a-new-course "Direct link to Adding a new course") [YouTube video player](https://www.youtube.com/embed/c7_de8P_w6E) *** ![](/assets/images/LMS_Dashboard_001-867481190272953e2356c8c0582a1626.png) *Pictured: The Dashboard > Learning Management > Create New Course window.* info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. Breakroom for Training course content is created and managed through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). To create a new course, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**. 3. Click the **Add Course button**. 4. In the Create New Course window that appears, enter a **name** and **description** for your course. 5. If you like, you can click the **Upload Image button** to upload a course header from your own computer, or click the **"Select from Our Course Image Templates" link** to choose a basic color or generic course image. 6. When you are satisfied, click the **Create button**. ##### Activating and deactivating courses[​](#activating-and-deactivating-courses "Direct link to Activating and deactivating courses") ![](/assets/images/LMS_Syllabus_005-2c6eb7ff41d58049bcaec9bb4cb86668.png) *Pictured: A course card. Note the "Inactive" tag in the top right corner.* Once you add a course to Breakroom for Training, you will see that course appear as a *card* under the Learning Management tab. When courses are first created, they are inactive by default. To activate or deactivate a course, click the **vertical ellipses icon** in the upper right corner of the card, and then click the **Activate/Deactivate Course button**. Activated courses are live on your Breakroom World and can be accessed by students and Instructors. Inactive courses are inaccessible to students and Instructors, but World Owners and World Administrators can still edit their contents via the Dashboard. #### Editing course information[​](#editing-course-information "Direct link to Editing course information") ![](/assets/images/LMS_Dashboard_002-488cd1ef231b537282cc501f443cc812.png) *Highlighted: The location of the Edit Course Info button.* You can edit your course details at any time by clicking the **vertical ellipses icon** in the upper right corner of the course card on the Learning Management tab, and then clicking the **Edit Course Info button**. #### Adding course notes[​](#adding-course-notes "Direct link to Adding course notes") ![](/assets/images/LMS_Dashboard_015-79b4baff5f477429986d68459c9c787d.png) *Highlighted: The location of the Notes and Add Quiz buttons.* You can add notes to a course that will only be visible to those with Dashboard access. To do so, click the **Notes button** in the course card. #### Archiving courses[​](#archiving-courses "Direct link to Archiving courses") Breakroom for Training courses can be archived, which deactivates them and prevents their contents from being edited. This preserves their contents for future use. To archive a course, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**. 3. Click the **vertical ellipses icon** in the course card, and select **Archive** in the menu that appears. ![](/assets/images/LMS_Dashboard_003-4e5af16ecc09283541202242d61817c0.png) *Highlighted: The location of the Filter button and Archived List checkbox.* To locate an archived course and make it accessible again, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**. 3. Click the **Filter button** in the top right corner. In the menu that appears, check the **Archived List option**. This will reveal all of your archived courses. 4. Locate the course you want to unarchive. Click the **vertical ellipses icon** in the course card, then select **Unarchive This Course** in the menu that appears. 5. To display all of your active and inactive courses, click the **Filter button** again and check the box beside the **Show All option**. --- ### Installing Breakroom for Training [YouTube video player](https://www.youtube.com/embed/233YqC0v5dc?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) #### Overview[​](#overview "Direct link to Overview") The Breakroom for Training system is designed to support online learning through the streamlined management of educational content. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and other stakeholders can create student- or instructor-led courses consisting of structured learning modules, waivers, and quizzes, and integrate these touchpoints into live online instruction. This section will discuss the creation and management of Breakroom for Training courses on the backend. For more information about interacting with the Breakroom for Training system as a [student](/getting-started/using-breakroom-for-training.md) or administering courses as an [Instructor](/breakroom-for-training/instructor-orientation.md), please see our [Getting Started section](/getting-started.md). info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Installing the Breakroom LMS Core in a Region[​](#installing-the-breakroom-lms-core-in-a-region "Direct link to Installing the Breakroom LMS Core in a Region") ![](/assets/images/LMS_World_014-bd4c96028011dde2e984201e1fcdf96f.png) *Pictured: The Region Editor, with the Breakroom LMS Core object highlighted in the Objects window.* warning In order for the Breakroom for Training system to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) before the LMS can be added. In order to use the Breakroom for Training system, you'll need to install the **Breakroom LMS Core object** in one or more Regions. This object can be found in the [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md). You can find more information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) in our [Creating Custom Experiences section](/creating-custom-experiences.md). Quick-start steps are provided below for your convenience. 1. Open the [Region Editor](https://docs.breakroom.tech/customization/using-the-region-editor) by clicking the **Edit Region button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 2. Click the **Inventory button** in the bottom right toolbar. 3. Search for the **Breakroom LMS Core** object in your Inventory, and drag the item into your Region. 4. The Breakroom LMS Core object can be located anywhere in your Region. For convenience and consistency, we encourage you to locate it at 0,0,0 in your Region by manually editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component). 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. Once the Breakroom LMS Core object is installed, any visitors to the Region will be able to interact with available course materials as either [students](/getting-started/using-breakroom-for-training.md) or [Instructors](/breakroom-for-training/instructor-orientation.md). You can also elect to [autoload a student-led syllabus](/breakroom-for-training/syllabuses.md#creating-a-student-led-syllabus) in any Region. #### Additional customization options[​](#additional-customization-options "Direct link to Additional customization options") ![](/assets/images/LMS_Syllabus_045-68829b87fed18649c21af97d3e3218d2.png) *Pictured: The Inspector window for hte Breakroom LMS Core object, with the RoomFurniture component expanded.* There are additional customization options available under the RoomFurniture component attached to the Breakroom LMS Core object. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). To locate and customize the LMS options, follow these steps. 1. Navigate your avatar to the Region containing the Breakroom LMS Core object you want to edit. 2. Open the [Region Editor](https://docs.breakroom.tech/customization/using-the-region-editor) by clicking the **Edit Region button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, search for the **Breakroom LMS Core object**. Click on it in order to highlight it. The [Inspector window ](/creating-custom-experiences/using-the-region-editor.md#the-inspector-window)will launch for that object. 5. In the Inspector window, click the **> arrow** located to the left of the **RoomFurniture component**. Here is a quickstart guide to the options contained under the RoomFurniture component. | RoomFurniture component option | Purpose or effect | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | Hide For Student | If checked, this option hides the [LMS widget](../getting-started/using-breakroom-for-training) from all students in the Region. | | Hide For Instructor | If checked, this option hides the [LMS widget](instructor-orientation) from all Instructors in the Region. | | Skip Welcome | If checked, this option disables the "Welcome to \[Region]" pop-up box that appears upon entering the Region. | | Skip Student Tutorial | If checked, this option disables the mini widget tutorial for students. | | Skip Instructor Tutorial | If checked, this option disables the mini widget tutorial for Instructors. | | Autostart Course | This option, combined with the field below, allows you to [autorun a student-led syllabus](syllabuses#creating-a-student-led-syllabus) in your Region. | | Autostart Syllabus | This option, combined with the field above, allows you to [autorun a student-led syllabus](syllabuses#creating-a-student-led-syllabus) in your Region. | Once you're satisfied, click the **Save button** to store your changes and the **Close button** to exit the Region Editor. --- ### Instructor orientation [YouTube video player](https://www.youtube.com/embed/_qQ-JtjSi94) #### Overview[​](#overview "Direct link to Overview") Once Breakroom for Training is installed in a Region, Instructors can post and review materials for any active courses. This may take the form of administering standalone waivers and quizzes in a relaxed teaching environment, or it may involve executing a multi-step automated syllabus complete with live media presentations. This page is designed to serve as a quick-start guide for Instructors, focusing on the tools available in-world. For detailed information about grading or reviewing [quizzes](/breakroom-for-training/quizzes.md) and [waivers](/breakroom-for-training/waivers.md) via the Dashboard, or guiding students through a multi-step [syllabus](/breakroom-for-training/syllabuses.md#in-world-syllabus-execution-and-walkthrough), please see the linked documentation. As a best practice tip, it would also be helpful for Instructors to be aware of the [moderator tools](/running-your-event/moderator-tools.md) available to assist with crowd management, as well as how to [troubleshoot](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md) common audio and video issues. #### Logging in[​](#logging-in "Direct link to Logging in") ![](/assets/images/LMS_World_003-40b54a7c1c8fd263e5f9792c1a53f321.png) *Highlighted: The location of the Instructor Mode button.* Users who have access to Breakroom's moderator tools can become Instructors on the Breakroom for Training system. This list includes: * The [World Owner](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) * [World-level](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) Administrators, Moderators, and Developers * [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) Owners, Administrators, and Moderators This section of the documentation refers to these individuals collectively as "Instructors." To enter Instructor mode, follow these steps. 1. Navigate your avatar to the Region where you'll be instructing. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Instructor Mode button** at the top of the moderator tools. 4. When prompted to confirm your choice, click the **Yes button**. ![](/assets/images/LMS_World_008-729700aeae8ba42fabfdad68f62fd826.png) *Highlighted: The location of the Leave Instructor Mode button.* To leave Instructor mode, repeat steps 1-4 above. You can also click the **Leave Instructor Mode button** on the top right of the Breakroom for Training widget. Multiple Instructors can be active at the same time. The "primary Instructor" is considered to be the person who most recently interacted with the Breakroom for Training system. If an alternate Instructor needs to step in and continue a course or [syllabus](/breakroom-for-training/syllabuses.md), this changeover will happen automatically. #### Posting and reviewing quizzes[​](#posting-and-reviewing-quizzes "Direct link to Posting and reviewing quizzes") [YouTube video player](https://www.youtube.com/embed/J9rrPP3i2As) *** ![](/assets/images/LMS_World_009-c296fc9ab7e0159a05d62ae118096db1.png) *Highlighted: The location of the Course Info button.* When you're in Instructor mode, clicking the **Course Information button** in the Breakroom for Training widget will give you access to quizzes and waivers for each course. To post a quiz for all users currently located in the Region, follow these steps. 1. Navigate your avatar to the Region where you'll be instructing, and [enter Instructor mode](/breakroom-for-training/instructor-orientation.md#logging-in-1). 2. Click the **Course information button** on the top left of the Breakroom for Training widget. 3. Click on the **name of the course** you're administering, and click the **Quizzes tab**. 4. Locate the quiz you want to post, and click the associated **Post button**. While the quiz is active, the text on the Post button will change to say *End*. When you're ready to end the quiz for all users, click the **End button**. ##### Reviewing quiz responses[​](#reviewing-quiz-responses "Direct link to Reviewing quiz responses") ![](/assets/images/LMS_World_011-10ea09ff02b656e2dbcfc1484809686b.png) *A multiple choice question response graph.* ![](/assets/images/LMS_World_012-c686de875306baa8672f2b5819d3652a.png) *A listing of written responses.* ![](/assets/images/LMS_World_013-ed964028a969efcfa96687b723bb6f4b.png) *A matched pair response matrix, with correct and incorrect answers highlighted.* Instructors can view anonymized quiz responses in real-time within the Breakroom platform. This is a powerful tool, as instructors can alter their content or instructional techniques based on student feedback. To view quiz responses, follow these steps. 1. Navigate your avatar to the Region where you'll be instructing, and [enter Instructor mode](/breakroom-for-training/instructor-orientation.md#logging-in-1). 2. Click the **Course information button** on the top left of the Breakroom for Training widget. 3. Click on the **name of the course** you're administering, and click the **Quizzes tab**. 4. Locate the quiz you want to review, and click **View Responses**. If a quiz contains multiple questions, you can scroll through the question cards by clicking the **forward** and **back arrows** in the top right corner. ##### Grading quizzes[​](#grading-quizzes "Direct link to Grading quizzes") Quizzes that require manual review (such as written response questions) can only be accessed and formally graded through the [Dashboard](/breakroom-for-training/installing-breakroom-for-training.md#grading-quizzes). #### Posting and reviewing waivers[​](#posting-and-reviewing-waivers "Direct link to Posting and reviewing waivers") [YouTube video player](https://www.youtube.com/embed/hNn1tH4Xs5Y) *** ![](/assets/images/LMS_World_010-84ed6d99f2f5eb0b35ab546bffc55a00.png) *Pictured: The Waiver tab.* Just like quizzes, waivers are visible under the Course Information window when you're in Instructor mode. To post a waiver for students to review, follow these steps. 1. Navigate your avatar to the Region where you'll be instructing, and [enter Instructor mode](/breakroom-for-training/instructor-orientation.md#logging-in-1). 2. Click the **Course information button** on the top left of the Breakroom for Training widget. 3. Click on the **name of the course** you're administering, and click the **Waivers tab**. 4. Locate the waiver you want to post, and click the associated **Post button**. You can view anonymized response data at any time by clicking **View Responses**. #### Launching a syllabus[​](#launching-a-syllabus "Direct link to Launching a syllabus") ![](/assets/images/LMS_Syllabus_024-9aea2e31506f94fdd7d2eaf167579bc9.png) *Highlighted: The location of the Course Info button.* Likewise, once you're in Instructor mode, you can launch a syllabus by clicking the **Course Info button** in the top left corner of the Breakroom for Training widget. ![](/assets/images/LMS_Syllabus_025-dd515b15fe52e5c5658f22cf347b1d60.png) *Pictured: Available syllabuses under the Intro to the Metaverse course.* Click on the relevant **course**, then click on the **Syllabuses tab**. Locate the syllabus you want to launch, and click the **Run button**. ![](/assets/images/LMS_Syllabus_026-25487f7c6bd58e68c7a831356932a985.png) *Pictured: The Syllabus and Breakroom for Training widgets.* Once a syllabus is launched, a **Syllabus widget** will appear on all Instructor and student screens. Here's an overview of the associated UI. | Button | Purpose | | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | Drag handle | Allows you to move the widget around the screen by **clicking and dragging** on it. | | Annotation button | Toggles the Annotation panel. | | Step indicator | Displays the current syllabus step. Allows you to navigate to a specific step by typing a number into the step field and pressing the **Enter key**. | | Total steps | Displays the total number of steps in the syllabus. | | Arrow buttons | Allows whoever is managing the syllabus to **rewind** and **advance** through the steps. | The syllabus can then be executed by using the **arrow buttons** located on the widget. For an example of how this might play out in real time, you can review our [tutorial example](/breakroom-for-training/syllabuses.md#in-world-syllabus-execution-and-walkthrough) on the [Syllabuses page](/breakroom-for-training/syllabuses.md). You can also access [quiz](/breakroom-for-training/instructor-orientation.md#reviewing-quiz-responses) and [waiver](/breakroom-for-training/instructor-orientation.md#posting-and-reviewing-waivers) responses from within the platform, as previously detailed on this page. warning ##### "Done This Before"[​](#done-this-before "Direct link to \"Done This Before\"") When rewinding syllabus steps, it's important to note that the Breakroom for Training system remembers the highest step you have reached. Certain actions *will not be repeated* when you advance through that step again, even if they were triggered during the first use. This also applies if you choose to manually jump over a step and then backtrack, rather than advancing through the content using the arrow buttons on the Syllabus widget.

For example: 1. You are on step 15 in a syllabus. 2. You advance to step 16. All actions for step 16 happen, as you’ve never been this far in the syllabus before. 3. You then use the rewind arrow to backtrack to step 12. Steps 16-12 (working backwards) are considered "already done" and will not trigger the actions listed below. All other actions will be repeated. 4. Starting at step 12, you then use the arrow button to advance the syllabus until you are at step 17. Steps 13-16 are still considered to have been "already done." You've never been on step 17, however, so all actions on step 17 will be executed. The β€œskipped if already done” actions currently include: * Take Tour * Start Timer * Start Quiz * Start Waiver * Custom Functions can be set up this way by the designer ##### Finishing a syllabus[​](#finishing-a-syllabus "Direct link to Finishing a syllabus") ![](/assets/images/LMS_Syllabus_042-13ef4581992779d7d3075e76d71f091f.png) To finish an Instructor-led syllabus, the Instructor should click the **advancement arrow** on the final step in the Syllabus widget, and then click **Yes** in the pop-up that appears. ![](/assets/images/LMS_Syllabus_043-8918ca96318c564bfcc349eb23a5b64d.png) The Instructor will be presented with a list of students who were in the Region at any point during the session. The Instructor has discretion as to whether a particular student should be marked as having completed the course. By default, all students are marked as completed. Click the **toggle** located to the right of any student name to disqualify that student from accreditation, and then click **Submit**. --- ### Quizzes [YouTube video player](https://www.youtube.com/embed/n7o04WNFAPk?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) #### Overview[​](#overview "Direct link to Overview") Breakroom for Training quizzes can consist of one or more questions of mixed type. Questions can be marked as mandatory or optional, and responses can be graded automatically or collected for manual grading, complete with reference answers. This page discusses the creation and management of quizzes on the backend via Dashboard. For more information about administering and reviewing quizzes in the Breakroom for Training environment, please see our [Instructor orientation](/breakroom-for-training/instructor-orientation.md). #### Creating quizzes[​](#creating-quizzes "Direct link to Creating quizzes") ![](/assets/images/LMS_Dashboard_004-1d2cb5b91c011bfebd6bcc67bac52143.png) *Pictured: The Dashboard > Learning Management > Course > Add New Quiz window.* info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. Breakroom for Training course content is created and managed through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). To add a quiz to any of your existing [courses](/breakroom-for-training/creating-and-managing-courses.md), follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you would like to edit. 3. Click the **Create button** in the top right corner, and select **Quiz** from the drop-down menu. 4. Enter a **name** and **description** for your quiz. 5. If you like, you can change the quiz header by following these steps: 1. Click the **vertical ellipses icon** in the upper right corner, and then click **Upload Background Image.** 2. Click the **Upload Image button** to add an image to launch a standard file selection window on your computer. Select the image you want to use, and click **Okay**. 3. Alternately, click the **"Select from Our Course Image Templates" link** to choose a basic color or generic image. 6. Add the number and type of [questions ](/breakroom-for-training/quizzes.md#quiz-question-types)you would like. Each question appears on its own card. 1. You can add new questions by scrolling down and clicking the **Plus button located** in the lower right corner of the window. 2. You can change the question type using the **Question type drop-down menu located** at the top of the question card. 7. When you are satisfied with your changes, click the **Save button**. When quizzes are first created, they are deactivated by default. To activate or deactivate a quiz, click the **On / Off Toggle** located in the top right corner of the quiz card. Active quizzes are live on your Breakroom World and can be accessed by students and Instructors. Deactivated quizzes are inaccessible to students and Instructors, but World Owners and World Administrators can still edit their contents via the Dashboard. You can add [questions ](/breakroom-for-training/quizzes.md#quiz-question-types)to a quiz during the initial creation process described above, or at any time by editing the [quiz content](/breakroom-for-training/quizzes.md#editing-quiz-information). #### Editing quizzes[​](#editing-quizzes "Direct link to Editing quizzes") ![](/assets/images/LMS_Dashboard_005-912d0d2d5dc53e7473a9ec5caa307c2b.png) *Highlighted: The location of the quiz editing functions.* In the top right corner of each quiz card, you'll see a **vertical ellipses icon**. Clicking on this will open a menu containing quiz editing functions. Here's an overview of the associated UI. | Button or function | Purpose | | ------------------ | -------------------------------------------------------------------------------------------- | | On / Off toggle | Activates or deactivates the quiz. | | View Quiz Content | Allows you to view all questions on the quiz, along with correct answers and reference keys. | | Edit Quiz Content | Allows you to make changes to the quiz, including deleting or adding questions. | | Set Due Date | Allows you to set a [due date](quizzes#setting-quiz-due-dates) for a quiz. | | Duplicate | Creates a copy of the quiz in the same course. | | Archive | [Archives](quizzes#archiving-quizzes) the quiz without deleting it. | #### Setting quiz due dates[​](#setting-quiz-due-dates "Direct link to Setting quiz due dates") ![](/assets/images/LMS_Quiz_Due_Date_001-e9711edef27bc25ccb0e175767c74af5.png) *Highlighted: The location of the Set Due Date function.* Setting a due date for a quiz allows you to specify the date and time by which it should be completed. After the deadline you select, users will no longer have access to the quiz. ![](/assets/images/LMS_Quiz_Due_Date_002-4dcf1957e14f89039d03d1560a8dfb78.png) *Pictured: The Set Due Date panel.* To set a due date for a quiz, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you would like to edit. 3. Click the **vertical ellipses icon** in the relevant quiz card, and select **Set Due Date** from the menu that appears. 4. In the panel that appears, set the **Quiz Due Date toggle** to *On.* Then hover your cursor over the **calendar field** to reveal the date and time picker. Use the picker to select a **due date and time** for your quiz. 5. When you are satisfied with your changes, click the **Save button**. ![](/assets/images/LMS_Quiz_Due_Date_003-bb33e2855510d4a13fd0ab8d5a7dcdf6.png) Quizzes with upcoming due dates will appear on the calendar for the main course page. A **red dot** indicates that a quiz is due on that day. ##### Resetting quiz due dates[​](#resetting-quiz-due-dates "Direct link to Resetting quiz due dates") To reset a quiz due date, follow the [steps outlined above](/breakroom-for-training/quizzes.md#setting-quiz-due-dates) and select a new due date using the date and time picker. Then click the **Save button**. ##### Removing quiz due dates[​](#removing-quiz-due-dates "Direct link to Removing quiz due dates") To remove a quiz due date without deleting the quiz, you can follow steps 1-3 [above](/breakroom-for-training/quizzes.md#setting-quiz-due-dates), after which set the **Quiz Due Date toggle** to *Off.* Then click the **Save button**. Alternatively, you can: 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you would like to edit. 3. Click the **vertical ellipses icon** in the relevant quiz card, and select **Remove Due Date** from the menu that appears. #### Quiz question types[​](#quiz-question-types "Direct link to Quiz question types") [YouTube video player](https://www.youtube.com/embed/vakoplYsGgo?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) The information provided below is intended to serve as a brief overview of the options available under each quiz question type. As with many things in Breakroom, the best way to master the task of course creation is to dive right in and play around. ##### Multiple choice questions[​](#multiple-choice-questions "Direct link to Multiple choice questions") ![](/assets/images/LMS_Dashboard_006-29490c65f6399cfaa1eb6f69b337008c.png) *Pictured: An example of a multiple choice question.* Multiple choice questions offer an impressive level of flexibility. You can specify multiple answers for users to check off, dictate that users must make a certain number of guesses, or even create *single-answer* questions by limiting the minimum and maximum choices required to 1. ##### Written response questions[​](#written-response-questions "Direct link to Written response questions") ![](/assets/images/LMS_Dashboard_007-982cff874d0aa3cb48c2fecf18badeec.png) *Pictured: An example of a written response question.* Written response questions give users the opportunity to demonstrate deeper knowledge or to share personal insights. These questions must be [graded](/breakroom-for-training/quizzes.md#grading-quizzes) manually, but a quiz point value and reference answer can be provided for graders. You can also specify a minimum and maximum number of characters allowed. ##### Match items questions[​](#match-items-questions "Direct link to Match items questions") ![](/assets/images/LMS_Dashboard_008-8990c222027b98b820263d812612c843.png) *Pictured: An example of a match items question.* Match items questions can be made easier or more complex by the addition of minimum and maximum answer requirements. ##### Reference links and images[​](#reference-links-and-images "Direct link to Reference links and images") ![](/assets/images/LMS_Dashboard_009-579301a4b3271e58290e37fdbbaf057f.png) *Pictured: The Insert Link and Attach Files options for a Breakroom for Training question.* All question types can come bundled with website links and image files, providing students with helpful information as they take the quiz. Students can open links and view image files directly within the Breakroom platform. To add a website link to a question, paste the link into the **Insert Link field** and click **Insert**. You can add multiple links. Make sure to click the **Save button** to save your changes. To add a reference image, click the **Upload File button**. This will launch a standard file import window on your computer. Locate the image file you want to share and click on it, then click the **Open button**. You can attach multiple image files to a question. ##### Timed questions[​](#timed-questions "Direct link to Timed questions") ![](/assets/images/LMS_Dashboard_010-8799800b4a29b871a1896fe89b7f1930.png) *Pictured: A question with a two-minute time limit.* You can place a time limit on any question by clicking the **clock icon** located at the top of the question card. Enter the time in hours and minutes, and then click outside of the time panel to set it. To remove time restrictions, click the **clock icon** and then click the **Reset button**. ##### Mandatory and optional questions[​](#mandatory-and-optional-questions "Direct link to Mandatory and optional questions") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQ8AAAAzCAYAAACJ4I1cAAAAw3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQgDPvPFDcCeRTCOLSlUje48S+QVGqrs4QxDjIh0L/nAZ8BQgFZiuaaczJIlUrNhCZHm4xJJjuOUPj0gTkukFlDx1mz73j5V1Ds2EwttyDdorA+C1UiX19B8RCPjsjEHkE1gpi8gBHQ/FspVy33L6w9PaG+YNDWZ3bCeO19lmLT2xczmaiz2cbM6g3wWALcTJTJRG43lukgU3RiA/k3pwvwA5GqWgnq8gYzAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw1AUhU9TJSIVBzuIOGSoTtZBRRxLFYtgobQVWnUweekfNGlIUlwcBdeCgz+LVQcXZ10dXAVB8AfE2cFJ0UVKvC8ptIjxweN9nPfO4b57AaFZZZrVEwM03TbTibiUy69K4itEBAFMQpSZZSQzi1n4rq97BPh5F+VZ/u/+XANqwWJAQCKOMcO0iTeIZzdtg/M+cZiVZZX4nHjCpAKJH7muePzGueSywDPDZjY9TxwmlkpdrHQxK5sa8QxxRNV0yhdyHquctzhr1Tpr18l/GCroKxmu0x5FAktIIgUJCuqooAobUTp1Uiyk6T7u4x9x/SlyKeSqgJFjATVokF0/+Ax+99YqTk95SaE40PviOB9jgLgLtBqO833sOK0TIPgMXOkdf60JzH2S3uhokSNgcBu4uO5oyh5wuQMMPxmyKbsSn79QLALvZzSmPDB0C/SveX1r3+P0AchSr5ZvgINDYLxE2es+/+7r7tu/b9r9+wFbJXKdJDTUFAAADXZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6YTdhNGVkMjQtMGM1Ni00Zjg2LTg4ZmQtYmJjNWNhMDFjNzZmIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY4M2RjOThmLTA0N2ItNGI1ZC04MWM5LWZkYzljMDU2ZTU0NiIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjU3YzA5ZTRlLTQ5ZTAtNGYzMS05NjJiLTkxMDc0NGUzZTgwMSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE5OTY3NjM2ODkwNDMwIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0OjA3OjAyVDIwOjQ3OjEyLTA0OjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNDowNzowMlQyMDo0NzoxMi0wNDowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmIwM2M5NjY5LTg2YjYtNDE0MS1iMTYzLTZjNjg4YjVmOWJlOSIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNy0wMlQyMDo0NzoxNiIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5ZFIALAAAABmJLR0QA/gBnAF1WBaWvAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH6AcDAC8Qmf1ouAAAERlJREFUeNrtnXlUVEe+xz/dDfYCAiJNEIyIEhdUFNkFl6DGjThqXPJe3hifS4wZo1FfMuYw42SSeUleXCZmkudkEicadcZt3BUBdQRRFAUSCJigPBZFGEFsZG2bpt8fLRjsRummVUzqcw7ncO69Vbd+1VXf+6tf1a0rCQ4db0AgEAgsRGowCO0QCASW0djYiBRACIhAILBEOACjeAgBEQgElghHC/EQAiIQCNoqHAB2915gMBg4eWKfqCmBQNDMyGd/YXJMKqpFIBBYgxAPgUAgxEMgEAjxEAgEQjwEAoEQD4FAIBDiIRAI2oOdqAKBwMJOk5GKLDMdWVEBkupboNd3zILKZBgcndD36InefygNASFCPASCx4H9iaN0On4Eg1SKpK6u4xdYr0dSeRO7rJvILn+PfPdWbo+eiC5qvBAPgeCRjO2Li5Bv+cLoZWi1SJ5AG5rE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) *Pictured: The Mark Mandatory toggle.* Any question can be made mandatory by clicking the **Mark Mandatory toggle** located in the bottom right corner of the question card. Questions are marked mandatory by default. Assigning quiz points to non-mandatory questions lets you build "extra credit" into quizzes, while ungraded written response questions provide students opportunities for reflection. ##### Removing questions[​](#removing-questions "Direct link to Removing questions") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALEAAAA9CAYAAADiW4hmAAAAw3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBDgMhCLzzij5BARWf4+7apD/o84uCad10EgcYzIhAf7+e8BjAyMCpSK45BwVXrtg0kWBok2PgyROHR603HejyBqpEGslKyX5/6V8DC02z9GMkpzeOvVHZ/eVm5A/RmAg18UGguhGhNaIbNPtWyFXK9rUedogdGHT26R2iv3avuej2rqQiIXZSWZlIbAAah4GaJmUyosmNEolypPVVXci/PS3AB9GYWjvAGAcJAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw1AUhU9TJSIVBzuIOGSoTtZBRRxLFYtgobQVWnUweekfNGlIUlwcBdeCgz+LVQcXZ10dXAVB8AfE2cFJ0UVKvC8ptIjxweN9nPfO4b57AaFZZZrVEwM03TbTibiUy69K4itEBAFMQpSZZSQzi1n4rq97BPh5F+VZ/u/+XANqwWJAQCKOMcO0iTeIZzdtg/M+cZiVZZX4nHjCpAKJH7muePzGueSywDPDZjY9TxwmlkpdrHQxK5sa8QxxRNV0yhdyHquctzhr1Tpr18l/GCroKxmu0x5FAktIIgUJCuqooAobUTp1Uiyk6T7u4x9x/SlyKeSqgJFjATVokF0/+Ax+99YqTk95SaE40PviOB9jgLgLtBqO833sOK0TIPgMXOkdf60JzH2S3uhokSNgcBu4uO5oyh5wuQMMPxmyKbsSn79QLALvZzSmPDB0C/SveX1r3+P0AchSr5ZvgINDYLxE2es+/+7r7tu/b9r9+wFbJXKdJDTUFAAADXZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6MGFhZTRkOWQtNTFkYi00ZThiLTkxODUtMjU4NTliMjUxZDk3IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmQ1ZWI0Y2RhLTRiZDMtNDIzNi1iMjkzLTgwOTZlNGJkOTZkYSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjlhNGVhMmZjLTJjOTgtNDRiNS1hYzQ5LTEwZjZlMTcxNjk3OSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE5OTY4Mjk2NjM0NzE5IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0OjA3OjAyVDIwOjU4OjE1LTA0OjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNDowNzowMlQyMDo1ODoxNS0wNDowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjdjYTViMzYyLTRlNmQtNDNkZC05ZDFkLWE0ZmY5NzE5OGI2YSIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNy0wMlQyMDo1ODoxNiIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4FIc7hAAAABmJLR0QA/gBnAF1WBaWvAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH6AcDADoQrkiOrAAACt5JREFUeNrtnOtvk9cdgJ/36tiO7TiJ4ySEBMal3CHcmYCOUloYbaHtWsqmbW01aR+nfZm0P2BTJ23SpGnTJk3rWLWp6x21o7C20NvK/U5briEJuTk4cWLH99fvuw8OToxDS1pMkuY8kj/ZPj5+z/P+zu/8zrGlFas2WwgEExjZsoTDgomLaZrIAEJkwUQVGMhKLEQWTFSB8yQWIgsmosAA6s0vsCyL9/e/Ia6UYFxy74ZthQs7cVkEEx0hsUBILBAIiQUCIbFASCwQCIkFAiGxQCAkFgiJBQIhsUAwlqjjoROxlmbaXvwXmWi0sIOlpUx56vs46hvEaAnGbyTuP3VyRIEBjIEB+k8cFyMlGN8SexqXopSWjvic4nTiWdIoRkowvtMJR30Ds3/xSzEagvErcbytjeiVS1g3HWa+E0iyjHPGLOx1dWI0hcTFo+OVl0iFeqEY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) *Pictured: The Remove button.* To remove a question from a quiz, click the Remove button located in the lower corner of the question card and then click the **Save button**. #### Grading quizzes[​](#grading-quizzes "Direct link to Grading quizzes") ![](/assets/images/LMS_Dashboard_013-175fd1d441194e6fc32fece73e9d6974.png) *Highlighted: The quiz administration buttons.* To access a quiz and grade it, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you'll be grading. ![](/assets/images/LMS_Syllabus_006-7cd73ca09cf3127573b91f5af420aae9.png) *Highlighted: The Grade column. Buttons that say "Grade" indicate quizzes awaiting review.* 3. Click the **Graded button i**n the bottom right corner of the relevant quiz card. Submitted but ungraded quizzes are identified by an active **Grade button** in the Grade column. 4. Click the **Grade button**. This will open the submitted quiz. ![](/assets/images/LMS_Dashboard_014-07b826928d2738a9eb1aea1cc554e1a7.png) *Pictured: An example quiz being graded. Note the point value in the top right corner and the expanded reference answer.* 5. Of all the question types, only [written responses](/breakroom-for-training/quizzes.md#written-response-questions) *must* be graded manually. For the convenience of graders, these questions come with an assigned point value (visible in the upper right corner) and reference answers (located in the middle of the question card). Making use of these tools, you can enter points into the **Grade Value field**. 6. If you like, you *can* manually adjust the **Grade Value field** for [multiple choice](/breakroom-for-training/quizzes.md#multiple-choice-questions) and [match items](/breakroom-for-training/quizzes.md#match-items-questions) questions. You can also add written comments in the **Comments field** for any question. Students will not see these comments. 7. When you are satisfied, click the **Save button**. ##### Reviewing quiz responses[​](#reviewing-quiz-responses "Direct link to Reviewing quiz responses") Individual student quizzes can be accessed for review at any time by following these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you'll be grading. 3. Click the **Graded button i**n the bottom right corner of the relevant quiz card. 4. Locate the quiz you want to review and click the **View Answer button** in the Action column. #### Archiving quizzes[​](#archiving-quizzes "Direct link to Archiving quizzes") [YouTube video player](https://www.youtube.com/embed/Py0_4Ji8stI) Quizzes can be archived, which deactivates them and prevents their contents from being edited. This preserves their contents for future use. To archive a quiz, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant quiz card, and select **Archive** from the menu that appears. To locate an archived quiz and make it accessible again, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **Filter button** in the top right corner. In the menu that appears, check the **Archived List option**. This will reveal all of your archived materials. 4. Locate the quiz you want to unarchive. You can use the **search field** to streamline this process. Click the **vertical ellipses icon** in the card, and select **Unarchive** in the menu that appears. 5. To display all of your active and inactive course materials, click the **Filter button** again and check the box beside the **Show All option**. When course materials are unarchived, they are deactivated. To activate a quiz, click the **On / Off toggle** in the upper right corner of the material card. --- ### Reviewing student information [YouTube video player](https://www.youtube.com/embed/yBE-h_var6E) #### Overview[​](#overview "Direct link to Overview") Student participation in Breakroom for Learning can be tracked for the subscription [account as a whole](/breakroom-for-training/reviewing-student-information.md#reviewing-all-participating-students) or for each [individual course](/breakroom-for-training/reviewing-student-information.md#reviewing-students-for-a-single-course). In addition to viewing the names of all participating students, you can verify waiver answers, quiz grades, and course participation on a by-student basis. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Reviewing all participating students[​](#reviewing-all-participating-students "Direct link to Reviewing all participating students") ![](/assets/images/LMS_Dashboard_019-26f23e10bbdfe3f19f72a7c056951080.png) *Highlighted: The location of the User List button.* You can access a list of all students involved with your courses by navigating to the Dashboard > Learning Management tab and clicking the **User List button**. In the User List window that appears, you can search for students by name, see all courses students have taken, and review [waiver](/breakroom-for-training/waivers.md) and [quiz](/breakroom-for-training/quizzes.md) responses. #### Reviewing students for a single course[​](#reviewing-students-for-a-single-course "Direct link to Reviewing students for a single course") ![](/assets/images/LMS_Dashboard_020-49e40fa179e4afb66d3b9f09fc742799.png) *Highlighted: The location of the View Student List button.* You can also access student lists on a by-course basis by following the steps below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to review. 3. Click the **vertical ellipses** in the top right corner of the main course card, and select **Course Participants** in the menu that appears. --- ### Syllabuses #### Overview[​](#overview "Direct link to Overview") Within the Breakroom for Training system, a syllabus is broadly considered to be an "activity" like [waivers](/breakroom-for-training/waivers.md) and [quizzes](/breakroom-for-training/quizzes.md). However, syllabuses can draw upon those other activities as part of a larger program of instruction, allowing stakeholders to create standardized, semi-automated content modules. These modules can include on-screen annotations and other messages, timers, camera effects, media cues, the execution of custom Lua scripts, and more. ##### Student-led vs. Instructor-led courses[​](#student-led-vs-instructor-led-courses "Direct link to Student-led vs. Instructor-led courses") A syllabus can be designated as *student-led* or *Instructor-led*. These can be considered synonymous with β€œsingle user” and β€œmulti-user," as in: * A student-led syllabus is controlled by and only impacts the user running it. * An instructor-led syllabus is controlled by anyone logged in as an [Instructor](/breakroom-for-training/instructor-orientation.md), while everyone else is a passive participant. Any actions executed by Instructor-led syllabus will impact all users in the Region. By default, Breakroom for Training's educational products are designed to be administered by a live Instructor. Once you've created a [student-led syllabus](/breakroom-for-training/syllabuses.md#adding-a-syllabus) on the Dashboard, you'll need to [edit the Breakroom LMS Core RoomFurniture component](/breakroom-for-training/syllabuses.md#designating-a-syllabus-as-student-led) to make it accessible to students. ##### Key features[​](#key-features "Direct link to Key features") The purpose of a syllabus is to create a structured, guided way for students to experience the course content, and offers the following key features: * Consistency: Regardless of who takes the course, or who teaches it, the content and lesson plan remain the same for each student. * Onboarding: Syllabuses simplify onboarding of new Instructors and students to the platform. An Instructor who is competent with the material being presented can quickly guide students through the course using the syllabus widget. * Completion: Tracking who has finished a syllabus to the end allows stakeholders to evaluate student progress and see whether they have completed the required materials. * Resiliency: Instructors have the ability to resume classes from any point if the material cannot be completed in a single session. Student-led courses automatically pick up where the student left off if they need to step away. ##### Building a syllabus[​](#building-a-syllabus "Direct link to Building a syllabus") Building a syllabus on the Breakroom for Training system is a multi-step process. In the following sections, we will begin by exploring the Dashboard interface and its related control panels, breaking down the creation of syllabus *steps* and *actions* in clear terms. We will then create a simple custom syllabus as a [tutorial example](/breakroom-for-training/syllabuses.md#building-a-syllabus-on-the-dashboard). #### Dashboard interface tour[​](#dashboard-interface-tour "Direct link to Dashboard interface tour") ##### Adding a syllabus[​](#adding-a-syllabus "Direct link to Adding a syllabus") ![](/assets/images/LMS_Syllabus_001-0fff5ab43b643209b0d6d7478f727ee6.png) *Highlighted: The location of the Syllabus button.* info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. Breakroom for Training course content is created and managed through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). To add a syllabus to any of your existing [courses](/breakroom-for-training/creating-and-managing-courses.md), follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you would like to edit. 3. Click the **Create button** in the top right corner, and select **Syllabus** from the drop-down menu. 4. Enter a **name** and **description** for your syllabus. ![](/assets/images/LMS_Syllabus_002-b0183019e8c1cdb4771b5430c4453b69.png) *Highlighted: The Syllabus Type toggle.* 5. Click the **Syllabus Type toggle** to indicate whether you would like the syllabus to be Instructor-led or student-led. 6. If you like, you can change the syllabus header by following these steps: 1. Click the **vertical ellipses icon** in the upper right corner, and then click **Upload Background Image.** 2. Click the **Upload Image button** to add an image to launch a standard file selection window on your computer. Select the image you want to use, and click **Okay**. 3. Alternately, click the **"Select from Our Course Image Templates" link** to choose a basic color or generic image. 7. When you are satisfied with your changes, click the **Next button**. ![](/assets/images/LMS_Syllabus_003-52ab9928e807c4eb8591ad53c95347a4.png) *Pictured: The Syllabus editing panel.* Once your syllabus is created, you'll be directed to the Syllabus editing panel. Here you will see **Steps** on the left, and **Actions and Annotations** for each step on the right. We will review these features in more detail in the following sections. ##### Editing a syllabus[​](#editing-a-syllabus "Direct link to Editing a syllabus") ![](/assets/images/LMS_Syllabus_004-f581342f71093cdf690aad15c361c5f1.png) *Highlighted: The location of the syllabus editing functions.* Similar to a [waiver](/breakroom-for-training/waivers.md) or [quiz](/breakroom-for-training/quizzes.md), creating a syllabus will add a **syllabus card** to the main course screen. In the top right corner of each syllabus card, you'll see a **vertical ellipses icon**. Clicking on this will open a menu containing editing functions. Here's an overview of the associated UI. | Button or function | Purpose | | ------------------------ | ------------------------------------------------------------------------------------------- | | On / Off toggle | Activates or deactivates the syllabus. | | View Syllabus Content | Allows you to view basic syllabus settings without changing them. | | Edit Syllabus Content | Allows you to make changes to the syllabus, including adding or deleting steps and actions. | | Edit Syllabus Basic Info | Allows you to edit basic syllabus information such as name, description, and type. | | Duplicate | Creates a copy of the syllabus in the same course. | | Archive | [Archives](syllabuses#archiving-syllabuses) the syllabus without deleting it. | ##### Archiving a syllabus[​](#archiving-a-syllabus "Direct link to Archiving a syllabus") ![](/assets/images/LMS_Syllabus_008-a748a54f29d5866aa767b731b89b8c8f.png) *Highlighted: The location of the Archive button.* Syllabuses can be archived, which deactivates them and prevents their contents from being edited. This preserves their contents for future use. To archive a syllabus, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Archive** from the menu that appears. To locate an archived syllabus and make it accessible again, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **Filter button** in the top right corner. In the menu that appears, check the **Archived List option**. This will reveal all of your archived materials. 4. Locate the syllabus you want to unarchive. You can use the **search field** to streamline this process. Click the **vertical ellipses icon** in the card, and select **Unarchive** in the menu that appears. 5. To display all of your active and inactive course materials, click the **Filter button** again and check the box beside the **Show All option**. When course materials are unarchived, they are deactivated. To activate a syllabus, click the **On / Off toggle** in the upper right corner of the material card. #### Steps and actions[​](#steps-and-actions "Direct link to Steps and actions") When editing and executing a syllabus, everything revolves around ***steps**.* A syllabus contains one or more steps that must be completed to finish the syllabus. The current limit for this is 150 maximum steps. Each step also contains ***actions**.* A step will have at least one [action](/breakroom-for-training/syllabuses.md#action-types) associated with it, but can have more actions if desired. The current limit is 10 actions per step. All actions execute on each step in the order they are arranged on the Dashboard. Steps can also include ***annotations**.* Annotations consist of information that is displayed on-screen, and can be any combination of text, an image, and a link that opens in an external browser tab. There are separate annotations available for students and Instructors. Instructors can see student annotations if present, but students will never see Instructor annotations. #### Action types[​](#action-types "Direct link to Action types") ![](/assets/images/LMS_Syllabus_007-a294aa888cee1a6c6c65f673c42d5b78.png) *Pictured: The Action drop-down menu.* All actions execute on each step in the order they are arranged on the Dashboard. Annotations are displayed alongside the first action listed under any given step, and will not be dismissed until the next step is triggered. The following actions are possible for any given step. Please note that some of these actions require advanced working knowledge of Breakroom customization, including [custom scripting](https://docs.sine.space/scripting). ##### Change Camera[​](#change-camera "Direct link to Change Camera") If the user is seated in a Region that contains a [camera system](/getting-started/using-the-conference-system.md#seats-and-gestures), this action will automatically adjust their camera view as if they had pressed the corresponding button. Users can change it back at any time, as the camera is not *locked* to this view. ###### Fields and options[​](#fields-and-options "Direct link to Fields and options") * Camera Perspective: Choose from Behind, Forward, Speaker, Screen, Audience, and Free Look ##### Custom Function[​](#custom-function "Direct link to Custom Function") This action executes a custom [Lua function](https://docs.sine.space/scripting) in the Region. This requires that the course designer has placed their own Lua script in the Region with a registered Space.Shared function call that matches the supplied parameters. A Lua script in the Region can do anything the [Breakroom SDK](/release-notes/breakroom-sdk.md) allows. Altering UIs, changing the environment and lighting, adding new objects, moving objects around, playing games, animating models or custom camera views, etc. ###### Fields and options[​](#fields-and-options-1 "Direct link to Fields and options") * Channel: The channel parameter provided to Space.Shared.CallBroadcastFunction. * Command: The command parameter provided to Space.Shared.CalBroadcastFunction. * Parameters (Optional): Any extra info to pass to the Space.Share.CallBroadcastFunction call. This can be simple strings, or anything up to including encoded JSON information. * Along with the above information, the Lua script will receive a variety of metadata including: * Whether the syllabus is Instructor-led * The ID of the syllabus that called it * The ID of the course that called it * The current step number * A *force parameter* that translates to β€œoverride the β€˜already done’ parameter” * An *already done* parameter which indicates if this step is being repeated (i.e., perhaps you don’t want to do a repeated step exactly the same as you did the first time) * Whether the current user is in control of the syllabus (i.e., the Instructor in an Instructor-led course, versus being a student) ##### Draw Attention[​](#draw-attention "Direct link to Draw Attention") This action visually indicates a [UI button](/getting-started/ui-tour.md) to call student attention to it. This can be useful for orientation periods at the beginning of a class, or to remind students during Q\&A periods about the location of the [Raise Hand](/getting-started/using-the-conference-system.md#raise-hand-and-emoji-buttons) and [Question buttons](/getting-started/using-the-conference-system.md#submitting-questions). ###### Fields and options[​](#fields-and-options-2 "Direct link to Fields and options") * UI Element: Choose from Microphone, Webcam, Screenshare, Troubleshooting, Ask Question, Emojis, or Raise Hand ##### Participation Level[​](#participation-level "Direct link to Participation Level") Changes the [voice chat and audience participation](/running-your-event/moderator-tools/crowd-management.md#controlling-access-to-voice-chat-and-media-sharing) settings on the current [voice zone](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md) occupied by the person controlling the syllabus. These zone settings are persistent, so they will remain in the last setting chosen until they are changed through the [Moderator tools crowd manager interface](/running-your-event/moderator-tools/crowd-management.md) or a subsequent syllabus step. ###### Fields and options[​](#fields-and-options-3 "Direct link to Fields and options") | Permission setting | Result | | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Quiet | Enables Quiet Mode, disables Audience Mode. Only those seated in [presenter seats](../getting-started/using-the-conference-system/#presenter-seats) can access voice chat. | | Voice Only | Disables Quiet Mode, disables Audience Mode. Voice chat is available to every user located in the voice zone. | | Full | Disables Quiet Mode, enables Audience Mode. Grants users access to *all enabled* communication options in that voice zone (e.g., voice chat, webcam, and screen share). | ##### Send Broadcast[​](#send-broadcast "Direct link to Send Broadcast") Sends a [broadcast message](/running-your-event/moderator-tools/broadcast-messages.md) through the standard [Moderator tools](/running-your-event/moderator-tools.md) messaging feature. The message will be sent as if originating from the primary controller of the syllabus (such as the Instructor). ###### Fields and options[​](#fields-and-options-4 "Direct link to Fields and options") * Broadcast Message: Whatever you want the message to say. ##### Show Toast[​](#show-toast "Direct link to Show Toast") Displays a temporary popup message on the screen that fades away after a few seconds. ###### Fields and options[​](#fields-and-options-5 "Direct link to Fields and options") * Target Audience: Choose from *User* or *Everyone*. *Everyone* is only available in Instructor-led courses. * Toast Message: Whatever you want the message to say. ##### Start Quiz[​](#start-quiz "Direct link to Start Quiz") Starts a [quiz](/breakroom-for-training/quizzes.md). The quiz must be part of the same [course](/breakroom-for-training/creating-and-managing-courses.md) as the syllabus itself. ###### Fields and options[​](#fields-and-options-6 "Direct link to Fields and options") * Quiz Name: Select from active quizzes in the same course. * Question Selection: Select β€œAll,” or alternatively, select one or more individual questions. Quizzes can be given in whole or in parts, with the expectation that the other quiz questions will be answered later in the syllabus. ##### Stop Quiz[​](#stop-quiz "Direct link to Stop Quiz") Cancels a quiz. Any late joiners to the class will not be presented with the quiz. It is recommended that you stop quizzes past the point at which it makes sense to allow students to continue working on them. ###### Fields and options[​](#fields-and-options-7 "Direct link to Fields and options") * Quiz Name: Select from active quizzes in the same course. Will do nothing if you didn't begin the quiz on a previous step. ##### Start Timer[​](#start-timer "Direct link to Start Timer") Starts a countdown timer that will be visible on screen. ###### Fields and options[​](#fields-and-options-8 "Direct link to Fields and options") * Target Audience: Choose from *User* or *Everyone*. *Everyone* is only available in Instructor-led courses. * Duration: How long the timer runs down, in hours and minutes. * Description: An indication of *what* the timer is counting down. Will be displayed as a tooltip when users hover their mouse over the timer. ##### Start Waiver[​](#start-waiver "Direct link to Start Waiver") Starts a [waiver](/breakroom-for-training/waivers.md). The waiver must be part of the same [course](/breakroom-for-training/creating-and-managing-courses.md) as the syllabus itself. ###### Fields and options[​](#fields-and-options-9 "Direct link to Fields and options") * Waiver Name: Select from active waivers in the same course. ##### Take Tour[​](#take-tour "Direct link to Take Tour") If a [Breakroom Tour Camera](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md) exists in the Region, this action will trigger the tour as if the **Take Tour button** normally found on the [Start Here panel](/advanced-tutorials/uploading-your-own-region/breakroom-start-here-ui.md) has been clicked. This works even if the Start Here panel is not present in the Region. ###### Fields and options[​](#fields-and-options-10 "Direct link to Fields and options") * No parameters required. * Students can stop the tour at any time by pressing the **Esc key** on their keyboard. ##### Teleport[​](#teleport "Direct link to Teleport") Teleports users to a different location within the Region. This uses the [Crowd Manager controls](/running-your-event/moderator-tools/crowd-management.md) built into the [Moderator tools](/running-your-event/moderator-tools.md), and operates along the same principles. ###### Fields and options[​](#fields-and-options-11 "Direct link to Fields and options") * Target Audience: Choose from *User* or *Everyone*. *Everyone* is only available in Instructor-led courses. * Location: Choose from common locations such as the *Auditorium*, or from custom locations by picking *Other*. *Other* locations can be any valid Breakroom voice zone or teleport target. If the target shows up under the Crowd Manager in the Moderator controls, then it can also be a location here. This includes multi-zone landmarks that scatter the students among multiple locations if desired. ##### View Image[​](#view-image "Direct link to View Image") Displays an uploaded image in a specified location. Images can be uploaded in advance through the [Media Library](/creating-custom-experiences/managing-your-media-library.md) on the Dashboard, or uploaded directly through this step. ###### Fields and options[​](#fields-and-options-12 "Direct link to Fields and options") * Image: Select or upload the image to display. * Display Location: * Presentation: Displays the image on the [main screen](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#voice-zone-components) in the voice zone. This is the same screen that displays webcams and screenshares. The image will appear as another window alongside these, as if someone were sharing it. The display may appear 2D or 3D depending on whether the user has clicked the [**Screen Appearance button**](/getting-started/using-the-conference-system.md#screen-appearance) on the [conference system controls](/getting-started/using-the-conference-system.md#conference-system-controls). * Screen: Displays in a separate 2D window on the user's screen as part of an LMS Media window that appears when needed. This screen can be repositioned by the user. * Placed: Indicates that the image was placed in the scene through some other means, such as a [Breakroom Image Viewer item](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-image-viewer.md). ##### Visit Website[​](#visit-website "Direct link to Visit Website") Displays or opens a website URL in the specified location. ###### Fields and options[​](#fields-and-options-13 "Direct link to Fields and options") * Website URL: The website you wish the students to read / view. * Display Location: * Screen: Displays in a separate 2D window on the user's screen as part of an LMS Media window that appears when needed. This screen can be repositioned by the user. * Placed: Indicates that the website is visible on a [Breakroom Web Browser item](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-web-browser.md) already placed separately in the Region. * External: Opens the website URL in an external browser tab. ##### Watch Video[​](#watch-video "Direct link to Watch Video") Plays an uploaded video in a specified location. Videos can be uploaded in advance through the [Media Library](/creating-custom-experiences/managing-your-media-library.md) on the Dashboard, or uploaded directly through this step. ###### Fields and options[​](#fields-and-options-14 "Direct link to Fields and options") * Video: Select or upload a video. Should be in MP4 format for best results. * Display Location: * Presentation: Displays the image on the [main screen](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#voice-zone-components) in the voice zone. This is the same screen that displays webcams and screenshares. The image will appear as another window alongside these, as if someone were sharing it. The display may appear 2D or 3D depending on whether the user has clicked the [**Screen Appearance button**](/getting-started/using-the-conference-system.md#screen-appearance) on the [conference system controls](/getting-started/using-the-conference-system.md#conference-system-controls). * Screen: Displays in a separate 2D window on the user's screen as part of an LMS Media window that appears when needed. This screen can be repositioned by the user. * Placed: Indicates that the image was placed in the scene through some other means, such as a [Breakroom Video Player item](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-video-player.md). *** #### Building a syllabus on the Dashboard[​](#building-a-syllabus-on-the-dashboard "Direct link to Building a syllabus on the Dashboard") ![](/assets/images/LMS_Syllabus_009-dcd385c81750d6c78a79cd44f46d835f.png) *Pictured: The Syllabus editing panel.* The following sections offer guidance for creating a syllabus and executing it in a Region. For this example, we will create a 13-step syllabus that begins with a bonus "setup" step, and ends with students seated to watch a video. As a first point of syllabus design, it's important to recognize that *steps* must be manually executed by the student or Instructor, while all *actions* associated with a step will deploy at once. It may be helpful to envision steps as concrete events that you want to trigger with a click, or as events you want to pause on for thematic or instructional purposes. This can help you decide how many actions to group under a single step. For maximum impact, each step should be designed around a singular primary goal. For example: * "I want users to watch this video" * "I want users to take this quiz" * "I want users to read this annotation" The *primary goal* should be supported by any additional, **secondary actions** on the step. E.g., "I want users to *watch this video* (primary goal), therefore their c**amera angle needs to change** (secondary action)." Multiple primary goals will confuse users, e.g., "I want them to watch this video *and* take a quiz at the same time." This setup isn't practical and will offer a poor user experience. In the image above, you can see that our tutorial syllabus consists of thirteen steps, and that each step consists of one or more actions and annotations. We will now explore how to add, edit, and manage steps through the Dashboard, before conducting a walkthrough of the tutorial syllabus as an Instructor. ##### Adding steps[​](#adding-steps "Direct link to Adding steps") ![](data:image/png;base64,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) *Highlighted: The Add Step button.* To add a new step to a syllabus, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Click the orange **Add Step button** located in the upper right corner. When a new step is created using this method, it will be unlabeled and appear at the bottom of the step list (as the last step to be executed). It will take on the name of the first [action](/breakroom-for-training/syllabuses.md#adding-actions-to-a-step) you add to the step. ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAAA9CAIAAABTI5jiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABo6SURBVHhe7Z0LXFRl+sfPwICDIAOCDjeNQAHJQMBAcxWEFLzhgptJran9/5Z20azWrL3kx63+ZLaapdhl1bLWy/6FxFK8LlQkkKBYKqDQqNxGEBgEZmBmYJ9zYRhmzjlzYYZ25fl+zgff9z3v+zzvO+D5nec973lHMHnKbAJBEARBkEHErqenh0kiCIIgCGJ7uru77eAfFGAEQRAEGRxAeuEnqb4ACjCCIAiC2BpaegFGfQEUYARBEASxHVrpBQRRMbOYJEXemWwmhSAIgiCIlZgRv4BJUfTFvgiCIAiCDA6ovgiCIAgy2ODMM4IgCGKEGgVR1NKTWdtdqySqlT2QNYqvE+EnEviIiFQfuxRvAVM6hNGbeUb1RRAEQTjJquvZcEVjitzyAwI8xGUYn/siCIIgxils7gk+o15abAXpBUDFwVRCvgbMMkVDG1RfBEEQRB+Id0EpraK7uoD0glkwzuSHMKi+CIIgSD9AID+ssmGECsbBBZMZquBzXwRBEKQPrslhXyfy2W2Kt52fSABpo+gu1GI1GOMuODPNnskMAXDVFYIgCMIOq/SC1qaH2g9kwVRWHSnD8JPJ9zKkBBjVF0EQxPoIBIQ9iZ2dnYAGCnsourt7NJpujUZji/18reh3wxWWCWfQ3ecDWHQXPFJOGb90Ie20uxuckgddqAWMGz7xBePggsmYgHaYAFPUO14AvDNFVsWCwRqC6osgCGJN4Irs4CAUCo1LiFqtUanU1lII6/ql10MxmV4gMIXwlMlQgPaARwcHe13xYwXESaXSgGtIMEUmezEE3MF4KfVjSlgBVyCHMFJdpxYzwMHqgW8cIQiCWA1HR6GT0zBTJBCAalAZmjD5AWB1v69f0Y/eDEURdMjJyRHsGFUjAOpQnXSEVkwRx1TzkyVGVmBB3AlDgJ9G3UIFbWWmyFIGPlh+UH0RBEEsAcIwkDSIPpm8yUATaAjNmbyZ2MJvVl2P3uPe9NB+0gvqIhKBFDmYIkW6ULLkAG21DcGs3lRzjYLsAJPpD7QCPTNFd3WhNRgamttbGmhlrcHygOqLIAhiNnZ2dnCRHYiCUs3NvgLbyG9mbb/AN8VboPusl1ajgUST0BYsaDUJjOutmmZ9AxjqQxRripKxYllzqG/dwXKB6osgCGIelIaZHRjpQV3lHczSUdv51Qs9U336pIGqb7nea6E636dJhuGv3s4eUJPSTiZrGdDcLAG20WBZQfVFEAQxj2HDTJpaNAoYAVNMxgRs5FdPemPcBbovFw0bZt4tAg9gB6zRaXChF/4WtfTrhlBo3mwzF2AETDEZY9hosKyg+iIIgpiBo6PQWhdoAEyBQSbDi+386k07+4iYBODgIBzIHKwhYE37xFrvBWLdbkA1q9xn0IApU0Zh08EaguqLIAhiKiBaPNdTywCDRmXVpn5rlXQBg3baGUTL6k4BsEkra4p3PwHSdgPOWvBEnB8wyC/nth6sIcZH2NahlDW21Dc0cx1wFuowtf+zUVbkZmfllrczWQRBELMw/QLd09NTW914vqAcjtrqO/yvnxo1a6Lfu60dG9fvfWP93rt3Tfp6BNpstbJf36LdGLWglINOmoRapbl4/vrF4srubr6tJ8Am7ddP1M+6thvGhNISwCD/LY65gzUR7WANMb7bBojrWN9RQu63ytRqzc2aBomnG5PnQ9NUVlAsbWhXauztnUcGRkaHjibnxSvzvym7Q9cQ+U5JmDSaTluIWl66//9e33qgsEKmFEmCo+c88+f0p6eK4Yx0W8TEPxFvX7qwJoCu+h+GUnpi18ZNGTmlNXJCLAmftvzV9A3JATrTQAiC/HrAlXT4cM7/j+VXbmXu/271S8lu7i5ll28e/Dy3+mYDc44gxtw3avHv40ImjmXyBnR0KLkEmt+vLpkHvjt+pAgScxdGpyyZThfyA36dj6qZDEXbfFItwKmTk8gsQQLt352Rc62s+pGkqPmLpvCoBoxUoSDH6/I1i2tzhfBOY6tS0cVkyOb2o73cmYwO4E6l6udOiymDbb5zt+ZWo0LR5TLCKTDIBzxWXa9TdTEGQdo9Rrn6B3jRWV20gzV7ryuIbgP9vZkMB5XSOq9RLKPtj0Z2PudctZKwF40QO6rkrUoNIfKbNmuylz2tvt0qFVWSNJllAKYiL9y0IG5zCci4JDx+TnBbwYkfyuRqImbL1TOr/P+j1bfm4OPRy7PlBCEOiZ09RVR5PK9EpiTEy7KlO+JRgBHk1wfkhGsdTX7uz599fHK487BNW1ZcKqn8/JNTkI6bNWlckA8hIK6X1+aeutjR3vnkylm/mfkg06Y/nZ0qiGSYTH94/Oqi6Oh89YVPgib4Ej1ERVnNOx+sdBo+jDnHDfgVfdXJZChoCTTFaXd3DyiWbqBaV9P0xe7TN3+RLUidOnveZBg7F/R4DdUXZIxHtpsaW7u61J6jxbp1vs4s0Iu2wbXIiWU5G3hk3fCLf7Ct8o7D+789X1DR1amC7Ggvt2fWLqi4Wn1oX67ulIaPn8cf33zCkc0OPVg99bX38QtkkhQrlqUxqV7aOpQj3UYwGQ6aW9pcnI1954Xi6o8X6jsdvSISEyICAseNG9l281ZTU0OHe5DPmLFBQcFBAllZg0LoOnacjwvTxGyUJ16IWHtKHf5Kbkn2lmcfm7/wiVUvv/h7X7sxj/1Pkp+IaCn4aOdZImHlcrfLn+7c8vcTFRrP8SFew5nG0FxWcvrYwU93fnm6Ui6UjPd3YyYMZKVZZ4oU7vfZVR77dNv2L7+vcfF/4L7ekxTKitzdGe/sPlbZ7ugVKLxx7Eyh0jXEy7X3bFVu5me7dpINvR7w9WRbfyfd/sisndXi5IyL+Z9tWPbb+Y+teHH9M7NcRFOfe2KSC9RXykrPfnPokx2fn6Zc9Hnv7Zvi/O4dZAc0oycES0REe1ne5x++uyensnNUyHgvkY5Hjs70G2PB8EcmSbg+DQQZokBMxvo88qb09o4tX/mM8Xxt0+PylvYd7x3xpdLhUYGjJG6jJW4TJo6dOuOBqz/dyM+7HBYZIHZjv8Rx7RXM5VcXiDtzjv5Y9vPNFauSxof4gdiDLEDAbYps//VqPwl8PYj0ZdQpjHTrW/+UVtYHTfDTTq6OcHXyD5BcviSVVsnCogKGO/NFDjDetyv6DRlcU3CKdktz24/nyquu1bU03YUYlJbY8iu36LNaAsZ7a7ukC2gl6yMAnsF2tCt3/u1I9c2G1CXTlz+T+Lu0GQlJkWI358prtfLmdvgtL1k2E8Reo9bI6lumJ4Rx3TrAYPd8tp/JUAxe7Ku8fCrnWquz/8xZk0bqlojum54UQU01V/zrqytNA4p9a3YlBK8rjN5aeXaVhCnqBxX7SsVipRxCTIbwt0sK1gSRqbwXnObtgX9FIqFSCX+Nwpi/leQ+TUbJOU+5pBwSi8XyvnbitKwrnySR09mEPO+VKfN2SaliErri4kOK3XPJbPmHcVEbCgmhWOLRKYNoNmDVN99tjaVa9vHtOs+5u4j/Pd64LY4p6Ufuc25zPoMuiUSEknrEHr3157Or/MkUS9/Cly4n9u0tZXIEEZlefHZtMPWnyN0Z2o5EIpfJCAI6v+w416eBIEMUJyf2/TFAbn8u/eWvW1ZATLbjva9+LpXSaTgFF274+exLC+Fn4235n1/ZMzHc/7mXf0s26w9Ebwqd6VNduPwCF89fz8n+sb6uqb2NvDIET/B75S+PQeLdTQchOIOEs4vIy3tkUvJDkyaPIxsYAH7t/9nBZCjo2JfHKc3t+uZt6Zkenq4rX5jnKu4LYsBgYX7Zwc//lfy7h+MTI5hSA+jxGsa+oF5c6qtSqYvyy+40tkIaqsXNCqfV/ejhc3qaOmtuFGvcD4Ev6wQDz2CPZxfBrczK5+cFBvnoRvmnjhX/kHf5uZcXwi9aqejKPvzDzxelf3zrCdbbHXqwv9o+z3LqD2vYcEZ6AdFIMXxyyrtNTH7glBYUwt9fchKr9PailAe+euaGoq1NUbPvMRFR+vrGg/SasdgXjh8uaW5ra25soU6pC1/fCfZ6kROxGVcb2xRtjRf+EkrI9697/wpV/u3GRbukohnpxY2kzcbKA4lQVcu5dfEbCsVpB2oa6ysrmxuLNoZX7Vr0Ri5zthdpSS70IXk2q/QCcWsys4pl4Lq5raX+H4+KiKLXtp9jzpHIicR/1IP3thsHFsOQ9u2Vph2ohP7QlUs2vHOSqma0M3KZ1yvHK2XkfYORTwNBhh6sa4Hgag7SOykqEK7CZPqilE6DHkD2TkMrHJCALBTCKdBmVgHgWWjEcyrrUP4vlXVhkYGL0qY/+/LCVS8l0+WrX0oGYUhNmx4eGVhVWffVoXy63BAu4zxO62ubigsrLpVUdSq7WuXtF368BjcBEArTZ0HGxowdBVFp1fU6uoQVC/xCSA2RqJcPKSITJo7VBtaGTcw1zlUOASuE2gHjfLz9PPTqQLbmVuNraz9dmfbeC099cOqbYjjPboXD/uCpLwu/kvPFGzbGeJAJccrqJ+HXd72+nionguJiJdK8rCPZWUfyCK9wUqib6TMkoa+9vdSf/G2LQpatBpmUSqlwtzB7r5IIWb9tbTD1lyCSLNy5LYlMUZSeyJITksQoIu8oafZkuX9sJKH84oi5OhYcH+d1IxcsZB/NJXzJrrXodI2IfO0vyVQ07bHwsRT4J2TtHxZKoD9CcfKj5E13aQXZV+OdCdq4e2OcxJlO834aCDL0YL2GtjS3qVUa3zGeTFrNpHdtzV69dNtN6W04IJGx9SgUwimoLG9mee+CSwAAnlMx00IgnoNYcfb8hyImj3NxYZ4AQgKC3cT5D4Eg9HT3QDW63BAu41zl0P9d247CcXBfbqu8o7b6zhd/Pw3R/5mcku7emXOhgz0EsJ0coTwNz6BYgfCx5mbjuBC/cUE+EHD7B/ZNkU6dERoVE6Q9pvxmAutDXx64OqNRa2C8nqNdISCHDjClFNEPhzz7UvLTa+bTx6oXFzy1Oon1oS/Aan/wBFBEzYZ3dvTFhZrmVgj4RMNNWSxtGv7+/gRRXlRIx7IchEzq+zuU+OtMpZa+OcHTN2Le82vXbYBjr75AhgdTM70kEklfdN3Sru9NNKxvWrm+RkYQsux3aZtwvHpQJpF4DNNr4+UbDD+LSsrorD7q0k1h7r7Rc1bTRvYYaHdwX99oRGzPaI13Jiqc7AeFkU8DQRAKR0fygqtUkutxdNMPPTxh5uxJI1yd4IAEXKy1pxys8R1HNHOSo5MWPJSfd/mLv5/Sm32FLBT+kHc5KfmhpORopnTAgLKmrUhYvDQ2ccFkZxfRKInb/NQpS5bNnBY70a53q4r2NmVXl9rdw8iCIbPo6lRDJDpihNNIT9eHYx8wV7wtw8FBONx5WM2tO0132uAOQ/8Bc/8+sDxP5mXw1Fc8dhTEVO23r/dONLdfrQUlthd7DmCFsx6hq/8wgyCy1z5LLh3WIi88WSjv93CBlZz306XE7IyaGmllubTy8keLmXIjxMZDcFn2/rtHGBfywk1bDlIpkkkPk5PJsemlpE36uAw/02Pp072IUtY9LSak6cs3X9HRZbUs72QZmT+5dXMVkZhRX0NbyCCf61iAiZ2hsPDTQJB7GD15owFxHek54nLpL3CWTHsw6clTgh5fkTDSwxUOSEAWCi+XSqECVGMa68BqnIbnFIhQatr0R+ZEfnf2p+Kia0wpRXFhBRQ+Mjcydcl0Hq3iMs7jNHiC36y5k2fEhw13FkEYOnN2REJSpIurU2NDK7RSqdTXyqo1Gk14ZL8lvXrw2GcFVB9GoVCQy7P1hnPu2yswWO1R8P1V3ReQTIGrMwI7QfzsiOobt49nF14vq/k6s6Dpzl36VNEPZTvfO/Lx9q/pY9e2o3sycuhF0Yaw2h/Eyd+RD9w/0p7okOafzL9QVnzu5KnrrYT9yJAwvahtQEiWbcuIFcsPPe4VOGv5pk+PHNq2YVGkV0JqXPybpfohqj7ubiKCKMz56opMdqP04yefOcSUG0H06EeH08Ty/Ut8Pb0Cg/09feM2X2JOAZLFa5eJiRMrwhM27MrOOvLxmykTPadsr2DO9iGMeWP/Kn+idFO0e9TiDdv3Q83lCcH+81IjnvinnHB3h64VHM8ql8mkJbseX92n7mZhamdILPw0EOQehvUaCkowPT6s+mYjSB2VfpBO02ch6NTGnVBYfbMBKrBqIY8a8QsVWAsNuw8Szs791hnRj0VDH/RndaeFyzi/U0DoIHR0FMKdhL29nVqlOfr/5z7YnHmnobW2+k7uqdJREvf7x/Mt1zXXr1BoP2q0uOpanXZ+Wws0AaVP/t3DcEydHkqX0Kf0MLcciIoZP2V66IWi6x0dnRVXq/Nzf6JfGqaa9GsFBVxWWO0P5qNX0bhp8RMlIqKj/kaZVNahEXmGTJsWQj9ktBpBy7+5lPu3tHD5uYObX1zy1J/eP3HTP/nN3LN/Cif/EvmIeSNzbXjnkeei/QMfmPKOc1wMU24UceIn0spvM9YvTUmaPWdNRkHlHp3Y1Dlpx6Xct5OJwg/XPb50yUvpucTc5YlsL9yLZ2w9f+nAmhmS8mPvv74Sah4sVIYv23f1y0fFxNSNh58P78xeHRXoPzE+XRRrctf0MLkzA/g0EOSehfVVUWD2vMl+Yz2/3H36eHbRI3OjfMeQ6ZzsIrhMQ8gLByRyjhZBIZwi34Jlg8s4wHOKpq6GnFL09vXQqDW5py7CAQkfP3J5S10Ns5ERF1zGjTqFIP7lPy9e/kyis4tIqexqkLWA3stb2rIOfK9Wa+YujB7O+7Yxl30eIQwN829vU0Jo29x0t4erOfMvO1zGeQZrTy6unuTu4WJnJ/Ad4+HkNMxQ/o3Can+Q97qiUbXLFfYuriJOk9ZBeUcmF4ol5MJq21J+LtctIo5c5UQiP7TY66ljIQPY00Mpl8kJF4nYyjcmCIIMCLgMcr0+K29p3/nekarrdW9tfQrq7HjvyC+V9aBG/gHkGhFpVX1He+f9gV7PvbxQ7M7+su9AdtvY+9GJC0XXnnx6duaB727Xt0DJaC+31CXTP/v4ZGT0eBBIuhorA9ltQ0tjg/yDzVkgKA4O9rK6pqSF0XOSo/lfWLJst42WpraLxddb5cwrUgHjvSeG3z8Iu21UXL11X4CXh6er9m2o08dLBrjbhnH1betQtpNboHHeGggEAufhIhfTNkK7B5EfXOS7/AQhkgRNiQ0nio7mSpW6bwMjCHKPIODd8REEoKToWlhEAFx/NZruwu+vFv1QVkuFnj6+HtHTQmKmTeD5Cp2B7DS5/Z3Mny7+AgmJl3tq2nSI8Q7vZ2T4wYj716xPpWqxA36DTqt1v1u3PEHo60Q6NX2nyWtlNR+9fxRuQVxGOM37bczMxAj+LwuCkSoUyuoOIvhMn/qCU3ANCQfenSZBjFpbOtrbSVVyc3eByHtwdprUAyS56lotuUEjBaiy5yhXUGg6qws9WPhptvoiRlFW5Hy8+6ODWRfIN5ckEcvWbV2fQr2bhCDIvQVESDyRmcVAYAThEZNhg9/v9Yrarw+fC4sMiE0Is6eqadSavDOXLl2oWpA6NTDIh65mCO03IV9T2Nyn/Gem2ce4k0Lk6OgASkYX8lNcWLHv01PtbUoQ3ZGeI+4f5z0/ZYq3L/VmJxsgWl1dqqy6nqXFfeE+OAXXkAAj/OJtGXBLBAeTMcD0wZoLPVhIoPoiCIJYCIQ4Tk7GN082F4Wik/85q039ggTqfsH+8wGC9FBShwQC0qkpESEIzC2p7NaNhppbjRDud3WqFqXNCA4dw5zuDxULdkLkquc3xVuwL4rxC7caZkWiRgGncKvBP4lr4mDNQjtYSKP6IgiCWI6jo5B1D2GLUanUXb1flcOD7fzqxaDaGWAAPGq/hN9agFN6Blgv5gbp1X7fvtXDX/7Al8amgwV+tZ0mEQRB7gHgesofp5oFmDJFegHb+dV+oS9NjYLUYzoNymFUtMwCrNFqBC50pRfQSi8A1XjiVHMBU6aMwnaDZQXVF0EQxDw6O7usog1gBEwxGROwkV8IduHQZcOVvlC4s1NlLdUHO9rH25m1/XROV3pp1GoQYCY9EMAImGIyxrDRYFlB9UUQBDEPuLAqlaoBCiE0ByNmXett55d+0KsFwt8Pq5gKVP0us/rJCtV55u4BjOs+8QVSffTFCGpST2qZrGVQ0sv3uFcPWwyWC1RfBEEQs+nu7h7IZZq+Ouu9pWoKNvILoadh+KudGaY1aSCzstAWLNBqBGZ1Y2sgxl1gGPsCUN8s7dTDsuZQ34qD5QHVF0EQxBJAyRSKTp4He1xAE6OLnHmwkd/PI/Xft9FdFUVrUleX2ZE31IdWutILZulTWt4O5VQiaKVSaUDPzHILlaEJNDS3tzTQyiqD5QfVF0EQxHK6ukhJgxiLyfMC1aCyicus+LG6XwhAnw/QD0BBKbVT0ADomUIBsqQ2RV0oKYJOdkErugRMGUovOKVfL+YBpBSGYIoGQwVtZabIUgY4WKPgG0cIgiBWQCAg7Ens7OwENFAIF2UAwk0QAxAEEy7jZmNdv3pvAdGkeAtSfez0Jofpl4IoGKcA7bS7m3y9R1f/surI2WbdHbVotDtsmI52mABT1DtegCuyHyBmDZYLfN8XQRAE4YRVgAFQSh8RuTwq2k3/ITEroLXVyp6sum6QXkPdBSyQ3v9qUH0RBEEQPrgE2IoMNekFcLcNBEEQhA/QRcNnwFYEjA816TUE1RdBEATRJz3UHgTS6Hooc/F1IqVd7/XioQmqL4IgCMICPTmsu/3yQADdBVPlCUKrK/p/KfjcF0EQBDFOVl1PZm13rZJcS8W6ikoPkFs/kXkLte5tcNUVgiAIggw2uOoKQRAEQX5lUH0RBEEQZLDRn3nuscVeLAiCIAiC6NAv9kXpRRAEQZBBoE99UXoRBEEQZHBg1BelF0EQBEEGDVJ9UXoRBEEQZPAgiH8DLggqX6P0UWcAAAAASUVORK5CYII=) *Highlighted: The Add Step Below button.* Alternatively, you can add a step *below* any existing step by following these instructions. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the existing step you want to create a new step beneath, and click the **Add Step Below button**. When a new step is created using this method, it will be unlabeled and appear beneath the originating step. It will take on the name of the first [action](/breakroom-for-training/syllabuses.md#adding-actions-to-a-step) you add to the step. ##### Deleting steps[​](#deleting-steps "Direct link to Deleting steps") ![](/assets/images/LMS_Syllabus_018-5fe18c24bb2610195a21da876203c64d.png) *Highlighted: The location of the Add Action and Delete Step buttons.* To delete a step from a syllabus, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the step you want to delete in the step list, and **click on it**. 5. In the Actions panel, click the **Delete Step button**. ##### Duplicating steps[​](#duplicating-steps "Direct link to Duplicating steps") ![](data:image/png;base64,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) *Highlighted: The Duplicate button.* To duplicate an existing step, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the existing step you want to duplicate, and click the **Duplicate button**. The new step will be a perfect duplicate, including any associated [annotations](/breakroom-for-training/syllabuses.md#adding-annotations-to-a-step). It will appear in the step list beneath the original step. ##### Bookmarking steps[​](#bookmarking-steps "Direct link to Bookmarking steps") Bookmarking steps allows you to easily identify and review them. This can be useful for a number of applications. For example, you might: 1. Bookmark all media steps of the same kind (e.g., all videos) in order to replace files when necessary. 2. Bookmark the beginning of each content section in order to streamline course editing. 3. Bookmark steps that are still being designed or edited for improved accessibility. ![](data:image/png;base64,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) *Highlighted: The Bookmark button.* To bookmark a step, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the existing step you want to bookmark, and click the **Bookmark button**. ![](/assets/images/LMS_Syllabus_014-4e1f113a493837295243335dcf2c1501.png) *Highlighted: The Show Bookmarked Steps Only toggle.
Notice that it has been toggled *on*, and that only steps 5 and 13 are displayed in the step list.* Once bookmarked, a purple star will appear to the left of the numbered step on the Dashboard. In order to display only bookmarked steps in the step list, click the **Show Bookmarked Steps Only toggle**. Bookmarking a step has no impact on how it executes in-world. ##### Reordering steps[​](#reordering-steps "Direct link to Reordering steps") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAokAAAA+CAIAAADI5RaSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABiaSURBVHhe7Z0LXBNXvseHJITwfkWDIIJQxdeCglVuWd9VEVtc7S1Ftj7au7Xrul2L+qm063a9vbYX2+uKVoulrdXqrY+ussSuRakt6loLFQW6VlDBiICJhEeEhBAyYf+TGWIIyZAEbIL7/37mQ89rzn/+aXt+8z9z5ozL5Ph5BIIgCIIgTgOnq6uLSSIIgiAI4mh0Oh0H/oHyjCAIgiDOAAgz/KW0GUB5RhAEQRDHQgszwGgzgPKMIAiCII7CIMyAS9zUuUxSz9kzYiaFIAiCIMjD54cfvl+/8W0mo+dB3IwgCIIgiDOA2owgCIIgzgVqM4IgCII4F6jNCIIgCOJc4FowBEEQZBDAkVTzyi9xa265tDTDwZQ6H11+/uSICEiQE+O00XF0ITu914KhNiMIgiDOC8gwX/wFt6bamfWYBZBnTfKzINhM3hy4ThtBEAQZHIAYu32W47Elg1deMkiFGYCLBxf44qNM3jpQmxEEQRCngyOpdt+1FYSNyQ9yXM+dAYUGp5h8X6A2IwiCIM4FSDII8+CNlc0C7lh/t4HPmxEEQRAnAtTL7bMcJtMTbXQcOTGOXmnF/gTXgUBwzLnfzC0tsSTDHctXmawRw7VgCIIgDxcXF4JLweFwXGigsEuPTtdFkjqSJB/G5wscZRcs6o0ydulC2qhOB0apgy60Bnoqm8kY0Tl9jiY5hckMHmf54qOu584wGSPaf79RF07dYdDgWjAEQZCHBYzXbm6uHh4C+MvjMbpBV0ECslBoaACVdFX/cYhd6NnVlefh4SYQ8CEBimUwCkAaSqAcaqENJIxrWRAcNI2YQcNUmzINwjy4nIXLhos3lmEacJN9xh61GUEQZADg83nu7m4gDEyeFWgGjeEUJt8PHGLX1RX64UM/xhJlCWijv0hQtT4uEqJME8XSRsdBiGmYvh6MzsLFgwsmk9jgJl/8BZMxB2ozgiBIv4DgDDQAoiUmbzVwCpxod2znELugPRAd8vmu1giVMXrRcoVzLZ0IcmUy/QvhZsfyVXR6sDsLjphEzzzWF8NQmxEEQeyHw+HAENwffdWfbvNQ7BC7tFZxufYLB5wLPZiVut5xpPp5gzA/Cs4a3DHAEjrbbxVBEOTfHP2gb3NQZYJeA2x7MuoQu/r29gukAf3Fm5Fnk1XNndPn0FPZj4yz4A44RZfTcGssvu6M2owgCGInbm7mQ0BbgU6gKyZjBQ6xO4BLq6Af6I3J6On9upFh8dej5KzxUnPApaXZ0m4kqM0IgiD2wOfzBmr4BqArK1ctOcSuq35xMpMZCKA344fH3NIe2mxYOfXoOWuyKIxXfolJ9QS1GUEQxGZglDeWlgEBOuxThxxiFyLOATcKQJ+WAmJyIiVgj6SztGsGuDW3mFRPbNDmNpVaJm+RNjRbOqAW2jCtEQtIDqTGxabut3ZTVQRBnBHrh++urq76Wvml7yvhqK9thCxTYY4+u7XSbut91ebX9v35tX2tre1MESvs3ep1hUlbg7aTLL10s7SkSqdj23UE+jTYNXnyqvOhnjRb6aytDKyzVmJwlt7UzIClpdo27AsG0jsiZAjLi2VaLVlT1yAS+jF5Nsimiu9LJA1KNcnlegZExk4ZN5Saj5eXnimqMZF3QUj8nIlDmYwdNBblZKzderJMpiAEIlHU7PQ3X395foQAatSNMoVW4CvypTK2olUrGhVqs2ff3vPMvMxSJmPMpI2nD/m97v+imJiRLfn7MhFT7BCUTbdkzC/NDxgS4tfj2Q+CICzAOOvhYXHYqPzpzvFD51evS/bz96q4WnPks8LamgamjiBCw4akPD9zzIQRTL4XKpXaknyz2zXm+OHzX+UVQyJp0ZTFqdPoQnYs2QWj7u4Cm+QK7gz2ZuffqKh9MjHuqWfiWVQDLLa3U3Y9N7zMFOlR/t+H1jtrACy2NCuZDEG4e/AnxIxkMj3pj7PNja11d+Tt7Rovb/fI0cHqdk31zbudGi1dC0F54BCf8IggOmsM7SzR3OyxJYMp0gPO9mtfMLjdY3/jG2rZbwm7IWWX8s9VSJWdrt4BPq6EsuH6+TOXpCRTa0Cn66QgOG5MgR0o89dEz1x3qMwvYeWKF1YmR7lXHspY/7lEXyfJWRAeGbn2rD5jMzUfzo4Mj9xQyGQtoKiTyeq6NZBCkLJXWlUlPeZYYTbQpSO1JNnrp0cQhAUu1+JIeKHwn9u2fCGTNnM4nH98++Nf3v5rc1PrwsXxazcuWZuxBBJNja1/eeevUMWc0AuWzlmqjGlXdRQWlMXERcbERnxbUAZZpoIVS51DeZ/CrNPB2P9g8Pf28YD7j7CIoDOnLn+Tf4WwLAvQM4tdJmWOm5V1EJp3dHQyeT3wa+fs/NJw7Mg83tLcxtT1xD5n7ytUn+7J37T+0x1bj0P/Bz8pkNY3FX9X8cG2PIPRPVknPs3O1/S8MBraWSu3AXfE8+b2ip9q1QQ/aFLiwjnT5yYmJQwXEOrakisyghBOnLMweaH+mDnKF9pyA8bHR1MJ+5Ad3bFfQczPlpYczd79fvbek9fkcumFDWOgpiw3v7QRmkjO5uaJc8vAOKC+Xij+ePOaV1a/9XF+GVXLQJXnFlYq1JXn9ryVmS+rKxOfvtICFRIozxNfps/uJuy3xyolVdRR+OY4yD+3l8nmrgoj1DVXir67cpu+t4N+cvPK6tQS6PaV1W9k5dFGwVzOltVrMnaIyxX6dg9QVxcezcpY88rmnHMVauZGDQB3qMtQy8rEWRn7y5nSHrQ13Lx+t1nD5AjPgJERwSNF/bjvQZB/VywtFKqR3DvwcUHICOF/v7cSVOHgJ18PHyF8672Vv0pJGB8TPj46HBJQBYVQVSPpOW50w7IKyZoFShCznswrAj1ekDxlwaKpkDiZVwyFTLVlLHXep1FFizLzzc8PfFRgfBMwLCQgbeVs/wCvc9+Uy+Wm45gx9tkFj3Zvy0tf9cGu93JrbjG/ZO8p9C6d+fsCO4yqlOo9WeLKn+6krpi1Ped3H32+/u3t/zUifCjclISECv93x28+OrT+/b2vzFsYB3cplu5G+vwxDVjbbgBRV9fDvyjP4LFh9DQqN2hCqA8Uy+vv6fMU5N3i8z81ke6hUxLGeDJl9iOprFAYZEzgq5+EvrJjWfpR6l9o0c5lqWnLtpeCvu2ZKYxdkPbq1iOH9r376uKEsPA1p5mIV3oyPW3Z4qRY/7ik9HePV7aXbU/bcIQ6++KONDg9+wrdzBr0XaWfov9bgn6WpSZNCZ8A3X66b+em1ISw+DWr4+Ey1mXu278rI+2JoISsCn1TispdM4XRC17cvC//5I51SZOEselnmf/mwZ3UtKenjo+MT9u042wtXYggyEPB0mKiE8cuunBc1qxb5OvneeLYd5D+3bpFPn7UGJa9XQwHJKAKCqEKGutPMoVlpRJLFQSRmW8eevWl3etezs4X/xA1LjRydDAco8cOzxcXQyFUQQNoxpzQC0udsxil6VBr2trUDfcUnZ09puBAnuHmoK21vfwy2/oaO+zCTUDBSWpdd6dGW3H1joenbVPfgB1Gz54pb5Tf/82apF/OnODl7U5YaMg+ddznj2nAAdqsaKdiNzePADoLCAIouVS3NjF5QlJ86Q6oItdFeUfS1J8JV1HK2hUiojJrZogwKCElY+ehwkrmYUTi3rZr7+iD2mNt7W1t++ZD46Vbj52UyNva5fJ2efHmKEK2P+uw0Z2tWqZetLtYKi9eG560r608MwrKlua2wekfJdIt7ENBJH5+G66hve7AcwKibP8BScoB6jLabh9OgfymzFP0jcXF9NkZRb5LD9fJpVVVzXCFMdV7nvmz0aS6Qha04asqWfveJKZAD6lqkN+Tyu81d0K6Va5Pt1g1x4UgiFnMri7Wasl/lt2aGBcpHOpLpUsldBriKsg2NtyHAxKQhUKo+meZBLLMyUZYWroMsFTlHr1wq+puTFzkM0unrVm/6LfpT9Plq9clQxYKY2Ijq6vu/u3oBbq8N5Y6ZzEqrW8qKboO0gvyfF+hvPLDDdB+CKPpWg6HEzpiiMCdX33zLl1iFjvsHj1YKG9QgLOQXrJ0GvyedHnvnb/gHohJ9cRWoySp++FiZcRjwcOGB5q0gWzdHfnraz9+aem2V158v+DvJVBv6dJZnDLBAdpsBtOr4Hv4BgT4e3Lam2p//PabUoNm245n4u6rkgvZG+dHE2Und7zx0oI4Ufgznz6IRHvgO3V+HFF5Ok+cm3e60jdGRBByhfEax5TswyvG2bVwjJWY1zcnB1IJ38WpyfCP0ekbF4soK4GLnlsM/yirrKFqy07lKggRXOHZE/QVhs+IJdQH84qoSj2jN+/dPFNkOs/goiM1SpVGqdHBLZ2mXZ/usOGTbQiCmGB2hG1pbtN2kiGhQiatZdJ7totXL8uqkdyDAxLZ209AIVRBY4XRwiUDLMM3S9XUhDE6XRdUz3vq8YmTH/PycqfLIQFZKAS56NJ1TU0YS5f3xlLnlsrh+vdknYDjyIHC+wpVfW3jwU++3r0t70z+ZV33dxJ5rlwuh9Ohj8csYatdUksWX6iAiDzx6cdHjQmZNXciU0EQ6/74n6v+8JThWJuxxM/fi6nriR1GwV/hUB8el2Mycz7liTG/W5dsMPrbV59+cXUiv+fOKgYs9d8bB2izQL+grEP14AkE2XwfomSBh2GBd3DM9FnTZyQufHKUN0EopTeNglfbEYhilm0+dk7a1tJcdTJzhq/s1Cubj5r5P4KQfZEaIgpPSFubngFHptjU6piJE5jUwBIVEc6kaHgCsw+BpXVwQTLxe/TlwbHxiEwkCnR7sNAsLoYK5U3heAUFdz9a5gWG0mnm/1sEQQYKPp8ajtVqahGQcfrxJ8bOmjfR28cdDkjAUG6ocu33J5IMLEieAlp14ezVg58UGC/LAiALhd+dvUq1SX6cKe03oLtLX5iTsmzG/Kcne3oJhoj8nloSn7piVsKMCZzup6rKNrVGo/UPhIF8wGhtbYc+hwUHPBYVsuFPKZYi44HF1ZXn4elWd6exqbEN7j8qf7rDVND0VFz2aW0rcYA2+44YAqGd8t7N7nBYeY16AM31FQYRhKLJeA5bYPVzc0soZRLDki6eQDR97cvzICWRyukiYyRH3stTiNaekdLrtvJfG81UOAkTn5gJf2dklukvT39chb+ZM+hqBEF+LkzEjwakN0DofbXsFtRS6UAmPTl+dNoLcwICfeCABGSh8GqZBBpAM+ZkI8x2TsNSBQHZkqXTnlwQe/6bHy8X32BK9ZQUXYfCuUlxi1N/yRK3WeqcxWjU2OFzkyZPnx3t4SkIFPrMmjdpTmKsl4+7vOE+nNXZqb1RUUuSZEwsNflsCVvtuntQH5VqbmqFtMkktvXrtG01CncAs+dNqr197ytx0c2Kui+Pf9/USF0AYP06bcBS/71xgDYTAeNHBnAJleTC6QtXKkouni64eZ/gBoyJDieUV4vPnfvb3wu+vfTj1WulF88UVIBoC4Qj7H7fSHbguQlh/gkpm3Ooxdh5ORkzV39BELFLk8OgMjyK2p4lf39WnvjjI0VKd18hnFB46juJTFZxasPKt67ru7BERFQ8/D25byd0+0WR0VtSDwvq2bkvceqFmDkZeyhftiyeIIzfyX6RxngGhkcMxdeYEaT/mB1hQfamzY6urZGDEOrTv6DTdG0iFbNOodNQWFvTAA3MKiXL8M0+skNv46KpoQ0iPLqEhl4qNfYXYSzCDFjqvE854bny+Hwe3GdwuRxtJ3nirxfff/d4Y8P9+trGwoKyISL/kaOGMU3NYatdNzfXsRPCvj55GWwxRd3odLplv5n70aH1cKS//gyUWFqnbYezcVNHxU8bd6X4pkrVcf1a7YXCH+HmA8r1p/Q4Cwos9cLSvwmO0GZC8FjC7AkiAaGS3q6QyFSkQDgmQb8eWxA6KixAoFM21VZVVErqWztcvYfHTZts5iVuKxE9u/UvS6Mkp7euoxZjp67bVSRIzjxzYi09iTx/076UEIV4U2raqys/POu7Iis7OaTs3aSxkZGTfl0WPr+PO4LENz99TqTMewO6fSn77M8gzp6Ju8sL30kminalU75kFhJJK+db3MCgFy4cHq/v9xQRBOkTnYURf97CycNHCP9/79dfiYufTIoLCaXS+eJiGMQhXIYDEvkniqEQqqAxc1pPLHUOsFTR3K2jpiOHhQSSWrKwoBQOSAQPp9az3K0zeivUHJY679NoQKD3+j+lrHx5vqeXQK3WNMha4G5A0dKWe/gfWi2ZtGiKhwfbu5p22H32+RkyaXNW5rFbVXcNz7ZNYL9oO4xyedyZcyf6B3pB1B4SGuju7mbJNAt9/pgGHLUvGE2nUtHO9fIR9OoSKlSkm7kaO1ErZBY28UIQBLENGAZNPqNkQNGi/GBbXvXNu29vfxHa7N6Wd6tKCloVHkHd7EuqpSplx8jIoDXrF/laWKbU0dFpdv02wGKXZt+Hp64U31i+at7xw+fvSaktGIYG+S1JnbY/53Ts1FErV82nm5nFkt0+jRojb1C8/24uKIurK1d2tylx0ZQFyVPYP5xM2zXZF0y1KZMrFLLYlVRJwdm6O8zjyScXxD63fNbqZVkmLrz3wctml4PZ5+x9her6tTthEUGBQh/D21Bff3X56IFC44AYbob+uOXXZpeDmXXW7L5gNmhzm0qtpPY5syj7Li4unh4CLxt3WUMQBBlcuLBuJ6nT6S4X34ieFAGjM0nqiv5xrfi7inp92BocEjglYczUhLFse1z0Y8/OnVuP/1hKfTtBNMwfJBmix2OHGJH+xaSRf3htib6VeQZkz84bFXUf7jgBNyhe3u4LfzV11vxJ7LttgEV6z06PLRnGO0uDNhP+/uzOghjdkTQ03GuBYDQsQjRU5Pfz7NlpAgh29Y16w7vdoNnCIT6g33TWGNpZl1vV7ru2MkVQ6OcPzvZLmxEEQRAaiK5YJhHtBoIqCK2YjDnY7d68Xv/lsYsxcRHTZ0dz9c1ILXnum/Kyy9VPL/mPyNHBdLPesNvl810hDmYyrJQUXT/wcYGyTQ2SHCD0HvnYsKcWxw8L0b8kag6QNI2GsgtyZfwl447lq7TRcQ75ka131lZoZ3nlJW6f5TBFcDHRceBsb23mBg/vsYLuhRVLmRSCIAhiAQjaHsZXkkAzzMZzBtjtBgR6x08bNzJymGEaGRKQjf/lOKiiS8zCbhcCUx7Pqq8zDRH5jR0fGh4RBOa0pK5VoYocFSwcYn7fZbBo0EiOtJ572+hriV0EGRPnkB/ZemdtwuCs66kvObIHm7HoRMHgaX197emvzzNFehyyFgxBEGRwAyM4vUx3AIEO+1wr5BC7oJFWGoWIM2JU8IwnY9JemLNhU8ob//PrqHGhTF0voE/omU5ro3usjIPgEv46ubM2YXCWds2AyeecDaA2IwiC2ING07eUWg90BR0yGVYcYhekhbR9WTIL0JuxBOrCI0w+0MQXH4W/j5iztFPGaKNRmxEEQQaUjg6NIfLrD9AJdMVkrMAhdjs6OgdKJqEfw2y2AXJEBJPS43ruDL067JFxFtwBp+hCGkvCDKA2IwiC2AkMu2p1Zz+VA06HTmxSAofY1bfX2HSdZtFfvBm51SQ/y6S6ERyk1kw9Ms7S7hjT22UDqM0IgiD2o9Pp+jOI02O3yecTrMEhdmnF6s98L5wLPZgV2i4/f5M4kiOpppc0PwLOgiPGC9GBzulzTKbxjUFtRhAE6Rcw9Le3dxg/PbUSOAVO7I/k/Px2acXSaGwOZKE9nGXQKrNAHGkiV7zyEvddW11amgevs3Dx4ILJEjBwU5OcwmTMgdqMIAgyAGg0lAaY3W2qN9AMGluzLqlPHGK3sxP6AdF6sNCaBb1QwUVqDBt0WAIUS/38KibTDYSbHlsyDEvDBpezcNlw8SYRM9DbTRPw/WYEQZCBAYZuktRptT2WFtNfmIAhG4BaegMKaGJjJMaGo+zqdFS38BdMQBYMGj6nASVQTJIkhK2gVdbPJ4M8dwUF88p6RJkA9/Yt/ukvOVLqzWCyTdnp5e2cznbea9CpVNzrV11PfSk4kNPjpe1uOpavIqPGMxk9vd9vxn3BEARBEOfCZPOsRwl6yzMm003vfcFwThtBEARxLkC92n+/kWWp1GAE3AGnWN6bMga1GUEQBHE6dOERqk2ZndPnMPlBDn23AU4x+b5AbUYQBEGcFE1yCii0lbGmEwKxMlw8uNCxfJVN0wD4vBlBEAQZBPDKS7il1Boxbk218QclnQ1qOZufPzlipDZ6spWBMn4jEkEQBEGcC1wLhiAIgiDODmozgiAIgjgXqM0IgiAI4lyYPm+mdzxBEARBEMRR9IibUZgRBEEQxOE80GYUZgRBEARxBhhtRmFGEARBECeB0mYUZgRBEARxFgjiX6JNZkbNw7fAAAAAAElFTkSuQmCC) *Highlighted: The Move Up and Move Down buttons.* To reorder existing steps within the step list, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the existing step you want to reorder, and click the **Move Up** and **Move Down buttons** until the step appears at the correct point in the list. You can also drag and drop steps to reorder them in the list. ##### Bulk editing steps[​](#bulk-editing-steps "Direct link to Bulk editing steps") ![](/assets/images/LMS_Syllabus_016-54386ad420b043db71c57788609e23b3.png) *Highlighted: Multiple steps selected in the step list, and the location of the bulk editing controls.* You can also edit steps using the bulk editing controls. This interface allows you to: * [Bookmark](/breakroom-for-training/syllabuses.md#bookmarking-steps) more than one step at a time * [Reorder](/breakroom-for-training/syllabuses.md#reordering-steps) groups of steps within the list, while preserving their internal order * [Delete](/breakroom-for-training/syllabuses.md#deleting-steps) multiple steps at once To bulk edit steps, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the steps you want to edit, and check the **box** located to the left of each step. ![](data:image/png;base64,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) *Pictured: The bulk editing controls.* 5. The bulk editing controls will appear at the top of the syllabus editing panel. Here, you can: 1. Bookmark the steps 2. Move the group of steps up one level 3. Move the group of steps down one level 4. Delete the selected steps ##### Adding actions to a step[​](#adding-actions-to-a-step "Direct link to Adding actions to a step") ![](/assets/images/LMS_Syllabus_018-5fe18c24bb2610195a21da876203c64d.png) *Highlighted: The location of the Add Action and Delete Step buttons.* To add an action to a step, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the step you want to edit in the step list, and **click on it**. 5. In the Actions panel, click the **Add Action icon**. ##### Deleting actions from a step[​](#deleting-actions-from-a-step "Direct link to Deleting actions from a step") ![](/assets/images/LMS_Syllabus_020-3765cd4dcf9a2181ff9cec0eff7e6616.png) *Highlighted: The Delete Action button.* To delete an action from a step, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the step you want to edit in the step list, and **click on it**. 5. In the Actions panel, identify the action you want to delete and click the **Delete Action icon** associated with it. ##### Adding annotations to a step[​](#adding-annotations-to-a-step "Direct link to Adding annotations to a step") ![](/assets/images/LMS_Syllabus_019-0bf30111af004668ed7f44803e893081.png) *Pictured: The Annotation tab for a step, with two annotations entered.* To add Instructor or student annotations to a step, follow the instructions below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant syllabus card, and select **Edit Syllabus Content** from the menu that appears. 4. Locate the step you want to edit in the step list, and **click on it**. Then click on the **Annotations tab**. 5. In the Annotations panel, enter your desired student and/or Instructor annotation. Annotations can include any combination of: 1. Text 2. An image from your [Media Library](/creating-custom-experiences/managing-your-media-library.md) 3. A website URL #### In-world syllabus execution and walkthrough[​](#in-world-syllabus-execution-and-walkthrough "Direct link to In-world syllabus execution and walkthrough") In addition to demonstrating how our tutorial syllabus will deploy in-world, this section serves as a quick-start guide to executing an Instructor-led syllabus. For more detailed information about accessing Breakroom for Training, either as an [Instructor](/breakroom-for-training/instructor-orientation.md) or a [student](/getting-started/using-breakroom-for-training.md), please review the linked portions of our documentation. ##### Instructor login[​](#instructor-login "Direct link to Instructor login") ![](/assets/images/LMS_Syllabus_021-3bf041b34c1537c03142ded6b3613ec8.png) *Pictured: An avatar being welcomed as a student.* When a user navigates their avatar to a Region where Breakroom for Training is installed, they will initially be welcomed as a student. They will see an orientation pop-up and the Breakroom for Training widget appear on their screen (as pictured above). ![](/assets/images/LMS_Syllabus_022-64ef4cd4b8d9cc4078f7b415c505cce1.png) *Pictured: The Breakroom for Training widget, relocated to the lower right corner of the screen.* Under the [default UI color scheme](/creating-custom-experiences/ui-customization-options.md#customizing-the-ui-colors), the Breakroom for Training widget appears **blue** on student screens, and **pink** on Instructor screens. Once it appears on-screen, it's good practice to move it to the lower right corner for ease of access. You can do this by **clicking and dragging** on the center of the widget. ![](/assets/images/LMS_World_003-40b54a7c1c8fd263e5f9792c1a53f321.png) *Highlighted: The location of the Instructor Mode button.* Users who have access to Breakroom's moderator tools can become Instructors on the Breakroom for Training system. This list includes: * The [World Owner](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) * [World-level](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) Administrators, Moderators, and Developers * [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) Owners, Administrators, and Moderators This section of the documentation refers to these individuals collectively as "Instructors." To enter Instructor mode, follow these steps. 1. Navigate your avatar to the Region where you'll be instructing. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Instructor Mode button** at the top of the moderator tools. 4. When prompted to confirm your choice, click the **Yes button**. ![](/assets/images/LMS_World_008-729700aeae8ba42fabfdad68f62fd826.png) *Highlighted: The location of the Leave Instructor Mode button.* To leave Instructor mode, repeat steps 1-4 above. You can also click the **Leave Instructor Mode button** on the top right of the Breakroom for Training widget. ##### Launching a syllabus[​](#launching-a-syllabus "Direct link to Launching a syllabus") ![](/assets/images/LMS_Syllabus_024-9aea2e31506f94fdd7d2eaf167579bc9.png) *Highlighted: The location of the Course Info button.* Once you're in Instructor mode, you can launch a syllabus by clicking the **Course Info button** in the top left corner of the Breakroom for Training widget. ![](/assets/images/LMS_Syllabus_025-dd515b15fe52e5c5658f22cf347b1d60.png) *Pictured: Available syllabuses under the Intro to the Metaverse course.* Click on the relevant **course**, then click on the **Syllabuses tab**. Locate the syllabus you want to launch, and click the **Run button**. ![](/assets/images/LMS_Syllabus_026-25487f7c6bd58e68c7a831356932a985.png) *Pictured: The Syllabus and Breakroom for Training widgets.* Once a syllabus is launched, a **Syllabus widget** will appear on all Instructor and student screens (or the individual student's screen, if the syllabus is student-led). Here's an overview of the associated UI. | Button | Purpose | | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | Drag handle | Allows you to move the widget around the screen by **clicking and dragging** on it. | | Annotation button | Toggles the Annotation panel. | | Step indicator | Displays the current syllabus step. Allows you to navigate to a specific step by typing a number into the step field and pressing the **Enter key**. | | Total steps | Displays the total number of steps in the syllabus. | | Arrow buttons | Allows whoever is managing the syllabus to **rewind** and **advance** through the steps. | warning ##### "Done This Before"[​](#done-this-before "Direct link to \"Done This Before\"") When rewinding syllabus steps, it's important to note that the Breakroom for Training system remembers the highest step you have reached. Certain actions *will not be repeated* when you advance through that step again, even if they were triggered during the first use. This also applies if you choose to manually jump over a step and then backtrack, rather than advancing through the content using the arrow buttons on the Syllabus widget.

For example: 1. You are on step 15 in a syllabus. 2. You advance to step 16. All actions for step 16 happen, as you’ve never been this far in the syllabus before. 3. You then use the rewind arrow to backtrack to step 12. Steps 16-12 (working backwards) are considered "already done" and will not trigger the actions listed below. All other actions will be repeated. 4. Starting at step 12, you then use the arrow button to advance the syllabus until you are at step 17. Steps 13-16 are still considered to have been "already done." You've never been on step 17, however, so all actions on step 17 will be executed. The β€œskipped if already done” actions currently include: * Take Tour * Start Timer * Start Quiz * Start Waiver * Custom Functions can be set up this way by the designer ##### Running our tutorial syllabus[​](#running-our-tutorial-syllabus "Direct link to Running our tutorial syllabus") ###### Step 1: Change Camera[​](#step-1-change-camera "Direct link to Step 1: Change Camera") ![](/assets/images/LMS_Syllabus_027-17c7397b0c3ad64ebece974617424e9c.png) The first step of our tutorial syllabus is intended to act as a "blank," allowing Instructors and students time to familiarize themselves with the UI. It consists of a simple camera action and an Instructor annotation, advising the user to relocate the panels and widgets as needed ![](/assets/images/LMS_Syllabus_028-bfb470542a6d9171ea1583fae12eba67.png) *Pictured: The Breakroom for Training widgets.* For both Instructors and students, we recommend moving the Breakroom for Training and Syllabus widgets to the lower right portion of the screen. This prevents the widgets from getting lost beneath additional pop-ups. ###### Step 2: View Image[​](#step-2-view-image "Direct link to Step 2: View Image") ![](/assets/images/LMS_Syllabus_029-2a254c0f2409c5570d69329e0f5ee59a.png) The second step displays a splash image on the user's screen. Only instructors see an annotation, advising them of what students are seeing and that a timer will begin with the next syllabus step. Users can reposition this media screen wherever they prefer. ###### Step 3: Start Timer[​](#step-3-start-timer "Direct link to Step 3: Start Timer") ![](/assets/images/LMS_Syllabus_030-3a12a08b3c17c9708a2256b58f982461.png) *Pictured: Instructor view of step 3.* ![](/assets/images/LMS_Syllabus_031-772147a4c0343ba27fd6666accf02b14.png) *Pictured: Student view of step 3.* The third step starts a five-minute countdown timer and opens a website in each student's external browser. Annotations advise the Instructor as to next steps, while students see a welcome image and text. ###### Step 4: Send Broadcast[​](#step-4-send-broadcast "Direct link to Step 4: Send Broadcast") ![](/assets/images/LMS_Syllabus_032-81dbeeb54ee54ea494db70c10894c6c7.png) The fourth step sends a broadcast message to everyone, explaining that class is starting and a video will be played. An annotation advises the Instructor to progress to the next step to start the video. ###### Step 5: Watch Video[​](#step-5-watch-video "Direct link to Step 5: Watch Video") ![](/assets/images/LMS_Syllabus_033-be14a2d6221491066d17bd6612c306a4.png) The fifth step displays an introductory video on the user's media screen, as well as an informative annotation for the Instructor. It's important to note that videos shared this way must be triggered by the individual user, and thus will not play in sync. This can be useful for certain applications. ###### Step 6: Take Tour[​](#step-6-take-tour "Direct link to Step 6: Take Tour") This step triggers the [Breakroom Tour Camera system](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md) already set up in the Region, compelling users to watch the tour. Users can cancel the tour at any time by pressing the **Esc key** on their keyboard. ###### Steps 7-8: Draw Attention[​](#steps-7-8-draw-attention "Direct link to Steps 7-8: Draw Attention") ![](/assets/images/LMS_Syllabus_034-fb0df59dd91ad8aece13551a00dbdff2.png) The seventh and eighth steps use the Draw Attention action to call user attention to Microphone and Device Options buttons. Annotations inform students how they can use these tools to communicate and troubleshoot any technical issues. ###### Step 9: Start Waiver[​](#step-9-start-waiver "Direct link to Step 9: Start Waiver") ![](/assets/images/LMS_Syllabus_035-673feaa1918cbdf411a3a38f81d49452.png) *Pictured: Instructor view of step 9.* ![](/assets/images/LMS_Syllabus_036-e71ef1f09a6597e774363f4a9656bcbc.png) *Pictured: Student view of step 9.* The ninth step triggers a waiver associated with the course. Annotations advise the Instructor to give students time to read the waiver, while students are provided with directions for completing it. To review responses within the platform in real time, you can follow the steps outlined in our [Instructor orientation](/breakroom-for-training/instructor-orientation.md#posting-and-reviewing-waivers). ###### Step 10: Teleport[​](#step-10-teleport "Direct link to Step 10: Teleport") ![](/assets/images/LMS_Syllabus_037-eddc7000d1b19c4697eebe28afa3c3dd.png) The tenth step consists of three actions: * Teleports everyone to the Region's auditorium * Changes the participation level to *Quiet*, so that only those seated in presenter seats can access voice chat * Shows a toast message informing students what is happening ###### Steps 11-12: Start Quiz and Stop Quiz[​](#steps-11-12-start-quiz-and-stop-quiz "Direct link to Steps 11-12: Start Quiz and Stop Quiz") ![](/assets/images/LMS_Syllabus_038-2487d61f7a3bdecdbc62182c6fc789e3.png) *Pictured: Instructor view of step 11.* ![](/assets/images/LMS_Syllabus_039-5be3060563d6f924b2361cea6f277cb3.png) *Pictured: Student view of step 11.* The eleventh step triggers a quiz and displays an annotation for the Instructor. Step twelve ends the quiz after students have been given time to complete it. To review responses within the platform in real time, you can follow the steps outlined in our [Instructor orientation](/breakroom-for-training/instructor-orientation.md#reviewing-quiz-responses). ###### Step 13: Change Camera[​](#step-13-change-camera "Direct link to Step 13: Change Camera") ![](/assets/images/LMS_Syllabus_040-ebb1cf846a520fa6f07014fc1528ca0f.png) *Pictured: Instructor view of step 13.* ![](/assets/images/LMS_Syllabus_041-d1219c25fc177f1e8dc809670f44e437.png) *Pictured: Student view of step 13.* The final step in our example contains two actions: * Changes everyone's camera to the Auditorium presentation screen * Plays a video on the presentation screen Instructors also see an annotation describing the current student experience. ##### Finishing a syllabus[​](#finishing-a-syllabus "Direct link to Finishing a syllabus") ![](/assets/images/LMS_Syllabus_042-13ef4581992779d7d3075e76d71f091f.png) To finish an Instructor-led syllabus, the Instructor should click the **advancement arrow** on the final step in the Syllabus widget, and then click **Yes** in the pop-up that appears. ![](/assets/images/LMS_Syllabus_043-8918ca96318c564bfcc349eb23a5b64d.png) The Instructor will be presented with a list of students who were in the Region at any point during the session. The Instructor has discretion as to whether a particular student should be marked as having completed the course. By default, all students are marked as completed. Click the **toggle** located to the right of any student name to disqualify that student from accreditation, and then click **Submit**. #### Creating a student-led syllabus[​](#creating-a-student-led-syllabus "Direct link to Creating a student-led syllabus") After designating a syllabus as student-led, either during [initial setup](/breakroom-for-training/syllabuses.md#adding-a-syllabus) or through [changing the syllabus settings](/breakroom-for-training/syllabuses.md#editing-a-syllabus), you will need to manually edit the [Breakroom LMS Core](/breakroom-for-training/installing-breakroom-for-training.md) in order to make the syllabus available to students within your chosen Region. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). To finalize a student-led syllabus, follow these steps. 1. Navigate your avatar to the Region where you want the student-led syllabus to be available. 2. Open the [Region Editor](https://docs.breakroom.tech/customization/using-the-region-editor) by clicking the **Edit Region button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, search for the **Breakroom LMS Core object**. Click on it in order to highlight it. The [Inspector window ](/creating-custom-experiences/using-the-region-editor.md#the-inspector-window)will launch for that object. 5. In the Inspector window, click the **> arrow** located to the left of the **RoomFurniture component**. ![](/assets/images/LMS_Syllabus_044-4d4e232900adc0659a35818921a44ef1.png) *Highlighted: The location of the Autostart Course and Autostart Syllabus fields under the Breakroom LMS Core RoomFurniture component.* 6. In the **Autostart Course name field**, type the name of the course containing the student-led syllabus you want to run. 7. In the **Autostart Syllabus field**, type the name of the student-led syllabus you want to run. If you enter the name of an Instructor-led syllabus, it will do nothing. warning The course and syllabus names must match those used on the Dashboard exactly, including punctuation marks and spacing. We recommend cutting and pasting the names directly from the Dashboard for improved accuracy and convenience. Once you're satisfied, click the **Save button** to store your changes and the **Close button** to exit the Region Editor. Anyone entering the Region will automatically enter into a single-user, student-led syllabus experience. For more information about interacting with [Breakroom for Training as a student](/getting-started/using-breakroom-for-training.md), please see our [Getting Started section](/getting-started.md). tip The ideal use case for a student-led syllabus is in a Region that shards for each user, so that the Region experience is wholly devoted to that user. This is not necessary, strictly speaking, and will depend on your chosen course design and objectives. However, a syllabus in which the Region itself plays a central roleβ€”such as by changing shapes, layouts, lighting, props, and so forthβ€”may offer a suboptimal experience if multiple users are engaged with the environment at the same time. --- ### Waivers [YouTube video player](https://www.youtube.com/embed/l8FdH6ApPpQ?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) #### Overview[​](#overview "Direct link to Overview") Waivers allow instructors to present written information to students within the Breakroom platform, and gather student consent or feedback based on context. Waivers can be used for content disclosures, copyright information, touchpoints, etc. This page discusses the creation and management of waivers on the backend via Dashboard. For more information about administering and reviewing waivers in the Breakroom for Training environment, please see our [Instructor orientation](/breakroom-for-training/instructor-orientation.md). #### Creating waivers[​](#creating-waivers "Direct link to Creating waivers") ![](/assets/images/LMS_Dashboard_016-0743826bd7e6d9ccfe6d3283850d51a8.png) *Pictured: The Dashboard > Learning Management > Course > Add New Waiver window. Note the Upload Background Image button in the upper right corner.* info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. Breakroom for Training course content is created and managed through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). To add a waiver to any of your existing [courses](/breakroom-for-training/creating-and-managing-courses.md), follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you would like to edit. 3. Click the **Create button** in the top right corner, and select **Waiver** from the drop-down menu. 4. Enter a **name** and **description** for your waiver. 5. If you like, you can change the waiver header by following these steps: 1. Click the **vertical ellipses icon** in the upper right corner, and then click **Upload Background Image.** 2. Click the **Upload Image button** to add an image to launch a standard file selection window on your computer. Select the image you want to use, and click **Okay**. 3. Alternately, click the **"Select from Our Course Image Templates" link** to choose a basic color or generic image. 6. Check the boxes beside the default **Agree** and **Disagree reactions**, or enter your own reaction text. 7. When you are satisfied, click the **Save button**. When waivers are first created, they are deactivated by default. To activate or deactivate a waiver, click the **On / Off Toggle** located in the top right corner of the waiver card. Active waivers are live on your Breakroom World and can be accessed by students and Instructors. Deactivated waivers are inaccessible to students and Instructors, but World Owners and World Administrators can still edit their contents via the Dashboard. #### Editing waivers[​](#editing-waivers "Direct link to Editing waivers") ![](/assets/images/LMS_Dashboard_017-923fe7302091adbfaa45c9f4f23a5363.png) *Highlighted: The location of the waiver editing functions.* In the top right corner of each waiver card, you'll see a **vertical ellipses icon**. Clicking on this will open a menu containing waiver editing functions. Here's an overview of the associated UI. | Button or function | Purpose | | ------------------- | --------------------------------------------------------------------------------- | | On / Off toggle | Activates or deactivates the waiver. | | View Waiver Content | Allows you to review the waiver and all response options. | | Edit Waiver Content | Allows you to make changes to the waiver. | | Duplicate | Creates a copy of the waiver in the same course. | | Archive | [Archives](waivers#archiving-quizzes-and-waivers) the waiver without deleting it. | #### Reviewing waiver responses[​](#reviewing-waiver-responses "Direct link to Reviewing waiver responses") ![](/assets/images/LMS_Dashboard_018-989608d6e4e62d17d19ca9104f3096e2.png) *Pictured: An example waiver response window.* Student responses to waivers, including the response date and time, can be viewed following the steps below. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab**, then click on the **course** you want to review. 3. Click the **Agree/Decline button i**n the bottom right corner of the relevant waiver card. 4. In the response window that appears, you can use the **search field** to locate a specific student, and filter all responses using the **All Status drop-down menu**. #### Archiving waivers[​](#archiving-waivers "Direct link to Archiving waivers") [YouTube video player](https://www.youtube.com/embed/Py0_4Ji8stI) Waivers can be archived, which deactivates them and prevents their contents from being edited. This preserves their contents for future use. To archive a waiver, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **vertical ellipses icon** in the relevant waiver card, and select **Archive** from the menu that appears. To locate an archived waiver and make it accessible again, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **Learning Management tab,** then click on the **course** you want to edit. 3. Click the **Filter button** in the top right corner. In the menu that appears, check the **Archived List option**. This will reveal all of your archived materials. 4. Locate the waiver you want to unarchive. You can use the **search field** to streamline this process. Click the **vertical ellipses icon** in the card, and select **Unarchive** in the menu that appears. 5. To display all of your active and inactive course materials, click the **Filter button** again and check the box beside the **Show All option**. When course materials are unarchived, they are deactivated. To activate a waiver, click the **On / Off toggle** in the upper right corner of the material card. --- ## Building New Worlds ### BUILDING NEW WORLDS #### [πŸ“„οΈBreakroom Dashboard tour](/building-new-worlds/breakroom-dashboard-tour.md) [You've got a whole World to play withβ€”so let's start from the top. Use the Breakroom Dashboard to customize settings, manage user accounts, and access helpful analytics.](/building-new-worlds/breakroom-dashboard-tour.md) --- ### Breakroom Dashboard tour [YouTube video player](https://www.youtube.com/embed/mXJ8cHAgNIQ?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) #### Overview[​](#overview "Direct link to Overview") When it comes to managing your subscription and making high-level decisions about your virtual World, Breakroom's Dashboard is designed to make things easy. This quick-start guide will show you how to access your Dashboard and locate the information you need. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. While World Owners can edit every feature described in this section, World Administrators have [limited permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md). #### Accessing your Dashboard [](#accessing-your-dashboard)[​](#accessing-your-dashboard- "Direct link to accessing-your-dashboard-") To see your Dashboard, log in to your Breakroom account by clicking the **Log In button** located in the top right corner of the [Breakroom homepage](https://www.breakroom.net/). Alternatively, you can log in via [Curator](https://curator.sine.space/) by following the steps outlined below. ![The Curator page. The Worlds tab is live, listing one active World and displaying associated details.](/assets/images/Dashboard_Tour_001-c49a32e3c484f619cc568b2d919d6017.png) *Pictured: The Worlds tab on Curator.* 1. Visit the [Curator](https://curator.sine.space/) login page. 2. Enter your login credentials and click the **Sign In button**. 3. Click the **Worlds tab** at the top of the page. 4. Navigate to the World you want to edit and click the **Dashboard button** located in the lower right corner. #### The Dashboard tabs[​](#the-dashboard-tabs "Direct link to The Dashboard tabs") ##### Dashboard[​](#dashboard "Direct link to Dashboard") ![The main Dashboard tab. Several widgets are visible, including one displaying user analytics and the current World Credit Balance. On the left side, other Dashboard tabs are arranged in a vertical column.](/assets/images/Dashboard_Tour_002-61a499f0e1cc654f9517477d4b1998b5.png) *Pictured: The Dashboard tab.* The main Dashboard tab contains a number of widgets and quick links to other areas of the Dashboard. In terms of live information, here you can review: * Your [seat](/opening-the-doors/seats-and-concurrency.md) usage and information about your [Daily Passes](/opening-the-doors/seats-and-concurrency.md) * Your [World Credit](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md) balance * Your subscription status and your next billing date * Your basic [analytics](/building-new-worlds/breakroom-dashboard-tour.md#analytics) * Your [branding](/creating-custom-experiences/branding-tools.md) status * Links to your personal [World Stream URL](/opening-the-doors/world-stream.md) and your [desktop applications](/opening-the-doors/desktop-viewers.md) ##### World Customization[​](#world-customization "Direct link to World Customization") ![The World Customization tab. This tab expands into several sub-tabs, and defaults to the Basic Information tab. There are fields where you can enter a new World Name, World Description, or adjust branding options.](/assets/images/Dashboard_Tour_003-b5edc38e1bf901efe9270417a9149396.png) *Pictured: The World Customization > Basic Information tab.* The World Customization tab automatically expands into a number of subtabs. Here you can enter a name and description for your World, upload [branding](/creating-custom-experiences/branding-tools.md) images, make changes to the [Sinewave Shop filters](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md) and [UI](/getting-started/ui-tour.md), and customize your [Regions](/building-new-worlds/creating-and-managing-regions.md) and [starter avatars](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md). The following mini-FAQ contains more information about the features available under each tab. ###### **Basic Information**[​](#basic-information "Direct link to basic-information") [How can I change my World name and description?](https://youtu.be/mXJ8cHAgNIQ?feature=shared\&t=12)
[How can I brand my apps and login screen?](/creating-custom-experiences/branding-tools.md)
[How can I publish a custom Privacy Policy or EULA?](/opening-the-doors/privacy-policies-eulas-and-data-collection.md#adding-a-custom-privacy-policy)
[How can I turn GDPR/CCPA data compliance on or off?](/opening-the-doors/privacy-policies-eulas-and-data-collection.md#turning-data-collection-on-or-off)
[How can I customize the user data I collect?](/opening-the-doors/privacy-policies-eulas-and-data-collection.md#managing-end-user-data-collection)
[How can users grant or revoke consent for data collection?](/getting-started/settings.md#analytics-and-marketing-preferences-settings) ###### **Features**[​](#features "Direct link to features") [How can I customize which parts of the UI my users see?](/creating-custom-experiences/ui-customization-options.md)
[How can I filter the contents of the Sine Wave Shop for my users?](/creating-custom-experiences/filtering-the-sinewave-shop.md)
[How can I change which in-world currencies my users see?](/creating-custom-experiences/filtering-the-sinewave-shop.md#silver-and-gold-currencies)
[How can I change the default scale of the UI for every user on my World?](/creating-custom-experiences/ui-customization-options.md#changing-the-default-ui-scale) ###### **Regions**[​](#regions "Direct link to regions") [How can I create, edit, and delete Regions?](/building-new-worlds/creating-and-managing-regions.md)
[How can I enable a Region?](/building-new-worlds/creating-and-managing-regions.md#enabling-a-region)
[How can I feature a Region?](/building-new-worlds/creating-and-managing-regions.md#featuring-a-region)
[How can I select a Default Landing Region?](/building-new-worlds/default-landing-and-orientation-regions.md#default-landing-regions)
[How can I create an Orientation Region?](/building-new-worlds/default-landing-and-orientation-regions.md#orientation-regions) ###### **Avatars**[​](#avatars "Direct link to avatars") [How can I change which starter avatars my users see?](/creating-custom-experiences/selecting-default-avatars.md) ###### **Color Theme**[​](#color-theme "Direct link to color-theme") [How can I change the UI color scheme?](/creating-custom-experiences/ui-customization-options.md#customizing-the-ui-colors) ###### **World Access**[​](#world-access "Direct link to world-access") [How can I enable self-registration for my users?](/opening-the-doors/creating-and-managing-user-accounts.md#enabling-self-registration)
[How can I set up single sign-on (SSO)?](/opening-the-doors/creating-and-managing-user-accounts/single-sign-on.md) ##### World Credits[​](#world-credits "Direct link to World Credits") ![The World Credits tab. The account\'s World Credit balance is displayed, along with transaction and usage history.](/assets/images/Dashboard_Tour_004-0c4c77b4b36bf1c7628bc0d21aa51ea2.png) *Pictured: The World Credits tab.* The World Credits tab is where you can track your World Credit transactions, manage your World Credit purchase cap, and generate detailed transaction history and World Stream access reports. [How can I purchase World Credits?](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#purchasing-world-credits)
[How can I set a World Credit monthly purchase cap for my team?](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#setting-world-credit-purchase-limits)
[How can I find my World Credit transaction history?](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#generating-world-credit-transaction-and-usage-reports)
[How can I track World Stream usage?](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#generating-world-credit-transaction-and-usage-reports) ##### Manage Users[​](#manage-users "Direct link to Manage Users") ![The Manage Users tab. User summaries are displayed, along with the tools required to manage user accounts.](/assets/images/Dashboard_Tour_005-5d04a27f8cc467b8e9daceae5c1e6968.png) *Pictured: The Manage Users tab.* The Manage Users tab is where you can add users to your account, assign them special administrative permissions, and monitor how your seats are being used. You can also purchase and manage Daily Passes. [How can I manually create user accounts?](/opening-the-doors/creating-and-managing-user-accounts.md#adding-individual-users)
[How can I import user accounts in bulk?](/opening-the-doors/creating-and-managing-user-accounts.md#importing-and-exporting-user-lists)
[How can I export user account data?](/opening-the-doors/creating-and-managing-user-accounts.md#exporting-existing-users-as-a-csv-file)
[How can I purchase and manage Daily Passes?](/opening-the-doors/seats-and-concurrency.md#daily-passes)
[How can I assign or revoke World-level user permissions?](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#assigning-and-revoking-advanced-world-level-permissions) ##### World Stream[​](#world-stream "Direct link to World Stream") ![The World Stream tab. The account\'s server type is displayed, along with tools to control World Stream access.](/assets/images/Dashboard_Tour_006-9fd3857733e7f7c3fc76635cf3e7f560.png) *Pictured: The World Stream tab.* The World Stream tab is where you can find usage statistics for your account, impose caps on World Stream usage, pre-allocate server time for events, and manage your server type. [How can users log in via World Stream?](/opening-the-doors/world-stream.md#launching-world-stream)
[What are the different World Stream server types?](/opening-the-doors/world-stream.md#world-stream-server-types)
[How can I set caps on World Stream usage?](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#setting-world-stream-usage-limits)
[How can I pre-allocate a fleet of servers for my planned event?](/opening-the-doors/world-stream/pre-allocation-campaigns.md) ##### Integration[​](#integration "Direct link to Integration") ![The Integration tab. This tab expands into several sub-tabs, and defaults to the Eventbrite tab. Tools and instructions for Eventbrite integration are visible.](/assets/images/Dashboard_Tour_007-7b7c307a37d5eb75bd80498a275b46e4.png) *Pictured: The Integration > Eventbrite tab.* The Integration tab allows you to use [Eventbrite](https://www.eventbrite.com/) to coordinate access to your virtual events. You can find more information and instructions in our [Opening the Doors section](/opening-the-doors/creating-and-managing-user-accounts/eventbrite-integration.md). ##### Learning Management[​](#learning-management "Direct link to Learning Management") ![The Learning Management tab. Two active courses are displayed here, along with functions relating to student recordkeeping.](/assets/images/Dashboard_Tour_014-13edc0d0325aa17de30dffd0237b1bbe.png) *Pictured: The Learning Management tab.* The Learning Management tab allows you to create and manage online educational courses using the Breakroom for Training system. [How can students use the Breakroom for Training system?](/getting-started/using-breakroom-for-training.md#as-a-student)
[How can Instructors log in and administer courses using the Breakroom for Training system?](/getting-started/using-breakroom-for-training.md#as-an-instructor)
[How can I create a new course?](/breakroom-for-training/installing-breakroom-for-training.md#creating-and-managing-courses)
[How can I activate, deactivate, or archive a course?](/breakroom-for-training/installing-breakroom-for-training.md#activating-and-deactivating-courses)
[How can I add quizzes and waivers to my course?](/breakroom-for-training/installing-breakroom-for-training.md#quiz-question-types)
[How can I add the Breakroom for Training system to a Region?](/breakroom-for-training/installing-breakroom-for-training.md#installing-the-breakroom-lms-core-in-a-region) ##### Media Library[​](#media-library "Direct link to Media Library") ![The Media Library tab. Several images and videos are previewed, displayed in a responsive tile carousel.](/assets/images/Dashboard_Tour_015-c230b21c2dfb57fff0ea63992e192907.png) *Pictured: The Media Library tab.* The Media Library tab allows you to upload, view, and delete [image and video files](/creating-custom-experiences/managing-your-media-library.md) linked to your Breakroom account. ##### Billing[​](#billing "Direct link to Billing") ![The Billing tab. Subscription information, order history, and saved financial information fields are visible.](/assets/images/Dashboard_Tour_008-0fa2bea5ea9eb1cacec7581f999a222b.png) *Pictured: The Billing tab.* The Billing tab allows you to manage and upgrade your current subscription and support plans, review your order history, access previous invoices, and edit your payment details. ##### Your Apps[​](#your-apps "Direct link to Your Apps") ![The Your Apps tab. Links to generate and download a personalized desktop app, as well as links to World Stream and to the the SDK, are visible.](/assets/images/Dashboard_Tour_009-a393aff63b0372ef10aa99de4365bb7e.png) *Pictured: The Your Apps tab.* The Your Apps tab is where you can find download links for your custom Breakroom [desktop applications](/opening-the-doors/desktop-viewers.md) (and, for advanced users, the [Breakroom SDK](/release-notes/breakroom-sdk.md)). ##### Analytics[​](#analytics "Direct link to Analytics") ![The Analytics tab. Date pickers allow you to specify a time period and generate a report.](/assets/images/Dashboard_Tour_010-2a3663c261bcb226f345810f79104bdd.png) *Pictured: The Analytics tab.* The Analytics tab allows you to generate reports that offer insight into how your World is being accessed. You can find more information and instructions in our [Opening the Doors section](/building-new-worlds/breakroom-dashboard-tour.md#analytics). ##### Support Tickets[​](#support-tickets "Direct link to Support Tickets") ![The Support Tickets tab. A blank support ticket form is visible.](/assets/images/Dashboard_Tour_011-156f266296bde6df5be03520c869993b.png) *Pictured: The Support Tickets tab.* The Support Tickets tab allows you to submit and manage [ticketed requests](/help/where-to-find-support.md#contacting-the-customer-success-team) for assistance. Please note that while you can elect to mark your ticket as low, medium, high, or emergency priority, response times may vary. You can learn more by reviewing the [Breakroom Terms of Service](https://docs.breakroom.tech/v/legal-2/terms-of-service). ##### Knowledge Base[​](#knowledge-base "Direct link to Knowledge Base") The Knowledge Base tab contains quick links to relevant [GitBook](#) articles and documentation. ##### Activity Log[​](#activity-log "Direct link to Activity Log") ![The Activity Log tab. An example activity log lists such tasks as \'deleted a user\' and \'enabled a region,\' identifying the account that took the action and the date it was performed.](/assets/images/Dashboard_Tour_012-b15b12fd2837caf54103f4526d445019.png) *Pictured: The Activity Log tab.* The Activity Log tab allows you to keep track of key changes made to your Breakroom World or account, noting the time, type, and author of each change. You can also export change reports by type or date range. ##### Settings[​](#settings "Direct link to Settings") ![The Settings tab. A toggle notes that the current World is online.](/assets/images/Dashboard_Tour_013-a9f0cd91df33090805f6daa2dc5e4228.png) *Pictured: The Settings tab.* The Settings tab allows you to toggle your [World availability](/opening-the-doors/toggling-world-availability.md), including booting any users who may be currently logged in. --- ### Creating and managing Regions [YouTube video player](https://www.youtube.com/embed/lopbVUHpt7o) #### Overview[​](#overview "Direct link to Overview") Every Breakroom World consists of one or more Regions, or self-contained virtual "rooms." To help you get started, we offer a variety of plug-and-play [Region templates](/building-new-worlds/region-template-descriptions.md) that come fully equipped with decorations, signage, and Breakroom's robust [conference system](/getting-started/using-the-conference-system.md). [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can create and manage these Regions via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). Once you understand how to deploy pre-built Regions, you can customize them by [adding](/creating-custom-experiences/using-the-region-editor.md) your own virtual objects and media. Breakroom provides a [Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md) of in-world branding and media components such as video players, free-standing browser panels, interactive posters, and more. #### Viewing your Regions[​](#viewing-your-regions "Direct link to Viewing your Regions") ![The World Customization \> Regions tab on Dashboard, featuring eight Region cards.](/assets/images/Creating_Managing_Regions_001-f7f4fb977d902f065a4c7e094aef8e12.png) *Pictured: The Dashboard > World Customization > Regions tab.* You can view all of the Regions you have created under the [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md) **> World Customization > Regions tab**. When you purchase a Breakroom subscription, your World will be activated and populated by a single [Default Landing Region](/building-new-worlds/default-landing-and-orientation-regions.md). Because your subscription includes an unlimited number of Regions, you can add and [enable](/building-new-worlds/creating-and-managing-regions.md#enabling-regions) additional Regions as needed. [Featuring](/building-new-worlds/creating-and-managing-regions.md#featuring-a-region) your Regions will make them easy for your users to find. info By default, Regions can accommodate up to 500 simultaneous users. #### Creating a new Region[​](#creating-a-new-region "Direct link to Creating a new Region") ![The Create Region panel, featuring fields that allow you to customize a Region\'s name, description, loading image, and template. Instructions for using this panel are described in detail below.](/assets/images/Creating_Managing_Regions_002-addfafdcca202c1ccaaa6289aa278348.png) *Pictured: The Create Region panel.* To create a new Region, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Click the **Create Region button**. This will launch the **Create Region panel.** 4. In the Create Region panel, start by giving your Region a name and a description. 5. Next, choose a [Region template](/building-new-worlds/region-template-descriptions.md). If you have uploaded any [custom Regions](/advanced-tutorials/uploading-your-own-region.md), you can find them by using the **Template drop-down menu** to show *All Templates* or *Uploaded Templates.* (Tip: You can also use the search bar to locate a Region template by name.) 6. Finally, if you want to replace the loading image (which will be displayed in the [Explore window](/exploring-breakroom/using-the-explore-window.md) and appear while users are teleporting to the Region), you can do so by clicking the **Browse button**. This will launch a standard file import window. Find the image you want to use on your computer, click on it to select it, and then click the **Open button**. 7. When you are finished, scroll down and click the **Create button**. It's important to note that new Regions created through the Dashboard are *not* enabled or featured by default, which means that usersβ€”including the World Ownerβ€”will not be able to locate or access them when logged in. To make Regions accessible, you will need to [enable](/building-new-worlds/creating-and-managing-regions.md#enabling-regions) and/or [feature](/building-new-worlds/default-landing-and-orientation-regions.md) them. info Breakroom supports JPG and PNG images. The recommended dimensions for loading images are 1920x1080, or a 2:1 ratio, with a maximum file size of 5MB. warning Note: You **can** use the Dashboard to create multiple Regions that use the same base [template](/building-new-worlds/region-template-descriptions.md). However, once you customize a Region, those details will not copy over to new Regions made from the same template. #### Editing Region details[​](#editing-region-details "Direct link to Editing Region details") ![A closeup of a Desert Island Region card, with the location of the Edit Region action highlighted in orange.](/assets/images/Creating_Managing_Regions_003-4b48f666e8c908b5dd455c94a7ad9154.png) *Highlighted: The Edit Region button.* To make changes to a Region after you have created it, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Region you want to edit and click on the **vertical ellipses icon** in the Region card. 4. In the action menu that appears, click **Edit Region**. This will take you back to the **Create Region panel**. 5. Perform your desired changes. You can enter a new name, edit the description, upload a new loading image, or select a new Region template. 6. When you are finished, click the **Save button**. danger If you use the Edit Region function to change a Region's default template, all changes made to the previous template will be deleted. *Your deleted changes will be unrecoverable.* Please think carefully before taking this step. ##### Locating a Region ID [](#locating-region-ids)[​](#locating-a-region-id- "Direct link to locating-a-region-id-") Each Region in your World has a unique ID number. If you need to locate and copy this number, you can do so by following these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the **Region ID** you need. This number is displayed in the associated Region card. 4. To copy a Region ID to your clipboard, click the **copy icon** located to the right of the ID number. #### **Enabling a Region**[​](#enabling-a-region "Direct link to enabling-a-region") ![A closeup of a newly created Region card. The action menu is open, showing that the Region is not Enabled, Featured, or in any way activated.](/assets/images/Creating_Managing_Regions_004-07bc2cc0cb06acca6b3734b9de4fb3ba.png) *Pictured: A brand new Region. Note how it is not enabled, featured, or set as a Default Landing Region.* When Regions are first created, they are not automatically enabled. In order to access a Region or make it available to other users, you will first need to enable it through the Dashboard or the Breakroom viewer. Once enabled, users can [search](/getting-started/ui-tour.md#the-top-toolbar) for a Region if they know it exists, but may not otherwise be able to easily discover it. This can prove usefulβ€”for example, if you want to set up private areas for VIP functions. To make a Region easier for users to find, you may want to [feature](/building-new-worlds/creating-and-managing-regions.md#featuring-a-region) it. ##### Through the Dashboard [](#enabling-regions-through-the-dashboard)[​](#through-the-dashboard- "Direct link to through-the-dashboard-") You can enable a Region through the Dashboard by following these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Region you want to enable. In the lower right corner of the Region card, you will see the **"Enable Region" toggle**. 4. Click this toggle **on** to enable the Region. You will see the Region loading image display in full color to indicate that the Region is enabled and accessible. ##### Through the viewer[​](#through-the-viewer "Direct link to Through the viewer") ![A closeup of the Region List window, with several Region cards and their associated buttons displayed.](/assets/images/Creating_Managing_Regions_005-698c4babd9e6184a77db3b6d89d8c470.png) *Pictured: An example of how the Region List window may appear.* You can enable a Region through the viewer by following these steps. 1. Click on the **Regions button** located in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). This will launch the Region List window. 2. Locate the Region you want to enable and click the **Enable button.** You will see the **Enter button** display in full color to indicate that the Region is now enabled and accessible. ##### Disabling a Region[​](#disabling-a-region "Direct link to Disabling a Region") To disable a Region through the Dashboard, repeat the steps [outlined above](/building-new-worlds/creating-and-managing-regions.md#enabling-regions-through-the-dashboard). After you toggle the **"Enable Region" option** off, you will see the Region loading image desaturate and the toggle return to white. These visual cues indicate that the Region is now disabled. To disable a Region through the viewer, repeat the steps [outlined above](/building-new-worlds/creating-and-managing-regions.md#through-the-viewer) and click the **Disable button** in the Region List window. info Any custom changes you make to a Region will be preserved if you disable it *without* deleting it. This gives you the ability to create, store and activate custom Regions as necessary. #### Featuring a Region[​](#featuring-a-region "Direct link to Featuring a Region") ![A closeup of the Explore window, with twelve different Region listing cards. Each card features an \'Enter\' button for easy teleport access.](/assets/images/Explore_Window_002-c2c476fdcd6867b9596f795bf20443da.jpg) *Pictured: The Explore window.* Featured Regions will appear under the **Featured tab** in the [Explore window](/exploring-breakroom/using-the-explore-window.md), making them easier for users to discover. You can feature a Region by following these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Region you want to feature. (Tip: If you know the Region name, you can enter it into the **search field**.) 1. When you find the Region you want to feature, make sure that the ["Enable Region" option](/building-new-worlds/creating-and-managing-regions.md#enabling-a-region) is toggled on. 4. Click on the **vertical ellipses icon** in the Region card. In the action menu that appears, toggle the **"Featured" option** on. On the Dashboard, Featured Regions will be indicated by a star icon in the top left corner of the Region card, as pictured below. ![A Breakroom Delphi Region card. An orange star icon in the topmost left corner indicates that this is a Featured Region.](/assets/images/Creating_Managing_Regions_006-7e779416e2e0c86fb8f813b8acca0988.png) *Pictured: A Region card on the Dashboard. The star icon shows that this is a Featured Region.* ##### Deactivating Featured Regions [](#deactivating-featured-regions)[​](#deactivating-featured-regions- "Direct link to deactivating-featured-regions-") To return a Featured Region to [enabled](/building-new-worlds/creating-and-managing-regions.md#enabling-a-region) status, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Featured Region you want to deactivate. (Tip: If you know the Region name, you can enter it into the **search field**.) 4. Click on the **vertical ellipses icon** in the Region card. In the action menu that appears, toggle the **"Featured" option** off. ##### Hiding Featured Regions[​](#hiding-featured-regions "Direct link to Hiding Featured Regions") Users with advanced [Region-level permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) can prevent a Region they administrate from appearing in search or the Explore window, even if that Region has been featured using the Dashboard, by following these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click the **Region Information button** located above the mini map. 3. Click the **Edit button** in the Permissions panel. 4. Check the box beside the **"Hide the Region from search and Explore etc." option**. 5. Click the **Save button**. To make a Featured Region viewable again, repeat these steps and **uncheck** the "Hide the Region from search and Explore etc." option. #### Deleting a Region[​](#deleting-a-region "Direct link to Deleting a Region") To delete a Region after you have created it, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Region you want to edit and click on the **vertical ellipses icon** in the Region card. 4. In the action menu that appears, click **Remove**. 5. In the confirmation pop-up that appears, click **Yes**. warning Note: You must always have at least one active [Default Landing Region](/building-new-worlds/default-landing-and-orientation-regions.md). Your final Default Landing Region is protected, and cannot be disabled *or* deleted. To disable it, you will first need to appoint another Region as its replacement. To delete a Default Landing Region, you will first need to toggle its "Set as Default Landing" status to **off**. --- ### Default Landing and Orientation Regions #### Overview[​](#overview "Direct link to Overview") Default Landing and Orientation Regions are the areas where users will arrive upon login. Default Landing Regions can be used to funnel users toward a specific area, or to distribute visitor "traffic" across multiple arrival points. Orientation Regions allow [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) to activate a no-code, interactive presentation for newcomers so they can hit the virtual ground running. #### Default Landing Regions[​](#default-landing-regions "Direct link to Default Landing Regions") Default Landing Regions can be as unique as your Breakroom World. You might make your Default Landing Region the main gathering point of your eventβ€”for example, a bustling exposition hall. You could also make your Default Landing Region something fun and casual, providing [new users](/getting-started.md) with a safe place to explore Breakroom's features and customize their avatars. If you prefer, you can enable *multiple* Default Landing Regions in the same World. In such cases, users will be evenly distributed between your active Default Landing Regions. This can be a convenient way to manage crowd logistics, especially if you are running a Metaverse event that calls for many people to log in at the same time. info By default, Regions can accommodate up to 500 simultaneous users. ##### Activating a Default Landing Region[​](#activating-a-default-landing-region "Direct link to Activating a Default Landing Region") After [creating ](/building-new-worlds/creating-and-managing-regions.md#creating-a-new-region)and [enabling](/building-new-worlds/creating-and-managing-regions.md#enabling-a-region) a Region, you can make it a Default Landing Region by following these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Region you want to turn into a Default Landing Region. (Tip: If you know the Region name, you can enter it into the **search field**.) 1. When you find the Region you want to use, make sure that the ["Enable Region" option](/building-new-worlds/default-landing-and-orientation-regions.md#enabling-a-region) is toggled on. 4. Click on the **vertical ellipses icon** in the Region card. In the action menu that appears, toggle the **"Set as Default Landing" option** on. 5. If you already have a Default Landing Region, a pop-up will appear asking you to confirm whether you want to create an *additional* Default Landing Region. Click the **Confirm button** to do so. On the Dashboard, Default Landing Regions will be indicated by a house icon in the top left corner of the Region card, as pictured below. ![A Breakroom Delphi Region card. An orange house icon in the top left corner indicates that this is a Default Landing Region.](/assets/images/Creating_Managing_Regions_006-7e779416e2e0c86fb8f813b8acca0988.png) *Pictured: A Region card on the Dashboard. The house icon shows that this is a Default Landing Region.* ##### Deactivating a Default Landing Region[​](#deactivating-a-default-landing-region "Direct link to Deactivating a Default Landing Region") To deactivate a Default Landing Region, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Default Landing Region you want to deactivate. (Tip: If you know the Region name, you can enter it into the **search field**.) 4. Click on the **vertical ellipses icon** in the Region card. In the action menu that appears, toggle the **"Set as Default Landing" option** off. warning Note: You must always have at least one active [Default Landing Region](/building-new-worlds/default-landing-and-orientation-regions.md). Your final Default Landing Region is protected and cannot be disabled *or* deleted. To disable it, you will first need to appoint another Region as its replacement. To delete a Default Landing Region, you will first need to toggle its "Set as Default Landing" status to **off**. #### Orientation Regions[​](#orientation-regions "Direct link to Orientation Regions") If you want to provide platform training for first-time Breakroom users, you can create one or more Orientation Regions using the [Breakroom Orientation Quest](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-orientation-quest.md). First-time users will be directed toward one of your Orientation Regions upon login and will not be able to exit that Region until they have successfully completed the orientation program. Instructions for installing the [Breakroom Orientation Quest](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-orientation-quest.md) can be found in our [Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md) documentation. After you have added the Breakroom Orientation Quest object to a Region, you can then finish setup by following the steps below. ##### Activating an Orientation Region[​](#activating-an-orientation-region "Direct link to Activating an Orientation Region") After[ creating ](/building-new-worlds/creating-and-managing-regions.md#creating-a-new-region)and [enabling](/building-new-worlds/creating-and-managing-regions.md#enabling-a-region) a Region and installing the [Breakroom Orientation Quest](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-orientation-quest.md) object, you can make it an official Orientation Region by following these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Region you want to turn into an Orientation Region. (Tip: If you know the Region name, you can enter it into the **search field**.) 1. When you find the Region you want to use, make sure that the ["Enable Region" option](/building-new-worlds/default-landing-and-orientation-regions.md#enabling-a-region) is toggled on. 4. Click on the **vertical ellipses icon** in the Region card. In the action menu that appears, toggle the **"Set as Orientation" option** on. 5. If you already have an Orientation Region, a pop-up will appear asking you to confirm whether you want to create an *additional* Orientation Region. Click the **Confirm button** to do so. On the Dashboard, Orientation Regions will be indicated by a signpost icon in the top left corner of the Region card, as pictured below. ![A Breakroom Azalea Garden Region card. An orange signpost icon in the top left corner indicates that this is an Orientation Region.](/assets/images/Creating_Managing_Regions_007-ef52d661f90736f37bf1a23a5252a76f.png) *Pictured: A Region card on the Dashboard. The signpost icon shows that this is an Orientation Region.* ##### Deactivating an Orientation Region[​](#deactivating-an-orientation-region "Direct link to Deactivating an Orientation Region") To deactivate an Orientation Region, follow these steps. 1. Navigate to your [**Dashboard**](/building-new-worlds/breakroom-dashboard-tour.md#accessing-your-dashboard). 2. Click on the **World Customization >** **Regions tab**. 3. Locate the Orientation Region you want to deactivate. (Tip: If you know the Region name, you can enter it into the **search field**.) 4. Click on the **vertical ellipses icon** in the Region card. In the action menu that appears, toggle the **"Set as Orientation" option** off. 1. If you only have one Orientation Region, a pop-up will appear asking you to confirm your decision. Click the **Confirm button** to do so. --- ### Region settings #### Overview[​](#overview "Direct link to Overview") The Region Information window can be viewed by anyone, and contains useful information for Region visitors. Users with advanced [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions can also find Region access, user moderation, and media tools in this window. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every function described in this section. #### Opening the Region Information window[​](#opening-the-region-information-window "Direct link to Opening the Region Information window") ![A closeup of the Breakroom UI mini map, showing a top-down view of the Conference Region.](/assets/images/Breakroom_GETTING_STARTED_UI_Tour_006_2026-ab87f43cb03caaf75bf54fc75b05b199.jpg) *Pictured: The mini map.* You can open the Region Information window by clicking on the in-world **\[mini map]**(../getting-started/ui-tour#the-mini-map). Users can access this window in any Region where the mini map is [enabled](/creating-custom-experiences/ui-customization-options.md). ![A closeup of the main buttons in the Region Information window. This window lists information about the Region, its Administrators, and its permission settings.](/assets/images/Region_Settings_002-791ea1501fd418cd6ec506c9a2456677.png) *Pictured: An example Region Information window.* In addition to reviewing the Region's name, description, and permissions settings, users can also "Like" the Region or create a [bookmark](/exploring-breakroom/bookmarks-and-teleport-invites.md) so they can easily return. The Region Owner and Administrators are identified in the **List of Admins** section, giving users a way to reach out for assistance. #### Changing Region settings and permissions[​](#changing-region-settings-and-permissions "Direct link to Changing Region settings and permissions") ![A closeup of the main buttons featured in the Region Information window. The Edit Profile button is highlighted in bright blue.](data:image/png;base64,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) *Pictured: The Region Information window buttons. The Edit Profile button is highlighted.* In addition to the universal functionality described above, [Region Owners](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) and [Region Administrators](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) can access advanced Region settings by clicking the **Edit Profile button**. ![A closeup of the Region settings available to Region Owners and Region Administrators. Options listed in this window are described below.]() *Pictured: An example of the Region settings available to Region Owners and Region Administrators.* Here team members can: * Edit basic information about the Region, such as its name and description * Choose a Region-wide [audio stream](/building-new-worlds/region-settings.md#region-wide-audio-streams), or turn it off * Control who can [access](/building-new-worlds/region-settings.md#controlling-region-access) the Region * Control who can spawn items, and how long those items will exist in the Region before they are automatically deleted * Control who can use [voice chat](/getting-started/using-the-conference-system.md#voice-chat), or [disable voice chat altogether](/running-your-event/understanding-the-conference-system/voice-chat-and-spatial-audio.md) * Control whether the Region shows up in search or can be found via the [Explore window](/building-new-worlds/creating-and-managing-regions.md#hiding-featured-regions) Most of these advanced settings can be enabled by checking the box beside the setting and then clicking the **Save button**. To disable a setting, uncheck the relevant box and then click the **Save button** again. For more detailed information about Region access settings, please review the [relevant section](/building-new-worlds/region-settings.md#controlling-region-access) on this page. #### Region-wide audio streams[​](#region-wide-audio-streams "Direct link to Region-wide audio streams") ![A screenshot of the Region Information window positioned alongside the audio stream selection menu. Multiple audio streams are listed.]() *Pictured: The Region Information window audio stream selection menu.* Using the Region Information window, [Region Owners](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) and [Region Administrators](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) can enable a Region-wide audio stream. This stream will play automatically for users upon entry to the Region, and can be controlled using the audio stream and volume controls located in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) and the [audio settings window](/getting-started/settings.md#audio-settings). ##### Enabling an audio stream[​](#enabling-an-audio-stream "Direct link to Enabling an audio stream") To enable a Region-wide audio stream, follow the steps below. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click the **Edit Profile button**. 4. Click the **Select button** next to the Shoutcast field. 5. In the menu that appears, select a **stream** by clicking on it. You can also search for a stream using the **search field**. When you click on a stream, its address will appear in the stream field located at the top of the menu. 1. Alternatively, you can enter an **audio stream address** directly into the stream field. 6. Click the **Set Stream button**. This will return you to the Region Information window. 7. Click the **Save button**. info If you can't immediately hear your chosen audio, try toggling the stream. You can do this by clicking the **Music Stream button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) several times. warning The streams listed in the Region Information window are created and maintained by independent entertainment companies. Breakroom is not affiliated with any of these third parties, and cannot alter or endorse any station's content. ##### **Disabling an audio stream**[​](#disabling-an-audio-stream "Direct link to disabling-an-audio-stream") To disable an active Region-wide audio stream, follow these steps. 1. Repeat steps 1-4 [above](/building-new-worlds/region-settings.md#enabling-an-audio-stream). 2. In the menu that opens, select and delete the current audio stream address. 3. Click the **Set Stream button**. This will return you to the Region Information window. 4. Click the **Save button**. #### Controlling Region access[​](#controlling-region-access "Direct link to Controlling Region access") ![A closeup of the Region Access panel in the Region Information window. Four Region access options are available, and each will be described in detail below.]() *Pictured: The Region Access panel.* Regions can either be open to the public or offer various degrees of controlled access. When it comes to letting users visit a Region, your options are: * Public: Any user in the World can access your Region * Contact Only: All users listed in the Region Owner's [People list ](/exploring-breakroom/networking-with-other-users/people.md)*and* whitelisted users can access the Region * Approved Only: *Only* whitelisted users can access the Region * Groups Only: *Only* users in whitelisted [groups ](/exploring-breakroom/networking-with-other-users/groups.md)can access and control the Region To select a Region access type, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click the **Edit Profile button**. 4. Scroll down to the Region Access panel, and check the **box** beside the access type you prefer. 5. Click the **Save button.** For detailed information about each Region access type, please review the following [sections](/building-new-worlds/region-settings.md#contact-only). #### Approving Region members[​](#approving-region-members "Direct link to Approving Region members") Some Region access types require visitors to be approved (or whitelisted). To do so, please refer to the following instructions. ##### Adding approved users[​](#adding-approved-users "Direct link to Adding approved users") 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click on the **Members tab** in the Region Information window. 4. Click the **Add Members button** to open the "Add new members" dialog box. Locate the user you want to whitelist by using the **search field**, and then click the **Add button** beside their name. ![A closeup of the Region Information window > Members tab, with six members listed.]() *Pictured: The Region Information window > Members tab.* ##### Removing approved users[​](#removing-approved-users "Direct link to Removing approved users") To remove a user from the Region members list, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click on the **Members tab** in the Region Information window, and use the **search field** to search for the user's name. 4. Once you locate the user you want to remove, click the **Edit button** located to the right of their name. In the action menu that appears, click **Delete**. #### Region access types [](#contact-only)[​](#region-access-types- "Direct link to region-access-types-") ##### Contact Only[​](#contact-only "Direct link to Contact Only") By making a Region "Contact Only," you are limiting access to the contacts in the Region Owner's [People list](/exploring-breakroom/networking-with-other-users/people.md) and specific users [approved](/building-new-worlds/region-settings.md#approving-region-members) (or whitelisted) to visit the Region. ##### Approved Only[​](#approved-only "Direct link to Approved Only") By making a Region "Approved Only," you are limiting access to only those users included in your [Region members list](/building-new-worlds/region-settings.md#approving-region-members). No other users will be allowed to enter the Region. ##### Groups Only [](#groups-only)[​](#groups-only- "Direct link to groups-only-") In the Region Information window, you'll notice that the "Groups Only" Region access option is grayed out, and therefore unclickable. In order to restrict Region access to one or more groups, you will need to first [join ](/exploring-breakroom/networking-with-other-users/groups.md#finding-and-joining-existing-groups)or [create](/exploring-breakroom/networking-with-other-users/groups.md#creating-a-group) those groups. ![A screenshot of the Region Information window > Groups tab, with four groups listed.]() *Pictured: The Region Information window > Groups tab.* To limit Region access to one or more groups, you can then follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click on the **Groups tab** in the Region Information window. This tab will initially appear empty; to populate it with your groups, click the **Manage button** located at the bottom. 4. Check the **box** beside each group you want to offer Region access. 5. Click the **Save button.** 6. Click on the **Info tab**, and then the **Edit button.** You will see that Region access is now restricted to "Groups Only." warning When a Region is set to "Groups Only," the group member lists will override the Region's existing members list, *including any Region members with* [*advanced permissions*](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md)*.* This means that only *Group* Administrators, *Group* Moderators, *Group* Developers, etc. will be able to exercise their powers over the Region as a whole. Additionally, only group members will be permitted to visit the Region. Any users in the Region member list will be ignored. To disable group control over the Region, [select](/building-new-worlds/region-settings.md#controlling-region-access) a different Region access option. Doing so will restore access and advanced permissions to any users in the Region members list. #### Muting and banning Region visitors[​](#muting-and-banning-region-visitors "Direct link to Muting and banning Region visitors") In order to mute or ban a Region visitor, that user must either be: 1. Currently located within the Region (with the *Guest* user role) 2. Included in the Region members list (with the *Member* user role or better) If the user is not currently located within the Region, but you would like to preemptively mute or ban them, you will first need to [whitelist](/building-new-worlds/region-settings.md#contact-only-1) the user. You can then edit that user's status using the following methods. ##### Muting visitors[​](#muting-visitors "Direct link to Muting visitors") ![A closeup of the Region Information window > Members tab, with the location of the Status icons and the Edit button action menu highlighted in orange.]() *Highlighted: The location of the Status icons and the Edit button action menu.* To mute a single Region visitor (on either text or voice chat), follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click on the **Members tab** in the Region Information window, and use the **search field** to search for the user's name. 4. Once you locate the user you want to mute, you can either: 1. Click the **Edit button** located to the right of the user's name. In the action menu that appears, click **Mute Voice** and/or **Mute Chat.** 2. Toggle the **Microphone icon** and/or the **Speech bubble icon** located to the right of the user's name. When the blue check mark disappears, the user is muted. To restore communication to a previously muted user, repeat steps 1-4 above, and either: 1. Click the **Edit button** located to the right of the user's name. In the action menu that appears, click **Unmute Voice** and/or **Unmute Chat.** 2. Toggle the **Microphone icon** and/or the **Speech bubble icon** located to the right of the user's name. When a blue check mark appears, the user can communicate over voice or text chat. To mute multiple users at once, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click the **Region Information button** located above the mini map. 3. Click on the **Members tab** in the Region Information window, and locate the users you want to mute. Check the **box** located to the left of each user's name. 4. Click the **Set Status drop-down menu,** and then click **Mute Voice** and/or **Mute Chat.** To restore communication to multiple muted users, repeat steps 1-3 above. Then click the **Set Status drop-down menu**, and click **Unmute Voice** and/or **Unmute Chat.** #### Banning visitors[​](#banning-visitors "Direct link to Banning visitors") To ban a single user from entering your Region, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click on the **Members tab** in the Region Information window, and use the **search field** to search for the user's name. 4. Once you locate the user you want to ban, click the **Edit button** located to the right of the user's name. In the action menu that appears, click **Block.** To undo a ban, repeat steps 1-3 above. The user will be filed under the Ban List. Click the **Edit button** located to the right of the user's name. In the action menu that appears, click **Unblock.** To ban multiple users at once, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click on the **mini map** to open the Region Information window. 3. Click on the **Members tab** in the Region Information window, and locate the users you want to ban. Check the **box** located to the left of each user's name. 4. Click the **Set Status drop-down menu,** and then click **Block.** To undo a ban for multiple users, repeat steps 1-3 above. Banned users will be filed under the Ban List. Check the **boxes** beside the users you want to unban, click the **Set Status drop-down menu**, and then click **Unblock.** --- ### Region template descriptions #### Overview[​](#overview "Direct link to Overview") Each Breakroom Region template offers a variety of features designed to maximize convenience, flexibility, and user engagement. Once you [add a Region](/building-new-worlds/creating-and-managing-regions.md#creating-a-new-region) to your World, you can [customize it](/creating-custom-experiences/using-the-region-editor.md) with additional decor items, branding, [no-code gamification](/creating-custom-experiences/exploring-the-breakroom-toolkit.md), and more. info The virtual asset files that were used to create our Region templates (e.g. the plants, buildings, furniture, etc.) are not available for individual distribution. If you are interested in decorating your Region, we recommend browsing through the [Sine Wave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md) for virtual content. #### **Breakroom Town Square**[​](#breakroom-town-square "Direct link to breakroom-town-square") ![A screenshot of the Breakroom Town Square Region, featuring a blocky cityscape, a western town, and a Japanese temple in the distance. King Kong sits atop one of the skyscrapers, keeping watch over his domain.](/assets/images/Region_Template_TownSquare-4b4dc5d3946694a8c601ee7241d5ca6a.png) Description: A playful alternative to traditional workspaces, full of quirky details. Use the central park for large gatherings, or set up breakout zones in unexpected places. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Empty central park space. * Info: Road space facing the central park. * Networking: Empty central park space. * Floor: Road space at the crossroads. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Breakroom Conference**[​](#breakroom-conference "Direct link to breakroom-conference") ![A screenshot of the Breakroom Conferece Region, which is a long white open-air conference hall with slatted roof pieces for visual interest. Several brightly colored breakout areas are already installed.](/assets/images/Region_Template_Conference-cf594ac93b33a75a9e7433eb2d38e9ee.png) Description: A sleek, modern conference hall with plenty of space breakout rooms and vendor booths. Perfect for large crowds. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Full 90-seat auditorium. * Info: Built-in info booth. * Networking: Open area in front of auditorium. * Floor: Central concourse. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Two Breakroom Breakout Area B booths. * One Breakroom Workshop. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Breakroom Boardroom**[​](#breakroom-boardroom "Direct link to breakroom-boardroom") ![A screenshot of the Breakroom Boardroom Region, which consists of a large room with organic walls and tall windows overlooking a Japanese temple. A long conference table sits in the middle of the room.](/assets/images/Region_Template_Boardroom-06ff3b4487700eb44d2aa440477dc2a5.png) Description: An dedicated conference room with a stunning view. The large screen makes it an ideal setting for meetings that require video and screen sharing. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Floor: Central 14-seat conference table. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Breakroom Campus**[​](#breakroom-campus "Direct link to breakroom-campus") ![A screenshot of the Breakroom Campus Region, which is a low-poly open-air environment with four office areas connected by walkways. Multicolored trees give the surroundings texture.](/assets/images/Region_Template_Campus-630bd05217262228452db12433cc74a3.png) Description: This welcoming work environment features four dedicated meeting spaces and an amphitheater, as well as cozy breakout areas. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Amphitheater space. * Info: Front office desk. * Networking: Central seating area. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Four Breakroom Low Poly Office rooms. * An elevated boardroom with a 14-seat conference table. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Breakroom Campus Large**[​](#breakroom-campus-large "Direct link to breakroom-campus-large") ![A screenshot of the Breakroom Campus Large Region, which is a low-poly open-air environment with eight office areas connected by walkways. A modern trellis gazebo offers an additional seating area.](/assets/images/Region_Template_CampusLarge-a2c85ef5012c14842fdb65d216df4bd1.png) Description: Love the Breakroom Campus, but need more space? This iteration offers eight dedicated meeting areas, plus an amphitheater and breakout spaces. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Amphitheater space. * Info: Front office desk. * Networking: Coffee pavilion. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Eight Breakroom Low Poly Office rooms. * Two networking areas. * An elevated boardroom with a 14-seat conference table. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Neon Club**[​](#neon-club "Direct link to neon-club") ![A screenshot of the Breakroom Neon Club Region, taken from behind the main bar and overlooking the dance floor. The furniture is very modern, and pink and purple neon lights add visual interest to the walls.](/assets/images/Region_Template_NeonClub-7f0f6f2bbed2556e546c9e148be52904.png) Description: Want to put on a show? This exciting club features hangout areas, multiple bars, and plenty of room to cut loose. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Info: Entrance hall. * Networking: Elevated bar. * Floor: Dance floor. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Standing room VIP lounge with screen. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Breakroom City Townhall**[​](#breakroom-city-townhall "Direct link to breakroom-city-townhall") ![A screenshot of the Breakroom City Townhall Region, a low-poly city with a central columned amphitheater full of desks.](/assets/images/Region_Template_TownHall-5dd04c6edff51ae762f8e395b1fed181.png) Description: A fun, blocky pixel city with endless details to explore. Great for featured speakers or large presentations. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Central presentation space. * Floor: Fountain courtyard. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Breakroom Canvas**[​](#breakroom-canvas "Direct link to breakroom-canvas") ![A screenshot of the Breakroom Canvas Region, which consists of a flat, circular oval stage surrounded by a low-poly forest. Tiered seating is set up on half of the stage, leaving the rest open for builds and demo objects.](/assets/images/Region_Template_Canvas-adcd2f804eb42515191ec55cb4a1f7e7.png) Description: A colorful amphitheater with a wide, inviting stage. Great for presentations, networking, and Q\&A sessions. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Amphitheater space. * Info: Side of the amphitheater. * Floor: Wider presentation floor. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Desert Island**[​](#desert-island "Direct link to desert-island") ![A screenshot of the Breakroom Desert Island Region, consisting of areas of green grass sprouting up from an otherwise sandy landscape. Beach activities, such as a DJ station and volleyball nets, are set up around the edges of the island.](/assets/images/Region_Template_DesertIsland-f8c7299fcb57f7379b39b6e8c179373a.png) Description: This lush tropical island features an open-air auditorium and sunny seaside breakout zones. A DJ station adds to the fun. \[[Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Full 90-seat auditorium. * Info: Central island landing area. * Networking: Picnic/DJ area. * Floor: Beachside volleyball court. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * Material swap points: Stage. * Decorative options: Hot air balloons, tree density, sand texture. #### Breakroom Gallery[​](#breakroom-gallery "Direct link to Breakroom Gallery") ![A screenshot of the Breakroom Gallery Region, which consists of an organic white office space filled with sculptures and areas of blank signage. A welcome desk and a conference table are set up.](/assets/images/Region_Template_Gallery-04498a0ed1d6ef6c0113a0656551c53e.png) Description: A serene meeting space that showcases the beauty of Breakroom through inspiring architecture and modern art. Equipped with an info desk and customizable displays. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Central 14-seat conference table. * Info: Front-facing information desk. * Networking: Art gallery space. * Floor: Art gallery space. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md): * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### Breakroom Zone 54B[​](#breakroom-zone-54b "Direct link to Breakroom Zone 54B") ![A screenshot of the Breakroom Zone 54B Region, which features a sci-fi industrial landscape under hazy red skies. Catwalks and lighted pathways connect the various areas, while in the distance the engines of a downed spaceship jut out of the earth.](/assets/images/Region_Template_Zone54-85c65cd6d4c5fc1c35e99aede2885fa2.png) Description: A dynamic region that lets your users play along the edge of tomorrow. Multiple sci-fi themed breakout pods make this an exciting setting for conventions or learning experiences. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Central gathering floor. * Info: Lower info desk. * Networking: Upper concourse. * Floor: Dystopian city street. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Two 6-seat breakout pods. * Nine 4-seat breakout pods. * A standing bar. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### **Breakroom Alpine Retreat**[​](#breakroom-alpine-retreat "Direct link to breakroom-alpine-retreat") ![A screenshot of the Breakroom Alpine Retreat Region, which consists of a large building and associated outdoor gathering spots situated in a pine forest. Bonfires, drink stations, and other festivities light up the night.](/assets/images/Region_Template_Alpine-eae92e10d326435ddfa89287bdedab8d.png) Description: A bracing winter wonderland, perfect for Fire & Ice-themed festivities. Connect with other users around a cozy campfire, or host live performances in the comedy club! [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Full 196-seat main stage auditorium. * Info: Welcome Center main entrance. * Networking: 73-seat "comedy club"-themed space in Welcome Center. * Floor: 28-seat "game room"-themed space in Welcome Center. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Six 10-seat outdoor fire pits. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. ##### Breakroom Holiday[​](#breakroom-holiday "Direct link to Breakroom Holiday") ![A screenshot of the Breakroom Holiday Region, which is the Alpine Region all dressed up! Christmas trees and garlands festoon the open areas and walkways, while Santa\'s sleigh flies through the air overhead.](/assets/images/Region_Template_Holiday-785ccd9d5e9f6270e19a5aed6458f139.png) A variation on the [Breakroom Alpine Retreat](/building-new-worlds/region-template-descriptions.md#breakroom-alpine-retreat), our Breakroom Holiday Region offers even more frosty fun. In addition to the seating and teleport options detailed above, Breakroom Holiday includes: * Traditional Christmas decorations. * A built-in holiday scavenger hunt with collapsible HUD. * Clickable fireworks. * Animated rides in Santa's sleigh. #### **Breakroom Delphi**[​](#breakroom-delphi "Direct link to breakroom-delphi") ![A screenshot of the Breakroom Delphi Region, which consists of a series of ruins and outbuildings spread over the Greek countryside. The light tan stone contrasts against the lush green surroundings.](/assets/images/Region_Template_Delphi-f77791bba2369bd4aff3ea7584b0773e.png) Description: The ruins of Delphi offer an inspirational setting for your next talk. Recharge in the rustic Greek countryside, or catch up with colleagues in the shadow of ancient temples. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: 46-seat open-air amphitheater. (Fun tip: Try clicking on the birds for a change in perspective!) * Info: Central ruins. * Networking: Temple of Apollo. * Floor: Farmhouse with picnic seating for 44 and a screen. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Temple of Tholos with picnic seating for 28 and a screen. * Temple of Apollo. * Farmhouse with picnic seating for 44 and a screen. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### Breakroom Cabin[​](#breakroom-cabin "Direct link to Breakroom Cabin") ![A screenshot of the Breakroom Cabin Region, which consists of a warm cabin interior filled with long, communal working tables. A large fireplace and traditional artwork make the place seem homey and inviting.](/assets/images/Region_Template_Cabin-836f05a1861f81f354afc9799698d4e9.png) Description: This on-trend conference space offers a stage with five built-in presenter seats and seating for 100 users along sunlit, rustic-chic tables. Fairy lights and classic art prints add to the charm. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * None. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### Breakroom Azalea Garden[​](#breakroom-azalea-garden "Direct link to Breakroom Azalea Garden") ![A screenshot of the Breakroom Azalea Garden Region, which consists of a number of unique buildings and art installations set in a picturesque countryside. The colorful, oversized art pops against the green grass and blue sky.](/assets/images/Region_Template_Azalea-86a5856c1840239998d25307d1db7bbe.png) Description: This vivacious, artistic "village" contains a multitude of quirky breakout spaces connected by winding pathways. A 350-user auditorium with five built-in presenter seats comfortably accommodates conference or symposium attendees. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: 350-seat open-air auditorium. * Info: Central welcome station. * Networking: The Container Cafe, with seating for 32. * Floor: Open green leading to the auditorium. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Archway: A sophisticated 10-seat breakout area with a screen. * Cubes: Open-air art installation with standing room and a screen. * Polygon: Open amphitheater with seating for 12 and a screen. * White Dome: A sunny, engaging breakout area with a 10-seat table and a screen. * Elephant: The largest art installation on the map, with a 10-seat breakout area and screen located beneath. * Serpentine: A strikingly beautiful breakout area, with a 10-seat table and screen. * Wood Roof: An organic breakout area featuring a 10-seat table and a screen. * Container Cafe: This engaging shipping container cafe, with seating for 32 people, shows how we can reclaim existing objects and make something new! [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### Breakroom Executive Boardroom[​](#breakroom-executive-boardroom "Direct link to Breakroom Executive Boardroom") ![A screenshot of the Breakroom Executive Boardroom Region, which consists of a polished conference table and furniture arranged on a lush brown marble floor.](/assets/images/Region_Template_ExecutiveBoardroom-bf92a794e841f12110d5de13006206f1.png) Description: This gorgeous, gleaming professional conference space lets you conduct meetings in style. With 13 chairs at the conference table and 18 additional seats positioned along the walls, you can invite everyone to weigh in. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * None. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Meeting: The head of the central conference table. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * Material swap points: Multiple areas of the floor, walls, ceilings, etc. #### Breakroom Ballroom[​](#breakroom-ballroom "Direct link to Breakroom Ballroom") ![A screenshot of the Breakroom Ballroom Region, which consists of luxurious white dining tables set up in front of a convenient stage.](/assets/images/Region_Template_Ballroom-632b947cb9e2b2bc926f38a72fa14254.png) Description: A sophisticated ballroom with seating for 96 guests and five built-in presenter spots arranged in front of a central screen. Only one-third of the space is occupied with furniture, leaving the rest free for dancing, networking, or vendor booths. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Ballroom tables, with seating for 96. * Info: Central floor space. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### Campfire Talks[​](#campfire-talks "Direct link to Campfire Talks") ![A screenshot of the Breakroom Campfire Talks Region, a vast, almost Nordic region bounded by snowy mountains and framed by deep blue waters.](/assets/images/Region_Template_Campfire-271b548da224b168625788e32912210b.png) Description: A serene and solemn space, filled with several organic "auditoriums" designed to accommodate different group sizes. Foster engagement, reflection, and deep thinking. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Auditorium: Campfire presentation zone with five built-in presenter seats, a hidden screen, and amphitheater-style seating for 81 users. * Info: Entrance area on the beach. * Networking: The rocky area bordering the campfire. * Floor: The starlit shallows, with picnic-style seating for 160 users. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### Breakroom Starbase[​](#breakroom-starbase "Direct link to Breakroom Starbase") ![A screenshot of the Breakroom Starbase Region, which harkens back to the optimistic future depicted by old sci-fi shows. A tall aquarium fills the center space, while glass-walled staircases lead to additional meeting rooms.](/assets/images/Region_Template_Starbase-d6c2f5b17241433755d1f457b0194806.png) Description: This luxe space station is designed to feel like a little slice of "home" among the stars. With six breakout rooms and multiple meeting spaces to explore, as well as exciting animated scenery, your users will never want to jet off! [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * Info: A main landing point in the central "aquarium hub," also referred to as the bridge. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Five 8-seat conference rooms * Constellation Rooms: 6-seat conference rooms * Waiting Room: An open, inviting lounge space. * The Bridge: An elevated portion of the central hub, featuring a futuristic bar. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * Material swap points: Multiple areas of the floor, walls, ceilings, etc. * Decorative options: Custom holographic signage can be displayed on the Bridge Center Banner, Bridge Bar Banner, Tall Holograms, and flatscreen Terminal displays. To do this, you will need to provide our [Customer Success Team](/help/where-to-find-support.md) with the appropriate images. #### Pixel Pines[​](#pixel-pines "Direct link to Pixel Pines") ![A screenshot of the Breakroom Pixel Pines Region, where the candy-colored carnival games of your youth live on! A Ferris wheel takes center stage, while wide sandy avenues lead to additional rides and games.](/assets/images/Region_Template_PixelPines-02317cad2db20707c8c20dbc8d6d9605.png) Description: The fun of the fair meets the magic of the Metaverse in Pixel Pines. Featuring fully operational midway and water rides, Pixel Pines is the perfect setting for virtual parties and teambuilding exercises. Use the [Breakroom Games](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md) package to set up trivia and scavenger hunts for even more funβ€”and don’t forget to take a selfie with the park’s resident zebra. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * None. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * Fifteen park rides. * Entrance to Complex: The main entrance. * Deer Country: A picturesque wildlife park. * Event Area: An open clearing ideal for setting up picnics, games, etc. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * None. #### The Breakroom Show[​](#the-breakroom-show "Direct link to The Breakroom Show") ![A screenshot of the Breakroom Show Region, which consists of a news-style studio with anchor and podcaster desks surrounded by cheerful red stadium seating.](/assets/images/Region_Template_Show-18f4e94277a9251b3d359ff5fc4d0ffb.png) Description: This exciting, TV-inspired set contains stadium seating for 90 audience members, as well as five presenter seats for hosts, team leaders, or interviewees. Perfect for live podcast or event streams! [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * None. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * Material swap points: All existing Breakroom branding can be swapped out for materials or graphics of your choice, including the monitors and circular floor emblems. #### Breakroom Large Stage[​](#breakroom-large-stage "Direct link to Breakroom Large Stage") ![A screenshot of the Breakroom Large Stage Region, where crowds of avatars are seated around a glowing central stage with attendant screens.](/assets/images/Region_Template_Stage-40bb19f204c98ef29838632ecc2aa09d.png) Description: This dramatically lit stage forms the perfect backdrop for announcements, keynotes, and VIP presentations. The stage comes with five presenter spots by default, while the audience can accommodate approximately 470 users. [Areas of Interest](/getting-started/using-the-conference-system.md#navigating-an-event) teleport targets: * None. Built-in [breakout spaces](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) and gathering points: * None. [Advanced Region Editor](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) options: * Lighting: Light intensity and color presets. * Decorative options: Disable screen emissiveness, toggle side stage lights. The 300 seats located on either side of the stage can also be filled with non-interactive NPCs, reducing the number of active user seats to 170. --- ## Creating Custom Experiences ### CREATING CUSTOM EXPERIENCES #### [πŸ“„οΈBranding tools](/creating-custom-experiences/branding-tools.md) [Customize your Breakroom World's login screen, application logo, and viewer installer image to create a polished, professional, and user-friendly experience.](/creating-custom-experiences/branding-tools.md) --- ### Branding tools [YouTube video player](https://www.youtube.com/embed/mXJ8cHAgNIQ?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) #### Overview[​](#overview "Direct link to Overview") As part of building a unique Breakroom World, [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can upload custom graphics to create a cohesive brand experience for end users. This includes the splash screen users see when they log in, the [favicon ](https://en.wikipedia.org/wiki/Favicon)that appears when users access [World Stream](/opening-the-doors/world-stream.md), and the application icon and installer image for the Breakroom [desktop viewers](/opening-the-doors/desktop-viewers.md). ![]() *Pictured: A custom login screen for an event in Breakroom.* #### Uploading a custom login screen[​](#uploading-a-custom-login-screen "Direct link to Uploading a custom login screen") ![]() *Pictured: The Dashboard > World Customization > Basic Information tab, "Branding" panel.* To upload a custom login screen image, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Basic Information tab**. Scroll down to the "Branding" panel. 3. Click the **Browse link** located underneath the **Branding > World Background image panel.** This will launch a standard file import window on your computer. 4. Locate the image file you want to use as your login screen and click on it. Then click the **Open button**. 5. Once your image is uploaded, you will see it appear as a thumbnail. 6. Click the **Save Changes button**. info Breakroom supports JPG, JPEG, and PNG images. The recommended dimensions for a login splash screen are 1920x1080, or a 16:9 ratio, with a maximum file size of 5MB. #### Branding the application logo or favicon[​](#branding-the-application-logo-or-favicon "Direct link to Branding the application logo or favicon") ![]() *Pictured: Several application icons in the Windows taskbar.* Your custom application logo will replace the default application icon when users install your Breakroom desktop app. It will also replace the default favicon in the [World Stream](/opening-the-doors/world-stream.md) browser tab. To upload a custom app logo or favicon, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Basic Information tab**. Scroll down to the "Branding" panel. 3. Click the **Browse link** located underneath the **Branding > Application logo panel.** This will launch a standard file import window on your computer. 4. Locate the image file you want to use as your login screen and click on it. Then click the **Open button**. 5. Once your image is uploaded, you will see it appear as a thumbnail. 6. Click the **Save Changes button**. info Breakroom supports JPG, JPEG and PNG images. The recommended dimensions for an application logo are 256x256, or a 1:1 ratio, with a maximum file size of 5MB. ##### Application logo best practices[​](#application-logo-best-practices "Direct link to Application logo best practices") Application logos are very small imagesβ€”only 256x256 pixels. Depending on the device, your logo may not even be displayed at full size. For these reasons, it's important to follow some best practice tips when creating your application logo. 1. *Go text-free if you can*. Small letters and dense text will not be visible to most users. 2. *Pick something bold and attention-grabbing*. Your company logo or your company's first initial is a great place to start. 3. *Pick contrasting colors*. A hot pink logo on a tropical orange background may be difficult for users to see. ![]() Let's compare these example logos from two fictional companiesβ€”Best World and Happy Water. Here we can see that the logo for Best World (left) features small text and an even smaller image. There's also a lot of empty space, and the pink text almost disappears into the red background. Meanwhile, the Happy Water logo (right) is bold and welcoming, with colors that stand out from one another. ![](data:image/png;base64,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) Here are the same logos reduced to 32x32 pixels, mimicking what users may see when running your Breakroom app in their system tray. You can see how the Best World logo is unreadable, while the Happy Water logo is still recognizable. #### Branding the installer image[​](#branding-the-installer-image "Direct link to Branding the installer image") ![]() *Pictured: The desktop app installation dialog box.* Users will see your custom installer image when they download your desktop app and install it on their computers. To upload a custom installer image, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Basic Information tab**. Scroll down to the "Branding" panel. 3. Click the **Browse link** located underneath the **Branding > Installer image panel.** This will launch a standard file import window on your computer. 4. Locate the image file you want to use as your login screen and click on it. Then click the **Open button**. 5. Once your image is uploaded, you will see it appear as a thumbnail. 6. Click the **Save Changes button**. info Install images must be in PNG format. The recommended dimensions for an install image are 163x314, with a maximum file size of 5MB. --- ### Exploring the Breakroom Toolkit #### Overview[​](#overview "Direct link to Overview") [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner), [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator), and [World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#developer) will automatically receive the contents of the Breakroom Toolkit delivered to their inventories. This toolkit consists of plug-and-play items designed to help you quickly add branding, media, and functional engagement to your Regions. You can place these items in your Regions using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). #### Toolkit contents[​](#toolkit-contents "Direct link to Toolkit contents") The Breakroom Toolkit contains the following items: * [Breakroom Video Player](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-video-player.md) * [Breakroom Web Browser](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-web-browser.md) * [Breakroom Image Viewer](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-image-viewer.md) * [Breakroom Info Kiosk](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-info-kiosk.md) * [Breakroom Teleport Portal](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-teleport-portal.md) * [Breakroom Note Board](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-note-board.md) * [Breakroom Games](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md) * [Breakroom Reactives](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-reactives.md) * [Breakroom Orientation Quest](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-orientation-quest.md) * [Breakroom Tour Cameras](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md) * [Conference rooms and booths](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) * [Add-on seats for attendees and presenters](/creating-custom-experiences/exploring-the-breakroom-toolkit/add-on-seats.md) * [Voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) * [Breakroom LMS Core](/breakroom-for-training/installing-breakroom-for-training.md) In addition to the items listed above, the Breakroom Toolkit includes the following [conference system](/running-your-event/understanding-the-conference-system.md) components: * Breakroom Navigation UI * Breakroom Combined Media Core * Breakroom Gestures Standard * Breakroom Camera System * Breakroom Auditorium 90 and Auditorium 200 * [Breakroom Basic Emojis](/advanced-tutorials/uploading-your-own-region/breakroom-basic-emojis.md) * [Breakroom Start Here UI](/advanced-tutorials/uploading-your-own-region/breakroom-start-here-ui.md) These items are provided so that you can [install the Breakroom conference system in a custom Region](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md). #### Item updates [](#item-updates)[​](#item-updates- "Direct link to item-updates-") [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner), [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator), and [World Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#developer) will automatically receive new conference tools and interactive objects released by Breakroom. These objects will be delivered directly to each user's Inventory. Updates are also pushed forward automatically, even for items already set up in-world. --- ### Add-on seats [YouTube video player](https://www.youtube.com/embed/erI62mQVJTA) #### Overview [](#overview)[​](#overview- "Direct link to overview-") Breakroom's add-on seating sets consist of two major types: conference system seats and presenter seats. **Conference system seats** are designed to create or expand general seating capacity within [breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) and [custom voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md). Meanwhile, **presenter seats** are designed to host speakers in Presenter and Audience [voice zones](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md). Details about each add-on seating object can be found below. Please note that these furniture items are built with crowds in mind. You can [hide individual chairs](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#editing-voice-zone-furniture-items) within each linked set if you don't need all of them. warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. info Unless otherwise noted, chairs, couches, and other furniture items purchased from the Sine Wave Shop will *not* work with the Breakroom conference system, and will function as decorative seating only. #### Add-on conference system seats[​](#add-on-conference-system-seats "Direct link to Add-on conference system seats") For more information about adding furniture items to [custom voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) or setting up [presenter seats](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md), please see our [Running Your Event section](/running-your-event.md). ##### Breakroom Add-on Round Table[​](#breakroom-add-on-round-table "Direct link to Breakroom Add-on Round Table") ![](/assets/images/Toolkit_Seats_001-5f4323689175e59e66f2d14d394eb862.png) Inventory icon: ![](/img/breakroom/Addon_Round-icon.png) Key features: The **Breakroom Add-on Round Table object** includes 10 seats situated around a center conference table. ##### Breakroom Add-on Stools[​](#breakroom-add-on-stools "Direct link to Breakroom Add-on Stools") ![](/assets/images/Toolkit_Seats_002-4f144a6e95b97312ab5467435f7e9b00.png) Inventory icon: ![](/img/breakroom/Addon_Stools-icon.png) Key features: The **Breakroom Add-on Stools object** features 14 seats in two rows. When users are seated, they will all face the same direction unless the seat orientation is changed using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). #### Add-on presenter seats[​](#add-on-presenter-seats "Direct link to Add-on presenter seats") For more information about adding furniture items to [custom voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) or setting up [presenter seats](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md), please see our [Running Your Event section](/running-your-event.md). ##### Breakroom Add-on Presenters Standing[​](#breakroom-add-on-presenters-standing "Direct link to Breakroom Add-on Presenters Standing") ![](/assets/images/Toolkit_Seats_003-406303ecf03efebbe10283de84bc3038.png) Inventory icon: ![](/img/breakroom/Addon_Presenters_Standing-icon.png) Key features: The **Breakroom Add-on Presenters Standing object** features nine standing presenter seatsβ€”five displayed automatically, and four hidden by default. This means that you can [edit the object](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md) to add between one and nine presenter seats to a voice zone. ##### Breakroom Add-on Presenters Chairs[​](#breakroom-add-on-presenters-chairs "Direct link to Breakroom Add-on Presenters Chairs") ![](/assets/images/Toolkit_Seats_004-41a8e983403590d47a405859cf426446.png) Inventory icon: ![](/img/breakroom/Addon_Presenters_Chairs-icon.png) Key features: The **Breakroom Add-on Presenters Chairs object** features five presenter chairs. ##### Breakroom Add-on Presenters Sofas[​](#breakroom-add-on-presenters-sofas "Direct link to Breakroom Add-on Presenters Sofas") ![](/assets/images/Toolkit_Seats_005-532eea759dfcfc73d13c514e75209334.png) Inventory icon: ![](/img/breakroom/Addon_Presenters_Sofas-icon.png) Key features: The **Breakroom Add-on Presenters Sofas object** features three sofas with three seated presenter seats each. You can [edit the object](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md) to remove entire sofas or individual presenter seats from each sofa. --- ### Breakroom Games #### Overview[​](#overview "Direct link to Overview") The Breakroom Games system allows you to fill your Regions with activities and minigames that your users can complete for points. The system includes several required and optional components, which can be combined in order to: * Encourage and reward exploration * Create obstacle courses and scavenger hunts * Host trivia competitions * Foster engagement with social media In order for the Breakroom Games components to work, users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions will need to place them in a Region and edit their components. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). #### Introduction to the Breakroom Games components[​](#introduction-to-the-breakroom-games-components "Direct link to Introduction to the Breakroom Games components") Before we walk through a sample Breakroom Games installation, it’s important to identify the individual system components and describe how they function. For your convenience, we've included video tutorials and text-based instructions for working with each system component. #### Leaderboard[​](#leaderboard "Direct link to Leaderboard") ![](/assets/images/Games_001-164f0971b594325292b3af6dbf869b7f.png) The Breakroom Games Leaderboard object displays the ten highest scores for a single game in the Region, as well as the individual viewer’s personal score. A *single game* can consist of one or more activity and minigame objects (for example, a Leaderboard may show scores for a single Trivia object, or it may show the combined scores for ten separate Clickable objects set up for a scavenger hunt). In your Inventory, you'll see the Breakroom Games Leaderboard represented by this icon: ![](/img/breakroom/Games_Leaderboard.png) ##### Setting up the Leaderboard object[​](#setting-up-the-leaderboard-object "Direct link to Setting up the Leaderboard object") [YouTube video player](https://www.youtube.com/embed/VMiZLR2Imk4) *** ![](/assets/images/Games_002-9f72b394df5680b89c56db910f37673e.png) *Pictured: The Inspector window for the Breakroom Games Leaderboard object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Leaderboard object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Leaderboard object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. In the **Game field**, enter the name of the game you want to track. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 7. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). Each Breakroom Games Leaderboard object you set up will track points for a single game. It is important to emphasize that a *single game* can consist of *one* or *more* activity and minigame objects. You can set up multiple leaderboards within a Region, all tracking the same game (for ease of reference) or tracking *different* games. For example, you may wish to set up a leaderboard to track a clickable scavenger hunt in one section of your Region, and a separate leaderboard to track trivia points in a pub on the other side of the Region. To differentiate these games, you might enter the name *Scavenger Hunt* into the game objects and leaderboards associated with the hunt, and the name *Trivia* into the game objects and leaderboards associated with the trivia. ##### Using the Leaderboard object[​](#using-the-leaderboard-object "Direct link to Using the Leaderboard object") If you look at the Breakroom Games Leaderboard object, you will see the top ten scores for the game the leaderboard is set up to track, as well as your personal score in the top right corner. #### Taskboard[​](#taskboard "Direct link to Taskboard") ![](/assets/images/Games_003-82369e1431499f30e1086f0e69e755d4.png) The Breakroom Games Taskboard object shows all activity and minigame objects associated with a single game, sorted by name and category, and indicates whether the individual viewer has completed those activities. The Taskboard also contains administrative control buttons for resetting and reloading game and user data. In your Inventory, you'll see the Breakroom Games Taskboard represented by this icon: ![](/img/breakroom/Games_Taskboard.png) ##### Setting up the Taskboard object[​](#setting-up-the-taskboard-object "Direct link to Setting up the Taskboard object") [YouTube video player](https://www.youtube.com/embed/MO9plkqvY8U) *** ![](/assets/images/Games_004-f79ba9ab0cbceaa68d0c57ba40059807.png) *Pictured: The Inspector window for the Breakroom Games Taskboard object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Taskboard object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Taskboard object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. In the **Game field**, enter the name of the game you want to track. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 7. Click the **Reload Game button** on the Breakroom Games Taskboard. Each Breakroom Games Taskboard object you set up will track the activity and minigame objects associated with a single game. It is important to emphasize that a *single game* can consist of *one* or *more* activity and minigame objects. You can set up multiple taskboards within a region, all tracking the same game (for ease of reference) or tracking *different* games. To build on the example given [above](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#setting-up-the-leaderboard-object), after you set up two separate games in your region (named *Trivia* and *Scavenger Hunt*, respectively), you may want to add two different taskboards set to track the tasks associated with those games. ##### Using the Taskboard object[​](#using-the-taskboard-object "Direct link to Using the Taskboard object") Most users only need to look at the Taskboard object in order to use it. When game tasks are completed, a green check mark will appear in the box associated with that task. ![](/assets/images/Games_005-1dc31d19b87a84b752d56e1568949005.png) Users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions can access additional administrative functions through the Taskboard object. | Button | Function | | ------------ | ------------------------------------------------------------------------------------------- | | Reset Myself | Resets your personal score for the game in question. | | Reset Game | Resets any shared game data (e.g. the current trivia question). | | Reload Game | Reloads the entire game and its components. Does not delete user data (e.g. points earned). | #### Rewards[​](#rewards "Direct link to Rewards") The Breakroom Games Reward object is a generic reward system that unlocks after a player reaches a certain point threshold. Currently the Reward object can only be used as a simple β€œcompletion” indicator, but in the future, you'll be able to reward your players with achievements and [Silver](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies). Like the [Leaderboard](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#leaderboard) and [Taskboard objects](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard), each Reward object can be set up to track a single game. This means that only points earned on activities and minigames associated with that game will count toward the reward. Multiple Reward objects can be set up for the same game. In your Inventory, you'll see the Breakroom Games Reward object represented by this icon: ![](/img/breakroom/Games_Reward.png) ##### Setting up a Rewards object[​](#setting-up-a-rewards-object "Direct link to Setting up a Rewards object") [YouTube video player](https://www.youtube.com/embed/6v-ojHLNxb4) *** ![](/assets/images/Games_006-5c210904791fedb58f3fdf2ab12e8b41.png) *Pictured: The Inspector window for the Breakroom Games Reward object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Reward object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. info As with all invisible system objects, we recommend editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) to place the Breakroom Games Reward object at 0,0,0. This keeps things tidy in your Region! 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Reward object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game you want to track. 2. In the **Name field**, enter the name of your reward activity (e.g. *Reach 10 Points*, *Find 50 Keys*). 3. In the **Points field**, enter the number of points you would like to award users for completing the reward activity (optional). 4. In the **Points To Unlock field**, enter the number of points users must accumulate to earn the reward. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Using a Rewards object[​](#using-a-rewards-object "Direct link to Using a Rewards object") Most users will interact with the Reward object in a passive manner. Once they have met the specified point threshold, they will earn the reward. #### Findable[​](#findable "Direct link to Findable") ![](/assets/images/Games_007-66f69f08aeae2a361fa0b6faecaf1a99.png) *Pictured: A Breakroom Games Findable object nestled in a group of bushes.* Breakroom Games Findable objects are generic, transparent objects that can be placed anywhere in a Region. Findables are triggered by avatar proximity and can be used to create scavenger hunts or obstacle courses. You can highlight these objects with glowing particles for ease of discovery, or make them completely invisible. In your Inventory, you'll see the Breakroom Games Findable object represented by this icon: ![](/img/breakroom/Games_Findable.png) ##### Setting up a Findable object[​](#setting-up-a-findable-object "Direct link to Setting up a Findable object") [YouTube video player](https://www.youtube.com/embed/1ZzGWOqNQzI) *** ![](/assets/images/Games_008-73a971ded46048f3cf4cb445b87ff2b1.png) *Pictured: The Inspector window for the Breakroom Games Findable object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Findable object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Findable object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the findable activity. 2. In the **Name field**, enter the name of the findable activity (this will be listed on the game Taskboard). 3. In the **Points field**, enter the number of points you would like to award users for completing the findable activity (optional). 4. Check the **Secret option** if you want to turn off the location particles and glow for the findable. This will render the findable completely invisible. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Customizing a Findable collider[​](#customizing-a-findable-collider "Direct link to Customizing a Findable collider") ![](/assets/images/Games_009-7596416e1e0d018feba74d1e56716489.png) *Pictured: A Findable object viewed through the Region Editor. Notice that the object is expanded in the Objects window and that the Findable Collider is highlighted in green.* Findables are triggered by avatar proximity. You can customize the proximity range of a Breakroom Games Findable object by changing the size and shape of its collider. To do so, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Findable object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click the **> arrow** located to the left of the object name to expand it. 4. Click on the **Findable Collider** component to highlight it. [Edit](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Findable Collider to meet your specifications. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). info Findables are a great way to set up an obstacle course for your users. Set out some pillars with Findable objects on top and challenge your users to jump between them! Create rings in the sky with Findable objects inside and see if your users can nail those sudden 90Β° turns while in flight!

Also, did you know that the Points property associated with any activity or minigame object can be 0, as well as a negative number? That means you can set up a Findable object that "awards" negative points for an additional dose of drama! ##### Using a Findable object[​](#using-a-findable-object "Direct link to Using a Findable object") To use a Findable object, all users need to do is move their avatar through its proximity collider. This can be done while walking, running, or flying. #### Clickable[​](#clickable "Direct link to Clickable") ![](/assets/images/Games_010-9317fe515b5f9304bfcd0ee1548ac426.png) *Pictured: A Breakroom Games Clickable object superimposed on a statue.* Breakroom Games Clickable objects are generic, transparent objects that can be placed over another object to turn it into a clickable activity. This functionality is ideal for creating scavenger hunts. You can highlight these objects with glowing particles for ease of discovery or make them completely invisible. In your Inventory, you'll see the Breakroom Games Clickable object represented by this icon: ![](/img/breakroom/Games_Clickable.png) ##### Setting up a Clickable object[​](#setting-up-a-clickable-object "Direct link to Setting up a Clickable object") [YouTube video player](https://www.youtube.com/embed/OswLJBvXNfI) *** ![](/assets/images/Games_011-3708e43cc7550d22fb8064922d7df050.png) *Pictured: The Inspector window for the Breakroom Games Clickable object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Clickable object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Clickable object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the clickable activity. 2. In the **Name field**, enter the name of the clickable activity (this will be listed on the game Taskboard). 3. In the **Points field**, enter the number of points you would like to award users for completing the clickable activity (optional). 4. Check the **Secret option** if you want to turn off the location particles and glow for the clickable. This will render the clickable completely invisible. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Using a Clickable object[​](#using-a-clickable-object "Direct link to Using a Clickable object") To use a Clickable object, users just need to click on it. #### Sittable[​](#sittable "Direct link to Sittable") ![](/assets/images/Games_012-f8909a656b91703f7f3931aa3e78dcf6.png) *A Breakroom Games Sittable object placed on a table.* Breakroom Games Sittable objects are generic, transparent objects that turn the simple action of sitting down into a gamified activity. Both furniture and vehicle seats will work with sittables, allowing you to reward users for attending meetings or participating in fun rallies. You can highlight these objects with glowing particles for ease of discovery or make them completely invisible. In your Inventory, you'll see the Breakroom Games Sittable object represented by this icon: ![](/img/breakroom/Games_Sittable.png) ##### Setting up a Sittable object[​](#setting-up-a-sittable-object "Direct link to Setting up a Sittable object") [YouTube video player](https://www.youtube.com/embed/oPxZWnWK40Y) *** ![](/assets/images/Games_013-01a6e8f5ebacdb3d9261988dc740ccb2.png) *Pictured: The Inspector window for the Breakroom Games Sittable object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Sittable object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Sittable object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the sitting activity. 2. In the **Name field**, enter the name of the sitting activity (this will be listed on the game Taskboard). 3. In the **Points field**, enter the number of points you would like to award users for completing the sitting activity (optional). 4. Check the **Secret option** if you want to turn off the location particles and glow for the sittable. This will render the sittable completely invisible. 5. In the **Seat field**, enter the name of the seat(s) you would like users to sit on. (See below.) 6. In the **Time field**, enter the amount of time users will need to sit in the seat to successfully complete the activity. (Note: Partial times are not recorded. Users must sit in the seat for the full duration in order to complete the activity.) 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ![](/assets/images/Games_014-b218037c9c3c9e3f3b2f67c64a91b05a.png) *Pictured: The Objects window, with a Breakroom Addon Stools set expanded and highlighted.* When setting up the Breakroom Games Sittable, you must specify which seats qualify for the activity. Because seats can be nested in Breakroom, you can either name a specific seat or refer to a broad grouping of seats. In the image above, a [Breakroom Add-on Stools object](/creating-custom-experiences/exploring-the-breakroom-toolkit/add-on-seats.md) has been expanded in the Objects window to reveal its individual stools. If you enter the term *Breakroom* into the Sittable object's **Name field**, then users may sit on any stool in order to complete the activity. However, if you enter the term *Breakroom Stool (11)*, then only that specific stool will qualify. If you have multiple copies of *Breakroom Stool (11)* in your Region, both seats will qualify. ##### Using a Sittable object[​](#using-a-sittable-object "Direct link to Using a Sittable object") To use a Sittable object, users just need to sit on a qualifying seat for the specified time duration. #### Photo Booth[​](#photo-booth "Direct link to Photo Booth") ![](/assets/images/Games_015-a68b1a7c2eaa5571d7f0b4a8023d9a50.png) Photo Booths can be set up so that one or two users are required to complete the activity. You can highlight these objects with glowing particles for ease of discovery, or make them completely invisible. Peppering your region with Photo Booths incentivizes use of Breakroom's [Snapshot feature](/exploring-breakroom/snapshots.md), which also gives users the opportunity to share their virtual photos on social media. In your Inventory, you'll see the Breakroom Photo Booth object represented by this icon: ![](/img/breakroom/Games_Photobooth.png) ##### Setting up a Photo Booth object[​](#setting-up-a-photo-booth-object "Direct link to Setting up a Photo Booth object") [YouTube video player](https://www.youtube.com/embed/8-v8hKNfg80) *** ![](/assets/images/Games_016-ab1a20a5af9c99c06cf6117ca7a73dfe.png) *Pictured: The Inspector window for the Breakroom Games Photo Booth object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Photo Booth object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Photo Booth object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the photo booth activity. 2. In the **Name field**, enter the name of the photo booth activity (this will be listed on the game Taskboard). 3. In the **Points field**, enter the number of points you would like to award users for completing the photo booth activity (optional). 4. Check the **Secret option** if you want to turn off the location particles and glow for the photo booth. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Customizing the Photo Booth object[​](#customizing-the-photo-booth-object "Direct link to Customizing the Photo Booth object") By default, the Breakroom Photo Booth object includes two seats. This means that two users must sit on it and take a photo in order to complete the activity. You can make any photo booth a one-seater by following these steps. ![](/assets/images/Games_017-8287df8e1bd7092cd2f52651a7a2b9ad.png) *Pictured: A Breakroom Photo Booth object expanded in the Object window.* 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Photo Booth object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click the **> arrow** located to the left of the object name to expand it. 4. Locate the **Person 1 and Person 2 seats**. To disable one of these, click the **eye icon** located to the right of its name. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Using a Photo Booth object[​](#using-a-photo-booth-object "Direct link to Using a Photo Booth object") To successfully complete a photo booth activity, one or two users must click on the seat icons and take a snapshot using Breakroom's [Snapshot feature](/exploring-breakroom/snapshots.md). #### Tour Camera[​](#tour-camera "Direct link to Tour Camera") ![](/assets/images/Games_018-a7625604d06696a6aba7cf1d30053341.png) *Pictured: The Breakroom Tour Cameras object set up within a Region.* [Breakroom Tour Cameras](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md) can also be turned into an activity by entering any value into the object Game property. This encourages users to take your Region tour and learn more about your Breakroom World. In your Inventory, you'll see the Breakroom Tour Cameras object represented by this icon: ![](/img/breakroom/Toolkit_Tour_Cameras.png) ##### Setting up the Breakroom Tour Cameras[​](#setting-up-the-breakroom-tour-cameras "Direct link to Setting up the Breakroom Tour Cameras") [YouTube video player](https://www.youtube.com/embed/t8kicy3VHvw) *** ![](/assets/images/Games_019-e6856869672fb39f119c777710098653.png) *Pictured: The Inspector window for the Breakroom Tour Cameras object.* Our documentation includes detailed information about installing and editing the [Breakroom Tour Cameras](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md). After setting up your tour, you will need to edit the camera's [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md) to make it work with the Breakroom Games system. The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Tour Cameras object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the tour activity. 2. In the **Name field**, enter the name of the tour activity (this will be listed on the game Taskboard). 3. In the **Points field**, enter the number of points you would like to award users for completing the tour activity (optional). 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Using the Breakroom Tour Cameras[​](#using-the-breakroom-tour-cameras "Direct link to Using the Breakroom Tour Cameras") To complete the tour task, users will need to click the **Take Tour button** in the [Start Here panel](/advanced-tutorials/uploading-your-own-region/breakroom-start-here-ui.md). Please note that activity requirements will not be met if users stop the tour prematurely. #### Explorer[​](#explorer "Direct link to Explorer") The Breakroom Games Explorer object is a generic activity that rewards players for walking, running, or flying a certain distance during the same login session in the same Region. In your Inventory, you'll see the Breakroom Games Explorer object represented by this icon: ![](/img/breakroom/Games_Explorer.png) ##### Setting up the Explorer object[​](#setting-up-the-explorer-object "Direct link to Setting up the Explorer object") [YouTube video player](https://www.youtube.com/embed/898DJQJjGEM) *** ![](/assets/images/Games_020-99c4f6248e59e69da8ff936a67e235c9.png) *Pictured: The Inspector window for the Breakroom Games Explorer object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Explorer object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. info As with all invisible system objects, we recommend editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) to place the Breakroom Games Reward object at 0,0,0. This keeps things tidy in your Region! 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Explorer object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the explorer activity. 2. In the **Name field**, enter the name of the explorer activity (this will be listed on the game Taskboard). 3. In the **Points field**, enter the number of points you would like to award users for completing the explorer activity (optional). 4. In the **Distance field**, enter the number of meters you want users to cover during the explorer activity. 5. Check the **While Flying option** if you want flight distance to count toward the explorer activity. 6. Check the **While Walking option** if you want walking distance to count toward the explorer activity. 7. Check the **While Running option** if you want running distance to count toward the explorer activity. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Using the Explorer object[​](#using-the-explorer-object "Direct link to Using the Explorer object") To complete an explorer task, users simply need to walk, run, or fly the distance indicated by the Explorer object settings. Please note that if a user logs out before earning a reward, their progress toward that reward will not be saved (i.e. if a user walks 50/100 meters and logs out, they will start at 0 meters when they log in again). Any large abrupt movement will be treated as a teleport and the meters for it will not be calculated. #### Sightseeing[​](#sightseeing "Direct link to Sightseeing") The Breakroom Games Sightseeing object is a generic activity that allows players to be rewarded for visiting a certain number of unique [breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) or [voice zones](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md). This activity requires that the [conference system](/running-your-event/understanding-the-conference-system.md) be set up in the same Region. In your Inventory, you'll see the Breakroom Games Sightseeing object represented by this icon: ![](/img/breakroom/Games_Sightseeing.png) ##### Setting up the Sightseeing object[​](#setting-up-the-sightseeing-object "Direct link to Setting up the Sightseeing object") [YouTube video player](https://www.youtube.com/embed/Ims9Fm37tJY) *** ![](/assets/images/Games_021-e5301233257f080267bed1b416afc490.png) *Pictured: The Inspector window for the Breakroom Games Sightseeing object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Sightseeing object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. info As with all invisible system objects, we recommend editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) to place the Breakroom Games Reward object at 0,0,0. This keeps things tidy in your Region! 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Sightseeing object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the sightseeing activity. 2. In the **Name field**, enter the name of the sightseeing activity (this will be listed on the game Taskboard). 3. In the **Points field**, enter the number of points you would like to award users for completing the sightseeing activity (optional). 4. In the **Zone Name field**, enter the zone name keyword you would like to count toward the sightseeing activity. (E.g. all zones that have *Breakout* in their name, all zones that have *Pavilion* in their name, etc. As long as the keyword appears somewhere in the zone name, the rest of the zone name doesn't matter.) 5. In the **Zone Count field**, enter the number of zones you would like users to visit in order to complete the sightseeing activity. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Using the Sightseeing object[​](#using-the-sightseeing-object "Direct link to Using the Sightseeing object") To complete the sightseeing activity, users need to visit the correct number of zones that meet the keyword criteria. #### Trivia[​](#trivia "Direct link to Trivia") ![](/assets/images/Games_022-6c4a37f261fc8895aa717801e472f671.png) The Breakroom Games Trivia object is a trivia minigame where a Quizmaster initiates questions that can then be answered by anyone in the Region. Points are awarded based on question difficulty. In your Inventory, you'll see the Breakroom Games Trivia object represented by this icon: ![](/img/breakroom/Games_Trivia.png) ##### Setting up a Trivia object[​](#setting-up-a-trivia-object "Direct link to Setting up a Trivia object") [YouTube video player](https://www.youtube.com/embed/rQ18jWRMogk) *** ![](/assets/images/Games_023-2ce2ad3ed1fd9d79a052e930964f70e9.png) *Pictured: The Inspector window for the Breakroom Games Trivia object.* After [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the Breakroom Games Trivia object in your Region, you will need to edit its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The steps below are provided for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Games Trivia object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Game field**, enter the name of the game that includes the trivia minigame. 2. In the **Name field**, enter the name of the trivia minigame (this will be listed on the game Taskboard). 3. In the **Easy Points field**, enter the number of points you would like to award users for correctly answering an easy question (optional). 4. In the **Medium Points field**, enter the number of points you would like to award users for correctly answering a medium question (optional). 5. In the **Hard Points field**, enter the number of points you would like to award users for correctly answering a hard question (optional). 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. 6. Click the **Reload Game button** on the appropriate [Breakroom Games Taskboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard). ##### Using a Trivia object[​](#using-a-trivia-object "Direct link to Using a Trivia object") ![](/assets/images/Games_024-127fa933e4d3798900d82e39809291c8.png) ###### Quizmaster[​](#quizmaster "Direct link to Quizmaster") Any user with [Region Moderator permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) or higher (hereafter referred to as the *Quizmaster*) can click the **Open Quizmaster button** on the Breakroom Games Trivia object. Doing so opens a panel where the Quizmaster can select: * The trivia question category * The question format * The question difficulty * How much time users have to answer the question The Quizmaster can then click the **GO! button** to begin the trivia round. When the trivia game is over, clicking the **Close Quizmaster button** will dismiss the Quizmaster panel. ###### Trivia participants[​](#trivia-participants "Direct link to Trivia participants") Within the timeframe specified by the Quizmaster, all users are permitted to answer the active trivia question. Users must click on their preferred response, and will not have the ability to change their answer. All correct answers will be rewarded. This means that theoretically, a trivia game could end with *everyone* being a winner! #### Sample Breakroom Games Region walkthrough[​](#sample-breakroom-games-region-walkthrough "Direct link to Sample Breakroom Games Region walkthrough") Now that we understand the different Breakroom Games system components and how they work together, let's take a look at some sample games set up in a Region. ![](/assets/images/Games_025-be48714aabc2e1f15c838ea4febe65eb.png) Here we see a [Breakroom Games Leaderboard object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#leaderboard) and a [Breakroom Games Taskboard object ](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#taskboard)set up to track the same game (*Upward Con*). This game consists of an obstacle course, a single-item scavenger hunt, a photo booth, exploration activities, and a bonus reward for reaching 10 points. When a user looks at the Leaderboard object, they will see the ten highest scores for the game. Their own score is displayed on the ribbon located in the top right-hand corner, even if their name doesn't appear in the top ten list. ![](/assets/images/Games_026-84c8999a15da648f932d5d2eeba83572.png) All of the activity and minigame objects listed on the Taskboard object, as well as the associated Leaderboard object, have *Upward Con* specified as their object Game property. This *game name* is what ties the objects together, ensuring that they work as a unit. It is important to note that some Breakroom Games objects allow you to enter an *activity name* as well as a *game name.* Here you can see that for the statue clickable, the Game property is set to *Upward Con*. However, the Name property is set to *Find Our Logo Statue*. This activity name appears on the Taskboard, so users can more easily understand the steps they need to take to complete an activity. ![](/assets/images/Games_027-850eaeaf3174479a022e0b00862d9ef1.png) Meanwhile, we also have a trivia board set up in the same Region. Notice how the [Breakroom Games Trivia object](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#trivia), as well as the Leaderboard and Taskboard objects, all have *Trivia Night* specified as their object Game property. This allows the objects to function together, and also sets this minigame apart as a separate game, with its own scoring and rewards system. Points earned in this trivia minigame will not appear on the Upward Con leaderboard, and vice versa. On the Taskboard object, you can also see that we have set up two separate rewards just for the trivia game. This is accomplished by setting out multiple [Breakroom Games Reward objects](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md#rewards) and editing their RoomFurniture component properties to meet your specifications. ![](/assets/images/Games_028-15afbcd60e5a9409ca9f7555291646a7.png) To help keep things organized, it's important to remember that you can customize any object's *Display Name* in the [Inspector window](/creating-custom-experiences/using-the-region-editor.md#the-inspector-window). This can make it easier to locate objects in the Objects window. Here, for example, we can see that the two trivia rewards are named "Breakroom Games Reward Trivia" and "Breakroom Games Reward Trivia 2," respectively. The Leaderboard and Taskboard objects also have *Trivia* appended to their Display Names, making them easy to recognize. Notice that both trivia Reward objects have their Game property set to *Trivia Night*, and both have been set up to award points for reaching a certain point threshold. This, of course, is completely optional, and rewards may simply be standalone achievements. --- ### Breakroom Image Viewer [YouTube video player](https://www.youtube.com/embed/j2co0i7utqY) #### Overview[​](#overview "Direct link to Overview") The Breakroom Image Viewer allows Object Owners and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions to upload static imagesβ€”including company logos, informational signage, and event branding or advertisingβ€”and display them almost anywhere. Event coordinators can also create clickable images that will direct users to a webpage. In your Inventory, you'll see the Breakroom Image Viewer represented by this icon: ![](/img/breakroom/Toolkit_Image_Viewer-icon.png) For help installing the Breakroom Video Player, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Setting up the Breakroom Image Viewer[​](#setting-up-the-breakroom-image-viewer "Direct link to Setting up the Breakroom Image Viewer") ![](/img/breakroom/Toolkit_Image_001.png) *Highlighted: The Breakroom Image Viewer access buttons.* The Breakroom Image Viewer control panel is only accessible to the Object Owner and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions. To access it, click on the Breakroom Image Viewer and then click the **Open Admin button**. info When users click on a web-enabled viewer, they will only see the **Open URL button**. Clicking this button will open the associated URL in an external browser tab. ##### Adding an image[​](#adding-an-image "Direct link to Adding an image") ![](/img/breakroom/Toolkit_Image_002.png) *Pictured: The Breakroom Image Viewer settings.* To display an image using the Breakroom Image Viewer, follow these steps: 1. Locate the Breakroom Image Viewer object you want to edit. 2. Click on the **image viewer**, and then click the **Open Admin button** to open the control panel. 1. To choose an image you've already uploaded to Breakroom, click the **Image Library button**. This will open the image picker. Click on the **image** you want to use. 2. To upload a new image from your computer, or click the **Upload New Image button**. This will open a standard file picker on your computer. Locate the image you want to use, click on it, and then click the **Open button**. 3. Your selected image will display in the preview window. Make sure everything looks good, and then click the **Save and Close button**. ##### Adding a webpage URL[​](#adding-a-webpage-url "Direct link to Adding a webpage URL") ![](/img/breakroom/Toolkit_Image_003.png) *Pictured: The Webpage URL option in the Breakroom Image Viewer control panel.* To link a webpage to your Breakroom Image Viewer, follow these steps: 1. Locate the Breakroom Image Viewer object you want to edit. 2. Click on the **image viewer**, and then click the **Open Admin button** to open the control panel. 3. Paste your URL into the **Webpage URL field**. 4. Click the **Save and Close button**. Now when users click on the Breakroom Image Viewer, they will see an **Open URL button**. Clicking this button will open the associated URL in an external browser tab. #### Image viewer options[​](#image-viewer-options "Direct link to Image viewer options") ![](/img/breakroom/Toolkit_Image_004.png) *Pictured: Settings available in the Breakroom Image Viewer control panel.* The Breakroom Image Viewer control panel also allows you to customize the way images are displayed. To edit the image display options, follow these steps: 1. Locate the Breakroom Image Viewer object you want to edit. 2. Click on the **image viewer**, and then click the **Open Admin button** to open the control panel. 3. Click the **ON or OFF button** located next to each image display option. 4. Click the **Save and Close button**. | Display setting | Function | | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Post FX | If set to ON, will turn off various graphics settings within the image viewer [collider zone](breakroom-image-viewer#editing-the-breakroom-image-viewer-collider-zone) that could distort the image or on-screen text. | | Transparency | If set to ON, will enable display of images with a transparent background. | | Back Panel | If set to ON, the image viewer will display a solid rear panel if viewed from the other side. If set to OFF, this panel will be made transparent. | | Pops Out | If set to ON, image viewer screen will "pop out" to user screen when users enter the image viewer [collider zone](breakroom-image-viewer#editing-the-breakroom-image-viewer-collider-zone). The offset and scale of this pop-out screen can be customized by entering values into the associated fields. | #### Editing the Breakroom Image Viewer collider zone[​](#editing-the-breakroom-image-viewer-collider-zone "Direct link to Editing the Breakroom Image Viewer collider zone") ![](/img/breakroom/Toolkit_Video_006.png) *Pictured: The Region Editor, with a *Breakroom Video Player* object selected. The transparent green box indicates the size and location of the collider zone. In the Objects window, you can see that the collider zone is nested within the Breakroom Video Player object. This information also applies to Breakroom Image Viewers.* Several image viewer options are triggered when an avatar enters the Breakroom Image Viewer collider zone. The size and position of this collider zone can be customized using the Region Editor. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). To edit the Breakroom Image Viewer collider zone, follow these steps: 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Locate the Breakroom Image Viewer object you want to edit. Click on it to highlight it in the **Objects window**. 3. In the Objects window, click the **> arrow** to the left of the Breakroom Image Viewer object to expand it. Then click on the **Collider component.** 4. Using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) or the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), move, rotate, and resize the collider to meet your specifications. 5. When you are satisfied, click the **Save button** to store your changes. #### Tips for best performance[​](#tips-for-best-performance "Direct link to Tips for best performance") ![](/img/breakroom/Toolkit_Image_005.png) * The Breakroom Image Viewer will automatically adjust its dimensions to match the aspect ratio of the image displayed on it. As a result, you may find that a finished image panel cuts through the floor of your Region or is otherwise too large or small for its intended purpose. You can use the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to adjust the [position, rotation, and scale](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) of the image viewer as needed. * To resize an image viewer while maintaining the proper aspect ratio, hold down the **Shift key** while dragging the [**scaling gizmo**](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling). This will allow you to make the image viewer larger or smaller without distorting the image. * Images have a 5MB size limit. We recommend that image files used for signage or decorative purposes be no longer than 1024px along one side. --- ### Breakroom Info Kiosk #### Overview[​](#overview "Direct link to Overview") ![](/img/breakroom/Toolkit_Info_001.png) The Breakroom Info Kiosk allows Object Owners and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions to set up text-based signage and edit it as needed from within the Breakroom platform. [Unity rich text tags](https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/StyledText.html) can be used to customize the text display, making it ideal for publishing dynamic information like event schedules and technical updates. In your Inventory, you'll see the Breakroom Info Kiosk represented by this icon: ![](/img/breakroom/Toolkit_Info-icon.png) For help installing the Breakroom Info Kiosk, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Setting up the Breakroom Info Kiosk[​](#setting-up-the-breakroom-info-kiosk "Direct link to Setting up the Breakroom Info Kiosk") ![](/img/breakroom/Toolkit_Info_002.png) *Highlighted: The location of the Breakroom Info Kiosk gear icon.* The Breakroom Info Kiosk control panel is only accessible to the Object Owner and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions. To access it, click on the **gear icon.** ##### Kiosk access and display settings[​](#kiosk-access-and-display-settings "Direct link to Kiosk access and display settings") ![](/img/breakroom/Toolkit_Info_003.png) *Pictured: The Breakroom Info Kiosk control panel.* Kiosk access and text display settings are the very first thing you'll see in the Breakroom Info Kiosk control panel. You can limit or permit [Moderator](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) access to the control panel, specify the kiosk's text size range, and more. These settings apply only to the individual kiosk. To change the access and display settings, follow these steps: 1. Locate the Breakroom Info Kiosk object you want to edit. 2. Click on the **gear icon** to open the Breakroom Info Kiosk control panel. 3. Click the **ON or OFF button** located next to each option. 4. Click the **Save and Close button**. | Info kiosk setting | Function | | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Moderators Can Edit | If set to ON, [Moderators](../../opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions) will be able to access the control panel. This means that they can edit the kiosk settings, delete existing text, and enter new text. | | Pops Out | If set to ON, the kiosk will "pop out" to the user's screen when users enter the info kiosk [collider zone](breakroom-info-kiosk#editing-the-breakroom-info-kiosk-collider-zone). The offset and scale of this pop-out can be customized by entering values into the associated fields. | | Minimum Font Size | Sets the smallest possible font size for the text display. | | Maximum Font Size | Sets the largest possible font size for the text display. | ##### Entering text into the Breakroom Info Kiosk[​](#entering-text-into-the-breakroom-info-kiosk "Direct link to Entering text into the Breakroom Info Kiosk") ![](/img/breakroom/Toolkit_Info_004.png) *Pictured: The Breakroom Info Kiosk control panel contains ten separate text boxes.* The Breakroom Info Kiosk contains ten separate text boxes. You can enter text into one or all of these boxes. Depending on your chosen [display settings](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-info-kiosk.md#kiosk-access-and-display-settings), the text you enter will resize automatically. To enter text into a Breakroom Info Kiosk, follow these steps: 1. Locate the Breakroom Info Kiosk object you want to edit. 2. Click on the **gear icon** to open the Breakroom Info Kiosk control panel. 3. Type or paste your text into one or more of the **text boxes**. 4. Click the **Save and Close button**. ##### Rich text support and style tips [](#rich-text-support-and-style-tips)[​](#rich-text-support-and-style-tips- "Direct link to rich-text-support-and-style-tips-") * If you enter a **single space** into any text box and save your work, that field will appear as an empty line on the Breakroom Info Kiosk. This can be useful if you want to create white space between two lines of text. * The following [Unity rich text markup tags](https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/StyledText.html) are supported, and you can use them to further customize your text. * The *color tag* accepts most color keywords, but can also be used with a hex color code. * The *size tag* will override any general [min/max font settings](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-info-kiosk.md#kiosk-access-and-display-settings) made using the Breakroom Info Kiosk control panel. For more precise font size control, you may wish to set the minimum and maximum font size to the same value, and then use the size tag to edit your text as appropriate. | Tag | Description | Use | | -------------------- | ------------------ | ------------------------------------------------------------- | | \ \ | Bold | \Example\ | | \ \ | Italic | \Example\ | | \ \ | Changes text size | \Example\ | | \ \ | Changes text color | \Example\ \Example\ | #### Editing the Breakroom Info Kiosk collider zone[​](#editing-the-breakroom-info-kiosk-collider-zone "Direct link to Editing the Breakroom Info Kiosk collider zone") ![](/img/breakroom/Toolkit_Info_005.png) *Pictured: The Region Editor, with a Breakroom Info Kiosk object selected. The transparent green box indicates the size and location of the collider zone. In the Objects window, you can see that the collider zone is nested within the Breakroom Info Kiosk object.* Some options are triggered when an avatar enters the Breakroom Info Kiosk collider zone. The size and position of this collider zone can be customized using the Region Editor. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). To edit the Breakroom Info Kiosk collider zone, follow these steps: 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Locate the Breakroom Info Kiosk object you want to edit. Click on it to highlight it in the **Objects window**. 3. In the Objects window, click the **> arrow** to the left of the Breakroom Info Kiosk object to expand it. Then click on the **Collider component.** 4. Using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) or the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), move, rotate, and resize the collider to meet your specifications. 5. When you are satisfied, click the **Save button** to store your changes. --- ### Breakroom Landmark #### Overview[​](#overview "Direct link to Overview") Every Breakroom [voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) includes a *landing pad* component that indicates where avatars will arrive when they [teleport](/getting-started/using-the-conference-system.md#navigating-an-event) to that location. The Breakroom Landmark object gives you the ability to set up a similar landing pad anywhere within a Region, independent of other voice zone functionality. In your Inventory, you'll see the Breakroom Landmark represented by this icon: ![](/img/breakroom/Breakroom_Landmark_001-icon.png) In order to set up a Breakroom Landmark, users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions will need to place the object in a Region and edit its sub-objects and components. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Setting up a Breakroom Landmark[​](#setting-up-a-breakroom-landmark "Direct link to Setting up a Breakroom Landmark") ![](/assets/images/Toolkit_Landmark_001-5bf7ab2ed4141bb1c1dd7a8df3445a5a.png) *Pictured: The Region Editor, with a Breakroom Landmark object highlighted.* To place a Breakroom Landmark object in your Region, follow the quick-start steps below. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Inventory button** in the bottom right toolbar. 3. Search for the **Breakroom Landmark** object in your Inventory and drag the item into your Region. 4. The Breakroom Landmark object must be located at the place you want users to arrive. You can [position](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) it using the Region Editor tools, or by manually editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component). info The size of the landing pad indicates the area into which your users will teleport. You can make the landing pad bigger or smaller by highlighting it in the **Objects window** and then changing the local scale values listed under its [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), or by using the [scale tool](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling) in the Region Editor. ![](/assets/images/Toolkit_Landmark_002-17c016e0067cd13535617e8457db13a7.png) *Pictured: The Breakroom Landmark Inspector window, with the RoomFurniture component expanded.* Once you've customized the Breakroom Landmark object position and size, you'll need to assign it a name. You can also assign it a specific color for use in the associated UI, and control whether it appears under the [Areas of Interest panel](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-landmark.md#the-areas-of-interest-panel). 5. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 1. In the **Landmark Name field**, enter the name you would like to use for the landmark. 2. If you leave the **Landmark Color field** set to *default*, the teleport button associated with the landmark will follow the color "rules" set by the conference system or your [UI customization choices](/creating-custom-experiences/ui-customization-options.md#customizing-the-ui-colors). You can change this color by manually typing in any of the [allowed color keywords](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-color). You can also change the hex code associated with these keywords for even more options. 3. If you want the landmark to be visible under the [Areas of Interest panel](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-landmark.md#the-areas-of-interest-panel), type the word *yes* into **Landmark Visible field**. If you want to remove it from the panel, set the field to *no*. 6. Click the **Reset Zones button** to reset the conferencing system. 7. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. #### Accessing a Breakroom Landmark[​](#accessing-a-breakroom-landmark "Direct link to Accessing a Breakroom Landmark") ###### The Areas of Interest panel[​](#the-areas-of-interest-panel "Direct link to The Areas of Interest panel") ![](/assets/images/Toolkit_Landmark_007-167f219ca3ef96e097bc454eebd8a50a.png) *Pictured: The Areas of Interest panel.* After you set up a Breakroom Landmark as described above, a teleport button will be added to the [Areas of Interest panel](/getting-started/using-the-conference-system.md#navigating-an-event). Users can click these buttons at any time in order to travel to the specified point. ###### The Crowd Management panel[​](#the-crowd-management-panel "Direct link to The Crowd Management panel") ![](/img/breakroom/Toolkit_Landmark_004.png) You can also select the Breakroom Landmark as a teleport location under the [Crowd Management panel](/running-your-event/moderator-tools/crowd-management.md) on the [Moderator tools](/running-your-event/moderator-tools.md). This gives [Moderators](https://docs.breakroom.tech/running-your-event/moderator-tools#accessing-the-moderator-controls) the ability to teleport or more users directly to the landmark as needed. ###### Multi-zone landmarks[​](#multi-zone-landmarks "Direct link to Multi-zone landmarks") ![]() *Highlighted: A multi-zone landmark in the Crowd Management panel.* By naming Breakroom Landmarks sequentially, you will create an additional place listing in the Crowd Management panel devoid of any identifying numeral and labeled *multiple locations*. This teleport target can be employed to send users to a random associated landmark. In the example pictured above, you can see we've named two Breakroom Landmarks *Breakout 1* and *Breakout 2.* Notice how this has created an additional landmark simply named *Breakout,* which has no numeral and is labeled *multiple locations.* This multi-zone landmark can be used to teleport a crowd of multiple users, with those users being distributed randomly between the two associated landmarks. #### Advanced Breakroom Landmark options[​](#advanced-breakroom-landmark-options "Direct link to Advanced Breakroom Landmark options") When installing a Breakroom Landmark object, you can choose between *default landing* and *clustered landing* effects for users who teleport there. You can also randomize the direction your users will face upon arrival. ##### Default landing [](#default-landing)[​](#default-landing- "Direct link to default-landing-") The default landing pattern is automatically enabled upon installation. Under the default landing pattern, users will arrive at random points within the boundary designated by the Breakroom Landmark object. info To avoid a teleportation bottleneck, make your landing pad object as large as possible. ##### Clustered landing [](#clustered-landing)[​](#clustered-landing- "Direct link to clustered-landing-") By enabling the *clustered landing* option, you can arrange for users to arrive in *groups* within the zone designated by the Breakroom Landmark object. This can help foster an atmosphere of socialization and camaraderie. ![](/assets/images/Toolkit_Landmark_006-18d2357ca79bad8a81a28878b178975e.png) *Highlighted: The location of the Landing object in the Objects window, as well as the relevant landing pad components in the Inspector window.* To enable and manage clustered landing, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects button** to launch the Objects window. Locate the **Breakroom Landmark object** you want to edit and click the **> icon** to the left of the object name to expand it. Then click on the **Landing component** to highlight it. 3. In the **Inspector** window that opens, click on the **> icon** to the left of both the **Transform** and **ScriptingData components** to expand them. At this point, it is useful to explain what a few of these component properties do, as well as some of the math involved in creating clustered landing areas. The key properties to consider are: * *Transform component > Local Scale.* This property controls the size of the Landing component. In the example image above, you can see that the object is 6x1x12 meters, or 6x12 along the axes that "count." * *ScriptingData component > Clustered Landing.* This property controls whether clustered landing is enabled or disabled. If clustered landing is turned off, users will arrive in the [default/randomized](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-landmark.md#default-landing) landing style. * *ScriptingData component > Cluster Size.* This property controls the size of the clustered landing areas *within* the Landing component. * *ScriptingData component > Random Orientation.* This property controls whether users will arrive in a group facing each other (i.e. oriented toward the center of the cluster), or facing in random directions. The most important property to consider is the *Cluster Size.* This value must be entered as a number. If you enter the numeral *N*, we might summarize the instructions relayed to the system as "*create as many clustered landing areas of NxN meters as will fit within the scale values of the landing pad object."* In the example image above, you can see that the Landing component is 6x12 meters in size. Under the ScriptingData component, you can see that the Cluster Size property has been set to 6. This will result in the creation of two 6x6 meter clustered landing areas within the boundary designated by the Breakroom Landmark. With this explained, let's return to the instructions. 4. Make sure the **Landing component** is the size you need by changing the [local scale values](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) listed under its Transform component, or by using the [scale tool](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling) in the Region Editor. 5. Under the **ScriptingData component**, enable or customize the following properties: 1. Random Orientation: 1. If you want users to arrive in a cluster facing each other, enter *no* into the field. 2. If you want users to arrive in a cluster facing in random directions, enter *yes*. 2. Clustered Landing: Enter *yes* into the field. 3. Cluster Size: Enter the size of your clustered landing points into the field (e.g. *3* to create 3x3 clustered landing points). 6. Click the **Reset Zones button** to reset the conferencing system. 7. When you are satisfied, click the **Save button** to store your changes. ##### Random Orientation[​](#random-orientation "Direct link to Random Orientation") Whether you choose to implement [default landing](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-landmark.md#default-landing) or [clustered landing](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-landmark.md#clustered-landing) for your Breakroom Landmarks, you can randomize the direction that your users will face when they arrive. To do so, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects button** to launch the Objects window. Locate the **Breakroom Landmark object** you want to edit and click the **> icon** to the left of the object name to expand it. Then click on the **Landing component** to highlight it. 3. In the **Inspector** window that opens, click on the **> icon** to the left of the **ScriptingData component** to expand it. 4. In the **Random Orientation field**, enter *yes*. 5. Click the **Reset Zones button** to reset the conferencing system. 6. When you are satisfied, click the **Save button** to store your changes. To return a Breakroom Landmark to standard orientation, repeat steps 1-4 above and enter *no* into the Random Orientation field. Click the **Reset Zones button**, followed by the **Save button**. --- ### Breakroom Note Board [YouTube video player](https://www.youtube.com/embed/orE4hd3ptyA) #### Overview[​](#overview "Direct link to Overview") Reusable notes or whiteboards are indispensable for brainstorming sessions, agile management, tutorials, games, and many other professional applications. Each Breakroom Note Board item functions as a reusable note that can be edited either by the public, or by users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions. In your Inventory, you'll see the Breakroom Note Board represented by this icon: ![](/img/breakroom/Toolkit_Note_Board-icon.png) For help installing a Breakroom Note Board object, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Breakroom Note Board controls [](#controls)[​](#breakroom-note-board-controls- "Direct link to breakroom-note-board-controls-") ##### Read mode [](#read-mode)[​](#read-mode- "Direct link to read-mode-") ![](/img/breakroom/Toolkit_Notes_001.png) *Pictured: A Breakroom Note Board in read mode.* In read mode, each note features a **title**, **text**, and **author name**. There are also two buttons. **Edit:** Clicking the **Edit button** allows you to make changes to the card, if you have permission to do so (or the card is set to be edited by the public). **Zoom In:** Clicking the **Zoom In button** causes your camera to focus on the card. To look away again, click **Zoom Out**. ##### Write mode[​](#write-mode "Direct link to Write mode") ![](/img/breakroom/Toolkit_Notes_002.png) *Pictured: A Breakroom Note Board in write mode.* In write mode, you can edit the note's contents or grant editing permissions to the public. Here's a brief overview of the relevant fields and options. | Field or option | Function | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Title | Allows you to enter a title for the card. | | Description | Allows you to enter text that will be displayed on the card. | | Font | Allows you to choose from a variety of fonts. | | Text Color | Allows you to choose from a variety of text colors. | | Public Editing | Checking this box will enable the card to be edited by anyone. If this box remains unchecked, only users with [advanced permissions](../../opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions) can edit the card. | | Save | Saves your changes. | | Cancel | Cancels your changes. | --- ### Breakroom Orientation Quest #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Toolkit_Orientation_001-9795e6d3c5580bef60c090688742fa43.png) The Breakroom Orientation Quest offers a personalized, self-paced tutorial experience for users who need help getting around, changing their avatar, and activating their microphone. Located high in the sky, the Orientation Zone can serve as a relaxed, quiet place for new users to get away from the hubbub and get their virtual feet under them. In your Inventory, you'll see the Breakroom Orientation Quest represented by this icon: ![](/img/breakroom/Toolkit_Orientation-icon.png) The Breakroom Orientation Quest is a single, self-contained object that can be installed in any Region. If you need help, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. warning The Breakroom Orientation Quest is built using our Quest System. If you're interested in building your own custom quests, please see our [Quest System documentation](/advanced-tutorials/installing-the-quest-system.md). info This object is invisibleβ€”you can place it anywhere. However, we encourage you to locate it at 0,0,0 in your region by manually editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component). #### Using the Breakroom Orientation Quest[​](#using-the-breakroom-orientation-quest "Direct link to Using the Breakroom Orientation Quest") ![](/assets/images/Toolkit_Orientation_002-d04f1569c227939145144dad2a3837fb.png) *Pictured: The Orientation Quest pop-up.* When users enter a Region that contains the Breakroom Orientation Quest, they'll be welcomed with a pop-up reminding them how to [get around](/getting-started/controlling-your-avatar.md). After reviewing this information, they can click the **Close button** to dismiss the pop-up, or click the **Orientation Quest button** to teleport to the Orientation Zone. Completing the Orientation Quest is fairly straightforwardβ€”helpful robot guides will walk users through every step. Users will learn how to select a [starter avatar](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md), how to [move](/getting-started/controlling-your-avatar.md) through the Metaverse, how to use their [microphones](/getting-started/using-the-conference-system.md#voice-chat) to talk on voice chat, and how [spatial audio](/running-your-event/understanding-the-conference-system/voice-chat-and-spatial-audio.md) works. If at any time they wish to exit the quest, they can do so by clicking the **Go Back button** located in the top left corner of the screen. #### Orientation Regions[​](#orientation-regions "Direct link to Orientation Regions") By installing the Breakroom Orientation Quest in an official [Orientation Region](/building-new-worlds/default-landing-and-orientation-regions.md#orientation-regions), you can make the quest mandatory for all new users. Users will arrive in your Orientation Region, and will not be allowed to exit the Region until they have completed the tutorial. --- ### Breakroom Reactives #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Reactives_001-aaf21b84d42fa00e03a9ca254d9dcb74.png) Breakroom Reactives are objects with unique animated effects that are triggered by avatar proximity. When added to your Breakroom Regions, they can serve as points of interest and reinforce the user-avatar bond through moments of unexpected play. In order for the Breakroom Reactives to work, users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions will need to place them in a Region and edit their components. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help[ installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). danger Some Breakroom Reactives create effects that include strobing lights, bright flashing colors, and graphics distortions. These effects may be harmful for users with photosensitive epilepsy or other neurological conditions. We respectfully request that Breakroom designers consider their audience when using these objects. #### Breakroom Reactive Blooming Garden[​](#breakroom-reactive-blooming-garden "Direct link to Breakroom Reactive Blooming Garden") ![](/assets/images/Reactives_002-52565167c990215150ac15ad87bbc341.png) The Breakroom Reactive Blooming Garden will blossom to greet your users as they approach, producing tropical garden plots with functional seating. As users wander away, the gardens will draw back into the ground, waiting to be discovered by the next lucky explorer. info Like many objects in Breakroom, the Reactive Blooming Garden can be [scaled up](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling) to meet your needs. You could create a giant garden that appears out of nowhere, making your users feel like ants! ##### Blooming Garden options[​](#blooming-garden-options "Direct link to Blooming Garden options") ![](/assets/images/Reactives_003-0f86bdf7fe67e74e5580dd9e49183de4.png) *Pictured: The Reactive Blooming Garden Inspector window.* Several options for customizing the Breakroom Reactive Blooming Garden can be found under the object's [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). Steps to access the RoomFurniture component and edit its properties are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Reactive Blooming Garden object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. Edit the properties to your specifications. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. Under the RoomFurniture component, there are two properties you can editβ€”**Max Dist** and **Min Dist**. ###### **Max Dist**[​](#max-dist "Direct link to max-dist") This number specifies the radius length of the interaction zone. Once users are *N* meters away, the Reactive Blooming Garden will begin to sprout out of the ground. ###### **Min Dist**[​](#min-dist "Direct link to min-dist") This number specifies the distance at which the Reactive Blooming Garden reaches its full size. Once users are within *N meters* from the center of the Blooming Garden object, it will stop growing. When users exit this *N-meter* "inner radius," the Blooming Garden will begin to shrink. #### Breakroom Reactive Blooming Mushrooms[​](#breakroom-reactive-blooming-mushrooms "Direct link to Breakroom Reactive Blooming Mushrooms") ![](/assets/images/Reactives_004-4cf03d3f484082de6c4cc2d2bbd99b25.png) Breakroom Reactive Blooming Mushrooms will sprout as users approach, filling the air with sparkling spores and will o' the wisps. As users step away, the mushrooms will pop back into the ground. info Like many objects in Breakroom, the Reactive Blooming Mushrooms can be [scaled](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling) to meet your needs. You can set out tiny patches of mushrooms that erupt underfoot as users explore a path, or create a magical mushroom forest! ##### Blooming Mushroom options[​](#blooming-mushroom-options "Direct link to Blooming Mushroom options") ![](/assets/images/Reactives_005-8cd06681b64c42cb52fb485ea333e2e1.png) *Pictured: The Reactive Blooming Mushrooms Inspector window.* Like the Breakroom Reactive Blooming Garden, additional options for the Blooming Mushrooms object can be found under its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). Steps to access the RoomFurniture component and edit its properties are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Reactive Blooming Mushroom object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. Edit the properties to your specifications. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. Under the RoomFurniture component, there are two properties you can editβ€”**Max Dist** and **Min Dist**. ###### **Max Dist**[​](#max-dist-1 "Direct link to max-dist-1") This number specifies the radius length of the interaction zone. Once users are *N* meters away, the Reactive Blooming Mushrooms will begin to sprout out of the ground. ###### **Min Dist**[​](#min-dist-1 "Direct link to min-dist-1") This number specifies the distance at which the Reactive Blooming Mushrooms reach full size. Once users are within *N meters* from the center of the Blooming Mushrooms object, it will stop growing. When users exit this *N-meter* "inner radius," the Blooming Mushrooms will begin to shrink. #### Breakroom Reactive Glitches[​](#breakroom-reactive-glitches "Direct link to Breakroom Reactive Glitches") ![](/assets/images/Reactives_006-66d062612ee8e96b1ada555f24a1f9ea.png) Breakroom Reactive Glitches will warp metaversal reality as your avatars draw close to the pulsating "glitch ball," creating unique environmental effects. danger The effects contained within the Breakroom Reactive Glitches object make use of strobing lights, bright flashing colors, and graphics distortions. These effects may be harmful for users with photosensitive epilepsy or other neurological conditions. ##### Reactive Glitches options[​](#reactive-glitches-options "Direct link to Reactive Glitches options") ![](/assets/images/Reactives_007-84f174c4642523600f3129f896f0677d.png) *Pictured: The Breakroom Reactive Glitches Inspector window.* Additional options for the Reactive Glitches object can be found under its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). Steps to access the RoomFurniture component and edit its properties are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Reactive Glitches object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. Edit the properties to your specifications. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. Under the RoomFurniture component, there are several properties you can editβ€”**Max Dist**, **Min Dist**, **Max Time**, **Min Time**, and **Cycles**. ###### **Max Dist**[​](#max-dist-2 "Direct link to max-dist-2") This number specifies the radius length of the interaction zone. Once users are *N* meters away from the Reactive Glitches ball, the glitch effects will be activated. Toward the outer point of this radius, glitch effects will appear more infrequently. ###### **Min Dist**[​](#min-dist-2 "Direct link to min-dist-2") This number specifies the distance at which the glitches reach full effect. Users who stand within this inner radius of *N meters* from the center of the Reactive Glitches ball will see glitch effects far more frequently. ###### **Max Time**[​](#max-time "Direct link to max-time") This number specifies the time frequency, in seconds, of glitch effects within the outer bounds of the Max Dist interaction zone. ###### **Min Time**[​](#min-time "Direct link to min-time") This number specifies the time frequency, in seconds, of glitch effects within the Min Dist interaction zone. ###### **Cycles**[​](#cycles "Direct link to cycles") If enabled, all ten glitch effects will play in random order with no repeats. Once all ten effects have been played, they will be cycled again at random. If disabled, glitches will play at random, potentially with repeats. #### Breakroom Reactive Particles (Tendrils)[​](#breakroom-reactive-particles-tendrils "Direct link to Breakroom Reactive Particles (Tendrils)") ![](/assets/images/Reactives_008-20f2ee3137490d6023b84aed2d3847fb.png) Breakroom Reactive Tendrils are triggered by avatar proximity. Watch them dance, wriggle, and stretch toward your avatar as you move past, only to freeze in position when you go still. danger Breakroom Reactive Tendrils are glowing objects that appear to move through virtual space. This effect may be harmful for users with photosensitive epilepsy or other neurological conditions. ##### Reactive Tendrils options[​](#reactive-tendrils-options "Direct link to Reactive Tendrils options") ![](/assets/images/Reactives_009-e9f060317dd71cb261b96f0445622332.png) *Pictured: The Breakroom Reactive Tendrils Inspector window.* Additional options for the Breakroom Reactive Tendrils object can be found under its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). Steps to access the RoomFurniture component and edit its properties are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Proximity Particles (Tendrils) object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. Edit the properties to your specifications. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. Under the RoomFurniture component, there are several properties you can editβ€”**Max Dist**, **Speed**, **Max Speed**, and **Die Off**. ###### **Max Dist**[​](#max-dist-3 "Direct link to max-dist-3") This number specifies the radius length of the interaction zone. Once users are *N* meters away from the Reactive Tendrils, they will appear and begin to respond to avatar movement. ###### **Speed**[​](#speed "Direct link to speed") This number specifies the lowest speed at which the tendrils will move. ###### **Max Speed**[​](#max-speed "Direct link to max-speed") This number specifies the fastest speed at which the tendrils will move. ###### **Die Off**[​](#die-off "Direct link to die-off") If enabled, tendrils will shrink and disappear when an avatar leaves the interaction zone. If disabled, tendrils will freeze in place until activated by an avatar's proximity. #### Breakroom Reactive Particles (Rain)[​](#breakroom-reactive-particles-rain "Direct link to Breakroom Reactive Particles (Rain)") ![](/assets/images/Reactives_010-c07e9c99c744bacfe35d60a6b01482ca.png) Breakroom Reactive Rain is triggered by avatar proximity. Race through a squall of splashing raindrops that slow and stop in time with your avatar's movements. ##### Reactive Rain options[​](#reactive-rain-options "Direct link to Reactive Rain options") ![](/assets/images/Reactives_011-27b1d3187c4e20e43e0983efe66bf43c.png) *Pictured: The Breakroom Reactive Rain Inspector window.* Additional options for the Breakroom Reactive Rain object can be found under its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). Steps to access the RoomFurniture component and edit its properties are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Proximity Particles (Rain) object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. Edit the properties to your specifications. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. Under the RoomFurniture component, there are several properties you can editβ€”**Max Dist**, **Speed**, **Max Speed**, and **Die Off**. ###### **Max Dist**[​](#max-dist-4 "Direct link to max-dist-4") This number specifies the radius length of the interaction zone. Once users are *N* meters away from the Reactive Rain object, raindrops will appear and begin to respond to avatar movement. ###### **Speed**[​](#speed-1 "Direct link to speed-1") This number specifies the lowest speed at which the raindrops will fall. ###### **Max Speed**[​](#max-speed-1 "Direct link to max-speed-1") This number specifies the fastest speed at which the raindrops will fall. ###### **Die Off**[​](#die-off-1 "Direct link to die-off-1") If enabled, raindrops will disappear when an avatar leaves the interaction zone. If disabled, raindrops will freeze in place until activated again. #### Breakroom Reactive Welcome Drone[​](#breakroom-reactive-welcome-drone "Direct link to Breakroom Reactive Welcome Drone") ![](/assets/images/Reactives_012-dd60e6cece59f8c8b52d6b4e78374b2e.png) The Breakroom Reactive Welcome Drone greets Region visitors, offers a few quick orientation reminders, and then takes their photo to display on a welcome poster. Each user will see their own photo on the poster object, allowing you to offer a truly personalized experience. Users can click the **Take Photo Again button** on the poster to retake their picture at any time. ##### Welcome Drone options[​](#welcome-drone-options "Direct link to Welcome Drone options") ![](/assets/images/Reactives_013-904c82f21a4db36314cbfda18336be41.png) *Pictured: The Breakroom Welcome Drone Inspector window.* Additional options for the Breakroom Welcome Drone object can be found under its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). Steps to access the RoomFurniture component and edit its properties are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Welcome Drone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 4. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 5. Edit the properties to your specifications. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. Under the RoomFurniture component, there are two properties you can editβ€”**Freeze Player** and **Welcome Text**. ###### **Freeze Player**[​](#freeze-player "Direct link to freeze-player") If enabled, this option will lock the player's avatar into position during the Welcome Drone's speech, preventing them from exiting the area until they've had their photo taken. ###### **Welcome Text**[​](#welcome-text "Direct link to welcome-text") One of these ten text boxes will be selected at random to caption the player's photo. Any text entered into the chosen field will be displayed along with the avatar's name (e.g. *Looking good* will display on the poster as *Looking good Avatar Name!*). ##### Changing the Drone voice[​](#changing-the-drone-voice "Direct link to Changing the Drone voice") ![](/assets/images/Reactives_014-019a68caf0bcf30bded6be888282095b.png) *Pictured: The Breakroom Welcome Drone > Target Follower > Follower > Voices folder expanded.* Additionally, you can choose between multiple voice options for the Welcome Drone. To do so, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Welcome Drone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) 4. Expand the Breakroom Welcome Drone object by clicking the **> arrow** located to the left of its name. Continue to expand from **Target Follower > Follower > Voices**. 5. Locate the **Voice object** you want to edit (Drone, Male, or Female), and click on it to launch the **Inspector window**. 6. In the Inspector window, toggle the **Is Active option** as needed. 7. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. If more than one voice set is enabled, the Welcome Drone will use the last voice enabled in the list. #### Breakroom Reactive Waypoint Blimp[​](#breakroom-reactive-waypoint-blimp "Direct link to Breakroom Reactive Waypoint Blimp") ![](/assets/images/Reactives_015-92d8312239d6c43d37f23f61fb6a405c.png) The Breakroom Reactive Waypoint Blimp lets you take branding to a whole new level. Designed to circle overhead bearing your custom signage, users can individually interact with the blimp by summoning it for a low-fly pass. info The Breakroom Reactive Waypoint Blimp is visible to all users in the Region, though its location may vary. An individual low-fly pass request is only visible to the avatar who triggers it. ##### Waypoint Blimp options[​](#waypoint-blimp-options "Direct link to Waypoint Blimp options") ![](/assets/images/Reactives_016-70da5bea8b839e0789ff2b2441234e5f.png) *Pictured: The Breakroom Waypoint Blimp's flight path is determined by the number and location of its Waypoint Spheres. These transparent objects are located in the sky, so you may have to tilt your camera upward or pan back to work with them.* The Breakroom Waypoint Blimp's flight path can be customized by adjusting the number and location of its built-in Waypoint Spheres. Steps to locate the Waypoint Spheres are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Waypoint Blimp object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) 4. Expand the Breakroom Waypoint Blimp object by clicking the **> arrow** located to the left of its name. Continue to expand from **Waypoint Group Interruptable > Waypoints**. 5. Locate the **Waypoint Sphere object** you want to edit. 1. To reposition a Waypoint Sphere, click on its name in the Objects window to highlight it. Using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) or the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), move the object to meet your specifications. 2. To toggle a Waypoint Sphere on or off, click the **eye icon** located to the right of its name in the Objects window. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. ###### **Start and Interrupt points**[​](#start-and-interrupt-points "Direct link to start-and-interrupt-points") In addition to customizing the Breakroom Waypoint Blimp's flight path, you can customize its Start Point and Interrupt Point (where the Blimp will divert for its low-fly pass). To do so, follow the steps outlined above, locating and acting on the following objects: * Breakroom Waypoint Blimp > Waypoint Group Interruptable > Start Point * Breakroom Waypoint Blimp > Waypoint Group Interruptable > Interrupt Waypoint ##### Branding the Waypoint Blimp[​](#branding-the-waypoint-blimp "Direct link to Branding the Waypoint Blimp") ![](/assets/images/Reactives_017-4e41f6361e19f69bd3ec9fdb0092ab2e.png) *Pictured: The Low Flying Aircraft sign.* The Breakroom Waypoint Blimp's settings menu can be accessed by clicking the **blimp** itself, or by clicking the **"Low Flying Aircraft" sign** near the flight trigger point. info Clickable objects have a maximum interaction range. If clicking the blimp or the sign does nothing, try moving closer. ![](/assets/images/Reactives_018-d53e9a606968c022252ad9e01f765554.png) *Pictured: The Breakroom Waypoint Blimp settings menu.* To change the image displayed on the side of the Breakroom Waypoint Blimp, follow these steps: 1. Locate the **Breakroom Waypoint Blimp object** you want to edit. 2. Click on the **blimp** or its associated **sign** to open the settings panel. 1. To choose an image you've already uploaded to Breakroom, click the **Image Library button**. This will open the image picker. Click on the **image** you want to use. 2. To upload a new image from your computer, or click the **Upload New Image button**. This will open a standard file picker on your computer. Locate the image you want to use, click on it, and then click the **Open button**. 3. The Blimp will only display a narrow slice of your chosen image. Use the **Image Offset scroll bar** to adjust which part of the image appears (0.50 will center the image vertically.) 4. When you're satisfied with your changes, click the **Save and Close button**. #### Breakroom Reactive Waypoint Whale[​](#breakroom-reactive-waypoint-whale "Direct link to Breakroom Reactive Waypoint Whale") ![](/assets/images/Reactives_019-e11b108418c11477c26fe85944616aa4.png) The Breakroom Reactive Waypoint Whale can be summoned by adventurous avatars who wander near its trigger point. After witnessing its dramatic emergence from a sky portal, avatars can then watch the whale take a tour of the Region. info The Breakroom Reactive Waypoint Whale is only visible to the avatar that triggers it. ##### Waypoint Whale options[​](#waypoint-whale-options "Direct link to Waypoint Whale options") ![](/assets/images/Reactives_020-382b36190a239756c27fdb9b7841f88e.png) *Pictured: The Breakroom Waypoint Whale's flight path is determined by the number and location of its Waypoint Spheres. These transparent objects are located in the sky, so you may have to tilt your camera upward or pan back to work with them.* The Breakroom Waypoint Whale's flight path can be customized by adjusting the number and location of its built-in Waypoint Spheres. Steps to locate the Waypoint Spheres are provided below for easy reference. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](https://docs.breakroom.tech/customization/using-the-region-editor#the-objects-window). 3. In the Objects window, locate the **Breakroom Waypoint Whale object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) 4. Expand the Breakroom Waypoint Whale object by clicking the **> arrow** located to the left of its name. Continue to expand from **Waypoint Group Interruptable > Waypoints**. 5. Locate the **Waypoint Sphere object** you want to edit. 1. To reposition a Waypoint Sphere, click on its name in the Objects window to highlight it. Using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) or the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), move the object to meet your specifications. 2. To toggle a Waypoint Sphere on or off, click the **eye icon** located to the right of its name in the Objects window. 6. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. ###### **Start point**[​](#start-point "Direct link to start-point") In addition to customizing the Breakroom Waypoint Whale's flight path, you can customize its Start Point (where the whale emerges from the sky portal). To do so, follow the steps outlined above, locating and acting on the following object: * Breakroom Waypoint Whale > Waypoint Group Interruptable > Start Point info During the initial cinematic, the Waypoint Whale will emerge from the Start Point portal and fly towards Waypoint Sphere 1. If Waypoint Sphere 1 is positioned above or across from the Start Point, the whale will fly horizontally through the clouds or fly upwards, compromising the intended effect. As a general rule, it's good practice to move the Start Point and Waypoint Sphere 1 together or leave them in position and edit the other waypoints. --- ### Breakroom Teleport Portal #### Overview[​](#overview "Direct link to Overview") ![](/img/breakroom/Region_Navigation_002.jpg) The Breakroom Teleport Portal allows users to fast-travel between different Regions in your Breakroom World. You can use these portals to: * Call user attention to must-see Regions and activities * Present users with a limited number of Regions to visit (when you have otherwise disabled open exploration by removing access to the [Explore window](/exploring-breakroom/using-the-explore-window.md)) * Make it easier for users to navigate multi-Region events In your Inventory, you'll see the Breakroom Info Kiosk represented by this icon: ![](/img/breakroom/Toolkit_Teleport-icon.png) For help installing the Breakroom Teleport Portal, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Breakroom Teleport Portal user controls[​](#breakroom-teleport-portal-user-controls "Direct link to Breakroom Teleport Portal user controls") ![](/img/breakroom/Toolkit_Teleport_002.png) *Pictured: The Breakroom Teleport Portal end user controls.* Users can activate any Breakroom Teleport Portal by walking "into" it. When a portal is activated, a pop-up will appear containing a list of accessible Regions, complete with splash images and customized text. Users can click on the labeled **destination tiles** to learn more about each Region. To travel to the Region currently highlighted in the main window, users can click the **Teleport button.** To dismiss the Breakroom Teleport Portal pop-up, users can click the **Cancel button** or walk away from the portal. #### Setting up the Breakroom Teleport Portal[​](#setting-up-the-breakroom-teleport-portal "Direct link to Setting up the Breakroom Teleport Portal") ![](/img/breakroom/Toolkit_Teleport_003.png) *Pictured: The Breakroom Teleport Portal control panel.* The Breakroom Teleport Portal control panel is only accessible to the Object Owner and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions. To access it, click on the **teleport portal object**. Users can access up to four different destinations through a single teleport portal. To add a new destination to a portal, follow these steps: 1. Locate the Breakroom Teleport Portal object you want to edit, and **click on it** to launch the control panel. 2. In the control panel, you'll see four Region destination tabs (labeled Region 1 through Region 4). Click on the **Region tab** you want to edit, if it is not already expanded. 3. First, select a splash image for your destination. 1. To choose an image you've already uploaded to Breakroom, click the **Image Library button**. This will open the image picker. Click on the **image** you want to use. 2. To upload a new splash image from your computer, or click the **Upload New Image button**. This will open a standard file picker on your computer. Locate the image you want to use, click on it, and then click the **Open button**. 4. Next, enter a description or call to action in the **Region Description field**. This description will be superimposed on your chosen splash image, so you may want to keep it on the shorter side. 5. Enter a name for the Region in the **Region Name field**. 6. To ensure users travel to the correct place, you will need to enter the Region ID for the destination. This can be found on your Breakroom Dashboard. 1. On your Dashboard, navigate to the World Customization > Regions tab. 2. Locate the Region you want to use. Click the **Copy button** located in the bottom left corner of the Region tile to copy the displayed Region ID. 3. Paste the Region ID into the **Region ID field** in the Breakroom Teleport Portal control panel. ![](/img/breakroom/Toolkit_Teleport_004.png) *Pictured: A Region tile on the Breakroom Dashboard, with the Region ID displayed.* 7. Finally, toggle the **Region Active button** to *On*. 8. Click the **Save and Close button**. info The Splash Image, Region Description, and Region Name fields are all optional. However, customizing these fields greatly increases the utility of the teleport portal and creates a better user experience. You can toggle the Region Active button to *Off* to disable a teleport destination while retaining its data. #### Editing the Breakroom Teleport Portal collider zone[​](#editing-the-breakroom-teleport-portal-collider-zone "Direct link to Editing the Breakroom Teleport Portal collider zone") ![](/img/breakroom/Toolkit_Teleport_005.png) *Pictured: The Region Editor, with a Breakroom Teleport Portal object selected. The transparent green box indicates the size and location of the collider zone. In the Objects window, you can see that the collider zone is nested within the Breakroom Teleport Portal object.* The Breakroom Teleport Portal is activated when users enter its collider zone. The size and position of this collider zone can be customized using the Region Editor. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). To edit the Breakroom Info Kiosk collider zone, follow these steps: 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Locate the Breakroom Info Kiosk object you want to edit. Click on it to highlight it in the **Objects window**. 3. In the Objects window, click the **> arrow** to the left of the Breakroom Teleport Portal object to expand it. Then click on the **Collider component.** 4. Using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) or the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), move, rotate, and resize the collider to meet your specifications. 5. When you are satisfied, click the **Save button** to store your changes. --- ### Breakroom Tour Cameras [YouTube video player](https://www.youtube.com/embed/T2JuekPeSmo) #### **Overview** [](#overview)[​](#overview- "Direct link to overview-") The Breakroom Tour Camera system allows users with advanced permissions to implement customized visual tours of any Region. This powerful tool can be used to highlight networking areas, visually illustrate the steps necessary to complete a task, or generate excitement about the various activities available in a particular Regionβ€”the possibilities are endless. In your inventory, you will see the Breakroom Tour Camera system represented by this icon: ![](/img/breakroom/Toolkit_Tour_Cameras.png) In order to set up the Breakroom Tour Cameras system, users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions will need to place the object in a Region and edit its sub-objects and components. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Breakroom Tour Cameras user controls[​](#breakroom-tour-cameras-user-controls "Direct link to Breakroom Tour Cameras user controls") ![](/assets/images/UI_Tour_2026_009-590f6e3638f7e8f1d6d54b317919fe04.png) *Pictured: The Start Here panel.* Users can launch your custom Region tour at any time by clicking the **Eye /** **Take Tour button** in the [Start Here panel](/advanced-tutorials/uploading-your-own-region/breakroom-start-here-ui.md). To exit the tour, they can press the **Esc key**. info If you do not have the Start Here panel installed in your Region, users will not have access to the **Take Tour button**. If you prefer, you can trigger your tour using a [Lua script](https://www.lua.org/). Please note that Breakroom does not offer individualized Lua support. #### Setting up the Breakroom Tour Cameras[​](#setting-up-the-breakroom-tour-cameras "Direct link to Setting up the Breakroom Tour Cameras") ![](/assets/images/Toolkit_Tour_001-b6e1b40dd347d9493b5329b8ca7d8fcd.png) *Pictured: The Region Editor, with a Breakroom Tour Cameras object highlighted.* To place a Breakroom Tour Cameras object in your Region, follow the quick-start steps below. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Inventory button** in the bottom right toolbar. 3. Search for the **Breakroom Tour Cameras** object in your Inventory and drag the item into your Region. 4. The primary Breakroom Tour Cameras object does *not* need to be located close to the areas you want to film. It can be located anywhere in your Region. For convenience and consistency, we encourage you to locate it at 0,0,0 in your Region by manually editing the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component). 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. ##### Overview of the system components[​](#overview-of-the-system-components "Direct link to Overview of the system components") ![](/assets/images/Toolkit_Tour_002-160e476b99e37d463cc64ac3f9d67d30.png) *Pictured: The Breakroom Tour Cameras > Cameras object expanded.* The Breakroom Tour Cameras object contains several preconfigured cameras. You can use one or all of these cameras to create your custom Region tourβ€”the choice is up to you. You can locate the individual cameras by following the steps below. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, search for the **Breakroom Tour Cameras object**. Click the **> arrow** located to the left of its name to expand it. 4. Locate the **Cameras object**. Click the **> arrow** located to the left of its name to expand it. Each camera type offers a unique approach to viewing your Region. | Camera type | Behavior | | ----------- | ------------------------------------------------------------ | | Orbit | Performs a close-end 360Β° orbit around a center focal point. | | Wide Orbit | Performs a wider 360Β° orbit around a center focal point. | | Zoom In | "Pushes in" along a fixed track. | | Zoom Out | "Pulls out" along a fixed track. | | Pan Right | Shifts from left to right along a fixed track. | | Pan Left | Shifts from right to left along a fixed track. | ##### Activating and deactivating individual tour cameras[​](#activating-and-deactivating-individual-tour-cameras "Direct link to Activating and deactivating individual tour cameras") ![](/assets/images/Toolkit_Tour_003-51fc37cb004e089ac8efdbc3d37a3fc5.png) *Pictured: Three Zoom In cameras, two of which are active.* Each camera in the Breakroom Camera Tour object can be activated or deactivated as necessary. If a camera is active, then its "view" will be included in your custom tour. If a camera is deactivated, it will not be included in your custom tour. To activate a camera, click the **eye icon** located to the right of its name in the Objects window. (When active, the eye icon will appear bright white.) To deactivate a camera, click the **eye icon** again (when deactivated, the camera's name and its icon set will appear grayed out). #### Editing individual tour cameras[​](#editing-individual-tour-cameras "Direct link to Editing individual tour cameras") The Breakroom Tour Cameras can be edited in a variety of ways to achieve dramatic effects. ##### Positioning tour cameras[​](#positioning-tour-cameras "Direct link to Positioning tour cameras") ![](/assets/images/Toolkit_Tour_004-dc61b7ef12555b0711ae7ea7d469ad28.png) *Pictured: An individual Pan Left Camera object being positioned within a Region.* While the Breakroom Tour Cameras object can be placed at [0,0,0](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md#setting-up-the-breakroom-tour-cameras) in your Region, the *individual tour cameras must be moved into position to capture the scenes you want to include in your tour*. Many of the camera types include arrows and other markers designed to help with positioning. ![](/assets/images/Toolkit_Tour_005-96dce01e6823f3049ccbee5ba63b73cb.png) *Pictured: An individual Pan Left camera.* Here we see a close-up of the Pan Left Camera, with arrows indicating the direction the camera is facing and the path it will follow. The camera's track is highlighted in green. ![](/assets/images/Toolkit_Tour_006-0cb742c0da765172866111e490470dea.png) *Pictured: An individual Zoom Out camera.* Here we see the Zoom Out Camera, with icons indicating the camera focus point (the mountain) and the path and direction the camera will travel (down the highlighted green track, pulling away from its starting point). ![](/assets/images/Toolkit_Tour_007-5c2c4d48d4e98530fff4811272366930.png) *Pictured: An individual Orbit Camera.* Here we see the Orbit Camera, where the camera focus point (the mountain) will remain in the center. The camera will circle this focus point. To edit the position of individual cameras in your Region, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, search for the **Breakroom Tour Cameras object**. Click the **> arrow** located to the left of its name to expand it. 4. Locate the **Cameras object**. Click the **> arrow** located to the left of its name to expand it. 5. Click on the name of the individual **tour camera** you want to position in order to highlight it. 6. Use the Region Editor's [object positioning tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) to place the tour camera where you want it. Alternatively, you can manually edit the tour camera's [Transform values](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component). 7. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. You can test your chosen placement and effects by clicking the **Take Tour button** located in the Start Here panel. ##### Using the "Move Object to Camera" button to move tour cameras[​](#using-the-move-object-to-camera-button-to-move-tour-cameras "Direct link to Using the \"Move Object to Camera\" button to move tour cameras") You can use the **"Move Object to Camera" button** located in the [object editing tray](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools) to snap a tour camera object to your current camera position (the [live camera](/getting-started/controlling-your-camera.md) that you control with your mouse and keyboard). For this portion of the tutorial, we will refer to the individual tour camera object that you want to move as the *tour camera,* and your own user camera as the *working camera.* ![](/assets/images/Toolkit_Tour_008-5f1bd6bdfda09c18ed60c3cceb6c1c50.png) *Highlighted: The location of the "Move Object to Camera" button.* Each tour camera type will react differently to the position of your working camera. | Tour camera type | "Move Object to Camera" behavior | | ------------------------ | --------------------------------------------------------------------------------- | | Orbit/Wide Orbit Cameras | The camera focus will snap to the location of your working camera. | | Zoom In Camera | The camera track's start point will snap to the location of your working camera. | | Zoom Out Camera | The camera track's end point will snap to the location of your working camera. | | Pan Right/Left Cameras | The camera track's center point will snap to the location of your working camera. | To position a tour camera using the "Move Object to Camera" function, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, search for the **Breakroom Tour Cameras object**. Click the **> arrow** located to the left of its name to expand it. 4. Locate the **Cameras object**. Click the **> arrow** located to the left of its name to expand it. 5. Locate the individual tour camera you want to edit, and click on its **name** in order to highlight it. 6. Leaving the tour camera selected, move your working camera into position. 7. Click the **"Move Object to Camera" button**. The tour camera will snap into place. 8. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. ##### Customizing a tour camera focal point[​](#customizing-a-tour-camera-focal-point "Direct link to Customizing a tour camera focal point") Some individual Breakroom Tour Cameras offer the ability to position the camera focal point independent of the camera track. By changing the relation of the camera's focal point with its animated track, you can achieve unique customized effects. ![](/assets/images/Toolkit_Tour_009-33655efe4bdf28d17bb9e2b7cbe30270.png) *Pictured: The Region Editor, with a Zoom In Camera highlighted in the Objects window. The focal point has been isolated and manually shifted to the right of the camera track.* To position a tour camera's focal point and track independently of one another, follow the steps below. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, search for the **Breakroom Tour Cameras object**. Click the **> arrow** located to the left of its name to expand it. 4. Locate the **Cameras object**. Click the **> arrow** located to the left of its name to expand it. 5. Click on the individual tour camera you want to edit in order to highlight it. 6. Click the **> arrow** located to the left of the individual tour camera to expand it. (Note: Not all Breakroom Tour Cameras include a modifiable focal point.) 7. Click on the **Focus** or **Track** object to highlight it. A translation gizmo will superimpose over your chosen object. 8. Use the Region Editor's [object positioning tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) to place the Focus and/or Track where you want them. Alternatively, you can manually edit the component [Transform values](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) or use the ["Move Object to Camera" feature ](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md#using-the-move-object-to-camera-button-to-move-tour-cameras)detailed above. 9. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. #### Configuring the Breakroom Tour Cameras[​](#configuring-the-breakroom-tour-cameras "Direct link to Configuring the Breakroom Tour Cameras") In addition to editing their physical placement, there are a number of transition and speed options available within each tour camera object. By modifying these, you can add additional interest and drama to your custom Region tour. To locate these options, follow the steps below. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, search for the **Breakroom Tour Cameras object**. Click the **> arrow** located to the left of its name to expand it. 4. Locate the **Cameras object**. Click the **> arrow** located to the left of its name to expand it. 5. Click on the individual tour camera you want to edit in order to highlight it. The [Inspector window](/creating-custom-experiences/using-the-region-editor.md#the-inspector-window) will launch for that object. 6. In the Inspector window, click the **> arrow** located to the left of the **ScriptingData component**. ![](/assets/images/Toolkit_Tour_010-f879c5285ea25227b3fd8292e2d6f285.png) *Pictured: An example of the ScriptingData component attached to an Orbit Camera.* All of the options under the ScriptingData component can be manually edited by keying words or values into their respective fields. Here's a quick reference chart to get you started. | ScriptingData camera option | Purpose or result | | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Speed | By default, each tour camera takes 5 seconds to move along its associated track. By editing the multiplier value in this field, you can change how fast that individual camera travels during your tour. (For example, entering a value of 0.5 would halve the default speed. The camera would then take 10 seconds to travel along its track.) | | FOV (Field of View) | FOV refers to how much of the Region an individual tour camera can see, or how focused that camera is on a particular object or scene. The default value is 50. The lower the number, the more focused the camera will be. If you "pull out" the camera too much (beyond a field value of 70-75), you may see a fisheye distortion. | | Caption | You can use this field to enter a caption for each individual camera view, which will then be displayed at the bottom of the screen. If this field is blank, no words will appear at the bottom of the screen. | | Order | This option refers to the camera order in your final tour. The default value is 1, which means that all cameras have the same priority. Therefore, they will be played in the same order as they appear in the Objects window. You can manually order your chosen tour cameras by assigning them individual numbers, or you can create priority groups that will then play in the order in which they appear in the Objects window. (E.g. all priority 1s play first, then all priority 2s, etc.). | | Transition | Here you can change how each tour camera transitions into the one that follows. Transition options are described in more detail below. | | Loops (only on Orbit Cameras) | This value refers to the number of times the camera travels along its circular track, and defaults to 1. You can edit this value to make the camera complete multiple loops (ex: 3) or partial loops (ex: 0.5, which would be a 180Β° arc). | Currently, Breakroom Tour Cameras support eight different transition types. | Transition | Effect | | ---------- | -------------------------------------------------------------------------------------------------------------- | | Fade White | A blended fade into the next scene through a white screen. | | Fade Black | Same as above, but with a black screen. | | Wipe White | A horizontal wipe into the next scene through a white screen. | | Wipe Black | Same as above, but with a black screen. | | Door White | A close shot into the middle, then opening up from the middle into the next scene, through a white background. | | Door Black | Same as above, but with a black background. | | Spin White | A spinning effect into the next scene through a white screen. | | Spin Black | Same as above, but with a black screen. | Once you're satisfied, click the **Save button** to store your changes and the **Close button** to exit the Region Editor. ##### Configuring intro and outro transitions and the Breakroom interface[​](#configuring-intro-and-outro-transitions-and-the-breakroom-interface "Direct link to Configuring intro and outro transitions and the Breakroom interface") ![](/assets/images/Toolkit_Tour_011-db5df9854641091d4f80ada50cf20dee.png) *Pictured: The Breakroom Tour Cameras object highlighted in the Objects Window. The RoomFurniture component has been expanded.* There are additional customization options available under the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md) attached to the primary Breakroom Tour Cameras object. To locate these options, follow the steps below. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, search for the **Breakroom Tour Cameras object**. Click on it in order to highlight it. The [Inspector window](/creating-custom-experiences/using-the-region-editor.md#the-inspector-window) will launch for that object. 4. In the Inspector window, click the **> arrow** located to the left of the **RoomFurniture component**. Here is a quickstart guide to the options contained under the RoomFurniture component. | RoomFurniture component option | Purpose or effect | | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | | Hide Interface | If checked, this option hides the[ Breakroom UI ](../../getting-started/ui-tour)while the tour is playing. | | Randomize Cameras | If checked, enabled cameras will play in random order for each tour. | | Intro Transition | This field can be changed to any of the transition options described [above](breakroom-tour-cameras#configuring-the-breakroom-tour-cameras). | | Outro Transition | This field can be changed to any of the transition options described [above](breakroom-tour-cameras#configuring-the-breakroom-tour-cameras). | Once you're satisfied, click the **Save button** to store your changes and the **Close button** to exit the Region Editor. --- ### Breakroom Video Player [YouTube video player](https://www.youtube.com/embed/yBSL8K4a5gU) #### Overview[​](#overview "Direct link to Overview") The Breakroom Video Player allows users to access live or pre-recorded video content on demand. Object Owners and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions can also configure playback options and add a splash screen that will be displayed when the video player is not in use. In your Inventory, you'll see the Breakroom Video Player represented by this icon: ![](/img/breakroom/Toolkit_Video_Player-icon.png) For help installing the Breakroom Video Player, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Breakroom Video Player user controls[​](#breakroom-video-player-user-controls "Direct link to Breakroom Video Player user controls") ![](/img/breakroom/Toolkit_Video_002.png) *Pictured: The Breakroom Video Player control bar.* Users can control any Breakroom Video Player using the buttons located in the bottom control bar. Videos are displayed on a per-user basis, not streamed openly to the Region as a whole. | Control bar button | Function | | ------------------ | ----------------------------------------------------------------------- | | Play | Plays the video for the user who clicks it. | | Pause | Pauses the video for the user who clicks it. | | Stop | Stops the video for the user who clicks it. | | Zoom In / Zoom Out | Allows the user to focus on and away from the screen. | | Settings | Only available to Object Owners and users with appropriate permissions. | #### Setting up the Breakroom Video Player[​](#setting-up-the-breakroom-video-player "Direct link to Setting up the Breakroom Video Player") ![](/assets/images/Toolkit_Video_003-cfbf99d53a41ee2fe0a5aa86cb36de09.png) *Highlighted: The location of the Breakroom Video Player gear icon.* The Breakroom Video Player control panel is only accessible to the Object Owner and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions. To access it, click on the **gear icon** in the bottom control bar. ##### Adding a splash screen image[​](#adding-a-splash-screen-image "Direct link to Adding a splash screen image") ![](/img/breakroom/Toolkit_Video_004.png) *Pictured: The Breakroom Video Player settings.* Splash screen image settings are the very first thing you'll see in the Breakroom Video Player control panel. You can either choose an image from your [Media Library](/creating-custom-experiences/managing-your-media-library.md) or upload a new splash image from your computer. To set a splash screen for your video player, follow these steps: 1. Locate the Breakroom Video Player object you want to edit. 2. Click on the **gear icon** to open the Breakroom Video Player control panel. 1. To choose an image you've already uploaded to Breakroom, click the **Image Library button**. This will open the image picker. Click on the **image** you want to use. 2. To upload a new image from your computer, or click the **Upload New Image button**. This will open a standard file picker on your computer. Locate the image you want to use, click on it, and then click the **Open button**. 3. Your selected image will display in the preview window. When you're satisfied, click the **Save and Close button**. ##### Entering a video URL[​](#entering-a-video-url "Direct link to Entering a video URL") ![](/assets/images/Toolkit_Video_005-31e5181736212df812cfe491509e3269.png) *Pictured: The video URL and video settings in the Breakroom Video Player control panel.* To enter a video URL, follow these steps: 1. Locate the Breakroom Video Player object you want to edit. 2. Click on the **gear icon** to open the Breakroom Video Player control panel. 3. Paste your video URL into the **Video URL field**. 4. Click the **Save and Close button**. info **Tips for Best Performance** For best performance, we recommend hosting your video as an MP4 file on a cloud server (such as [Amazon AWS](https://aws.amazon.com/free)) or uploading it to your [Breakroom Media Library](/creating-custom-experiences/managing-your-media-library.md). The Breakroom Video Player supports many common video formats, such as MP4 and HLS. Breakroom does not currently support videos hosted on Vimeo. Due to formatting, DRM, and monetization issues, we do not recommend hosting videos on YouTube. If you're having trouble getting a particular video to work, you may still be able to play it using the [Breakroom Web Browser](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-web-browser.md). Please note that playing a video on the web browser object offers a different experience, and that Breakroom cannot track video analytics through the Web Browser object. ##### Video playback options[​](#video-playback-options "Direct link to Video playback options") The Breakroom Video Player control panel also allows you to customize the way videos are played. You can loop a video, mute a video until users interact with the player, and more. To edit the video playback options, follow these steps: 1. Locate the Breakroom Video Player object you want to edit. 2. Click on the **gear icon** to open the Breakroom Video Player control panel. 3. Click the **ON or OFF button** located next to each video playback option. 4. Click the **Save and Close button**. | Video playback setting | Function | | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Auto Play | If set to ON, video will begin playing automatically when users enter the video player [collider zone](breakroom-video-player#editing-the-breakroom-video-player-collider-zone), and will stop when they exit the zone. | | Loop Video | If set to ON, video will replay continuously. | | Silent Mode | If set to ON, video will play with muted audio until a viewer clicks the [**Zoom In button**](breakroom-video-player#breakroom-video-player-user-controls). | | Post FX | If set to ON, will turn off various graphics settings within the video player [collider zone](breakroom-video-player#editing-the-breakroom-video-player-collider-zone) that could distort the video or on-screen text. | | Pops Out | If set to ON, video player screen will "pop out" to user screen when users enter the video player [collider zone](breakroom-video-player#editing-the-breakroom-video-player-collider-zone). The offset and scale of this pop-out screen can be customized by entering values into the associated fields. | #### Editing the Breakroom Video Player collider zone[​](#editing-the-breakroom-video-player-collider-zone "Direct link to Editing the Breakroom Video Player collider zone") ![](/img/breakroom/Toolkit_Video_006.png) *Pictured: The Region Editor, with a Breakroom Video Player object selected. The transparent green box indicates the size and location of the collider zone. In the Objects window, you can see that the collider zone object is nested within the Breakroom Video Player object.* Several advanced features and video playback options are triggered when an avatar enters the Breakroom Video Player collider zone. The size and position of this collider zone can be customized using the Region Editor. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). To edit the Breakroom Video Player collider zone, follow these steps: 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Locate the Breakroom Video Player object you want to edit. Click on it to highlight it in the **Objects window**. 3. In the Objects window, click the **> arrow** to the left of the Breakroom Video Player object to expand it. Then click on the **Collider component.** 4. Using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) or the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), move, rotate, and resize the collider to meet your specifications. 5. When you are satisfied, click the **Save button** to store your changes. --- ### Breakroom Web Browser [YouTube video player](https://www.youtube.com/embed/SHCteM7Nn1g) #### Overview[​](#overview "Direct link to Overview") The Breakroom Web Browser allows users to access and interact with web-based content anywhere within your world. Object Owners and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions can also configure access options and add a splash screen that will be displayed when the web browser is not in use. In your Inventory, you'll see the Breakroom Web Browser represented by this icon: ![](/img/breakroom/Toolkit_Web_Browser-icon.png) For help installing the Breakroom Video Player, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. warning The Breakroom Web Browser will not play MP4 or HLS videos. Please use the [Breakroom Video Player](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-video-player.md) to share media using these formats. #### Breakroom Web Browser user controls[​](#breakroom-web-browser-user-controls "Direct link to Breakroom Web Browser user controls") ![](/img/breakroom/Toolkit_Web_001.png) *Pictured: The Breakroom Web Browser user control bar.* Users can control any Breakroom Web Browser using the buttons located in the bottom control bar. Webpages are displayed on a per-user basis, not streamed openly to the Region as a whole. | Control bar component | Function | | ----------------------- | ----------------------------------------------------------------------- | | Home | Takes the user back to the web browser's default URL. | | Forward and back arrows | Allow users to navigate forward and backward within a website. | | External open | Opens the default URL in the user's own web browser. | | Zoom In / Zoom Out | Allows the user to zoom in on the panel and away again. | | Settings | Only available to Object Owners and users with appropriate permissions. | #### Setting up the Breakroom Web Browser[​](#setting-up-the-breakroom-web-browser "Direct link to Setting up the Breakroom Web Browser") ![](/assets/images/Toolkit_Web_002-7d448ecaf3fd719121104b5e7d941202.png) *Highlighted: The location of the Breakroom Web Browser gear icon.* The Breakroom Web Browser control panel is only accessible to the Object Owner and users with appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions. To access it, click on the **gear icon** in the bottom control bar. ##### Adding a splash screen image[​](#adding-a-splash-screen-image "Direct link to Adding a splash screen image") ![](/img/breakroom/Toolkit_Web_003.png) *Pictured: The Breakroom Web Browser settings.* Splash screen image settings are the very first thing you'll see in the Breakroom Web Browser control panel. You can either choose an image from your [Media Library](/creating-custom-experiences/managing-your-media-library.md) or upload a new splash image from your computer. To set a splash screen for your web browser, follow these steps: 1. Locate the Breakroom Web Browser object you want to edit. 2. Click on the **gear icon** to open the Breakroom Web Browser control panel. 1. To choose an image you've already uploaded to Breakroom, click the **Image Library button**. This will open the image picker. Click on the **image** you want to use. 2. To upload a new image from your computer, or click the **Upload New Image button**. This will open a standard file picker on your computer. Locate the image you want to use, click on it, and then click the **Open button**. 3. Your selected image will display in the preview window. Make sure everything looks good, and then click the **Save and Close button**. ##### Entering a webpage URL[​](#entering-a-webpage-url "Direct link to Entering a webpage URL") ![](/img/breakroom/Toolkit_Web_004.png) *Pictured: The webpage URL and web browser options in the Breakroom Web Browser control panel.* To enter a webpage URL, follow these steps: 1. Locate the Breakroom Web Browser object you want to edit. 2. Click on the **gear icon** to open the Breakroom Web Browser control panel. 3. Paste your URL into the **Webpage URL field**. 4. Click the **Save and Close button**. ##### Web browser options[​](#web-browser-options "Direct link to Web browser options") The Breakroom Web Browser control panel also allows you to customize the way users can interact with your content. To edit the web browser options, follow these steps: 1. Locate the Breakroom Web Browser object you want to edit. 2. Click on the **gear icon** to open the Breakroom Web Browser control panel. 3. Click the **ON or OFF button** located next to each web browser option. 4. Click the **Save and Close button**. | Web browser option | Function | | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Allow forward/back | If set to ON, web navigation buttons will be displayed in the bottom control bar. | | Allow external viewing | If set to ON, a button will appear in the bottom control bar allowing users to open the webpage in an external browser. | | Post FX | If set to ON, will turn off various graphics settings within the web browser [collider zone](breakroom-web-browser#editing-the-breakroom-web-browser-collider-zone) that could distort the screen. | ##### Editing the Breakroom Web Browser collider zone[​](#editing-the-breakroom-web-browser-collider-zone "Direct link to Editing the Breakroom Web Browser collider zone") ![](/img/breakroom/Toolkit_Video_006.png) *Pictured: The Region Editor, with a *Breakroom Video Player* object selected. The transparent green box indicates the size and location of the collider zone. In the Objects window, you can see that the collider zone is nested within the Breakroom Video Player object. This information also applies to Breakroom Web Browsers.* Several website display options are triggered when an avatar enters the Breakroom Web Browser collider zone. The size and position of this collider zone can be customized using the Region Editor. The instructions provided below presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). To edit the Breakroom Web Browser collider zone, follow these steps: 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Locate the Breakroom Web Browser object you want to edit. Click on it to highlight it in the **Objects window**. 3. In the Objects window, click the **> arrow** to the left of the Breakroom Web Browser object to expand it. Then click on the **Collider component.** 4. Using the [Region Editor tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) or the [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), move, rotate, and resize the collider to meet your specifications. 5. When you are satisfied, click the **Save button** to store your changes. --- ### Conference rooms and booths [YouTube video player](https://www.youtube.com/embed/vH1tFz_3L5o) #### Overview[​](#overview "Direct link to Overview") The [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md) includes several breakout area templates designed for instant deployment, including lounges, workshops, help desks, and exhibition stands. Each breakout space comes pre-equipped with Breakroom's [conference tools](/getting-started/using-the-conference-system.md), enabling media that can only be seen or heard by the users of that space. For help installing breakout areas, please review our information on using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). You can also find advanced tips for customizing breakout spaces in our [Running Your Event section](/running-your-event.md)β€”learn how to change [camera angles](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md#editing-breakout-area-cameras) inside your booths, manage the [Breakout Rooms navigation panel](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md#editing-breakout-area-details), and more. warning In order for this Toolkit object to work, you must have the Breakroom conference core components installed in the same Region. If you have uploaded a custom Region, you will need to [install these components manually](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) prior to setting up this object. #### Breakroom Showcase Booth[​](#breakroom-showcase-booth "Direct link to Breakroom Showcase Booth") ![](/assets/images/Toolkit_Booths_001-5f9e695a3494ab796c1ca080b6652445.png) Default number of chairs: 4
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Meeting
Inventory icon: ![](/img/breakroom/Rooms_Showcase_Booth-icon.png)
Key features: This booth includes bookshelves, tables, and plenty of wall space to display promotional materials. A great choice for vendors and conference exhibitors, allowing them to generate excitement about their products and meet with potential clients. #### Breakroom Breakout Area A[​](#breakroom-breakout-area-a "Direct link to Breakroom Breakout Area A") ![](/assets/images/Toolkit_Booths_002-e6bcd774e0fe7e91dacc620f49bdedce.png) Default number of chairs: 14
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Meeting
Inventory icon: ![](/img/breakroom/Rooms_Breakout_A-icon.png)
Key features: Forward-facing stools allow users to focus on streaming video or presenter screens, making this an ideal breakout space for smaller presentations, group discussions, and material review. The media screen located at the front of the booth appears when webcam streaming or screen share is enabled, and disappears when not in use. #### Breakroom Breakout Area B[​](#breakroom-breakout-area-b "Direct link to Breakroom Breakout Area B") ![](/assets/images/Toolkit_Booths_003-44b96c41f8fbf862713d087e25e8ae20.png) Default number of chairs: 10
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Meeting
Inventory icon: ![](/img/breakroom/Rooms_Breakout_B-icon.png)
Key features: A central table facilitates friendly networking sessions or face-to-face power meetings, making this a great breakout space for collaborative work. The media screen located at the front of the booth appears when webcam streaming or screen share is enabled, and disappears when not in use. #### Breakroom Workshop[​](#breakroom-workshop "Direct link to Breakroom Workshop") ![](/assets/images/Toolkit_Booths_004-c25467aeb64ec0c64297ccfd597935f4.png) Default number of chairs: 34
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Meeting
Inventory icon: ![](/img/breakroom/Rooms_Workshop-icon.png)
Key features: Comfortable audience chairs face the media presentation area, while the two guest chairs located beneath it draw attention to presenters or delegates. Great for focused group workshops, facilitated group discussion, and speaker panels. The media screen located at the front of the booth appears when webcam streaming or screen share is enabled, and disappears when not in use. #### Breakroom Low Poly Office[​](#breakroom-low-poly-office "Direct link to Breakroom Low Poly Office") ![](/assets/images/Toolkit_Booths_005-82698e46d54136b0e0a1748ad581a887.png) Default number of chairs: 9
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Meeting
Inventory icon: ![](/img/breakroom/Rooms_Lowpoly-icon.png)
Key features: An airy office space full of quirky details. The conference table plus overflow seating makes this a great breakout space for team meetings. The scalable media screen located on the wall appears when webcam streaming or screen share is enabled, and plenty of wall space makes this an ideal area for multi-user video conferencing. #### Breakroom Helpdesk[​](#breakroom-helpdesk "Direct link to Breakroom Helpdesk") ![](/assets/images/Toolkit_Booths_006-d291ca5dda558f9f8fffbcaca4b96f7e.png) Default number of chairs: 1
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Presenter
Inventory icon: ![](/img/breakroom/Rooms_Helpdesk-icon.png)
Key features: A sleek and minimalist helpdesk, designed to complement a variety of venue aesthetics. Here staff can welcome and orient visitors through voice chat, text chat, and video. info The Helpdesk object's [Zone Name](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-name) will default to *Entrance*. This will automatically tie it into the [General Navigation panel](/getting-started/using-the-conference-system.md#the-general-navigation-panel). By changing the Zone Name, you can create your own [custom voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md). #### Breakroom Networking Area[​](#breakroom-networking-area "Direct link to Breakroom Networking Area") ![](/assets/images/Toolkit_Booths_007-3d7e509cc7db1eb95b725258f9344ac9.png) Default number of chairs: 8 couch seats, 12 coffee table seats, and 12 high-top seats, for a total of 32 "chairs."
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Voice
Inventory icon: ![](/img/breakroom/Rooms_Networking_Area-icon.png)
Key features: A selection of eclectic, comfortable furniture arranged specifically for networking. Use the Region Editor to [remove](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#editing-voice-zone-furniture-items) any seats and decorative items you don't need, or leave as-is. info The Networking object's [Zone Name](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-name) will default to *Networking*. This will automatically tie it into the [General Navigation panel](/getting-started/using-the-conference-system.md#the-general-navigation-panel). By changing the Zone Name, you can create your own [custom voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md). #### Breakroom Pod[​](#breakroom-pod "Direct link to Breakroom Pod") ![](/assets/images/Toolkit_Booths_008-c12d6b87ede0d8ecf9047f0dcd3a8ecd.png) Default number of chairs: 2
Default [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md): Meeting
Inventory icon: ![](/img/breakroom/Toolkit_Pod-icon.png)
Key features: Hop into this sleek pod for a side conversation, or use the built-in media tools to make a quick video pitch. --- ### Filtering the Sinewave Shop [YouTube video player](https://www.youtube.com/embed/mXJ8cHAgNIQ) #### Overview[​](#overview "Direct link to Overview") Just because you've chosen to open the Sinewave Shop doors doesn't mean you need to relinquish control over what your users see and purchase. By customizing the Shop filters, you can limit your users to purchasing additional avatar components *only* from our pre-screened collections. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can change these filters at any time through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). It's important to note that without one or more Shop filters enabled, users will have access to *everything* currently listed for sale in the Sinewave Shop. If you enable a filter, *only* items within that category will be displayed in the Shop. Multiple filters can be activated at the same time. #### Filtering the Shop contents[​](#filtering-the-shop-contents "Direct link to Filtering the Shop contents") ![]() *Pictured: The Dashboard > World Customization > Features tab, "Filter your Shop" panel.* 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Features tab**. 3. Scroll down to the "Filter your Shop" panel. Check the **box** beside each collection you want to make available to your users. 4. Click the **Save Changes button**. ##### Filter category definitions[​](#filter-category-definitions "Direct link to Filter category definitions") | | | | ------------- | ------------------------------------------------------------------------------ | | **Filter** | Category contents | | Business Wear | Formal business attire and avatar components (e.g. hair, skins). | | Semi Formal | Business casual attire and avatar components. | | Fantasy | "Fantasy" attire and avatar components (e.g. wings, fangs). | | Low Poly | Self-contained low poly avatars, with no separate attire or accessory options. | #### Silver and Gold currencies[​](#silver-and-gold-currencies "Direct link to Silver and Gold currencies") As noted in our [Getting Started](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies) section, Breakroom offers two types of currency for use in your World: Silver and Gold. *Silver* is Breakroom's in-world promotional currency and cannot be exchanged for legal tender. Each user will receive a gift of Silver upon joining Breakroom. Additional Silver can be earned by completing quests and engaging in other activities. *Gold* is a premium currency that can be purchased (and in limited cases, exchanged) for legal tender. Some Sinewave Shop items can only be purchased with Gold currency. In order to make these items available to your users, you will need to give your users a Gold "allowance," or make it possible for them to purchase quantities of Gold with their own money. ![]() *Pictured: The Dashboard > World Customization > Features tab, "Currencies" panel.* You can enable or disable the UI currency displays and associated purchase buttons through the Dashboard. To do so, follow the steps below. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Features tab**. 3. Scroll down to the "Currencies" panel. 1. If you wish to disable ***all*** of the currency displays, uncheck the box labeled **Currency**. 2. Alternatively, if you want to disable the Gold display alone, uncheck the box labeled **Gold Purchase.** 4. Click the **Save Changes button**. warning Disabling the currency displays will not affect the current contents of your users' wallets. If users have a Gold or Silver balance, they will still be able to use this money if you give them access to the Shop. --- ### Managing your Media Library #### Overview[​](#overview "Direct link to Overview") ![]() *Pictured: The Dashboard > Media Library tab.* As you build and refine your Breakroom event space, it's likely that you'll upload [images](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-image-viewer.md) and [videos](/running-your-event/moderator-tools/presentation-controls.md) using various in-world tools. The Media Library tab on the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md) allows [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) to view their media collections at a glance, upload media for in-world use, delete unneeded files, and tag files for improved organization. info The Media Library is account-bound, meaning that each user will be able to see and manage only media files that they have uploaded. Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. When planning your event, it may be wise to create a team continuity plan to ensure that important media files are uploaded on multiple accounts. #### Uploading images and videos[​](#uploading-images-and-videos "Direct link to Uploading images and videos") ![]() *Pictured: The Upload Image/Video panel.* Using the Media Library management tab, you can upload images and videos to Breakroom straight through the Dashboard. These media files will appear in your in-world Image Library, where they can then be deployed when setting up tools like the [Breakroom Image Viewer](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-image-viewer.md) and [Breakroom Teleport Portals](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-teleport-portal.md). To upload an image or video file through the Dashboard, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Media Library tab**, and then click the **Upload Image/Video button**. 3. In the panel that appears, click the **Select button**. This will launch a standard file import window on your computer. 4. Locate the file you want to use and click on it. Then click the **Open button**. Once your image or video has been uploaded, you will see it appear as a preview thumbnail. 5. Add an image title, description, and tags if you like. 6. Click the **Confirm button** to save your file. Naming and tagging your files makes it easy to search for them using the **search field** located at the top of the tab. You can also use the **media type drop-down menu** to narrow your search by file type. #### Managing images and videos[​](#managing-images-and-videos "Direct link to Managing images and videos") ![]() *Pictured: Media Library file details.* ##### Viewing files[​](#viewing-files "Direct link to Viewing files") All of your uploaded image and video files appear as thumbnails under the Media Library tab. Clicking on a **thumbnail** will open the file detail window. There you can use the **Zoom slider** to zoom in and out, or move the image around the preview window by clicking and dragging your **cursor**. ##### Editing files[​](#editing-files "Direct link to Editing files") Clicking the **Edit button** in the file detail window will open the Edit Image/Video panel. Here you can edit the file type, title, description, and tags. You can also replace the file by clicking on the **thumbnail**. When you're satisfied with your changes, click the **Confirm button**. warning Replacing a file with a new upload on the Media Library tab will not automatically replace the original image if it is displayed in-world. You will still need to manually delete or edit all in-world uses of the image. ##### Deleting files[​](#deleting-files "Direct link to Deleting files") To delete a file, first click on its **thumbnail** in the Media Library tab. You can then click the **Delete link** in the file detail panel. warning Deleting a file from the Media Library tab will not erase that image from in-world displays. You will still need to manually delete or edit all in-world uses of the image. ##### Sharing files[​](#sharing-files "Direct link to Sharing files") You can share uploaded files with users outside the Breakroom platform by clicking the **Copy URL button** in the file detail panel. --- ### Selecting default avatars [YouTube video player](https://www.youtube.com/embed/lopbVUHpt7o) #### Overview[​](#overview "Direct link to Overview") Breakroom is a multi-person simulation that uses [avatars](/getting-started/helpful-terms.md#avatar) to represent where people areβ€”and, perhaps more importantly, *who* they are. To streamline the onboarding process, Breakroom allows you to curate a set of default [starter avatars](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md) that users can wear while they familiarize themselves with the platform. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can make changes to the default avatar collection at any time through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). #### Helping users select a starter avatar[​](#helping-users-select-a-starter-avatar "Direct link to Helping users select a starter avatar") Users can pick a starter avatar when they [self-register](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md#selecting-a-starter-avatar-upon-registration) for an account on your Breakroom World. Once logged in, they can change their starter avatar at any time using the [Start Here panel](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md#selecting-a-starter-avatar-upon-login). Most starter avatars can also be customized using the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md). warning Most low poly avatars have little to no advanced customization potential. They do not consist of different components that can be swapped in and out (outfit, hairstyle, etc.), but function as self-contained "costume" avatars. If you want to use low poly avatars for your event, you can [filter the Shop contents](/creating-custom-experiences/filtering-the-sinewave-shop.md) to offer additional low poly avatar options for your users. #### Editing your default avatar collection[​](#editing-your-default-avatar-collection "Direct link to Editing your default avatar collection") ![]() *Pictured: The Dashboard > World Customization > Avatars tab.* To select or change your default avatar collection, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Avatars tab**. 3. Use the **Select Default Avatars drop-down menu** to pick an avatar category. 4. Scroll through the collection of avatar cards, and check the **boxes** to highlight the avatars you want to use. 5. Click the **Save Changes button**. You can select up to twenty avatars from any combination of categories. Detailed category descriptions are [available](/creating-custom-experiences/selecting-default-avatars/default-avatar-collections.md). #### Uploading custom default avatars[​](#uploading-custom-default-avatars "Direct link to Uploading custom default avatars") If you prefer, you can offer your users a completely bespoke collection of default avatars. Users can access these avatars during sign-up or through the Start Here panel, as [detailed](/creating-custom-experiences/selecting-default-avatars.md#helping-users-select-a-starter-avatar) above. warning Please note that only outfits that use your [custom uploaded content](/advanced-tutorials/uploading-your-own-virtual-clothing.md) or content provided by Breakroom will appear in the Uploaded category. If you create an outfit featuring third-party creator content purchased in the [Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md), that outfit will be excluded from the list. ##### Creating a custom default avatar[​](#creating-a-custom-default-avatar "Direct link to Creating a custom default avatar") To begin, create a custom avatar using the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md). We will refer to this unique avatar configuration as an *outfit.* When you save your outfit, take note of the final number that is appended to the outfit name. This is your custom avatar's *outfit ID.* ![]() *Highlighted: The location of the outfit name and outfit ID.* At this point, it will be helpful to take a picture of your finished avatar using your computer's built-in screenshot functionality. We recommend that you save this as an 800x500 image (JPG or PNG), with a maximum file size of 5MB. ##### Uploading your custom default avatar to Dashboard[​](#uploading-your-custom-default-avatar-to-dashboard "Direct link to Uploading your custom default avatar to Dashboard") ![]() *Pictured: The Dashboard > World Customization > Avatars tab, with custom avatar upload options enabled.* To upload your custom default avatar, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Avatars tab**. 3. Use the **Select Default Avatars drop-down menu** to select the **Uploaded** avatar category. 4. Click the **Upload Outfit button**. 5. The **Custom Outfit IDs drop-down menu** will appear. Use this menu to select the outfit ID of your custom avatar. 6. Click the **Browse link** in the "Upload an image for the outfit ID" panel. This will launch a standard file import window on your computer. Select the saved image of your completed custom avatar, and then click the **Open button**. 7. Click the **Upload button**. The avatar can now be [added](/creating-custom-experiences/selecting-default-avatars.md#editing-your-default-avatar-collection) to your default avatar collection. The avatar image you uploaded will appear during new user registration and in the Start Here UI. --- ### Default avatar collections #### Overview[​](#overview "Direct link to Overview") Breakroom's default avatars (sometimes referred to as [*starter avatars*](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md)*)* are designed to be visually engaging and diverse. You can offer your users as few or as many default avatar options as you like from our themed collections, or even [upload your own default avatars](/creating-custom-experiences/selecting-default-avatars.md#uploading-custom-default-avatars) to meet the unique needs of your virtual world. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can make changes to the default avatar collection at any time through the Dashboard. #### Default[​](#default "Direct link to Default") ![]() Breakroom's classic avatar collection. Attire, skins, hair, and accessories that are appropriate for a conservative work or university campus environment. #### Business Casual[​](#business-casual "Direct link to Business Casual") ![]() An expanded collection of diverse base avatars outfitted in business friendly fashions. #### Lightweight[​](#lightweight "Direct link to Lightweight") ![]() A cohort of fashionable avatars designed to play nice with lower-end rendering hardware. #### Casual Outfits[​](#casual-outfits "Direct link to Casual Outfits") ![]() Attire, skins, and hair that are appropriate for a casual festival, convention, or learning environment. #### Low Poly[​](#low-poly "Direct link to Low Poly") ![]() Fun, self-contained avatars that work well with lower-end devices. Low poly avatars also have the benefit of not being customizable, if you prefer to have total control over user avatar presentation. #### Holiday Outfits[​](#holiday-outfits "Direct link to Holiday Outfits") ![]() A cheerful selection of winter holiday-themed avatars. Perfect for use with the Breakroom Alpine Retreat and Breakroom Holiday [Region templates](/building-new-worlds/region-template-descriptions.md#breakroom-alpine-retreat)! --- ### UI customization options [YouTube video player](https://www.youtube.com/embed/mXJ8cHAgNIQ) #### Overview[​](#overview "Direct link to Overview") Breakroom's [UI](/getting-started/ui-tour.md), or *user interface*, consists of informational displays and tools that users need to participate in your World. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) have the option to customize the basic UI components at any time through the Dashboard, including changing the UI scale and color palette. #### Enabling or disabling UI functions[​](#enabling-or-disabling-ui-functions "Direct link to Enabling or disabling UI functions") ![]() *Pictured: The Dashboard > World Customization > Features tab.* To enable or disable UI features, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Features tab**. 3. Check the **box** beside each UI component you want to make available to your users. Uncheck the box beside each component you want to hide from the UI. 4. Click the **Save Changes button**. ##### End user impact[​](#end-user-impact "Direct link to End user impact") The following UI components can be toggled on or off via the Dashboard. Here's how removing each UI component may affect your users. | | | | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Component | End user impact if disabled | | Chat button | Users will not be able to access [text chat](../getting-started/communicating-with-other-users#text-chat) and will be limited to using local [voice chat](../getting-started/communicating-with-other-users#voice-chat) to communicate with one another. | | Hot Bar | Users will not be able to [equip](../getting-started/controlling-your-avatar#installing-gestures-in-the-hot-bar) Inventory items for quick deployment. | | People button | Users will not be able to open the [People window](../exploring-breakroom/networking-with-other-users/people), which allows them to locate other users and message them directly. They will also lose access to their [Groups list](../exploring-breakroom/networking-with-other-users/groups). | | Explore button | Users will not be able to open the [Explore window](../exploring-breakroom/using-the-explore-window), which allows them tolocate and teleport to [Featured Regions](../building-new-worlds/creating-and-managing-regions#featuring-a-region). | | Meetings button | Users will not be able to open the [Meetings window](../exploring-breakroom/using-the-meetings-window), or see the posted event schedule. | | Inventory button | Users will not be able to open the [Inventory window](using-the-region-editor/#the-inventory-window), which allows them to access any in-world items they have collected or purchased. | | Outfit button | Users will not be able to open the [Outfit window](../getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window), which means they will not be able to edit their avatars and may lose some clothing and avatar component customization options. | | Shop button | Users will not be able to access the [Sinewave Shop](../getting-started/customizing-your-avatar/using-the-sinewave-shop). | | Snapshot button | Users will not be able to open the [Snapshot window](../exploring-breakroom/snapshots) in order to take pictures of their avatars or your virtual event. | | Mini map | Users will not be able to activate the [mini map](../getting-started/ui-tour#the-mini-map) in the upper right corner of their screens and will lose access to the [Region Information window](../building-new-worlds/region-settings). | | Quests | Users will not have access to the [Quest window](../advanced-tutorials/installing-the-quest-system), where they can track their progress on any quests they've started. | | Search | Users won't be able to search for Regions, users, groups, or Sinewave Shop items. | | Clock | Users will not see a clock displayed at the top of the screen. | | Gold | Users will not see how much Gold they have *or* the button that allows them to purchase additional Gold [currency](../getting-started/customizing-your-avatar/using-the-sinewave-shop#breakroom-currencies). They will only see how much Silver currency they have. | | Currency | Users will not see their current Gold *or* Silver [currency](../getting-started/customizing-your-avatar/using-the-sinewave-shop#breakroom-currencies) holdings displayed at the top of the screen. | | Email | Users will not be able to send [Breakroom emails](../getting-started/communicating-with-other-users#in-world-email) or read emails sent by other people. | | Auction | Users will not be able to sell or purchase Sinewave Shop items via auction. | #### Changing the default UI scale[​](#changing-the-default-ui-scale "Direct link to Changing the default UI scale") ![]() *Pictured: The Dashboard > World Customization > Features tab, "Default Scale" panel.* In order to improve accessibility for your users, you may wish to change the default scale of the UI. Scale changes implemented through the Dashboard will apply to every Region in your Breakroom World. To adjust the default UI scale, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Features tab**. 3. Scroll down to the "Default Scale" panel. Click one of the **percentage buttons** to choose a new UI scale. (Note: 100% represents the default UI scale.) 4. Click the **Save Changes button**. info Users can also adjust the UI scale to meet their specifications through the in-world [Settings panel](/getting-started/settings.md#ui-settings). #### Customizing the UI colors[​](#customizing-the-ui-colors "Direct link to Customizing the UI colors") [YouTube video player](https://www.youtube.com/embed/rI09diYGED4) The UI Color Setting panel allows you to customize the UI color palette. With just a few clicks, the UI can instantly harmonize with your corporate branding guidelines or complement your Region design. UI color changes implemented through the Dashboard will apply to every Region in your Breakroom World. ![]() *Pictured: The Dashboard > World Customization > Color Theme tab.* To customize the UI colors, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Color Theme tab.** 3. In the UI Color Setting panel, you'll see six color swatches. Click on any of these swatches, and a color picker will appear. 1. You can use the color spectrum tools to generate different colors and explore your options. Your choices will be displayed on the mockup UI in real time, so feel free to experiment. 2. Click on the arrow icons in the bottom right corner of the color picker to cycle the fields through RGB, HSL, and HEX. Enter values or codes into any of these fields to apply a specific color to a chosen UI element. 4. When you are satisfied, click the **Save Changes button**. ![]() *Pictured: An example of the same UI in the same Region, but with different UI color schemes.* --- ### Using the Region Editor #### Overview[​](#overview "Direct link to Overview") The Region Editor gives users with advanced [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions the ability to edit existing Regions and any items that they contain. Plaster your exhibition hall with eye-catching posters, brand your vendor booths, or add appealing personal touches like potted plants and comfy sofasβ€”with the Region Editor, almost anything is possible. The videos, images, and tables below are designed to serve as a basic overview of the Region Editor. After you've grown comfortable accessing the Region Editor and utilizing the various tools it contains, you can expand your skillset by reviewing the additional pages in this section. There you'll learn more about [editing and moving objects](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md), and explore some of the Region Editor's advanced settings, such as creating [custom atmospheric and sky effects](/creating-custom-experiences/using-the-region-editor/editing-terrain-and-sky.md) and [swapping out materials](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md). #### Opening the Region Editor[​](#opening-the-region-editor "Direct link to Opening the Region Editor") [YouTube video player](https://www.youtube.com/embed/oeCQf71xpwM) *** ![](/assets/images/Region_Editor_001-36dba6a71c5648552a08425aeaaa104c.png) *Highlighted: The location of the Edit Region button.* You can open your own user profile by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). #### The Region Editor UI[​](#the-region-editor-ui "Direct link to The Region Editor UI") ![](/assets/images/Region_Editor_002-9057f21e97610846581e15a29d2a1b82.png) *Pictured: The Region Editor UI, which consists of multiple windows and panels.* Once the Region Editor is launched, you'll see that it replaces the normal [Breakroom UI](/getting-started/ui-tour.md) on your screen. The tools in the Region Editor give you the ability to inspect and edit different parts of your Region. Let's take a look at each part of the Region Editor UI in greater detail. ##### The Objects window[​](#the-objects-window "Direct link to The Objects window") [YouTube video player](https://www.youtube.com/embed/Z3INDzrr_0w) *** ![](/assets/images/Region_Editor_003-ecaab1fd85152462aa78319dcec78d57.png) *Pictured: The Objects window.* The *Objects window* lists all of the virtual objects in your Region. These objects are sorted onto different *floors,* depending on who added them and when they were added. The *room floor* (labeled "Floor\_roomfloor" in the image above) contains any conference system components that you have permission to remove or edit, as well as any objects that *you* have manually placed in the Region. Meanwhile, the *Region floor* (here labeled "Breakroom Gallery") contains the individual 3D assets used to build the Region template. The contents of this floor will vary. info *Region floor* objects were uploaded into Breakroom as a whole, as part of one cohesive Region. You may be able to toggle visibility on some of these objects, or edit their settings if the original Region uploader elected to make that possible. However, you may not be able to make changes to all of the Region floor components. danger All Breakroom [Region templates](/building-new-worlds/region-template-descriptions.md) contain a *HIDDEN FLOOR* as part of the Region floor. This floor contains the essential conference system components, and cannot be deleted or edited. ###### Objects window icons[​](#objects-window-icons "Direct link to Objects window icons") In the Objects window, you'll notice that the room and Region floors have different icon sets associated with them. Here's a quick breakdown of what those icons mean. ![](/assets/images/Region_Editor_004-676905467eb92b09e9c00fbbbacd6737.png) | Room floor icon | Function | | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Eye | Toggling this icon changes the object's visibility *without deleting it*. If disabled, the object will not render (it will not be visible to users), and any scripts it contains will not run. | | Lock | Toggling this icon locks or unlocks an item. Locked items cannot be moved from their current position, and no further changes can be made to their components. | | Trash | Clicking this icon deletes the item from the Region. | ![](/assets/images/Region_Editor_005-dba20785dde45736f063e44951ad4d54.png) | Region floor icon | Function | | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Eye | Toggling this icon changes the object's visibility *without deleting it*. If disabled, the object will not render (be visible to users), and any scripts it contains will not run. | | Lock | Toggling this icon locks or unlocks an item. Locked items cannot be moved from their current position, and no further changes can be made to their components. | | Reload | Clicking this icon reloads an item so that any changes will be pushed forward. | ###### Locating objects using the Objects window[​](#locating-objects-using-the-objects-window "Direct link to Locating objects using the Objects window") ![](/assets/images/Region_Editor_006-8fc27a2fe9236db310ffef23be6ef413.png) *Pictured: The Objects window with the Objects type drop-down menu expanded.* You can use the **Objects type drop-down menu** located at the top of the Objects window to filter your objects list. You can also search for a specific object using the **search field**. ##### The Inspector window[​](#the-inspector-window "Direct link to The Inspector window") [YouTube video player](https://www.youtube.com/embed/Y1bT4j35mE8) *** ![](/assets/images/Region_Editor_007-f34d3b1957ef5e0f9d90f70d45afeb6f.png) *Pictured: The Inspector window displayed next to a selected object.* The *Inspector window* shows more specific information about the individual objects that make up your Region. You can open the Inspector window by clicking on an **object** while in the Region Editor, or by clicking on that object's **name** in the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). In the image above, a breakout room has been selected as the active object. You can see that the object is surrounded by a green *collider box*, and a [*movement gizmo*](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) is hovering inside. In the Inspector window, you can see that this object contains a number of *components*. Expanding a component reveals details about this particular breakout room, such as its location and scale. The Inspector window is an advanced tool that generally tells you what components exist *within* or *on* a selected object. If the object is a seat, it will contain a Seat Position component. If the object is a solid wall, it will have a Collider component so that avatars can't pass through it. If the object contains a Lua script, it will have a Script Runtime component attached to it. These individual components can be examined, managed, and potentially modified via the Inspector window. All objects contain a [*Transform component*](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) which allows you to alter their rotation, position, and scale. This is useful to know, as it gives you a great amount of control over where objects appear in your Region. At the top of the window, you will notice an **On/Off toggle** labeled with the object's name, as well as an **"Is Active" checkbox option**. These controls are the same. If the toggle is on/box is checked, the object is active and will be rendered and scripted in your Region as normal. If the toggle is off/box is unchecked, the object (and all of its children) will not be rendered or scripted for users. ##### The Inventory window[​](#the-inventory-window "Direct link to The Inventory window") [YouTube video player](https://www.youtube.com/embed/MMeCPktVxa4) *** ![](/assets/images/Region_Editor_008-e606a58bc63093331aac733b529dd9c9.png) *Pictured: The Inventory window, with the location of the View button highlighted.* The *Inventory window* lists all of the virtual objects you currently own. There are two ways to place an object in your Region while using the Region Editor. 1. **Left click** on the item in your Inventory window and then hover your cursor over the ground in your Region. You will see the item appear in real time. The item will follow your cursor, allowing you to position it. Click the **left mouse button** when you want to set the item down. 2. **Left click and hold** on the item in your Inventory window and drag it into the Region. Release the **left mouse button**, and your item will be placed in the indicated position. You can switch between Icon view and List view in the Inventory window by clicking the pink **View button** (highlighted in the image above). You can also use the **Search field** to find any items you need. tip The [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md) includes video players, web browsers, posters, and other media and branding assets to place wherever you like. You can also find unique items to dress up your Regions in the [Sinewave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md)β€”such as stylish pieces of furniture, works of art, or quirky conversation starters. ##### The Advanced window[​](#the-advanced-window "Direct link to The Advanced window") ![](/assets/images/Region_Editor_009-f8ff3d57a861d9463cc39f90eb43001a.png) *Highlighted: The location of the Advanced button.* Advanced settings can be accessed by clicking the **Advanced button** located in the [function button tray](/creating-custom-experiences/using-the-region-editor.md#function-buttons). By editing these settings, you can: * Change who owns the room floor * Change or reset Region materials \* * Change or reset Region lighting \* * Enable or disable Region options \* * Reset the Region as a whole Please see our [Advanced window](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md) page for more information. warning Some Advanced window settings, including swappable materials, are only available on certain [Breakroom Region templates](/building-new-worlds/region-template-descriptions.md). ##### Object positioning and editing tools[​](#object-positioning-and-editing-tools "Direct link to Object positioning and editing tools") ![](/assets/images/Region_Editor_010-f70c3ea7a225ac513db2e94f2e8ed653.png) The buttons in this tray are designed to help you move and manipulate the virtual objects that make up your Region. From left to right, here's a brief overview of what each button does. You can find more comprehensive information about these tools on our dedicated [object editing page](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md). | Button | Function | | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Move | Activates the movement gizmo, allowing you to move an object. (You can also toggle this by pressing the **Alt + W keys** on your keyboard.) | | Rotate | Activates the rotate gizmo, allowing you to rotate an object. (You can also toggle this by pressing the **Alt + E keys** on your keyboard.) | | Scale | Activates the scale gizmo, allowing you to resize an object. (You can also toggle this by pressing the **Alt + R keys** on your keyboard.) | | Node Mode | If *node mode* is activated and "snap nodes" have been installed in both a Region and an object, then objects will naturally snap into place when you move them. | | Grid Mode | With *grid mode* activated, you can orient objects on a local grid. | | Move Object to Camera | Moves the currently selected object to your camera position. | | Local Mode / Global Mode Toggle | With *local mode* activated, objects can be moved relative to their own position and rotation. With *global mode* activated, objects can be moved relative to the Region itself. | | Center / Mesh Pivot Toggle | With *center* *mode* activated, gizmos will appear within the object's bounding box (or at their "center of mass"). With *mesh pivot mode* activated, gizmos will appear at the object's pivot point. | | Undo | Undo your last action. | | Redo | Redo your last undone action. | | Avatar Move | If enabled, this feature locks your avatar into place while you edit the Region. Disabling it gives you the freedom to move your avatar around the Region as you edit. | ##### Deleting, duplicating, and deselecting objects[​](#deleting-duplicating-and-deselecting-objects "Direct link to Deleting, duplicating, and deselecting objects") ![](/assets/images/Region_Editor_011-d92af51baeef28a26e14525db27aff3a.png) If you have no object selected, the buttons pictured above will not appear. Once you select an object, these buttons will give you the option to delete the object, duplicate it, or deselect all of your currently selected objects. You can also delete a selected object by pressing the **Delete key** on your keyboard. You can duplicate a selected object by pressing **Ctrl + D.** ##### Function buttons[​](#function-buttons "Direct link to Function buttons") ![](/assets/images/Region_Editor_012-0eaf7d8bfa5b0b6cdf0c18bd25a4e70e.png) Finally, the Region Editor function buttons let you manage the windows described above and push your changes forward. From left to right, here's a brief overview of what each button does. | Button | Function | | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Inventory | Calls up the [Inventory window](./#the-inventory-window). | | Advanced | Calls up the [Advanced window](./#the-advanced-window). | | Objects | Calls up the [Objects window](./#the-objects-window). | | Terrain | Launches the Terrain editing window. | | Sky | Launches the [Sky editing window](editing-terrain-and-sky). | | Floor menu | Allows you to select which [floor](./#the-region-editor-ui) items will be placed on. Set the drop-down menu to your desired floor, and any objects you set out will be "filed" under that floor in the Objects window. | | Save | Saves your Region editing progress. | | Close | Closes the Region Editor. You will be asked whether you want to save your changes. | ![](/assets/images/Region_Editor_013-6023ef861b3813b3fa375cf48ee07667.png) | Button | Function | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Reset Zones | Resets all [voice zones](../../running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions) (and related navigation UIs) in order to push forward any changes made in the Region Editor. | | Visibility | Toggles voice zone/object collider visibility. Useful for when you want to edit the objects inside a voice zone without running into camera issues. | --- ### Editing and moving objects [YouTube video player](https://www.youtube.com/embed/2JWmr95W3-c) #### Overview[​](#overview "Direct link to Overview") Breakroom's [Region Editor](/creating-custom-experiences/using-the-region-editor.md) is a powerful tool that helps you bring your Metaverse vision to life. On this page, you'll learn how to move, rotate, resize, and position virtual objects in order to customize your Breakroom World. #### Getting started [](#getting-started)[​](#getting-started- "Direct link to getting-started-") In order to make changes to a virtual object in Breakroom, you'll first need to open the Region Editor and select that object. To do so, follow these steps. 1. Navigate to the Region that contains the object you want to edit. 2. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 3. Click on the object you want to edit or click on that item's name in the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). This will highlight the object on your screen. You can switch your selected object within the Region Editor at any time. For additional information, please review our [introduction to using the Region Editor](/creating-custom-experiences/using-the-region-editor.md) and our [Region Editor best practices](/tips-for-success/region-editor-best-practices.md). #### Moving objects using the Region Editor[​](#moving-objects-using-the-region-editor "Direct link to Moving objects using the Region Editor") ##### Movement [​](#movement- "Direct link to Movement ") ![](/assets/images/Editing_Moving_001-62f336a2ca05ce34695eb1b4467a30d8.gif) The *movement gizmo* is a tool that allows you to manually reposition items in your Region. In the image above, you can see the movement gizmo represented by a set of colorful arrows attached to the picnic table object. To activate the movement gizmo while in the Region Editor, click the **Move button** located in the [object editing tray](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools), or press the **Alt + W keys** on your keyboard. Once the movement gizmo is activated, you can move your chosen object using the steps below. 1. To move the object along the X, Y, or Z axis, hover your **cursor** over the appropriate arrow. That arrow will turn yellow. 2. **Click on the arrow** and hold down the **left mouse button**. 3. With the arrow selected and the left mouse button held down, move your cursor to slide the object back and forth along your chosen axis. 4. To set the object in place, **release** the left mouse button. 5. To move the object along multiple axes simultaneously, click and hold on one of the **squares** located at the gizmo's root. You can then drag the object to your desired location. You can also "free move" an object along a plane set at 90Β° to the current camera angle (as if you were "washing" the camera lens in front of you). 1. Hold down the **Shift key** on your keyboard. A single highlighted box will appear at the root of the movement gizmo. 2. **Click on the box** and hold down the **left mouse button**. Continue to hold down the Shift key. 3. Use your cursor to freely position the object. 4. To set the object in place, **release** both the left mouse button and the Shift key. info You can move objects quickly and easily using the [**"Move Object to Camera" button**](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools). This button will move any currently selected object to your camera's location. It's especially useful for [changing camera angles in voice zones](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md). ##### Rotation[​](#rotation "Direct link to Rotation") ![](/assets/images/Editing_Moving_002-7144e0fe35e3d485aaa7557d08b3ef73.gif) The *rotation gizmo* allows you to rotate an object around one or more axes. In the image above, you can see the rotation gizmo represented by a set of colorful rails attached to the picnic table object. To activate the rotation gizmo while in the Region Editor, click the **Rotate button** located in the [object editing tray](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools), or press the **Alt + E keys** on your keyboard. Once the rotation gizmo is activated, you can rotate your chosen object using the steps below. 1. To rotate the object along the X, Y, or Z axis, hover your **cursor** over the appropriate colored rail. That rail will turn yellow. 2. **Click on the rail** and hold down the **left mouse button**. 3. With the rail selected and the left mouse button held down, move your cursor to rotate the object. 4. To freeze the object in your desired position, **release** the left mouse button. You can rotate the object on a plane facing your camera by manipulating the **outer white rail** instead of the colored rails, following the directions above. Finally, you can "free rotate" an object along all three axes at once by clicking and holding on any part of **the object itself**, instead of the rails. ##### Scaling[​](#scaling "Direct link to Scaling") ![](/assets/images/Editing_Moving_003-4c1e1a8a89d32fb7e3d9e50446196f48.gif) The *scaling gizmo* allows you to resize an object along one or more axes. In the image above, you can see the scaling gizmo represented by a set of colorful markers attached to the picnic table object. To activate the scaling gizmo while in the Region Editor, click the **Scale button** located in the [object editing tray](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools), or press the **Alt + R keys** on your keyboard. Once the scaling gizmo is activated, you can resize your chosen object using the steps below. 1. To scale the object along the X, Y, or Z axis, hover your **cursor** over the appropriate axis marker. That marker will turn yellow. 2. **Click on the marker** and hold down the **left mouse button**. 3. With the marker selected and the left mouse button held down, move your cursor to scale the object. 4. To finish scaling the object, **release** the left mouse button. 5. To scale the object along multiple axes simultaneously, click and hold on one of the triangles located at the gizmo's root. You can then drag the object to your desired proportions. You can also scale an object along all three axes at once. This will preserve the object's original aspect ratio/proportions, essentially allowing you to "embiggen" or "shrink" the object. 1. Hold down the **Shift key** on your keyboard. A single highlighted box will appear at the root of the scaling gizmo. 2. Click on the **box** and hold down the **left mouse button**. Continue to hold down the Shift key. 3. Use your cursor to freely resize the object. 4. To finish scaling the object, **release** both the left mouse button and the Shift key. #### Editing the Transform component[​](#editing-the-transform-component "Direct link to Editing the Transform component") In some situations, it may be more efficient to move, rotate, or scale an object by editing its Transform component. By manually editing the values stored in an object's Transform component, you can move an object five meters along the X axis and rotate the same object by a precise number of degrees, all with just a few clicks. ![](/assets/images/Editing_Moving_004-4383b12149b95bdde9ca97bb2a31a913.png) *Pictured: The Region Editor window, with a Breakroom Web Browser object selected. Its Inspector window is shown on the left.* To identify the values stored in an object's Transform component, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Make sure the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window) is open by clicking the **Objects button** located on the bottom right. 3. Locate the **object** you want to edit in the Objects window, and click on it. This will open the **Inspector window** for that object. 4. Expand the Transform component in the [Inspector window](/creating-custom-experiences/using-the-region-editor.md#the-inspector-window) by clicking the **> arrow** located to the left. 5. You will see three properties (Local Position, Local Euler Angle, and Local Scale). Each property contains three fields corresponding to the object's X, Y, and Z axes. ![](/assets/images/Editing_Moving_005-b50050db0301549480a4be2e8c41f8c3.png) *Pictured: An example Inspector window.* ##### Changing an object's position[​](#changing-an-objects-position "Direct link to Changing an object's position") To change the position of an object, enter the updated location values (along the X, Y, or Z axis, or any combination of these). Then click the **Save button** located in the bottom right corner of the Region Editor. ##### Changing an object's rotation[​](#changing-an-objects-rotation "Direct link to Changing an object's rotation") To change the rotation of an object, enter the updated rotation values (along the X, Y, or Z axis, or any combination of these). Then click the **Save button** located in the bottom right corner of the Region Editor. ##### Changing an object's scale[​](#changing-an-objects-scale "Direct link to Changing an object's scale") To change the scale of an object, enter the updated scale values (along the X, Y, or Z axis, or any combination of these). Then click the **Save button** located in the bottom right corner of the Region Editor. #### Using node mode[​](#using-node-mode "Direct link to Using node mode") danger This section is currently under construction. If you have any questions that aren't answered here, please contact our [Customer Success Team](/help/where-to-find-support.md). #### Using grid mode[​](#using-grid-mode "Direct link to Using grid mode") You can activate grid mode for every object in your Region by clicking the **Grid Mode button** in the [object editing tray](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools), or by holding down the **Ctrl key** while actively manipulating an object. When you're in grid mode, you'll notice that object movement, rotation, and scaling will "snap" along an invisible grid instead of flowing smoothly. This is especially useful when moving items around a scene, allowing you to perform tasks like lining up chairs in neat rows with a minimum of effort. info In grid mode, movement "snap points" are set one meter apart from each other. Rotation "snap points" are set at 15Β° intervals. #### Local mode vs. global mode[​](#local-mode-vs-global-mode "Direct link to Local mode vs. global mode") In the [object editing tray](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools), you can choose to orient your objects using either *local mode* or *global mode*. In local mode, objects will be moved, rotated, and scaled relative to their own axes. ![](/assets/images/Editing_Moving_006-860dba97f738ec4b31e019cb5b4fe1fc.png) *Pictured: In local mode, the movement gizmo aligns with the width, length, and height of the object.* In global mode, object manipulation is accomplished *relative to the layout of the Region*. ![](/assets/images/Editing_Moving_007-f3331b9bd554d5324320b73af0b658cd.png) *Pictured: In global mode, the movement gizmo aligns with the cardinal directions of the region itself.* Both local and global mode have their uses. Combine global mode with grid mode to lay out a precise flower garden, or use local mode to randomly sprinkle rose petals along a pathway. #### Center mode vs. mesh pivot mode[​](#center-mode-vs-mesh-pivot-mode "Direct link to Center mode vs. mesh pivot mode") In the [object editing tray](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools), you can also toggle between two pivot points for your objectsβ€”*center pivot* and *mesh pivot*. All objects have a mesh pivot point, which is usually located at the object base (where an object might rest on the floor or on a table) or at a natural pivot point, such as the hinges of a door. Alternatively, an object's center point is normally located close to its center of mass, or the center of the bounding box that surrounds it. The difference between these two points can sometimes be subtle, but it's still a useful distinction to keep in mind. The pivot point is where your movement, rotation, and scaling gizmos will appear in the Region Editor, and rotating an object from its center pivot point may lead to different results than rotating that same object from its mesh pivot point. --- ### Editing terrain and sky [YouTube video player](https://www.youtube.com/embed/elhSjnqCMGg) #### Overview[​](#overview "Direct link to Overview") With Breakroom's Region Editor, you aren't limited to customizing physical spaces. The very elements are also yours to control, allowing you to create sunny, happy office parks or atmospheric nighttime events. ![](/assets/images/Sky_001-1570884e49116448f65664550369df06.png) *A few slider tweaks allow you to turn this...* ![](/assets/images/Sky_002-8e2cb69525c867b1a58d66724e25b2e8.png) *...into this.* #### Editing the sky and atmosphere[​](#editing-the-sky-and-atmosphere "Direct link to Editing the sky and atmosphere") ![](/img/breakroom/Sky_003.png) *Pictured: The Sky editing windows.* To open the Sky editing window, follow these steps. 1. Navigate to the Region that contains the object you want to edit. 2. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 3. Click the **Sky button** in the [function tray](/creating-custom-experiences/using-the-region-editor.md#function-buttons). As you can see in the image above, there are many different options to explore. The best way to get started is to play with the sliders and judge the virtual sky effects in real time. As far as control settings, there are a few key items to review. | Sky editing feature | Result | | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Master Control - Reset to Default button | Clicking this button will revert any custom changes you've made, and restore the Region's default sky settings. | | Master Control - Override Sky Settings | In order to make changes to a Region's sky settings, this box must be checked. If you uncheck it and save your work, the Region's default sky settings will be restored. | | Clock Settings - Use Fixed Time | If this box is checked, you can "freeze" your atmospheric settings at a certain time of day (e.g. sunset) using the slider. If this option remains unchecked, your Region will experience an animated day-to-night cycle. | | Clock Settings - Synchronize to UTC | If this option is checked, your Region's day-to-night cycle follow the UTC time zone. | | Weather Settings - Enable Random Weather | If this box is checked, random weather events will change the sky's color, haziness, and general presentation. | #### Editing terrain[​](#editing-terrain "Direct link to Editing terrain") danger This section is currently under construction. If you have any questions that aren't answered here, please contact our [Customer Success Team](/help/where-to-find-support.md). --- ### The Region Editor ADVANCED window #### Overview[​](#overview "Direct link to Overview") ![](/img/breakroom/Region_Advanced_001.png) *Highlighted: The location of the Advanced button in the Region Editor function tray.* Users with the appropriate [World-](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) or [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) permissions can access advanced [Region Editor](/creating-custom-experiences/using-the-region-editor.md) functions by clicking the **Advanced button** located in the [function tray](/creating-custom-experiences/using-the-region-editor.md#function-buttons). There you can control floor access, swap materials on some Region template surfaces, toggle optional Region template design features, or reset a Region back to its default configuration. #### The Area tab[​](#the-area-tab "Direct link to The Area tab") ![](/img/breakroom/Region_Advanced_002.png) *Pictured: The Area tab in the Region Editor Advanced window.* The Area tab allows you to change who owns the Region [room floor](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). The room floor owner can move, delete, edit, and otherwise manage all items "filed" under that floor in the Objects window, even those set down by other people. At this stage in Breakroom's development, this option has limited use. If you do want to change the room floor owner, follow these steps. 1. Navigate to the Region that contains the room floor you want to reassign. 2. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 3. Open the Advanced window by clicking the **Advanced button**. 4. Click on the **Area tab**. 5. Locate the room floor, and click the **Edit button**. 6. In the panel that appears, use the **Owner drop-down menu** to select one of your [contacts](/exploring-breakroom/networking-with-other-users/people.md) as the new owner. If you want to revert ownership back to yourself, select "Region Owner" in the drop-down menu. 7. Click the **Save button**. #### The Materials tab[​](#the-materials-tab "Direct link to The Materials tab") ![](/img/breakroom/Region_Advanced_003.png) *Pictured: The Materials tab in the Region Editor Advanced window.* If a [Region template](/building-new-worlds/region-template-descriptions.md) includes material-enabled surfaces, you can change those materials at any time through the Materials tab. This is a quick, easy way to achieve fresh visual effects using existing Region templates. ##### Purchasing materials in the Shop[​](#purchasing-materials-in-the-shop "Direct link to Purchasing materials in the Shop") ![](/img/breakroom/Region_Advanced_004.png) *Pictured: The Shop window, filtered to display the Furniture > Materials category.* In order to swap out materials in a Region template, you will first need to purchase alternative material files. These are available through the [Sine Wave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md). To open the Shop and navigate directly to the materials category, follow these steps. 1. Click on the **Shop button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 2. Click the **Furniture tab** located along the top of the Shop window. 3. Click the **Materials subcategory** in the left-hand menu. Once there, you can browse through the available files at your convenience. Please be advised that some materials come bundled in packs, while others are sold as single files. For help completing your purchase, please review our detailed [Shop instructions](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#completing-your-purchase). ##### Swapping materials on a Region surface[​](#swapping-materials-on-a-region-surface "Direct link to Swapping materials on a Region surface") ![](/img/breakroom/Region_Advanced_005.png) *Pictured: The standard 90-seat auditorium installed in the Breakroom Desert Island Region template.* To illustrate the effects of a material swap and create a walkthrough tutorial, we will change the 90-seat auditorium stage surface in the [Desert Island](/building-new-worlds/region-template-descriptions.md#desert-island) Region template. As you can see in the image above, the stage surface defaults to non-slip green flooring. To access the material swap feature, follow the steps below. 1. Navigate to the Region you want to edit. 2. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 3. Open the Advanced window by clicking the **Advanced button**. 4. Click on the **Materials tab**. 5. If there are any material-enabled surfaces in the Region, you will see them listed under this tab. To change a particular material, click the **Swap Material button** located to the right of the surface name. ![](/img/breakroom/Region_Advanced_006.png) *Pictured: The Region Editor > Advanced window > Materials tab. This Region has one swappable material point.* 6. If you have materials in your Inventory, these will be displayed on the right side. Click on the **material** you want to use. 7. Once you're satisfied with your changes, click the **Save** and **Close buttons** in the lower right corner of the Region Editor. ![](/img/breakroom/Region_Advanced_007.png) *Pictured: The same 90-seat auditorium, now with a wooden floor.* Here you can see that we have replaced the non-slip green floor with wooden decking material from the *Wood Flooring Volume 1* materials pack by Trilo Byte Design. The effect is immediate, as the stage looks more organic and thus reflects the tropical environment. #### The Lights tab[​](#the-lights-tab "Direct link to The Lights tab") Like the Materials tab, the Lights tab allows you to make changes to real-time lighting fixtures. Currently, there are no Breakroom Region templates equipped with modifiable lighting. #### The Options tab[​](#the-options-tab "Direct link to The Options tab") ![](/img/breakroom/Region_Advanced_008.png) *Pictured: The Options tab in the Region Editor Advanced window.* Some Region templates come equipped with additional customization settings that can be toggled through the Options tab. This may include things like tree density, specific material effects, animated scenery, and more. To toggle any these settings, follow the steps below. 1. Navigate to the Region you want to edit. 2. Open the Region Editor by clicking the **Edit Region button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 3. Open the Advanced window by clicking the **Advanced button**. 4. Click on the **Options tab**. 5. Locate the setting you want to toggle and click the relevant **Enable/Disable button.** 6. Once you're satisfied with your changes, click the **Save** and **Close buttons** in the lower right corner of the Region Editor. #### The Reset Region tab[​](#the-reset-region-tab "Direct link to The Reset Region tab") ![](/img/breakroom/Region_Advanced_009.png) *Pictured: The Reset Region tab in the Region Editor Advanced window.* The Reset Region tab can be used to revert all or part of a Region back to default settings. Clicking any of these buttons can result in dramatic and wide-ranging effects, so it's important to understand how they work. ##### Reset Components button[​](#reset-components-button "Direct link to Reset Components button") Clicking the **Reset Components button** will reset *every component attached to every object in the Region*, restoring their default settings. This includes: * The [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), which affects object location and rotation * The [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md), which can affect custom voice zones * The [ScriptingData component](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md), which can affect custom screen setups, etc. Only click this button if you want to r*eset the components attached to every object* without deleting those objects from your Region. ##### Reset Materials button[​](#reset-materials-button "Direct link to Reset Materials button") Clicking the **Reset Materials button** will restore the default materials on any material-enabled surfaces that you [have edited](/creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window.md#the-materials-tab). ##### Reset Region button[​](#reset-region-button "Direct link to Reset Region button") Clicking the **Reset Region button** will delete all custom changes that have been made to a Region. This includes deleting any virtual items that have been added to your Region. *Please think carefully before you restore a Region to its default settings.* danger It bears repeatingβ€”*please consider the consequences **before** you click any of the Reset Region buttons.* Using these buttons can destroy any or *all* custom work you have done in a Region. *Your deleted work will not be recoverable.* --- ## Exploring Breakroom ### EXPLORING BREAKROOM #### [πŸ“„οΈRegion navigation tools](/exploring-breakroom/region-navigation-tools.md) [The Metaverse is meant to be exploredβ€”so don't just stand there! Here we'll review some basic movement commands before showing you new ways to explore your Breakroom World.](/exploring-breakroom/region-navigation-tools.md) --- ### Bookmarks and teleport invites #### Overview [](#overview)[​](#overview- "Direct link to overview-") Teleportation lets you travel instantly to different locations both within and between [Regions](/getting-started/helpful-terms.md#region). In this section, we'll take a look at bookmarks and teleport invites and explain how they can be used to get around. #### Bookmarks[​](#bookmarks "Direct link to Bookmarks") Bookmarks are like virtual "pins" tacked on Breakroom's Metaverse map. By creating a bookmark, you can save the coordinates of a particular Region you might like to revisit. You can also [share](/exploring-breakroom/bookmarks-and-teleport-invites.md#sharing-bookmarks-with-other-users) bookmarks with other users and use them to set specific landing points for any [meetings](/exploring-breakroom/using-the-meetings-window.md) that you schedule. ##### Creating bookmarks[​](#creating-bookmarks "Direct link to Creating bookmarks") ![A closeup of the top toolbar of the Breakroom UI. The main menu is expanded to show all available functions, and the Create Bookmark buttons are highlighted in orange.](/assets/images/Bookmarks_001-1ca152cf755c5576b41fd9af085c0d61.jpg) *Highlighted: The location of both Create Bookmark buttons.* To create a bookmark, follow these steps. 1. Navigate your avatar to the area you want to bookmark. Keep in mind that the bookmark coordinates will point to the exact point where your avatar is positioned. 2. When your avatar is in the right spot, click the **hamburger menu** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) and then click **Create Bookmark**. (Or click the on-screen **button** if you have it pinned.) 3. In the dialog box that appears, enter a **name** for your bookmark and click the **OK button**. This will create a **bookmark object** in your Inventory. ##### Using bookmarks[​](#using-bookmarks "Direct link to Using bookmarks") ![A user\'s Inventory opened to the Bookmarks category. The action menu for a bookmark has been opened, and a blue arrow points to the Teleport button.](/assets/images/Region_Navigation_003-8ceb5d44044322a3b6e9642028c790bf.jpg) *Highlighted: The location of the Teleport button.* Once you've created a bookmark, you can use it to travel to a saved area by following these steps. 1. Open your Inventory by clicking the **Inventory button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). Click on the **Bookmark category** to expand it. 2. Locate the **bookmark** you want to use and click on it. In the action menu that appears, click the **Teleport button**. ##### Editing bookmarks [](#editing-bookmarks)[​](#editing-bookmarks- "Direct link to editing-bookmarks-") There are additional management functions available through the bookmark action menu. * To rename a bookmark, click the **Rename button** and enter the new name when prompted. * To rate the quality of a bookmark, click the **Rate button**. Choose your rating, and then click the **OK button**. * To delete a bookmark from your Inventory, click the **Delete button**. ##### Sharing bookmarks [](#sharing-bookmarks-with-other-users)[​](#sharing-bookmarks- "Direct link to sharing-bookmarks-") The only way to share a bookmark is by attaching it to an [in-world email](/getting-started/communicating-with-other-users.md#in-world-email). Once the recipient has accepted your attachment, they'll be able to use and edit their copy of the bookmark as described above. To attach a bookmark to an in-world email, follow these steps. 1. Open the email composition window using your [preferred method](/getting-started/communicating-with-other-users.md#sending-email). 2. Click the **Open Inventory button** in the email composition window. 3. An Inventory window will open. Click on **the item** you want to send. 4. If you like, you can set a sale price for the item using either [Silver or Gold currency](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies). If you do this, there are two important things to keep in mind: 1. Breakroom will take 10% of the selling price as a fee for doing business on the platform. 2. If the other user declines to purchase the item, they will not receive it. 5. Once you're done composing your email, click the **Send button**. 6. If you *don't* want to sell the attachment, click the **OK button** to confirm your choice. #### Teleport invites[​](#teleport-invites "Direct link to Teleport invites") You can meet up with other users in real time by teleporting to their location, or by inviting them to teleport to yours. There are multiple ways to accomplish this. ##### Teleporting to other users [](#teleporting-to-other-users)[​](#teleporting-to-other-users- "Direct link to teleporting-to-other-users-") 1. If the other user is listed as a contact in your [People list](/exploring-breakroom/networking-with-other-users/people.md), click on their **name** and then click **Teleport to User** in the action menu that appears. Your contact will see a pop-up asking them to grant or deny your request. 2. If the other user is not yet one of your contacts, you can use the [**search field**](/getting-started/ui-tour.md#the-search-bar) to search for a full or partial name. Once you've found the right person, click on their **name** to open their user profile, then click **More > Teleport to User**. The other user will be see a pop-up asking them to grant or deny your request. ##### Inviting users to teleport to you [](#inviting-users-to-teleport-to-you)[​](#inviting-users-to-teleport-to-you- "Direct link to inviting-users-to-teleport-to-you-") To ask a user to join you, repeat the steps outlined above, but click the **Invite Here button**. The other user will receive your teleport invitation and will have the option to accept or dismiss it. --- ### Networking with other users #### Overview[​](#overview "Direct link to Overview") Breakroom's networking tools are designed to help you make the most of the very real relationships forged in your virtual World. By combining the power of your user profile, the People window, and the Groups window, you can: * Make it easy for other users to access your professional information * Build a [contact](/exploring-breakroom/networking-with-other-users/people.md) list to facilitate in-world communication * Create [groups](/exploring-breakroom/networking-with-other-users/groups.md) in order to promote networking, organize events, or [control access](/building-new-worlds/region-settings.md) to specific areas On this page, we'll explain how to locate your user profile and edit your personal details. In the sections that follow, we'll explore the [People](/exploring-breakroom/networking-with-other-users/people.md) and [Groups](/exploring-breakroom/networking-with-other-users/groups.md) windows in more detail. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every function described in this section. #### Accessing your user profile[​](#accessing-your-user-profile "Direct link to Accessing your user profile") ![A closeup of the top toolbar of the Breakroom UI. The main menu is expanded to show all available functions, and the Profile buttons are highlighted in orange.](/assets/images/Networking_001-7c8661944a6ed3008e94c17a96bd5ac9.jpg) *Highlighted: The location of both Profile buttons.* You can open your own user profile by clicking the **Profile button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar), or by pressing the **F12 key** on your keyboard. #### Editing your user profile[​](#editing-your-user-profile "Direct link to Editing your user profile") ![An example user profile. The first page is the Detail tab, where a photo of the user\'s avatar is displayed alongside their professional information.](/assets/images/User_Profile_001-2de3e6bdfc6a8be5f4a01faf1689376f.jpg) *Pictured: The Detail tab of a user's profile, as viewed by that user.* In Breakroom, user profiles function much like virtual business cards or employee badges. When you access any user profile, including your own, the first thing you'll see is the **Details tab**. This tab contains helpful information you may want others to know, such as: * Your job title * Your location * Links to your social media pages * Your activities and interests You can edit these fields at any time by clicking the **Edit buttons**. An animated headshot of your avatar is also included and will automatically update to reflect your avatar's current [appearance](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md). In addition to the information listed on the Details tab, when other users view your profile, they can navigate to: * The **Photos tab**, which showcases any [snapshots](/exploring-breakroom/snapshots.md) you've chosen to make public * The **Regions tab**, which displays all of the Regions you own * The **Wearing tab**, which lists the [avatar components](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md) that you're wearing * The **Badges tab**, which lists your achievement badges Other users will also see options to send you a [direct message](/getting-started/communicating-with-other-users.md#direct-message) or [in-world email](/getting-started/communicating-with-other-users.md#in-world-email), remove you from their [People list](/exploring-breakroom/networking-with-other-users/people.md), or send a [teleport](/exploring-breakroom/bookmarks-and-teleport-invites.md#teleport-invites) invite or request. #### Accessing another user's profile[​](#accessing-another-users-profile "Direct link to Accessing another user's profile") ![A closeup of another user\'s profile, where the focus is on the tabs and action buttons displayed in the header. These functions were described in the preceding section.](/assets/images/User_Profile_003-023b420ee2df559baeb535dea7cc857e.jpg) *Pictured: The main page of a user profile, as viewed by another user.* To view another user's profile, click on their avatar and select **View Profile** in the action menu that appears. You can also search for a specific person using the [search field](/getting-started/ui-tour.md#the-top-toolbar) or click on a user's name in your [People list](/exploring-breakroom/networking-with-other-users/people.md). --- ### Groups [YouTube video player](https://www.youtube.com/embed/vckdoReN9-o) #### Overview[​](#overview "Direct link to Overview") ![A closeup of the Groups window, with two groups listed.](/assets/images/Groups_001-59ff8288979137db097f8ec0e41190ea.jpg) *Pictured: The combined People and Groups window.* Groups serve several functions in Breakroom, including: * Casual and professional networking * Streamlining the invitation process for [private meetings](/exploring-breakroom/using-the-meetings-window.md#scheduling-meetings) * Region [access control](/building-new-worlds/region-settings.md#controlling-region-access) The Groups window lists all of your current groups. You can search for a particular group using the **search field** located at the top of the window. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every function described in this section. #### Opening the Groups window[​](#opening-the-groups-window "Direct link to Opening the Groups window") ![A closeup of the bottom toolbar of the Breakroom UI. The People button is highlighted in orange.]() *Highlighted: The location of the People button.* You can open the Groups window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **Groups tab**. ##### Accessing group information[​](#accessing-group-information "Direct link to Accessing group information") ![A closeup of a user's group list. Beside it, a Group Information window displays information for the 'Upward Con VIPs' group.](/img/breakroom/Groups_002.jpg) *Pictured: A user's group list and an example Group Information window.* If you belong to a group, clicking on its **name** will open the Group Information window. In addition to reviewing details about the group under the Info tab, you can click the **"Chat in the group" button** to begin a global [text chat](/getting-started/communicating-with-other-users.md#text-chat) with all online members. If you have the appropriate [permissions](/exploring-breakroom/networking-with-other-users/groups.md#assigning-group-roles), you may also see an **Edit button** in the Info tab > Permissions section. Clicking this button will allow you to make changes to the group's name, description, and [group access type](/exploring-breakroom/networking-with-other-users/groups.md#group-access-types). #### Finding and joining existing groups[​](#finding-and-joining-existing-groups "Direct link to Finding and joining existing groups") ![A closeup of the search bar, with two results returned for a group search.](/assets/images/Groups_003-d2fa2daa1e9699fcd00c909b0ee3a916.jpg) *Pictured: A group search with two results returned.* If you know the name of a group you want to join, you can search for it using the **search field** located at the [top of your screen](/getting-started/ui-tour.md#the-top-toolbar). If you like, you can filter the search results by checking the **Refine Search > Group option.** Once you've found the right group, click the **Detail button** to open the Group Information window. Then click the **"Apply to join" button**. If the group is set to Public access, then congratsβ€”you're officially a member! If the group is set to Contact Only or Approved Only access, your application will be submitted for [review](/exploring-breakroom/networking-with-other-users/groups.md#approving-group-applicants). #### Creating a group[​](#creating-a-group "Direct link to Creating a group") If you want to create a new group, [open the Groups window](/exploring-breakroom/networking-with-other-users/groups.md#opening-the-groups-window) and click the **Create New Group button.** This will open the Groups dialog box. ![A closeup of the Groups dialog box, with details entered for the creation of a new group.](/assets/images/Groups_004-6c58017ec4c5bd40f0d9e0473b95c8f1.jpg) *Pictured: The Groups dialog box.* Here you can enter a **name** and **description** for your group. You can also change your **group access type** to Public, Contact Only, or Approved Only. When you're done, click the **Save button**. ##### Group access types[​](#group-access-types "Direct link to Group access types") | | | | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Group access type | Description | | Public | Users can join this group with no approval process. Users can also be added to the group [manually](groups#adding-and-removing-group-members). | | Contact Only | Contacts listed in the Group Owner's [People list](people) *and* other approved users can join the group. Users can apply to join, and a Group Owner, Administrator, or Mod can [approve or reject](groups#approving-group-applicants) the application. Users can also be added to the group [manually](groups#adding-and-removing-group-members). | | Approved Only | *Only* approved users can join the group. Users can apply to join, and a Group Owner, Administrator, or Mod can [approve or reject](groups#approving-group-applicants) the application. Users can also be added to the group [manually](groups#adding-and-removing-group-members). | ##### Deleting a group[​](#deleting-a-group "Direct link to Deleting a group") To delete a group, follow these steps. 1. Open the Groups window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **Groups tab**. 2. Locate the group you want to delete and click on its **name** to launch the **Group Information window**. Then click on the **Members tab.** 3. Scroll to the bottom of the page and click the **"Delete this group" button**. Follow the prompts to confirm deletion. #### Managing group members[​](#managing-group-members "Direct link to Managing group members") ##### Approving group applicants[​](#approving-group-applicants "Direct link to Approving group applicants") ![A closeup of the Members tab. A user has applied to join, and an orange arrow points to the Edit button action menu, where that application can be approved or rejected.](/assets/images/Groups_005-39a46205ef40c623461237b65faff06c.jpg) *Pictured: An example of an Approved Only group with a pending applicant.* If you are the Owner, Administrator, or Moderator of a group that requires member approval, you will see membership requests appear in the Group Information window under the **Members tab > Requests category**. Here you can click the **Edit button** located to the far right of the individual's name in order to approve, [block](/exploring-breakroom/networking-with-other-users/groups.md#banning-users), or delete the user request. To approve multiple users at once, check the boxes located to the left of their names and then use the **Set Role drop-down menu** to assign them all the same [role](/exploring-breakroom/networking-with-other-users/groups.md#assigning-group-roles). (For instance, you could select five users and approve them all at once by assigning them "Member" status.) ##### Adding and removing group members[​](#adding-and-removing-group-members "Direct link to Adding and removing group members") ![A closeup of the Members tab. The \'Add new members\' dialog box is superimposed on top, and the Group Owner has searched for a specific user, returning one result.](/assets/images/Groups_006-79c49f85541145fadc194441f5bf5be5.jpg) *Pictured: The "Add new members" dialog box.* To add a user to your group manually, follow these steps. 1. Open the Groups window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **Groups tab**. 2. Click on the **name** of the group you want to edit. This will open the **Group Information window**. 3. In the Group Information window, click on the **Members tab**, and then click the **Add Members button**. This will open the **"Add new members" dialog box**. 4. Use the **search field** to search for the user's name. Once you find it, click the **Add button**. To remove a user from the group entirely, follow these steps. 1. Open the Groups window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **Groups tab**. 2. Click on the **name** of the group you want to edit. This will open the **Group Information window**. 3. In the Group Information window, click on the **Members tab**, and use the **search field** to search for the user's name. 4. Once you locate the user you want to remove, click the **Edit button** located to the right of their name. In the action menu that appears, click **Delete**. You can remove multiple group members simultaneously by checking the boxes located to the left of their names, clicking the **Set Status drop-down menu,** and selecting **Delete**. danger Deleted members can reapply for membership to the group. To [ban](/exploring-breakroom/networking-with-other-users/groups.md#banning-users) a user from reapplying, select **Block** instead of Delete. ##### Assigning group roles[​](#assigning-group-roles "Direct link to Assigning group roles") ![A closeup of the Members tab, with the Set Role drop-down menu expanded.](/assets/images/Groups_007-2a9350982857d92bc941ac2de373c2b2.jpg) *Pictured: An example of the Group Information window Members tab.* Within groups, there are several roles that members can be assigned. Some roles confer special powers and privileges, both within the group and when Regions are assigned to a particular group using the ["Groups Only" Region access](/building-new-worlds/region-settings.md) option. In brief, these roles are: * Owner * Administrator * Moderator * Developer * Member * Guest * VIP Group Owners have absolute control over the group and its settings. If a group is set to [Contact Only](/exploring-breakroom/networking-with-other-users/groups.md#group-access-types) permissions, then any contacts on the Group Owner's [People list](/exploring-breakroom/networking-with-other-users/people.md) will automatically be granted access to the group. Owners can: * [Manage](/exploring-breakroom/networking-with-other-users/groups.md#creating-a-group) and [delete](/exploring-breakroom/networking-with-other-users/groups.md#deleting-a-group) the group * [Manage the group member list](/exploring-breakroom/networking-with-other-users/groups.md#managing-group-members) and deal with [disruptive group members](/exploring-breakroom/networking-with-other-users/groups.md#muting-and-banning-group-members) * Assign group members [advanced permissions](/exploring-breakroom/networking-with-other-users/groups.md#assigning-group-roles) When a Region is set to the ["Groups Only" region access option](/building-new-worlds/region-settings.md), Group Owners have all the rights and permissions of a [Region Owner](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md). Group Administrators can perform many of the same tasks as Group Owners. Administrators can invite users to [Contact Only and Approved Only groups](/exploring-breakroom/networking-with-other-users/groups.md#group-access-types), and [approve](/exploring-breakroom/networking-with-other-users/groups.md#approving-group-applicants) membership requests. They cannot appoint additional Administrators. Administrators can: * [Manage the group member list](/exploring-breakroom/networking-with-other-users/groups.md#managing-group-members) and deal with [disruptive group members](/exploring-breakroom/networking-with-other-users/groups.md#muting-and-banning-group-members) * Assign and manage [advanced group permissions](/exploring-breakroom/networking-with-other-users/groups.md#assigning-group-roles) below the Administrator level When a Region is set to the ["Groups Only" Region access option](/building-new-worlds/region-settings.md), Group Admins have all the rights and permissions of a [Region Admin](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md). Group Moderators can [approve](/exploring-breakroom/networking-with-other-users/groups.md#approving-group-applicants) membership requests. They can mute, block, and reinstate members. They cannot appoint additional Moderators. Moderators can: * [Manage the group member list](/exploring-breakroom/networking-with-other-users/groups.md#managing-group-members) and deal with [disruptive group members](/exploring-breakroom/networking-with-other-users/groups.md#muting-and-banning-group-members) * Assign and manage [advanced group permissions](/exploring-breakroom/networking-with-other-users/groups.md#assigning-group-roles) below the Moderator level When a Region is set to the ["Groups Only" Region access option](/building-new-worlds/region-settings.md), Group Moderators have all the rights and permissions of a [Region Moderator](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md). When a Region is set to the ["Groups Only" Region access option](/building-new-worlds/region-settings.md), Group Developers have all the rights and permissions of a [Region Developer](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md). Otherwise, they have no special powers. Group Members have no special privileges, but they will be permitted to enter any Region that has been set to ["Groups Only" Region access](/building-new-worlds/region-settings.md) for that group. Coming soon. Designating a user as a VIP gives them no special powers. Currently, this role is only useful for Lua script functionality and [presenter seats](/getting-started/using-the-conference-system.md#presenter-seats) in Regions set to ["Groups Only" Region access](/building-new-worlds/region-settings.md). To assign a group member a different role, check the box located next to the member's name in the **Members tab**. Then use the **Set Role drop-down menu** to select the new role. You can assign users the *Member* role to revoke advanced permissions at any time. You can assign multiple users the same role simultaneously by checking the boxes located to the left of their names and then using the **Set Role drop-down menu** to [assign them all the same role](https://docs.breakroom.tech/getting-started/networking/groups#assigning-group-roles). #### Muting and banning group members[​](#muting-and-banning-group-members "Direct link to Muting and banning group members") In order to mute or ban/block a user, that user must be a current member of your group. ##### Muting users[​](#muting-users "Direct link to Muting users") ![A closeup of the Members tab. The Status icons and Edit button action menu are highlighted in orange.](/assets/images/Groups_008-e57b3f17e191aad477be601b1199c7b5.jpg) *Highlighted: The location of the Status icons and the Edit button action menu.* To mute a single user on group text chat, follow these steps. 1. Open the Groups window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **Groups tab**. 2. Click on the **name** of the group you want to edit. This will open the **Group Information window**. 3. In the Group Information window, click on the **Members tab**, and use the **search field** to search for the user's name. 4. Once you locate the user you want to mute, you can either: 1. Click the **Edit button** located to the far right of the user's name. In the action menu that appears, select **Mute Chat.** 2. Toggle the **Speech bubble icon** located to the right of the user's name. When the blue check mark disappears, the user is muted. To restore communication to a previously muted user, repeat steps 1-4 above, and either: 1. Click the **Edit button** located to the right of the user's name. In the action menu that appears, select **Unmute Chat.** 2. Toggle the **Speech bubble icon** located to the right of the user's name. When a blue check mark appears, the user can communicate over text chat. To mute multiple users at once, follow these steps. 1. Open the Groups window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **Groups tab**. 2. Click on the **name** of the group you want to edit. This will open the **Group Information window**. 3. In the Group Information window, click on the **Members tab**, and locate the users you want to mute. Check the box located to the left of each user's name. 4. Click the **Set Status drop-down menu,** and select **Mute Chat.** To restore communication to multiple users, repeat steps 1-3 above. Then, click the **Set Status drop-down menu**, and select **Unmute Chat.** ##### Banning users[​](#banning-users "Direct link to Banning users") To block a user from participating in your group or reapplying for membership, follow these steps. 1. Open the Groups window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **Groups tab**. 2. Click on the **name** of the group you want to edit. This will open the **Group Information window**. 3. In the Group Information window, click on the **Members tab**, and use the **search field** to search for the user's name. 4. Once you locate the user you want to ban, click the **Edit button** located to the far right of the user's name. In the action menu that appears, select **Block**. To undo a ban, repeat steps 1-3 above. Locate the user under the **Ban List**, and then click the **Edit button** located to the far right of their name. In the action menu that appears, select **Unblock.** To ban multiple users at once, follow these steps. 1. Repeat steps 1-2 above. 2. In the Group Information window, click on the **Members tab**, and locate the users you want to ban. Check the box located to the left of each user's name. 3. Click the **Set Status drop-down menu,** and then click **Block.** To undo a ban for multiple users, repeat steps 1-2 above. Then click the **Set Status drop-down menu**, and select **Unblock.** warning Banning a member with Administrator, Moderator, Developer, or VIP permissions will revoke this special role. If you choose to unban such a user and reinstate them in the members list, please take a moment to ensure that they have been [assigned](/exploring-breakroom/networking-with-other-users/groups.md#assigning-group-roles) the proper role. --- ### People [YouTube video player](https://www.youtube.com/embed/mv-Ma37QNNs) #### Overview[​](#overview "Direct link to Overview") ![A closeup of the People window, where contacts are listed for a particular user. The last contact name has been clicked, revealing an action menu. The functions available in this menu will be described below.](/assets/images/People_001-f10a23cf6496a7ccb1ea18c7ecf49a87.jpg) *Pictured: The combined People and Groups window.* The People window allows you to create and manage your own personal list of Breakroom contacts. If a contact is currently online, a **pink dot** will be displayed beside their name. Clicking on a username opens an **action menu**, allowing you to send [messages](/getting-started/communicating-with-other-users.md#direct-message), issue [teleport invites](/exploring-breakroom/bookmarks-and-teleport-invites.md#teleport-invites), and access the contact's [user profile](/exploring-breakroom/networking-with-other-users.md#accessing-another-users-profile) with just a few clicks. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every function described in this section. #### Opening the People window[​](#opening-the-people-window "Direct link to Opening the People window") ![A closeup of the bottom toolbar of the Breakroom UI. The People button is highlighted in orange.](/assets/images/People_002-8aa19c47df168630d6c8d9051c004bc5.jpg) *Highlighted: The location of the People button.* You can open the People window by clicking the **People button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + F** on your keyboard. Then click the **People tab**. #### Adding a contact to your People list[​](#adding-a-contact-to-your-people-list "Direct link to Adding a contact to your People list") ##### In person[​](#in-person "Direct link to In person") ![A screenshot of two female avatars standing in front of a modern sculpture. The avatar on the right has been clicked, revealing an action menu. The Add/Delete Contact action is highlighted.](/assets/images/People_003-fe504147946b3449afa515d0cb66a894.jpg) *Highlighted: The Add/Delete Contact action in the avatar action menu.* If you want to add a nearby user to your People list, you have a few options. *Option one*: Click on that person's **avatar** and then click **Add/Delete Contact** in the action menu that appears. An invitation will be sent to the other user, which they will need to confirm before they are added to your contact list. *Option two*: Click the **People button** to open the People window. If other users are close by, their names will be listed under the **Nearby category.** Click the **> arrow** to the left of the Nearby category to expand it, and then click on the user's name. Click **Add Contact** in the action menu that appears. ##### User search[​](#user-search "Direct link to User search") To find a specific user, use the **search field** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) to search for a full or partial name. If you like, you can filter the search results by checking the **Refine Search > User option.** Once you've found the right person, click on their **name** to open their [user profile](/exploring-breakroom/networking-with-other-users.md#accessing-another-users-profile), and then click the **Add Contact** button. #### Managing your People list[​](#managing-your-people-list "Direct link to Managing your People list") ![A closeup of the People window action menu, listing various commands. The UI for this menu is described below.](/assets/images/People_004-a975d1c1611847a8d86c944ad9ab133b.jpg) *Pictured: The People window action menu.* Once you've connected with another user, you'll find their name listed in the People window. By clicking on a contact's name, you can: * View the contact's [user profile](/exploring-breakroom/networking-with-other-users.md) * Send a [direct message](/getting-started/communicating-with-other-users.md#direct-message) * Send [in-world email](/getting-started/communicating-with-other-users.md#in-world-email) * Invite the contact to [teleport to your location](/exploring-breakroom/bookmarks-and-teleport-invites.md#inviting-users-to-teleport-to-you), or ask to[ join them](/exploring-breakroom/bookmarks-and-teleport-invites.md#teleporting-to-other-users) * Delete, mute, or [report](/getting-started/reporting-issues.md#reporting-users) the contact As a brief overview, the menu actions include: | | | | ------------------ | -------------------------------------------------------------------------------------------------------- | | Action | Function | | View Profile | Opens the contact's user profile. | | Chat | Opens a direct text chat with the contact. | | Send Mail | Opens the in-world email window and automatically fills out the recipient field with the contact's name. | | Invite Here | Extends a teleport invitation, allowing the contact to join you at your current location. | | Teleport to Player | Sends a teleport request, allowing you to travel to the contact's current location if approved. | | Delete Contact | Deletes the contact from your People list. | | Mute | Mutes the individual, preventing further communication. | | Report Abuse | Reports an abusive contact. | --- ### Region navigation tools [YouTube video player](https://www.youtube.com/embed/XmNQYZwWJJ0) #### Overview[​](#overview "Direct link to Overview") This section is designed to serve as a quick overview of the in-world navigation tools. You'll learn how to read the Region minimap, how to teleport between important areas using the Areas of Interest window, and how to use search, teleport portals, and the Explore window to visit new Regions. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every function described in this section. #### Basic movement commands[​](#basic-movement-commands "Direct link to Basic movement commands") As a refresher, here's a rundown of Breakroom's avatar movement controls. You can find more detailed information about [controlling your avatar](/getting-started/controlling-your-avatar.md) in our [Getting Started](/getting-started.md) section. | Button or command | Function | | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | WASD or arrow keys | Pressing the **WASD** or **arrow keys** will cause your avatar to walk or turn in the specified direction. | | Shift + WASD or arrow keys | Holding down the **Shift key** while moving will cause your avatar to run. | | Space bar | Pressing the **space bar** will cause your avatar to jump. | | C key | Pressing the **C key** will cause your avatar to crouch. | | F key | Pressing the **F key** will cause your avatar to start or stop flying. | | While flying > WASD or arrow keys | While your avatar is flying, you can move them through space using the **WASD** or **arrow keys**. | | While flying > R and C keys | While your avatar is flying, press the **R key** (or **Pg Up key**) to fly higher, and the **C key** (or **Pg Down key**) to fly lower. | If the[ "click to walk" feature](/getting-started/settings.md#controls-settings) is enabled, you can move your avatar to a specific spot by pointing your **mouse cursor** at the ground and clicking the **left mouse button**. You can also change your [default walking speed](/getting-started/settings.md#controls-settings) in the [Settings window](/getting-started/settings.md). #### The mini map[​](#the-mini-map "Direct link to The mini map") ![A closeup of the Breakroom UI mini map, showing a top-down view of the Conference Region.](/assets/images/Breakroom_GETTING_STARTED_UI_Tour_006_2026-ab87f43cb03caaf75bf54fc75b05b199.jpg) *Pictured: The mini map.* The [mini map](/getting-started/ui-tour.md#the-mini-map) in the top right corner of the screen displays a top-down view of your current Region. To view the map, click the **hamburger menu** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) and then click **Minimap**. On the mini map, you will see landing areas marked with a **pink dot**. The location of your avatar is marked with a **blue dot**, while other avatars are represented by **green dots**. You can use the **magnifying glass buttons** to zoom in and out. Clicking on the **mini map** itself will open the [Region Information window](/building-new-worlds/region-settings.md). #### The Areas of Interest window[​](#the-areas-of-interest-window "Direct link to The Areas of Interest window") ![A closeup of the Areas of Interest window, displaying one-click teleport buttons to several Regional destinations.](/assets/images/UI_Tour_2026_011-3cd98e31de29cc1acda1c04350ea8d2f.png) *Pictured: An example Areas of Interest window.* The Areas of Interest window offers one-click teleport access to important areas and event spaces. If seats are available, you will be seated automatically upon arrival. To open it, click **Signpost / Areas of Interest button** in the [Start Here panel](/getting-started/ui-tour.md#start-here-panel). Here's a brief overview of the UI. | | | | -------------- | --------------------------------------------------------------------------------------- | | Button | Target location | | Auditorium | Teleports your avatar to the auditorium. | | Entrance | Teleports your avatar to the Region entrance or to a designated information booth. | | Networking | Teleports your avatar to the designated lounge or networking area. | | Floor | Teleports your avatar to the main "floor" of the event (e.g. vendor booths, game area). | | Breakout areas | Teleports your avatar to the specified breakout room or booth. | | Triage areas | Teleports your avatar directly to a designated tech support area. | info The General Navigation panel's appearance can vary. **Based on the contents of a particular Region, you may not see all of the teleport links pictured above.** You may also see different icons for each area type (e.g., a cocktail glass instead of a coffee cup). #### Teleport portals[​](#teleport-portals "Direct link to Teleport portals") ![A closeup of a Breakroom Teleport Portal set up in the Delphi Region. Teleport Portals consist of a rotating white gate surrounding a central location image.](/img/breakroom/Region_Navigation_002.jpg) *Pictured: A Breakroom Teleport Portal.* [Breakroom Teleport Portals](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-teleport-portal.md) can be set up to enable travel between different Regions. If you see a Breakroom Teleport Portal, you can activate it by walking your avatar "into" it. A pop-up will appear containing a list of accessible Regions, and you can click on any **destination tile** to learn more about that Region. If you wish to teleport there, click the **Teleport button**. #### The Explore window[​](#the-explore-window "Direct link to The Explore window") ![A closeup of the Explore window, with twelve different Region listing cards.](/assets/images/Explore_Window_002-c2c476fdcd6867b9596f795bf20443da.jpg) *Pictured: The Explore window.* The [Explore window](/exploring-breakroom/using-the-explore-window.md) allows you to browse through a list of [Featured Regions](/building-new-worlds/creating-and-managing-regions.md#featuring-a-region). You can learn more about a Region by clicking its **listing card**, and teleport there by clicking the **Enter button**. #### Region search[​](#region-search "Direct link to Region search") ![A closeup of the search field, with a single result returned for a Region search.](/assets/images/Region_Navigation_004-5439df9a43b81e31c87f082480d7ac35.jpg) *Pictured: The search field.* If you know the name of a Region you want to visit, you can enter it into the [**search field**](/getting-started/ui-tour.md#the-search-bar)**.** Clicking on a Region in the search results will open the [Region Information window](/building-new-worlds/region-settings.md). You can then teleport to that Region by clicking the **"Enter the Region" button.** #### Bookmarks[​](#bookmarks "Direct link to Bookmarks") ![A user\'s Inventory opened to the Bookmarks category. The action menu for one of the bookmarks has been expanded, and a blue arrow points to the Teleport button.](/assets/images/Region_Navigation_003-8ceb5d44044322a3b6e9642028c790bf.jpg) *Highlighted: Several bookmarks and the location of the Teleport button.* If someone sends you a [bookmark](/exploring-breakroom/bookmarks-and-teleport-invites.md) through Breakroom's [in-world email](/getting-started/communicating-with-other-users.md#in-world-email) system, you can use it to travel to a new area or Region by following these steps. 1. If you haven't yet accepted the bookmark, open the Mail window by either: 1. Clicking the **Envelope button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Clicking the **Menu button** in the top toolbar and then clicking **Mail.** 2. In the Mail window, click on the **relevant email** and then click the **Accept It** or **Buy It button** for the bookmark attachment. 3. Open your Inventory by clicking the **Inventory button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). Click on the **Bookmark category** to expand it. 4. Locate the **bookmark** you want to use and click on it. In the action menu that appears, click the **Teleport button**. #### Teleport invites[​](#teleport-invites "Direct link to Teleport invites") If another user invites you to [teleport](/exploring-breakroom/bookmarks-and-teleport-invites.md) to their location, a pop-up will appear asking for your consent. You can click the **Refuse button** to decline the invitation or click the **Teleport button** to accept. --- ### Snapshots [YouTube video player](https://www.youtube.com/embed/mv-Ma37QNNs) #### Overview [](#overview)[​](#overview- "Direct link to overview-") Breakroom's Snapshot feature is a convenient tool that allows you to take and share virtual photographs. Whether you need to capture a moment for use in your company's marketing materials or want to post a selfie of your avatar on social media, you can do so with a few clicks. This section is designed to serve as a basic overview of the Snapshot tool. You'll learn how to take, edit, and share photos, as well as how to collect and display your favorite images in your [user profile](/exploring-breakroom/networking-with-other-users.md). info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to the Snapshot feature and other tools described in this section. #### Taking photos[​](#taking-photos "Direct link to Taking photos") ![A closeup of the top toolbar of the Breakroom UI. The main menu is expanded to show all available functions, and the Snapshot buttons are highlighted in orange.](/assets/images/Snapshots_001-e63e0ce55087e14e520c4eff97ed1668.jpg) *Highlighted: The location of both Snapshot buttons.* You can open the Snapshot feature by clicking the **Snapshot button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar), or by pressing **Ctrl + \`** on your Windows keyboard or **Ctrl + \\** on your Mac keyboard. When the Snapshot feature is open, it will replace much of the existing [UI](/getting-started/ui-tour.md) on your screen. You will see the main Snapshot toolbar centered at the bottom of your screen, and an **Exit Photo button** appear in the top right corner. ![A screenshot of the Snapshot tools superimposed on an image of a gray-haired female avatar wearing a formal gown in a snowy Region.](/assets/images/Snapshots_002-c8823607b8bc9740ecb1b503c4fe8c97.jpg) *Pictured: An example of the Breakroom UI with the Snapshot feature enabled. Please note that any visible UI elements will not be present in your final shot.* The Snapshot toolbar allows you to focus your camera, pose your avatar, and edit and embellish the photo itself. In the tables below, we'll locate and review each of these functions. ##### Snapshot UI overview[​](#snapshot-ui-overview "Direct link to Snapshot UI overview") ![A closeup of the Snapshot tabs located along the top of the Snapshot toolbar. This UI is detailed below.](data:image/jpeg;base64,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) *Pictured: The Snapshot tabs.* The six main tabs located along the top of the Snapshot toolbar point to various options. Most of these buttons will change the contents of the horizontal scrolling menu when clicked. Be sure to scroll through all of the options to see what's availableβ€”as with many things in Breakroom, the best way to learn is through experimentation. You can always undo a staged photo by clicking the **Cancel** or **Exit Photo buttons** in the top right corner of the screen. | Button or Tab | Function | | ------------- | ----------------------------------------------------------------------------- | | Camera | Lets you select from a variety of photo angles. | | Poses | Opens a menu of static poses that you can use to position your avatar. | | Filters | Applies a photo filter to your chosen shot. | | Overlays | Applies a variety of fun foregrounds and backgrounds to your chosen shot. | | Target | Lets you click on an avatar or specific piece of scenery and zoom in on it. | | Focal Point | Lets you click on a location to manually change the focal point of your shot. | ![A closeup of the save options located at the bottom of the Snapshot toolbar. These options are described in more detail below.](data:image/jpeg;base64,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AKnL/wApf/26jlYf68cP/wDQT/5JP/5E+Y6K+nP+GK/+py/8pf8A9uo/4Yr/AOpy/wDKX/8AbqOVh/rxw/8A9BP/AJJP/wCRPmOivpz/AIYr/wCpy/8AKX/9uo/4Yr/6nL/yl/8A26jlYf68cP8A/QT/AOST/wDkT5jor6c/4Yr/AOpy/wDKX/8AbqP+GK/+py/8pf8A9uo5WH+vHD//AEE/+ST/APkT5jor6c/4Yr/6nL/yl/8A26j/AIYr/wCpy/8AKX/9uo5WH+vHD/8A0E/+ST/+RPmOrGn2M2qX9tZ2677i4lWGNfVmIAH5mvpT/hiv/qcv/KX/APbq774X/s26F8O9Uj1We7l1rVIv9TLNGI44j/eVATz7knHanyM48Zx7ktGhKeHqOpO2iUZK79Wkrdz16iiitz+XQqCfT7W6bdNbQyt/ekjDH9anooGR29rDaqVhhjhU9RGoUfpUlFFACbF27do2/wB3HFZWveHIdfudGmmlkjbTL0X0YTGHYRyR7Wz2xITx6CtaigAChVwBgelJtXAG0YHTjpS0UCCkKhsEgEjpS0UAHXg0m0bduBjpilooAAMDAGBSbRuJwMnqaWigAwM5xz60bRuzjnpmiigAooooAKNoyTjk9aKKAOEX4TwNY2Wl3Gtahc6FZ30eoRacywqC8c4niV5FQOyrIqt1BbaAxYFs91tG7OBn1paKBhRRRQIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=) *Pictured: The options located at the bottom of the Snapshot toolbar.* Meanwhile, the options located at the bottom of the Snapshot toolbar allow you to fine-tune and finalize your perfect shot. | Button or Check Option | Function | | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Capture as animated GIF | Allows you to save your image as an animated GIF instead of a static photo. Once this option is checked, you can customize the GIF length by entering a number in the **Seconds field**. | | Capture as 360Β° image | Allows you to save your chosen shot as a wide-angle 360Β° image. | | Take Photo | Finalizes your shot and takes you to the save menu. | #### Saving and sharing your photos[​](#saving-and-sharing-your-photos "Direct link to Saving and sharing your photos") Once you've taken the perfect photo and chosen the format you want to save it in, it's time to decide *where* you want to save it. After clicking the **Take Photo button**, you will progress to the final save menu. ![A snapshot of a gray-haired female avatar in a sparkling blue ballgown, posed dramatically for the camera. The final save menu is visible in the upper right-hand corner.](/assets/images/Snapshots_005-4510d1da1f430e036046903c730c68ec.jpg) *Pictured: A snapshot and the final save menu.* In the final save menu, you can enter a name and description for your photo before deciding how you would like to distribute it. You can select as many options as you like. * Check the **"Email to" box** and enter a valid email address to send a copy of the photo to yourself or someone else. * Check the **"Upload to library" box** to add the photo to your [user profile](/exploring-breakroom/networking-with-other-users.md) photo library. * Check the **"Save to this computer" box** to save a copy to your local hard drive. Click the **Upload/Save button** after you've made your choices. You can also click the **Make Profile Pic button**, which will showcase your photo in the top header of your user profile. The **Retake Photo button** lets you exit the save menu and start fresh. ![Another photo of the gray-haired female avatar, this time displayed with social media options beneath.](/assets/images/Snapshots_006-f59713531a87d44abc20d5f915c2a27c.jpg) *Pictured: The Snapshot social media options.* After you've saved your photo, you'll be given the option to share it on social media. Click on the relevant button to post your photo on [Facebook](https://www.facebook.com/), [X](https://x.com/), or [LinkedIn](https://www.linkedin.com/). #### Managing your photo library[​](#managing-your-photo-library "Direct link to Managing your photo library") ![A user\'s Photo tab, with twelve different snapshots on display.](/assets/images/Snapshots_007-8d8f76c03d37ad1bbac1485a922444d2.jpg) *Pictured: An example of a user profile photo library.* If you choose to upload a snapshot to your photo library, it will appear under the **Photos tab** in your [user profile](/exploring-breakroom/networking-with-other-users.md). This tab and any photos posted on it are visible to the general public. Other users can access your profile, click on your photos to access a higher resolution version, and leave comments. To see and manage your photo comments, follow these steps. 1. Click the **hamburger menu** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) and then click **Profile**. (Or click the on-screen **profile icon** if you have it pinned.) This will open your own user profile. 2. In your user profile, click on the **Photos tab**. Locate and click on the relevant **photo** in your gallery. 3. Check the **Comments box** in the bottom right corner of the enlarged photo to display comments. 1. Click the **trash can icon** next to any user comment you want to delete. 2. Click the **reply button** next to any user comment you want to answer. To delete a photo from your library entirely, click on the photo. Then click the **trash can button** in the bottom left corner. If you want to delete multiple photos at once, you can **check the box inside each photo** in your gallery before clicking the **trash can button**. warning If you need to report an abusive comment, please do so *before* deleting the comment, as it will help to have a screenshot. You can learn more about filing [abuse reports](/getting-started/reporting-issues.md#reporting-users) in our [Getting Started](/getting-started.md) section. --- ### Using the Explore window [YouTube video player](https://www.youtube.com/embed/XmNQYZwWJJ0) #### Overview [](#overview)[​](#overview- "Direct link to overview-") Breakroom World Owners and World Administrators can opt to list certain areas as [Featured Regions](/building-new-worlds/creating-and-managing-regions.md#featuring-a-region). This has the benefit of adding them to the Explore window, where users can find them more easily. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to the Explore window and other tools described in this section. #### Opening the Explore window[​](#opening-the-explore-window "Direct link to Opening the Explore window") ![A closeup of the bottom toolbar of the Breakroom UI. The Explore button is highlighted in orange.](/assets/images/Explore_Window_001-f5e4dbd83fa5be6a70886ed09ad8d6de.jpg) *Highlighted: The location of the Explore button.* You can open the Explore window by clicking the **Explore button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + E** on your keyboard. #### The Explore window UI[​](#the-explore-window-ui "Direct link to The Explore window UI") ![A closeup of the Explore window, with twelve different Region listing cards. The UI for this window is described below.](/assets/images/Explore_Window_002-c2c476fdcd6867b9596f795bf20443da.jpg) *Pictured: The Explore window.* The Explore window contains a search bar, as well as several category tabs designed to assist with Region navigation and promotion. Here's a brief overview of the UI. | Button or UI component | Function | | ---------------------- | ------------------------------------------------------------------------------------------------------------------- | | Search bar | Allows you to search for a Region by name. | | Featured tab | Displays all of the Featured Regions in a particular Breakroom World. | | Busy tab | Displays the World's busiest Regions (defined by current number of users). | | Popular tab | Displays the World's most popular Regions (defined by number of user visits). | | Contact's tab | Displays enabled, public Regions created by the contacts in your [People list](networking-with-other-users/people). | | Region listing card | Opens the [Region Information window](../building-new-worlds/region-settings) for the chosen Region. | | Enter button | Teleports you to the chosen Region. | To learn more about a Region, click on its **listing card.** To visit a Region, click the **Enter button** located in the listing card. --- ### Using the Meetings window [YouTube video player](https://www.youtube.com/embed/vckdoReN9-o) #### Overview [](#overview)[​](#overview- "Direct link to overview-") The Meetings window allows users with the [appropriate](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) [permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) to schedule virtual events and publish them for review. Attendees can manage their own calendars and teleport to the venue when it's time to meet, saving staff the hassle of teleporting users individually. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to the Meetings window and other tools described in this section. #### Opening the Meetings window[​](#opening-the-meetings-window "Direct link to Opening the Meetings window") ![A closeup of the bottom toolbar of the Breakroom UI. The Meetings button is highlighted in orange.](/assets/images/Meeting_Window_001-2d0f0d8073a2f38f4eceba9626f14b0e.jpg) *Highlighted: The location of the Meetings button.* You can open the Explore window by clicking the **Meetings button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). #### The Meetings window UI[​](#the-meetings-window-ui "Direct link to The Meetings window UI") ![A closeup of the Meetings window, with three events published for review. The UI for this window is described below.](/img/breakroom/Meetings_Window_002.jpg) *Pictured: An example of how the Meetings window may appear.* In the Meetings window, you will see events listed in chronological order. Here's a brief overview of the UI. | UI component | Function | | ----------------------- | ----------------------------------------------------------------------- | | All Meetings tab | Displays all upcoming meetings. | | My Meetings tab | Displays only meetings you have scheduled or indicated you will attend. | | Search field | Allows you to search for a specific meeting. | | Refresh button | Refreshes the meeting list. | | Timeline view button | Lists meetings in a linear timeline. | | Category view button | Lists Featured and Upcoming meetings. | | Create button | Allows you to create a new meeting. | | Attend/Attending button | Allows you to confirm or cancel your attendance at a meeting. | #### Finding and attending meetings[​](#finding-and-attending-meetings "Direct link to Finding and attending meetings") ![An event listing. Under a photo of the Region where the event will be held, details about the meeting are noted.](/img/breakroom/Meetings_Window_003.jpg) *Pictured: An example of how a single event listing may appear.* To learn more about a meeting, click on the **listing** in the Meetings window. If the meeting is of interest to you, click the **Attend button** to RSVP. Doing so will add the event to the **My Meetings tab**. When it comes time for the meeting, a notification will appear in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). Clicking the **Enter button** contained in this notification will teleport you directly to the meeting. You can also open the listing again and click the **Enter button** to teleport to the meeting space. #### Scheduling meetings[​](#scheduling-meetings "Direct link to Scheduling meetings") ![A closeup of the Meeting creation window. Instructions for creating and listing a meeting are detailed below.](/img/breakroom/Meetings_Window_004.jpg) *Pictured: The Meeting creation window.* To schedule a meeting, follow these steps. 1. Open the Meetings window by clicking the **Meetings button** located in the bottom toolbar. 2. In the Meetings window, click the **Create button** located in the top right corner. 3. Enter the required information: 1. Enter the **meeting name**. 2. Select a **date, start time,** and **duration** for the meeting. (Note: Please enter the start time in your *local* time.) 3. Click the **Select a Region button**. In the menu that appears, select the Region where you want your meeting to take place. (Note: You can use the **search field** to locate a specific region.) Click the **Confirm button** when you are satisfied with your choice. 4. If desired, use the **Select Landmark drop-down menu** to select a [specific arrival point](/exploring-breakroom/using-the-meetings-window.md#using-direct-bookmarks) for your Region visitors. 5. Select a privacy setting for your event by ticking either the **Public** or **Only Invited checkbox**. 6. Enter a meeting **description**. 4. Click the **Save button**. ![A closeup of the Invite Attendees window. Instructions for using this window are detailed below.](/img/breakroom/Meetings_Window_005.jpg) *Pictured: The Invite Attendees window.* If you set your meeting to *Public*, anyone will be able to view the event in the Meetings window, RSVP, and attend. If you set your meeting to *Only Invited*, you will need to invite attendees using these additional steps. 1. Click the **Add Attendees button**. This will open the Invite Attendees window. 2. ***To invite individual users***: Using the **tabs** on the left, locate the users you want to invite. Click on each attendee's **name** to highlight it, or check the **Select All box** at the top of a user category to invite all of the listed users. You can also use the **search field** to locate users. 1. Category listings include: 1. Invited List: All users currently invited to the meeting. 2. All Attendees: All users who have accounts on your World. 3. Contacts: All users in your [People list](/exploring-breakroom/networking-with-other-users/people.md). 3. ***To invite all members of a*** [***group***](/exploring-breakroom/networking-with-other-users/groups.md): Using the **group tabs** on the left, locate the group(s) you want to invite. Click on each group member's **name** to highlight it, or check the **Select All box** at the top of the group tab to invite every member of that group. 4. When you have chosen all the attendees you want to invite, click the **Select button**. Once you have scheduled an invite-only meeting, invitations will go out on the Breakroom platform, allowing users to RSVP. Public meetings will immediately be published in the Meetings window. ##### Editing meeting details[​](#editing-meeting-details "Direct link to Editing meeting details") To edit a meeting you've already published, open the **Meeting window** and click on the **meeting listing**. Then click on the **ellipses button** to edit or delete the event. #### Using direct bookmarks[​](#using-direct-bookmarks "Direct link to Using direct bookmarks") In addition to selecting a Region for your meeting, you can choose the precise location attendees will arrive. To get started, you will first need to [bookmark](/exploring-breakroom/bookmarks-and-teleport-invites.md) your chosen landing spot by following these steps. ![A closeup of the top toolbar of the Breakroom UI. The main menu is expanded to show all available functions, and the Create Bookmark buttons are highlighted.](/assets/images/Bookmarks_001-1ca152cf755c5576b41fd9af085c0d61.jpg) *Highlighted: The location of both Create Bookmark buttons.* 1. Navigate your avatar to the area you want to bookmark. Keep in mind that the bookmark coordinates will point to the exact point where your avatar is positioned. 2. When your avatar is in the right spot, click the **hamburger menu** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) and then click **Create Bookmark**. (Or click the on-screen **button** if you have it pinned.) 3. In the dialog box that appears, enter a **name** for your bookmark and click the **OK button**. This will create a **bookmark object** in your Inventory. ![A closeup of the Meeting creation window. Here a user has entered several event details, including a direct bookmark.](/img/breakroom/Meetings_Window_007.jpg) *Pictured: The Meeting creation window.* Once you have your bookmark prepared, you can add it to the meeting details. 1. Using the [steps outlined above](/exploring-breakroom/using-the-meetings-window.md#scheduling-meetings), schedule a new meeting. 2. After you select the event Region, use the **Select Bookmark drop-down menu** to choose the bookmark you just created. 3. Once you are satisfied with your meeting details, click the **Save button**. --- ## Getting Started ### GETTING STARTED #### [πŸ“„οΈHelpful terms](/getting-started/helpful-terms.md) [How is a World different from a Region? Check out our guide to Breakroom-speak and learn how to define your virtual experience.](/getting-started/helpful-terms.md) --- ### Communicating with other users [YouTube video player](https://www.youtube.com/embed/mv-Ma37QNNs) #### Overview[​](#overview "Direct link to Overview") Every professional [network](/exploring-breakroom/networking-with-other-users.md) starts with a single conversationβ€”and Breakroom offers multiple ways to connect. Here you'll learn how to participate in public text chat, send direct text messages, access voice chat, and send in-world emails with attachments. warning World Owners can [enable or disable access](/creating-custom-experiences/ui-customization-options.md) to text chat and in-world email. If these features are disabled, users will only be able to communicate using voice chat. #### **Voice chat**[​](#voice-chat "Direct link to voice-chat") Voice chat is available on a zone-by-zone basis. If you're in an area that permits voice chat, you will see a button that says **Microphone Off** at the top of your screen. Click on it, and its appearance will change to indicate that your microphone is now active. You can learn more about voice chat by reviewing our [conference system quick-start guide](/getting-started/using-the-conference-system.md). #### **Text chat**[​](#text-chat "Direct link to text-chat") To access text chat, click the **Show Chat button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). This will launch the Chat window. If there are multiple text chat channels available to you, you will see these listed as tabs across the top of the window. Once you've selected the channel you want to use, click on the **text field** at the bottom of the window and type out your message. You can then hit the **Enter key** on your keyboard or click the **Send button** to submit it. #### **Direct message**[​](#direct-message "Direct link to direct-message") To send a direct text message to another user, click on their **avatar** and select **Instant Message** in the action menu that appears. A new tab will open in the Chat window labeled with that user's name. After typing out your message in the **text field**, you can hit the **Enter key** on your keyboard or click the **Send button** to submit it. If you've added other users to your [People list](/exploring-breakroom/networking-with-other-users/people.md), you can direct message them at any time by clicking the **People button** and then clicking on their **name**. Select **Chat** in the action menu that appears, and a direct chat tab will open as described above. You can also [**search**](/getting-started/ui-tour.md#the-search-toolbar) for a user, open their [user profile](/exploring-breakroom/networking-with-other-users.md), and click the **Chat button** in their profile to start a direct text conversation. #### In-world email[​](#in-world-email "Direct link to In-world email") Breakroom's in-world email service allows you to send longform messages to multiple recipients. You can also distribute virtual objects, such as [bookmarks](/exploring-breakroom/bookmarks-and-teleport-invites.md) and [camera settings](/getting-started/controlling-your-camera.md#camera-settings), by attaching them to in-world emails. ##### Receiving email[​](#receiving-email "Direct link to Receiving email") ![A closeup of the top toolbar. The Mail button (with the envelope icon) has been highlighted with a pink alert tag, indicating that there is an unread message. The Notifiation button (with the bell icon) also features an alert.](data:image/jpeg;base64,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) *Pictured: The top toolbar. The Mail and Notification buttons have been highlighted alert the user to an unread message.* If you receive an email from another user, the Mail and Notification buttons in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar) will be highlighted to alert you. To open the Mail window, you can either: * Click the pinned **Mail button** * Click the **Notification button**, and then click on the **mail title** * Click the **Menu button**, and then click the **Mail action** ![A closeup of the Mail window, with a single unread email. The sender and first line of this email are displayed in the Email preview area.](/assets/images/Breakroom_GETTING_STARTED_COMMUNICATION_003_2026-37c32e0310c0d35042e0887235562f46.jpg) *Pictured: The Mail window with an unread message.* Here's a brief overview of the Mail window UI. | Button or UI component | Function | | ---------------------- | ------------------------------------------------------ | | New Mail button | Opens the email composition window. | | Manage button | Allows you to select and delete multiple emails. | | Email preview | Opens the selected email. | | Reply icon | Starts a new email and auto-fills the recipient field. | | Trash icon | Deletes the relevant email. | To open an email, click on the **email preview** in the Mail window. Once you're done reading, you can click the **Delete button** to delete the email forever, or click the **Cancel button** to return to the main window. If an item is [attached](/getting-started/communicating-with-other-users.md#attaching-items) to the email, you can receive it by clicking the **Accept It** or **Buy It button**. If you don't want the item, you can close or delete the email without taking further action. ##### Sending email[​](#sending-email "Direct link to Sending email") There are multiple ways to send email within Breakroom. ###### Sending email to another user in the same Region[​](#sending-email-to-another-user-in-the-same-region "Direct link to Sending email to another user in the same Region") To send email to a user who is currently in the same Region as you, click on their **avatar** and then click **Send Mail** in the action menu that appears. ###### **Sending email to a contact in your People list**[​](#sending-email-to-a-contact-in-your-people-list "Direct link to sending-email-to-a-contact-in-your-people-list") You can also send email by clicking on the **name** of a contact in your [People list](/exploring-breakroom/networking-with-other-users/people.md), and then clicking **Send Mail** in the action menu that appears. ###### **Replying to a received email**[​](#replying-to-a-received-email "Direct link to replying-to-a-received-email") To reply to an email someone else has sent you, click the [**Reply icon**](/getting-started/communicating-with-other-users.md#receiving-email) in the Mail window. ###### **Searching for an email recipient**[​](#searching-for-an-email-recipient "Direct link to searching-for-an-email-recipient") If the user with whom you wish to communicate is located in another Region or is offline, you can use the [**search field**](/getting-started/ui-tour.md#the-search-toolbar) to search for their name. If you like, you can filter the search results by checking the **User option** under **Refine Search**. Once you've found the right person, click on their **name** in the search results. The other user's [profile ](/exploring-breakroom/networking-with-other-users.md)will open on your screen. Click the **Mail button**, and an email composition window will open. ![A closeup of the email composition window. A user is responding to an email in the field.](/assets/images/Communication_001-cd84c2a983ace62092382fbcb974631d.jpg) *Pictured: The in-world email composition window.* No matter the contact method you use, the email composition window UI is the same. | Button or UI component | Function | | ---------------------- | --------------------------------------------------------------------------------------------------- | | Back button | Takes you to the main Mail window. | | Recipient field | Lists the recipient(s) you wish to contact. | | Select More button | Allows you to select additional recipients. | | Content field | Contains the contents of your email. | | Open Inventory button | Allows you to [attach virtual items](communicating-with-other-users#attaching-items) to your email. | | Send button | Sends the email. | | Cancel button | Cancels the email and deletes your draft. | ##### Attaching items[​](#attaching-items "Direct link to Attaching items") You can also use in-world email to share virtual items with other users. To attach an item to your email, follow these steps. 1. Open the email composition window using your preferred method, as [detailed above](/getting-started/communicating-with-other-users.md#sending-email). 2. Click the **Open Inventory button** in the email composition window. 3. An Inventory window will open. Click on **the item** you want to send. 4. If you like, you can set a sale price for the item using either [Silver or Gold currency](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies). If you do this, there are two important things to keep in mind: 1. Breakroom will take 10% of the selling price as a fee for doing business on the platform. 2. If the other user declines to purchase the item, they will not receive it. 5. Once you're done composing your email, click the **Send button**. 6. If you *don't* want to sell the attachment, click the **OK button** to confirm your choice. To accept an attachment, click the **Accept It** or **Buy It button** after opening the email. --- ### Controlling your avatar [YouTube video player](https://www.youtube.com/embed/PtouvK9WcnA) #### Overview[​](#overview "Direct link to Overview") Just as we rely on our physical bodies to help us experience the world, your avatar serves as your main point of reference within the Metaverse. In order to explore, create, and socialize within Breakroom, you will need to move your avatar through virtual space. On this page you'll learn how to navigate Regions by walking and flying, as well as how to animate your avatar through the use of gestures. #### Controlling your avatar[​](#controlling-your-avatar-1 "Direct link to Controlling your avatar") ##### **Walking** [​](#walking- "Direct link to walking-") You can direct your avatar to walk using the **arrow keys** on your keyboard. The **up** and **down arrow keys** will move your avatar forward and backward, while the **right** and **left arrow keys** will turn your avatar to the right or left. If you're familiar with playing video games on a PC, you can also use the **WASD** keys the same way. The **Q** and **E keys** will shuffle your avatar to the left and right. ##### **Running**[​](#running "Direct link to running") To run, press and hold down the **Shift key** while walking. ##### **Jumping and crouching**[​](#jumping-and-crouching "Direct link to jumping-and-crouching") To jump, press the **space bar**. To crouch down, press the **C key** while your avatar is standing on the ground. ##### **Flying**[​](#flying "Direct link to flying") To start flying, press the **F key**. This will lift your avatar into the air, where it will hover. You can then use the **arrow keys** or **WASD keys** to soar around. Press the **R key** (or **Pg Up key**) to fly higher, and the **C ke**y (or **Pg Down key**) to fly lower. Press the **F key** again to land. ##### **Click to move**[​](#click-to-move "Direct link to click-to-move") You can also move around by pointing your **mouse cursor** at a spot on the ground and clicking the **left mouse button**. Your avatar will move to the specified point and stop. This is called the "click to move" setting, and you can turn it off in the [Settings window](/getting-started/settings.md#controls-settings) if you prefer. info The [Settings window](/getting-started/settings.md) contains additional options related to avatar movementβ€”you can change the default speed of your avatar, enable "always run" mode, and more. #### Gestures[​](#gestures "Direct link to Gestures") In addition to basic locomotion, Breakroom offers users the ability to play [gestures](/getting-started/helpful-terms.md#gestures). Gestures can add a spark of humor and energy to in-world activities, allowing people to express themselves and experience the immersive magic of the Metaverse. ##### Purchasing gestures[​](#purchasing-gestures "Direct link to Purchasing gestures") Gestures can be purchased through the [Sinewave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md). Under the Gestures tab, you'll find gestures designed to foster connection (such as waving, bowing, shaking hands, etc.), single-user and multi-user dances, interactive objects, and more. ![A closeup of the Sinewave Shop window. Under the Gesture tab, a number of different dance gestures are listed, including ballet, breakdancing, and disco moves.](/assets/images/Breakroom_GETTING_STARTED_GESTURES_001_2026-45a075a7d8d51ad22f05124ba03c1ded.jpg) *Pictured: The Sinewave Shop, and an example of the contents you may find listed under the Gestures tab.* To locate the Gestures tab and purchase gestures, follow these steps. 1. Open the Sinewave Shop by clicking the **Shop button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 2. Click the **Gestures tab** located at the top of the Sinewave Shop window. 3. Scroll through the gesture listings, or click on one of the **gesture categories** in the sidebar to narrow down your search. 4. When you find a gesture that interests you, **click on the listing**. You'll be given the opportunity to watch a preview of the gesture using your own avatar. 5. If you like the gesture, you can purchase it immediately by clicking either the **Buy with Gold** or **Buy with Silver button**, or add it to your cart by clicking the **Add to Cart button**. ##### Locating and playing gestures[​](#locating-and-playing-gestures "Direct link to Locating and playing gestures") ![A closeup of the Inventory window, where several gestures are visible under the Gestures category. This includes dances, hugs, and high-fives.](/assets/images/Breakroom_GETTING_STARTED_GESTURES_002_2026-1a7dee4381b05b4674e46d19276f77d4.jpg) *Pictured: An example of how the Inventory window may appear. The Gestures category is expanded to reveal two sub-categories.* To locate your purchased gestures and play them directly from your Inventory, follow these steps. 1. Open the Inventory window by clicking the **Inventory button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). 2. Click on the **Gestures category**. Find the gesture you want to use, and **click on it**. 3. Click the **Use button** in the action menu that appears. ###### Installing gestures in the Hot Bar[​](#installing-gestures-in-the-hot-bar "Direct link to Installing gestures in the Hot Bar") ![A closeup of the Hot Bar, which has been filled with various dance and emotive gestures.](/assets/images/Breakroom_GETTING_STARTED_GESTURES_003_2026-db1c1a685fca40cf69dafba6425c28a6.jpg) *Pictured: The Hot Bar populated by several different gestures.* You can also keep your favorite gestures right at your fingertips by adding them to the [Hot Bar](/getting-started/ui-tour.md#the-bottom-toolbar). To do so, click and drag the **gesture** from your Inventory window to a **Hot Bar space**. To play a gesture from the Hot Bar, click on the **gesture icon**. ##### Stopping gestures[​](#stopping-gestures "Direct link to Stopping gestures") ![A screenshot of a female avatar with auburn hair dancing. An arrow at the bottom highlights the position of the "Stop Gesture" button.](/img/breakroom/Breakroom_GETTING_STARTED_GESTURES_004_2026.jpg) *Highlighted: The location of the Stop Gesture button.* You can stop a gesture at any time by clicking the **Stop Gesture button** located at the bottom of the screen. #### Multi-user gestures[​](#multi-user-gestures "Direct link to Multi-user gestures") Single-user gestures affect only your avatar. Multi-user gestures can be played with other people, allowing you to high-five, hug, and dance with your Breakroom colleagues. There are several ways to invite others to join you in the fun. ##### Closed gesture invitations[​](#closed-gesture-invitations "Direct link to Closed gesture invitations") ![A screenshot of two female avatars standing on a lawn. An action menu has been opened by clicking the avatar on the left, and the "Play Gesture" action is highlighted.](/img/breakroom/Breakroom_GETTING_STARTED_GESTURES_005_2026.jpg) *Highlighted: The Play Gesture action.* To invite a specific individual to play a gesture with you, follow these steps. 1. Click on the **other user's avatar,** and then click **Play Gesture** in the action menu that appears. 2. An Inventory window will open. Click on the **gesture** you want to play. The other user will see a pop-up asking whether they want to participate in the gesture with you. Once they give their consent, the gesture will play. Keep in mind that many multi-user gestures will temporarily take control of your camera in order to follow the gesture. Either user can stop the gesture at any time by clicking the [**Stop Gesture button**](/getting-started/controlling-your-avatar.md#stopping-gestures). ##### Open gesture invitations[​](#open-gesture-invitations "Direct link to Open gesture invitations") ![A screenshot of two female avatars standing in a sculpture garden. One of the avatars has started an open gesture, and glowing blue rings highlight the \"gesture zone\" around her.](/assets/images/Breakroom_GETTING_STARTED_GESTURES_006_2026-0d64f2122d9542a7adb9e4ef9c50da1d.jpg) *Pictured: An open gesture invitation, with a visible "gesture zone."* If you [play a multi-user gesture](/getting-started/controlling-your-avatar.md#locating-and-playing-gestures) without specifying a particular partner, glowing blue rings will surround your avatar. Other users with avatars located within this "gesture zone" will then be asked if they want to participate in the gesture with you, and any of them may accept. You can rescind an open gesture invitation or stop the gesture at any time by clicking the [**Stop Gesture button**](/getting-started/controlling-your-avatar.md#stopping-gestures). --- ### Controlling your camera [YouTube video player](https://www.youtube.com/embed/GzDo8HbOgqY) #### Overview[​](#overview "Direct link to Overview") While it's important to learn the basics of [avatar movement](/getting-started/controlling-your-avatar.md), the most powerful way to experience virtual space is undoubtedly your camera. In the Metaverse, the camera represents your visual perspective, and it can be detached from your avatar at will. Mastering the art of camera movement opens up a world of possibilities in terms of exploration, art appreciation, and [Region customization](/creating-custom-experiences/using-the-region-editor.md). #### Controlling your camera[​](#controlling-your-camera-1 "Direct link to Controlling your camera") ##### **Adjusting the camera angle**[​](#adjusting-the-camera-angle "Direct link to adjusting-the-camera-angle") When you first log in, your camera will be positioned behind your avatar in third-person view. You can control your camera with the following key and mouse button combinations. | Command | Result | | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | Mouse scroll wheel | The camera will zoom in and out on the current focus point. | | Hold down RMB (right mouse button) and move the mouse | The camera will orbit around the current focus point if you move the mouse from side to side. It will zoom in if you move the mouse forward and back. | | Hold Ctrl + RMB and move the mouse | The camera will pan and tilt around the current focus point. | | Hold Shift + Ctrl + RMB and move the mouse | The camera will pan side to side or up and down while maintaining the current focus point. | | Esc key | The camera will return to its third-person starting point. | warning Sometimes when you use the **Esc key** to return the camera to its default position, you may find that you are either zoomed out from your avatar or focused in on them very tightly. You can use the **mouse scroll wheel** to adjust the camera position back to a comfortable angle. ##### **Latch cam**[​](#latch-cam "Direct link to latch-cam") Latch cam allows you to choose a specific object as your current focus point. You can then move the camera around it using the commands [detailed above](/getting-started/controlling-your-camera.md#adjusting-the-camera-angle). To "latch" your camera onto an object, hold down the **Alt key** and click on the object with your **right mouse button (RMB)**. ##### **Fly cam**[​](#fly-cam "Direct link to fly-cam") Fly cam is another useful way to explore your surroundings. To enable it, hold down your **right mouse button (RMB)**. You can then use the **A and D keys** to pan from side, the **R and C keys** to pan up and down, and the **W and S keys** to zoom in and out. You can also orbit items in this mode by moving your mouse. ##### **Mouselook**[​](#mouselook "Direct link to mouselook") By activating mouselook, you can "lock" your camera to your mouse and take on a first-person perspective. This may be helpful during games, quests, or other in-world activities. There are two ways to turn mouselook on: * Press the **M button** on your keyboard. You can then use your mouse to direct your camera. Press the **M button** again to exit mouselook. * Use your **scroll wheel** to zoom in as tightly as you can on the scene in front of you. A dialog box will appear, asking whether you wish to enter mouselook. If you confirm your choice, you will enter mouselook at that time. Press the **M button** when you want to return your camera to third-person view. #### Camera settings[​](#camera-settings "Direct link to Camera settings") You can customize the way your camera behaves using the [Camera Controls](/getting-started/settings.md#camera-controls-settings) located in the Settings window. --- ### Customizing your avatar ![A screenshot of six avatars dressed in formal business attire, representing a diverse array of cultures, ethnicities, physical abilities, and genders.](/assets/images/Breakroom_GETTING_STARTED_INCLUSIVITY_001_2026-66e6d898bd76e035063673f3bf5ac549.jpg) *Breakroom's avatar customization system offers endless possibilities for self-expression.* #### Overview[​](#overview "Direct link to Overview") Breakroom is a multi-person simulation that uses[ avatars](/getting-started/helpful-terms.md#avatar) to represent where people areβ€”and, perhaps more importantly, *who* they are. Breakroom offers many options for customizing your avatar, so you can feel comfortable in your own virtual skin. If your goal is to pick an avatar and get on your way, you can select a[ starter avatar](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md) with just a few clicks. If you're looking to create your own digital doppelgΓ€nger, you can use the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md) to customize your avatar's shape, skin, hair, and clothing. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every avatar customization option described in this section. #### Our Commitment to Inclusivity[​](#our-commitment-to-inclusivity "Direct link to Our Commitment to Inclusivity") Breakroom is committed to hosting events where *everyone* feels included. Our powerful avatar customization system and in-world content library are designed to offer users the tools they need to accurately represent themselves in virtual space. If you would like guidance on using either the [Outfit window tools](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md) or the [Sinewave Shop contents](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md) to create a more diverse and welcoming World, please reach out to our [Customer Success Team](/help/where-to-find-support.md). We would be happy to assist you. --- ### Choosing a starter avatar #### Overview[​](#overview "Direct link to Overview") You can pick a starter avatar when you register for a Breakroom account or log in for the first time. If your Breakroom World allows users to customize their avatars, you can then [edit your starter avatar's appearance](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md) and browse for additional clothing and accessory items in the [Sinewave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md). info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) and self-registration via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every avatar customization option described in this section. #### Selecting a starter avatar upon registration[​](#selecting-a-starter-avatar-upon-registration "Direct link to Selecting a starter avatar upon registration") ![A screenshot of the starter avatar selection screen during sign-up. On the right is a tile menu consisting of pictures of different avatars, while on the left is a detailed view of a single avatar.](/assets/images/Breakroom_GETTING_STARTED_AVATARS_001_2026-ce250b6106617560f849262bfb688d9e.jpg) *Pictured: Choosing a starter avatar from the menu during sign-up.* If self-registration is enabled, you can pick a starter avatar by following the prompts during the sign-up process. World Owners and World Administrators can change the [starter avatar collection](/creating-custom-experiences/selecting-default-avatars.md) at any time through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md), so the collection of avatars you see may vary. ##### Selecting a starter avatar upon login[​](#selecting-a-starter-avatar-upon-login "Direct link to Selecting a starter avatar upon login") ![A closeup of the avatar selection menu. Ten different avatars are displayed, including a diverse range of body types, genders, and cultural clothing items. In the top left, the Start Here panel can be seen.](/img/breakroom/Choosing_Starter_001.jpg) *Pictured: The Start Here panel and the starter avatar menu.* The [Start Here panel](/advanced-tutorials/uploading-your-own-region/breakroom-start-here-ui.md) is a part of the Breakroom conference system. If installed in a Region, this panel lets you browse through the starter avatar collection by clicking the **Silhouette / Avatar Selection button**. To change your look, click the **Click to select button** corresponding to the avatar you'd like to use. --- ### Editing avatars in the Outfit window [YouTube video player](https://www.youtube.com/embed/ejjRVO6s_5s) #### Overview[​](#overview "Direct link to Overview") Breakroom's Outfit window offers an impressive level of control over the physical appearance of your avatar. Completed *outfits* (including shape, skin, hairstyle, etc.) can be saved for future use. Once you've created a library of outfits, you can switch between them at will. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every avatar customization option described in this section. #### Opening the Outfit window[​](#opening-the-outfit-window "Direct link to Opening the Outfit window") ![A closeup of the Breakroom UI bottom toolbar. The Outfit button is highlighted in orange.](/assets/images/Breakroom_GETTING_STARTED_AVATARS_003_2026-8ef4eb0cb83079c49f36e9c365f39aa1.png) *Highlighted: The location of the Outfit button.* You can open the Outfit window by clicking the **Outfit button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + O** on your keyboard. #### The Outfit window UI[​](#the-outfit-window-ui "Direct link to The Outfit window UI") ![A screenshot of the Outfit window. The right side of the screen contains menus for applying face and body presets, while the left side contains a preview window. In the preview window, a female avatar wearing a sleeveless top and pencil skirt is shown.](/assets/images/Breakroom_GETTING_STARTED_AVATARS_004_2026-e69f63a11f31fdec4e37c2f31efc9ce1.jpg) *Pictured: The main Outfit window UI.* Once you open the Outfit window, your avatar's current look will be displayed in the *preview window* on the left side*.* Before we discuss the various editing tools, let's review the Outfit window UI. | Button or UI component | Function | | ---------------------------------------- | ------------------------------------------------------------------------------------ | | UI component | Function | | Current Outfit Bar (top center) | Displays details about the current outfit (name, outfit ID). | | Save As button (top center) | Saves a copy of the current outfit under a new name. | | Delete button (top center) | Deletes the current outfit. | | Create New Outfit button (bottom center) | Creates a new base avatar for customization. | | Avatar height slider (bottom left) | Adjusts the overall height of the avatar, while maintaining its current proportions. | | Appearance tab | Displays avatar appearance and customization options. | | Wardrobe tab | Displays a user's full collection of avatar components and accessories. | | Wearing tab | Displays only the items a particular avatar is currently wearing. | | Outfit List tab | Displays saved Outfits. | | Camera panel (bottom left) | Adjusts the camera angle and focus point within the Outfit window. | | Discard button | Discards any unsaved changes and reverts the avatar to its previous appearance. | | Save button | Saves any changes made to the outfit and exits the Outfit window. | ##### The camera tools[​](#the-camera-tools "Direct link to The camera tools") ![A closeup of the Outfit window camera controls, including buttons that control the camera's position and zoom level.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_005_2026.jpg) *Pictured: The camera tools.* The camera tools can be found in the bottom left corner of the Outfit window. Use them to position your camera for optimum viewing while you edit your avatar or outfit. | Button | Function | | --------------------- | -------------------------------------------- | | Pan up | The camera will pan upward. | | Pan down | The camera will pan downward. | | Rotate left | The avatar will rotate left. | | Rotate right | The avatar will rotate right. | | Zoom in | Camera will zoom in closer to the avatar. | | Zoom out | Camera will pull back from the avatar. | | Legs/feet zoom button | Camera will focus on the avatar's feet. | | Body zoom button | Camera will focus on the avatar's body. | | Head zoom button | Camera will focus on the avatar's head/face. | #### Creating a new outfit[​](#creating-a-new-outfit "Direct link to Creating a new outfit") In Breakroom, the term *outfit* refers to a unique avatar configuration. It may help to think of an outfit as an avatar that you have saved at a particular moment in time, including all details such as hair, skin, eye color, shape, clothes, shoes, jewelry, etc. For example, you may craft a basic "Me" avatar and then save several variations on this avatar as separate outfits, such as "Formal Me" and "Sporty Me." Or you may choose to create a diverse collection of outfits, including quadruped dragons, hovering ghosts, and more. To create a new outfit or avatar, follow the steps below. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Click the **Create New Outfit button** located at the bottom of the preview window. ![A closeup of the Create New Outfit button.](data:image/jpeg;base64,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) *Pictured: The Create New Outfit button.* 3. A pop-up will appear, prompting you to select a basic body morphology. Make your choice by clicking either the **Masculine** or **Feminine button**. 4. Enter a **name** for your new outfit, and click the **Save button**. Following these steps will replace your current avatar with a default masculine or feminine human avatar. You can then edit this avatar in detail to create a new outfit. #### The Appearance tab[​](#the-appearance-tab "Direct link to The Appearance tab") ![A closeup of the Outfit window tabs, which consist of four tabs arranged vertically between the two halves of the Outfit window. The first one at the top, the Appearance tab, is highlighted.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_007_2026.jpg) *Highlighted: The location of the Appearance tab.* The Appearance tab contains a suite of convenient tools that allow you to change your avatar's body and face presets with a single click. You can also use the **Head**, **Bodies**, and **Skin interfaces** located under the **Appearance > Details** subtab to further customize your virtual look. ##### Applying preset shapes[​](#applying-preset-shapes "Direct link to Applying preset shapes") ![A closeup of the Body and Face presets available under the Appearance tab. These include a diverse range of body and facial types.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_008_2026.jpg) *Pictured: Body and face presets available under the Appearance tab.* *Presets* are built-in shapes designed to change your avatar's appearance with a single click. Using presets can help you achieve your avatar appearance goals more quickly, as they can be customized after you apply them. To apply a new preset to your avatar, follow these steps. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Make sure the avatar you want to edit is currently active, or [create a new avatar](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#creating-a-new-outfit) to edit. 3. Click on the **Appearance tab**. Make sure the **Body & Shape subtab** is active. 4. Click on a body preset or a face **preset** to apply it to your avatar. 5. When you are satisfied with your changes, click the **Save button**. ##### Customizing your head and body shape[​](#customizing-your-head-and-body-shape "Direct link to Customizing your head and body shape") ![The Outfit window, with the Appearance tab open on the right side. The location of the Details tabs is highlighted with a blue arrow. In the preview window, a female avatar in a sleeveless shirt is shown from the waist up.](/assets/images/Breakroom_GETTING_STARTED_AVATARS_009_2026-aeaab839762dd8cea8ff0e7bf8364cb8.jpg) *Highlighted: The Appearance tab, with the location of the Details tabs highlighted.* The Appearance tab contains two subtabs, which are located in the top right corner. The **Details tab** contains three subtabs of its ownβ€”the **Head tab**, the **Bodies tab**, and the **Skins tab.** In this section, we will focus on the Head and Bodies tabs. ###### The Head tab[​](#the-head-tab "Direct link to The Head tab") ![A closeup of the Head tab, showing several slider controls.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_010_2026.jpg) *Pictured: The Head tab, with several facial feature control panels expanded.* Under the **Appearance > Details > Head tab**, you will find a number of facial features with nested slider controls. To expand a facial feature control panel, click the **> arrow** located to the left of its name. You will also see options to **Minimize All** or **Expand All** panels near the top of the window. Each slider controls a single aspect of your avatar's facial configuration. The level of detail you can achieve with these sliders is astonishing, and the best way to learn how to use them is to experiment. You can always **Undo** your last step or **Reset** your avatar entirely by clicking the relevant buttons at the bottom of the window. ###### The Randomize feature[​](#the-randomize-feature "Direct link to The Randomize feature") ![A closeup of the Randomize slider.](/assets/images/Breakroom_GETTING_STARTED_AVATARS_011_2026-de50b50fc98f080e0a5e1188290a7ddc.jpg) *Pictured: The Randomize slider.* Of particular interest is the Randomize feature, which allows you to "roll the dice" and see what kind of face you get. If you chance upon a set of facial features you like, you can then refine your look using the facial feature sliders. To use the Randomize feature, follow these steps. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Make sure the avatar you want to edit is currently active, or [create a new avatar](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#creating-a-new-outfit) to edit. 3. Click on the **Appearance tab**, and then navigate to the **Details > Head tab**. 4. Click on the **> arrow** located to the right of the Randomize control panel to expand it. 5. Increase or decrease the "randomness factor" by adjusting the associated **slider**. The larger the randomness factor, the more dramatically different each random generation will appear. 6. When you are ready, click the R**andomize button**. If you end up with an avatar that looks a little *too* random, you can always click the **Undo Randomization button** to restore your avatar's previous appearance, or click the **Reset button** to revert your avatar to the default masculine or feminine human settings. When you are happy with your changes, be sure to click the **Save button**. If you prefer to throw away all of your changes and keep your last saved appearance, click the **Discard button**. ###### The Bodies tab[​](#the-bodies-tab "Direct link to The Bodies tab") The **Appearance > Details > Bodies tab** appears and functions much like the [Head tab](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-head-tab). You can adjust the relevant sliders to change your avatar's body shape and size, right down to the length of your fingers. You can also use the Randomize feature to generate a random physical appearance. When you are happy with your changes, be sure to click the **Save button**. If you prefer to throw away all of your changes and keep your last saved appearance, click the **Discard button**. #### Choosing an avatar skin[​](#choosing-an-avatar-skin "Direct link to Choosing an avatar skin") ![A closeup of the Skins tab, showing several female skins that can be applied to an avatar.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_012_2026.jpg) *Pictured: The Skins tab.* The Appearance tab also allows you to apply a skin to your avatar and edit it. Additional skins can be purchased through the [Sinewave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md). To change your avatar's skin, follow these steps. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Make sure the avatar you want to edit is currently active, or [create a new avatar](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#creating-a-new-outfit) to edit. 3. Click on the **Appearance tab**, and then navigate to the **Details > Skins tab**. 4. Click on the **skin** you want to use. ![A closeup of the Skin Bumpiness slider.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_013_2026.jpg) *Pictured: The Skin Bumpiness slider.* After choosing a new skin for your avatar, you can refine its texture using the **Skin Bumpiness slider**. Decreasing bumpiness will make your avatar's skin look smooth, while increasing bumpiness will make it look more matte or rough, depending on the lighting. When you are happy with your changes, be sure to click the **Save button**. If you prefer to throw away all of your changes and keep your last saved appearance, click the **Discard button**. ##### Skin Shade and Skin Shininess[​](#skin-shade-and-skin-shininess "Direct link to Skin Shade and Skin Shininess") ![A closeup of the Skin Shade interface. This consists of a color palette as well as Hue, Saturation, and Brightness sliders.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_014_2026.jpg) *Pictured: The Skin Shade settings.* The Skin Shade and Skin Shininess features are available through the **Appearance > Details > Skins tab**. While these interfaces look the same, each controls a slightly different aspect of your overall skin color. * *Skin Shade* refers to the general tint of your chosen skin. For instance, you could use this feature to tint a pale skin deep green for an alien costume contest. * *Skin Shininess* refers to the tint of the *shine* that appears when light hits your skin. To continue our example, you might add a red shine to your alien avatar's green skin for added "otherworldliness" and dimension. To edit either the Skin Shade or Skin Shininess features, follow the steps below. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Make sure the avatar you want to edit is currently active, or [create a new avatar](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#creating-a-new-outfit) to edit. 3. Click on the **Appearance tab**, and then navigate to the **Details > Skins tab**. 4. Click on the skin you want to apply to your avatar. 5. Click on the **> arrow** located to the right of either the Skin Shade panel or the Skin Shininess panel, or both. 6. Select your tint color(s) using the color palette and HSB sliders, or enter a hex or RGB code into the relevant boxes. 7. When you are done, click the **OK button**. To discard your changes, click the **Cancel button**. #### The Wardrobe tab[​](#the-wardrobe-tab "Direct link to The Wardrobe tab") ![A closeup of the Outfit window tabs, which consist of four tabs arranged vertically between the two halves of the Outfit window. The second one from the top, the Wardrobe tab, is highlighted.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_015_2026.jpg) *Highlighted: The location of the Wardrobe tab.* Clothing items and other avatar components can be worn or edited through the Wardrobe tab. You can also access and apply [morphs](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#using-avatar-morphs) to further customize your avatar shape. ##### Wearing and removing avatar components[​](#wearing-and-removing-avatar-components "Direct link to Wearing and removing avatar components") ![A closeup of the Wardrobe tab, listing a variety of avatar accessory categories. These include Bottoms, Tops, Outfits, Skins, and more.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_016_2026.jpg) *Pictured: The Wardrobe tab categories.* The Wardrobe tab contains a number of avatar component categories. You can expand any category by clicking on the **> arrow** to the right. You can also search for an item using the **search field** at the top. To wear an item, follow these steps. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Make sure the avatar you want to edit is currently active, or [create a new avatar](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#creating-a-new-outfit) to edit. 3. Click on the **Wardrobe tab**. 4. Expand the category you need by clicking the **> arrow** to the right of its name. For example, you can expand the Accessory category to find any bracelets, glasses, and rings you own, or expand the Top category to find a suit jacket. 5. In the window that appears, locate the item you want to wear. **Click on the item** to add it to your avatar. 6. When you are satisfied with your changes, click the **Save button**. To discard your changes, click the **Discard button**. To remove an item from your avatar, repeat the steps outlined above. When you click on a currently worn item in the Wardrobe tab, it will be removed from your avatar. Alternatively, you can remove worn items using the [Wearing tab](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-wearing-tab). ##### Editing avatar components[​](#editing-avatar-components "Direct link to Editing avatar components") Some avatar components have features that can be edited or customized by the user, which may include: * Object position, size, and rotation * Material transparency and texture * Color or tint Customization options must be approved by the original item creator or uploader. You can check to see which customization options have been enabled for a particular item using either the [Wardrobe ](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-wardrobe-tab)or [Wearing tabs](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-wearing-tab). ![A closeup of a single avatar component - a pair of round, black plastic glasses. In the lower right corner, a pencil icon is visible.](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCACOAIADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9Srq6ttPsZbu7litrWCMyyzTMESNFGWZmPAAAJJNcx/wtzwF/0Ofh3/waQf8AxVHxc/5JH4z/AOwJef8Aoh6/J3V9Xu7XUZoopiqKRgbQew9qR9TgMBgJYCeOx0ppKaglBRe8W7u7XY/WL/hbngL/AKHPw7/4NIP/AIqj/hbngL/oc/Dv/g0g/wDiq/JH+3r/AP5+D/3yv+FH9vX/APz8H/vlf8KNR8vD389b/wABh/8AJH63f8Lc8Bf9Dn4d/wDBpB/8VR/wtzwF/wBDn4d/8GkH/wAVX5I/29f/APPwf++V/wAKP7ev/wDn4P8A3yv+FGocvD389b/wGH/yR+t3/C3PAX/Q5+Hf/BpB/wDFUf8AC3PAX/Q5+Hf/AAaQf/FV+SP9vX//AD8H/vlf8KP7ev8A/n4P/fK/4Uahy8Pfz1v/AAGH/wAkfrd/wtzwF/0Ofh3/AMGkH/xVH/C3PAX/AEOfh3/waQf/ABVfk5b3Gu3i5giuZx6xwbv5CluJNfs13TwXUK/3pLfaP1FPUOXh7+et/wCAw/8Akj9Yv+FueAv+hz8O/wDg0g/+Ko/4W54C/wChz8O/+DSD/wCKr8kf7ev/APn4P/fK/wCFH9vX/wDz8H/vlf8AClqHLw9/PW/8Bh/8kfrd/wALc8Bf9Dn4d/8ABpB/8VR/wtzwF/0Ofh3/AMGkH/xVfkj/AG9f/wDPwf8Avlf8KP7ev/8An4P/AHyv+FGocvD389b/AMBh/wDJH63f8Lc8Bf8AQ5+Hf/BpB/8AFV0ek6tp2v6fFf6ZeWuo2MufLubSVZY3wSDhlJBwQR9Qa/HO01u9kuoEaclWdQRtHQn6V+nf7Jv/ACQHwx9br/0qlpjxeAy6WXSx2BnN8s4wamor4oyd1Zv+U674uf8AJI/Gf/YEvP8A0Q9fkjr3/IWuPqP/AEEV+t3xc/5JH4z/AOwJef8Aoh6/JHXv+QtcfUf+gil1CP8AyT0/+v0f/SJGfRRRTPlAoop8UTzSJHGpd2IVVHUk0Aafhrw3eeKdTSzs0yx5eQ/dRfU17x4U+Fej+H40eSFb68HWaYZGfZegq78P/CcXhbQYLdUH2qQB7iTHJY9voK7CG3rshTUdXuYSlfYgjt1RQqjao6KvApWhDKQeR6Gry23tQ1vW1zM4XxH8N9D8QI3nWawTnpNbgIwP4cGvE/HHw6v/AAbJ5p/0mwY4S4UdD6MOxr6cmgIrL1LT4NStJrO7jEtvMpV0PcVlKCl6lqTR8lUVteL/AA5L4V165sJMsiHdG5/iQ9DWLXHsdBPY/wDH9bf9dV/mK/Un9k3/AJID4Y+t1/6VS1+W1j/x/W3/AF1X+Yr9Sf2Tf+SA+GPrdf8ApVLU9T6ql/yT1b/r9T/9IqnXfFz/AJJH4z/7Al5/6IevyR17/kLXH1H/AKCK/W74uf8AJI/Gf/YEvP8A0Q9fkjr3/IWuPqP/AEEUdRx/5J6f/X6P/pEjPooopnygV2/wh0RdX8WxySLuitVMxHv0H61xFew/AOzBTVbrHzbkiB/Ak/0q4K8kTLY9lt0rRhTpVW3j6VoxrxXZcwFC0FakVaRlqbgU5lrLu1xzWzKtZN9xmncDx/47aQJLPT9TVfmRjC59jyK8ar6L+K1uLrwLf+sZSQfgcf1r50rlqfEbR2J7H/j+tv8Arqv8xX6k/sm/8kB8MfW6/wDSqWvy2sf+P62/66r/ADFfqT+yb/yQHwx9br/0qlrLqfW0v+Serf8AX6n/AOkVTrvi5/ySPxn/ANgS8/8ARD1+SevAf2tP+H/oIr9bPi5/ySPxn/2BLz/0Q9fknr3/ACFp/wDgP/oIo6hH/knp/wDX6P8A6RIz9oo20tLmmfKlbyp570QxHG4Zr1z4UaXrdvpt2+n6lDbgzYeOW335O3r1FeY6bxqcRP8AdIr3j4V7hoUh4H79se/ArSG5EjYXxB4q0jBuLOy1KMdTCWhc/QHI/Wr2j/F7Q7u6NnfzNo18v3re/wDk/JuhFb0bRtGN0vPpx/KvFfjN4Juta8ceGkjsbi0ttUiZI71oGWGXY5D7GIwxXIzjpkZrR3ROh7JqnxI8N6NbGa41uy2josUyyMfoFJNYf/CzNR1WMPpOhyfZ2+5cahJ5KsPULgt+lcX4y/Zis/hr4Ns/F+r+JFtYrm6t4dN0qa1LTX5Zx5jbgR5aKmWDEEHGONylvTAsEewRqp4ADHnAxxilqw0RiHUPGF+uVu9MtAey27yY/HIrF1iHx8sTGDUdMnbHANuyH+Zr0NFMceRIGHoRVC5Z5GYMoAxkHNV8xHzTqfxB8U6lJeabqVyI4F3R3EYhAAI6AnHGSK53bXtvgXwvaeJNW8aC7/49ri78pmXrhTng/Ws344eG9O0W10qWxtY7YEtFhFAyoAIz61nKOl2Wn0PK7Ff9Ot/+ui/zFfqP+yb/AMkB8MfW6/8ASqWvy5sf+P63/wCui/zFfqN+yb/yQHwx9br/ANKpax6n1tL/AJJ6t/1+p/8ApFU674uf8kj8Z/8AYEvP/RD1+Sevf8haf/gP/oIr9bPi5/ySPxn/ANgS8/8ARD1+Sevf8ha4/wCA/wDoIo6hH/knp/8AX6P/AKRIoUUmR60Z9/0pnyoqyGKRJF+8pzivbPht4x0mx8PwpeTNZs0jNunQqh57NjBrxL8a9++Bt+l14TNu2GNvO6FT6HDD+ZrSG5EtjoLv4i6YsJTTS2sXZGEhskMhJ7ZIGB+NdT8HfHGs+H9LudN8a2EPifT7i7F/a6VdONumyg/8s32tgEE7k6HJ6bn3X4I0WPCqFB/ujFZNlbmbUJn7K2BXQknuZX7B8XWn+LX2xdZm3SzgeUU4WDHKhB2Az+OTnJJNcV4V8VS+HootG8UD7DeRfu4rqYbYbhR0Kv0zjtXaaxHJBIsgGcdq1bS3t9W0tFuII54nHMcyBl/I03psHqZq6lp7R+assGzrvDrj65rlfEXjzT4Ue20yRdV1RxtitrU+Z83YsRwB9a6ib4eeFy/mHQNP3f8AXuoH5YxTJLGz02IxWVrDaR/3YIwg/ICpGYHw+0E+GNDjju2D3Ujme5bsXY5IrzL49eIo9U8RQWELAx2iZbH95scflivS9a+Iei+FFuIbq43Xqx7lt1Ukk44HtXzXqF9LqV/cXcxZpZpGkYn1JzWUmrWRcVrdhY/8f1v/ANdF/mK/Ub9k3/kgPhj63X/pVLX5cWP/AB/W3X/WL/MV+o/7Jv8AyQHwx9br/wBKpaw6n11L/knq3/X6n/6RVOu+Ln/JI/Gf/YEvP/RD1+SWvZ/ta4+o/wDQRX62/Fz/AJJH4z/7Al5/6IevyS17/kLXGB6f+gijqOP/ACT0/wDr9H/0iRQwe9GT6fpSUZNM+UD8K9N+ButfZNaurBjhbhN6j/aX/wCsTXmeSvU1oeH9YfRNas75Sf3MgY47juPypp2YmfXtvPiPrUNqskNy7QlWLHJVjVOwvY7/AEuO5hcMjoHU+oIzU2n3KLkurHPtXVujEtTWM96rGdhGxPAU5wK0bSNbW3SNeijFU2u4dgCgjHsadbXXnNtAJ/CkBPczYU1g3coZsk4A5JrS1CbYuO9eQ+O9evf7Ynso53it41VSkbY3ZUE5x164xUSdj6rh3IK/EeMeDoTUWouTb7JpdPNo8p8Zauuu+JtQvVbMckpCf7o4H6CsX8a7n+zbT/n1h/79ij+zbT/n1h/79isD9O/4hVjf+gmP3M46w/4/rfn/AJaL/MV+o/7Jv/JAfDH1uv8A0qlr86l0+1Rgy20QYHIIQcV+i37Jv/JAvDP1uv8A0qloPN4g4YrcM5C4Vqinz1oPRNWtCp39Trfi5/ySPxn/ANgS8/8ARD1+SWvMf7WuOe4/9BFfrb8XP+SR+M/+wJef+iHr8xP+FY32tXBvPOjihmCsvBJxgU4xcnZHxKko8PTv/wA/o/8ApEjz7cT3pd2OnP4V6pa/B23XHnXcj+oUAVZk+EWn7fleUH3at/YTPkfaRPIN3sKN3tXplx8I4937u5dR7jNJD8JUz+8uHb6U/q8w9pE3vgr4w+1WcmiXL/vIRugyeqd1/D+tew2cckS5RBIteS+G/h9Z6LfQ3cW7zozkMTXrGk3ymMAnFVyuCs2TzKT0NDdLIuPs+36moW/0XLMefarj3SrHncKzJFkvpDt4jHVjU3GUbqYyszGvHfGG7/hJL3ccncD+G0Y/SvaLq3EaYWvG/G67fE94P9z/ANAWomtD9j8LP+R1V/69S/8AS4GRZ2c+o3cNrawyXFzM4jjhiUszsTgAAdSTX1f8N/2eR8M7ez1bxXpVnq95eoE+y3YSS2i3cG3YsMJKeNkmdhYlDtyrNT/ZN8M2Ph2LRvEd7oF5qmoa1c3MFrqEUReDToIgoaRzjCF2Lrnrhfc1H+05+0uutJeeD/ClwH085i1DUYzkT9jFGf7nq3foOOvM9dD9JzjM8yzrM1kuWQtSV/aTv0Taeq1Vmmrbya0stTwP4oWvh2y8d6tF4Ulml0ISAwecCChKgsnPJCtuAJ7Dv1P3L+yb/wAkC8M/W6/9Kpa/PGv0O/ZN/wCSBeGfrdf+lUtWcniTSdDIMPScnLlqRV3u7Qnq/N9Trfi5/wAkj8Z/9gS8/wDRD18KaHq2mQ6LZRy31ukiwqGVpBkHHSv0TurO31CxltbuCO5tZ4zHLDMgdJEIwysp4IIJBBryDw9q3wD8WaxBpOjR+BtT1Kd2jitbW0tnd2UEsAAvUbWz9DVxk4u6PwjB4zAfUJYHHRm05qacHFbRas7p9z5WOtaT21C2/wC/gpra5peMfb7f/v4K+wPG2l/Bn4b29pP4q03wX4fju5DDbHUbS1hM7gFiqBlyxABOBngZrS8OeBfhd4w0S01nQvDvhLWdJvEEtvfWFjbTQzKejK6qQR9DWvt5i5OH/wCWt98P/kT4nOqaW3XULf8A7+CnLq2kqf8Aj/tz/wBtBX3R/wAKh8Cf9CV4d/8ABVB/8RR/wqHwJ/0JXh3/AMFUH/xFHt5hycP/AMtb74f/ACJ8Orrekj/mIW3/AH8FWbXxDpMbfNqNsB/10FfY/iLwF8OfC+lnUL7wRo7W4mhgxaaAtzJukkWNfkiiZsbnGWxhRlmIAJGl/wAKh8Cf9CV4d/8ABVB/8RUurJj5eH/5a33w/wDkT48t/E+gceZqVof96UVafxjoOMLqtoB/10FfXP8AwqHwJ/0JXh3/AMFUH/xFZNv4N+F134qvvDcPhfw2+uWNpBfXNmNJh3RwTPKkTk7MYZoZQMHPyGo52P8A4QP5a33w/wDkT5OuPFWiydNUtT/21FeS+NbqG88TXk1vKs0LbNrocg4RQf1r7mfWv2fofFH/AAjcr+AIde+1mwGnTQ2iTG4H/LEKQCX4Py9a7v8A4VD4E/6Erw7/AOCqD/4ik5NqzPqOHc/ybhvFyxeHpVZOUXGzcLWbT6Jdj81pPFWtTaNDpD6tfNpUIIjsTcP5C5YscJnHUk9Ky6/T3/hUPgT/AKErw7/4KoP/AIij/hUPgT/oSvDv/gqg/wDiKk/QYeKOAp35MJJX10cd+5+YVfod+yb/AMkC8M/W6/8ASqWtzxR4H+GPgvw3qmv614V8N6fo+l20l5eXUmkwlYYY1LO5AQnAUE8DtXZaHpum6TpNvbaRZ21hpyrvht7SFYolDEsSFAAGSSenUmg+M4u41w/EeBhhKVGUGpqV209lJdPUuD/Vj6V4l+y/4P8AGXh34b+GF1rV/s9lFBKG0O40j7PcQ5kfarSF92RkHlRmvbk+6v0p1B+SHhPi6S8+Gv7QWoePNX0HWvEPhvUPDlrpdndaLp8moy6VcQ3E7zIbeINKFnWeE740I/0bDkYTPB2ugeNPCNn4t+KmlaBrlnajxgNes/BNsubu70prOCzuwbZN2JZGSS8SIfOXVA21ncV9ZUUAfIXjHwr8Q7Gz8A6h4jl1260S8t9T1PxHZ6T9uupbbVLmSF7aEpYvHO8EET3EKYyoKI7Lu2uu18PPAPi67+L8Fx4o1nxZf6ZpPgfTprO43XVpbzXxvNS/1sXmFZbiOBrcOkjNk7GYZ2Y+o6KAPiK1s/G1n8OdU0jR7Hxfq+oWt/4djn8SzW2r2V1elNZtftIa1unbcTAZXkmgJjKbwcKABe1S61zxV42+JEvgvTvHXhfxdbaZqel+ErbUNL1iPT7i88pi1/PcTobMbnXbApbaB83JkCp9n0UAfGEPhfx1ceC9aHhW88ZWunqumWur6Tcwapb38sS3kX217S5vJ3czG1E6loD85ZGV94zXcfs96GsP7QnxC1rStD8Wab4VvfDeiQ2Nx4phvEaSRLjUWlSP7V+8UL5ikxtggvnAVlJ+l6KAPj/xd4J+IOp+APiHoh0mP/hEda8aXSahHFp08mrrp0tyvmXNqu9Q5A+ZWUEhQWUOyhWu/FHR/GjeJviMIoPGFx41uriE/D670ua8GkWsK2sGwXBjIgTFybhpftA3SIQBuAVR9Z0UAfI3xs1fx54T0X9obSLXSfGGsax4m037Z4TuNAtLm5igK6VBbyJHKmVt5FnikkCZVn35QMxIqr8Qvh74w1m0/aP8QwzeNY9e0qO3uvBcVhfXsUZuItEtJAbaBGCT7rpWRl2uCwdSMs4P2HRQB8P/ALRXhvxN4h8KfG+017RfHmueJNW0mRPCMPh4Xr2As/7NjVoWjhPkrIbhrrekw8yQFQu7CKPtTR42i0ixR1KOsCAqwwQdo4q5RQB//9k=) *Pictured: An avatar item in the Wardrobe tab. Note the pencil icon in the lower right corner.* To edit an avatar component, follow these steps. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Make sure the avatar you want to edit is currently active, or [create a new avatar](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#creating-a-new-outfit). If you create a new avatar, [add the avatar component](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#wearing-and-removing-avatar-components) you want to edit. 3. Click on the **Wardrobe tab** or the **Wearing tab**, and locate the worn item you want to edit. 1. If you are using the **Wardrobe tab**, click the **pencil icon** in the bottom right corner of the avatar component tile to access customization options. 2. If you are using the **Wearing tab**, customization options will be displayed automatically. 4. Within the customization options, you may see: 1. [**Move, Rotate, and Resize**](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) buttons that allow you to customize the item to better fit your avatar. 2. Material **Alpha** and **Smoothness sliders** that allow you to customize the transparency and texture of the item. 3. **Color palettes** that allow you to customize the color or tint of the item. 5. Once you're done customizing an item, be sure to click the **Save button** to save any changes you make. You can also remove the item from your avatar by clicking the **Remove button**. ![An example of the customization options available for a single avatar item, in this case a pair of black plastic glasses. Using these options, the glasses can be repositioned, resized, rotated, and their materials edited.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_018_2026.jpg) *Pictured: An example of the customization options available for a particular avatar component.* ##### Using avatar morphs[​](#using-avatar-morphs "Direct link to Using avatar morphs") ![A closeup of the Wearing tab \> Bodies category, featuring a face morph and several pairs of shoes.](/assets/images/Breakroom_GETTING_STARTED_AVATARS_019_2026-a2a2e21a25e90a4f6976a29e69ddb02a.jpg) *Pictured: An example of a third-party morph, alongside other avatar components.* *Morphs* are another way you can apply predefined body shape settings to your avatar. If you own any morphs, you will find them listed under the **Wardrobe tab > Bodies category**. You can [add or remove a morph](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#wearing-and-removing-avatar-components) just like any other avatar component. Even when wearing a morph, you can still customize your appearance using the [Head](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-head-tab) and [Bodies](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-bodies-tab) settings available under the [Appearance tab](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#the-appearance-tab). info **What is the difference between a preset and a morph?**

Presets contain different values for the face and body shape sliders available under the Appearance tab, while morphs actually change the default shape of the mesh that makes up your avatar.

Imagine that you want to design a classic "gray alien" avatar with oversized black eyes. If you use the Appearance sliders to shape the eyes, then you have created a *preset*. If you use [Unity](/advanced-tutorials/uploading-your-own-virtual-clothing.md) to create a new mesh head shape that includes the oversized eyes, and apply that to your avatar, then you have created a *morph*.

You can use the Appearance sliders to make further adjustments to any morphs that you apply to your avatar. However, to return to the default human shape, you will need to remove any morphs that you are wearing. #### The Wearing tab[​](#the-wearing-tab "Direct link to The Wearing tab") ![A closeup of the Outfit window tabs, which consist of four tabs arranged vertically between the two halves of the Outfit window. The third one from the top, the Wearing tab, is highlighted.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_020_2026.jpg) *Highlighted: The location of the Wearing tab.* The Wearing tab lists all of the items you are currently wearing to create your outfit. Here you can quickly access these items in order to [edit](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#editing-avatar-components) or [remove](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md#wearing-and-removing-avatar-components) them. ![A closeup of the Wearing tab, showing fingernail polish and shoes as worn by an avatar. These items can be removed from the avatar by clicking the associated Remove button. The shoes can be edited, and so a material slider is visible.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_021_2026.jpg) *Pictured: The Wearing tab. Note the **Remove buttons** and the [edit sliders](editing-avatars-in-the-outfit-window#editing-avatar-components).* #### The Outfit List tab[​](#the-outfit-list-tab "Direct link to The Outfit List tab") ![A closeup of the Outfit window tabs, which consist of four tabs arranged vertically between the two halves of the Outfit window. The one on the bottom, the Outfit List tab, is highlighted.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_022_2026.jpg) *Highlighted: The location of the Outfit List tab.* The Outfit List tab contains all of your saved outfits. Here you can switch between outfits, delete them, or copy the outfit ID number should you need it. ![A closeup of the Outfit list, in this case populated by more than a dozen saved outfits. Each tile features a head icon with masculine- or feminine-styled hair, depending on the base gender of the avatar model. In addition to the outfit name, there is also an ID number for each outfit.](/img/breakroom/Breakroom_GETTING_STARTED_AVATARS_023_2026.jpg) *Pictured: The Outfit List tab populated with saved outfits.* Here's a brief overview of the UI. | Button or UI component | Function | | --------------------------------- | -------------------------------------------------------- | | Refresh List button | Refreshes the Outfit List. | | Add Outfit button | Creates a new default human avatar for customization. | | Delete button | Deletes the outfit you are currently wearing. | | Search field | Allows you to search for a saved outfit. | | Avatar icon (male or female head) | Loads the chosen outfit. | | Copy ID button | Copies the ID number that identifies that unique outfit. | ##### Selecting a saved outfit[​](#selecting-a-saved-outfit "Direct link to Selecting a saved outfit") To select one of your saved outfits to wear or for further editing, follow these steps. 1. Open the Outfit window by clicking the **Outfit button** at the bottom of your screen. 2. Click the **Outfit List tab**. 3. Click on the **outfit** you would like to wear or edit. 4. When you are satisfied with your changes, click the **Save button**. To discard your changes, click the **Discard button**. --- ### Using the Sinewave Shop [YouTube video player](https://www.youtube.com/embed/ejjRVO6s_5s) #### Overview[​](#overview "Direct link to Overview") Breakroom shares core functionality with the Sinewave platform, and this includes the Sinewave Shop. If access to the Sinewave Shop is enabled in your Breakroom World, you can purchase virtual items using either Silver or Gold [currency](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies) and add these components to your avatar using the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md). With our huge selection of clothing and accessoriesβ€”everything from business suits to fairy wings to nail polishβ€”you can truly make your virtual stand-in stand out. The Sinewave Shop also contains a wide selection of vehicles, furniture items, gestures, and other tools. If you have the correct [user permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md), you can add these items to Regions using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every function described in this section. #### Sinewave currencies[​](#sinewave-currencies "Direct link to Sinewave currencies") ![A closeup of the Sinewave Shop currency display. Here you can quickly review your Gold and Silver currency holdings and purchase Gold.](data:image/jpeg;base64,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) *Pictured: An example of the Sinewave Shop currency display.* Sinewave offers two types of in-world currency: Silver and Gold. *Silver* is Sinewave's in-world promotional currency, and cannot be exchanged for legal tender. Each user will receive a gift of Silver upon signing up. Additional Silver can be earned by completing quests and engaging in other activities. *Gold* is a premium currency that can be purchased (and in limited cases, exchanged) for legal tender. Some Sinewave Shop items can only be purchased with Gold currency. ##### Buying Gold currency[​](#buying-gold-currency "Direct link to Buying Gold currency") If your Breakroom World permits users to take advantage of Gold currency, you can replenish your wallet by clicking the **Shop button** in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar) and then clicking **Buy Gold**. Sinewave accepts payment via credit card and PayPal. #### Shop window walkthrough[​](#shop-window-walkthrough "Direct link to Shop window walkthrough") ##### Opening the Shop window[​](#opening-the-shop-window "Direct link to Opening the Shop window") ![A closeup of the Breakroom UI bottom toolbar. The Shop button is highlighted.](/assets/images/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_002_2026-e9bcc2e8801eb490949fd70235c7a117.png) *Highlighted: The location of the Shop button.* You can open the Sinewave Shop by clicking the **Shop button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar), or by pressing **Ctrl + S** on your keyboard. ##### Browsing the Shop categories[​](#browsing-the-shop-categories "Direct link to Browsing the Shop categories") ![A screenshot of the Sinewave Shop, with the category tabs along the top highlighted. The Clothes category is currently open, and the window contains tiles corresponding to various items of clothing for sale, including jackets, shoes, and t-shirts.](/assets/images/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_003_2026-d0d16b5994a0c2712813b978430d49ab.jpg) *Highlighted: The Sinewave Shop category tabs.* Along the top edge of the Sinewave Shop window, you'll see several **category tabs**. Click these to explore the different types of content available for purchase. You'll find tabs devoted to Clothing, Vehicles, Furniture, and more. ![A closeup of the Clothes subcategory menu. Clicking on any of these subcategories will narrow down your search - for instance, you can browse through full outfits, tops, bottoms, etc.](/assets/images/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_004_2026-aa38ace142d35edfdd4b01fa70bcbc5b.jpg) *Pictured: The Clothes subcategory menu.* When you click on a category tab, you'll see a **subcategory menu** appear in the left corner of the Sinewave Shop window. You can use this to refine your search even further. ##### Searching for items[​](#searching-for-items "Direct link to Searching for items") ![A closeup of the Sinewave Shop search field as seen in the Clothes category. In addition to entering terms into the search field, you can click \"Male Only,\" \"Both,\" or \"Female Only\" to specify what type of clothing you are looking for.](data:image/png;base64,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) *Pictured: The Sinewave Shop search field.* Each category tab includes a **search field**. When searching within the Clothes category, you can also specify whether you want to see items intended for masculine avatars, items intended for feminine avatars, or both. ##### Previewing clothing items[​](#previewing-clothing-items "Direct link to Previewing clothing items") ![A closeup of a shirt listing in the Sinewave Shop. The model has close-cropped ginger hair, and they are wearing a blue short-sleeved shirt and plaid trousers. The featured shirt can be purchased with either Gold or Silver currency.](/img/breakroom/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_006_2026.jpg) *Pictured: A clothing item in the Sinewave Shop.* When you find a clothing item that you want to learn more about (such as the shirt pictured above), click on the **item image** in the Sinewave Shop window. If the item is compatible with your current avatar, you'll be given a chance to "try on" the item in real time. info In order for the preview window to work, the preview item must be compatible with your *current* avatar. If you are wearing an animal avatar, for example, you will not be given the option to preview human clothing. Likewise, if you are wearing a feminine avatar, you may not be given the option to preview clothing or shoes rigged to fit masculine avatars. ![A closeup of the Sinewave Shop clothing preview window. Here a female avatar with auburn hair is trying on the same blue shirt. She is also wearing a navy blue wrap skirt. Buttons allow you to purchase the shirt with Gold or Silver, or to add it to your cart.](/img/breakroom/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_007_2026.jpg) *Pictured: A female avatar trying on a new shirt.* Your avatar will appear in the preview window wearing the chosen clothing item. You'll see the cost in Silver and Gold [currency](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md#breakroom-currencies) listed, as well as the item's review score and its creator. Scrolling down will reveal item variations, if available. ![A closeup of the Sinewave Shop preview window camera controls. The buttons along the top allow you to focus on your avatar's feet, body, or head. You can also adjust your camera position and zoom level.](/img/breakroom/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_008_2026.jpg) *Pictured: The preview window camera controls.* You can use the **camera controls** located in the bottom right corner to inspect your avatar from all angles. | Button | Function | | -------------- | -------------------------------------------- | | Legs/feet zoom | Camera will focus on the avatar's feet. | | Body zoom | Camera will focus on the avatar's body. | | Head zoom | Camera will focus on the avatar's head/face. | | Zoom in | Camera will zoom in closer to the avatar. | | Zoom out | Camera will pull back from the avatar. | | Rotate left | The avatar will rotate left. | | Rotate right | The avatar will rotate right. | | Pan up | The camera will pan upward. | | Pan down | The camera will pan downward. | ##### Completing your purchase[​](#completing-your-purchase "Direct link to Completing your purchase") Once you're satisfied with the way the item looks, you can purchase it directly by clicking the **Buy button. Y**ou will be asked to confirm your purchase. If the item is an article of clothing, you'll be given the option to wear the item immediately or file it away in your Inventory. ![A closeup of the Sinewave Shop cart. It is populated by a single item, a red sheath dress. Toggles at the top allow you to select whether you want to pay for the item using Gold or Silver, while buttons on the bottom allow you to clear the cart, check out, or continue shopping.](/assets/images/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_009_2026-ac482a1bb1888ea48adc4d6cc0374286.jpg) *Pictured: The Sinewave Shop checkout screen.* If you prefer, you can add the item to your shopping cart by clicking the **Add To Cart button**. Once you're ready to check out, you can click the **Cart button** in the top right corner of the Sinewave Shop window, or click the **shopping cart icon** in your [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). Both will take you to the same checkout window, where you can review your shopping cart, change the type of currency you want to spend (if applicable), and finalize your purchase. #### Opening bundles[​](#opening-bundles "Direct link to Opening bundles") Some items come packaged in *bundles*. Bundles can contain multiple items, and will need to be unpacked before you can access their contents. ![A closeup of a bundled item and its associated action menu.](/assets/images/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_010_2026-9ddc5f5e70fd838be7f5636533a93b8e.jpg) *Highlighted: The location of the Use button.* To open a newly purchased bundle, follow these steps. 1. Click the **Inventory button** located in the [bottom toolbar](/getting-started/ui-tour.md#the-bottom-toolbar). This will launch the Inventory window. 2. In the Inventory window, locate the **bundle** you want to open and click on it. In the action menu that appears, click the **Use button**. ![A screenshot of two windows displayed next to each other. On the left is the Inventory window, where a single bundle icon is visible. On the right is the Bundle Detail window corresponding to this bundle. The bundle contents are listed in the window, while buttons at the bottom allow you to \"Get\" the bundle contents, or \"Cancel\" the bundle opening.](/assets/images/Breakroom_GETTING_STARTED_SINEWAVE_SHOP_011_2026-77128895c57da8aebb5fe5fc835e8316.jpg) *Highlighted: The location of the Get button.* A second window will appear, containing information about the items inside the bundle. Click the **Get button** at the bottom of this second window. This will extract the items into your Inventory. --- ### Helpful terms ![Students are gathered in a dimly lit museum showroom, where several artifacts from world religions are displayed. A young male teacher with fair hair is speaking, and several students have their hands raised.](/assets/images/Breakroom_Generic_002_2026-1579d1bfb927cb1edc2aa443ea3c018b.jpg) #### Overview[​](#overview "Direct link to Overview") If you're new to the Breakroom platform (or to virtual worlds in general), you'll need to master some new tech jargon. Here are some key terms that will help you understand the concepts detailed in our [Getting Started](/getting-started.md) section, as well as communicate with our [Customer Success Team](/help/where-to-find-support.md) and other Breakroom users. #### Virtual experience terms[​](#virtual-experience-terms "Direct link to Virtual experience terms") ##### **World**[​](#world "Direct link to world") When Breakroom [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) purchase a subscription, we provide access to a standalone instance of Breakroom, which we call a *World*. Client Worlds are completely disconnected from one another, and users can't enter your World unless you invite them or otherwise [grant access](/opening-the-doors/creating-and-managing-user-accounts.md). Breakroom Worlds can contain multiple [Regions](/getting-started/helpful-terms.md#region). info In our older technical documentation, you may see Worlds referred to as *Grids.* ##### Region[​](#region "Direct link to Region") Breakroom [Worlds](/getting-started/helpful-terms.md#world) can contain multiple *Regions*. It may be helpful to think of Regions as separate "rooms" within a World. Regions are generally disconnected from one another, but you can enable ways for users to travel between them (such as activating the [Explore window](/exploring-breakroom/using-the-explore-window.md) or setting up [Teleport Portals](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-teleport-portal.md)). Breakroom offers a wide selection of [Region templates](/building-new-worlds/region-template-descriptions.md), which are plug-and-play areas designed to host different kinds of eventsβ€”everything from conference halls to neon-lit music venues. Clients with access to 3D assets can also design [custom Regions](/advanced-tutorials/uploading-your-own-region.md) and upload them to their World. ##### Avatar[​](#avatar "Direct link to Avatar") When you log in to Breakroom, you are given control over a graphical representation of yourself called an *avatar*. Avatars can be used to explore the virtual World and interact with other people. You can customize the way your avatar looks by selecting a [starter avatar](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md) or by using the tools available in the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md). ##### UI[​](#ui "Direct link to UI") This abbreviation stands for *user interface*, and refers to all of the menus, maps, buttons, and windows that appear on your screen. World Owners can use the [Dashboard](/creating-custom-experiences/ui-customization-options.md) to enable or disable specific UI elements for end users. A key part of the UI consists of Breakroom's [conference system](/getting-started/using-the-conference-system.md), which allows users to access voice chat, webcam and screen share, emojis, and other communication tools. ##### Sinewave Shop[​](#sinewave-shop "Direct link to Sinewave Shop") The [*Sinewave Shop*](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md) allows users to browse through a content library full of avatar accessories, gestures, animations, and virtual furniture, much of it provided by community creators or by Sinewave. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can [filter](/creating-custom-experiences/filtering-the-sinewave-shop.md) the Shop contents for end users, or [disable access](/creating-custom-experiences/ui-customization-options.md) to the Shop entirely. ##### Inventory[​](#inventory "Direct link to Inventory") Your *Inventory* contains all of your virtual belongings, such as any clothing or other accessories you've purchased to use on your avatar. Any virtual assets [you upload](/advanced-tutorials/uploading-your-own-virtual-objects.md) to Breakroom will also appear in your Inventory. ##### Gestures[​](#gestures "Direct link to Gestures") *Gestures* are [animations](/getting-started/controlling-your-avatar.md#gestures) that can be acted out by one or more avatars. By dancing, laughing, and interacting with other users, you can enrich your virtual experience and forge connections. #### Administrative terms[​](#administrative-terms "Direct link to Administrative terms") ##### Dashboard[​](#dashboard "Direct link to Dashboard") The *Dashboard* is a web portal that allows [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) to customize their Breakroom World, prepare for events, and manage user accounts. Our [Dashboard tour](/building-new-worlds/breakroom-dashboard-tour.md) offers a concise overview of the available options. ##### Seats[​](#seats "Direct link to Seats") *Seats* are otherwise known as user licenses, and represent the number of active user accounts that a Breakroom World can accommodate. In addition to the *persistent seats* included with each Breakroom subscription, [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can add *temporary seats* through the use of [Daily Passes](/opening-the-doors/seats-and-concurrency.md). Each seat is assigned a specific *type*. Seat types include Administrators, Developers, etc., and correspond to different [World-level user permission levels](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md). ##### Concurrency[​](#concurrency "Direct link to Concurrency") *Concurrency* refers to the number of simultaneous users a Breakroom World can accommodate. Please note that a Breakroom account's concurrency cap may be different than its total [seat](/getting-started/helpful-terms.md#seats) count. ##### Desktop applications or desktop viewers[​](#desktop-applications-or-desktop-viewers "Direct link to Desktop applications or desktop viewers") Breakroom provides [*desktop applications*](/getting-started/helpful-terms.md#desktop-applications) for both Windows and macOS. When using a desktop viewer, there are no additional fees for user access. However, users will need to install the Breakroom app on a computer equipped with hardware that can [effectively render](/help/system-requirements.md) 3D worlds. ##### World Stream[​](#world-stream "Direct link to World Stream") [*World Stream*](/getting-started/helpful-terms.md#world-stream) is a cloud-based streaming solution for users who might not have access to advanced graphics processing hardware. World Stream can be run on any supported Internet browser, so users can access Breakroom from both desktop and mobile devices. World Stream access must be purchased on a per user/per time basis using a digital currency known as [*World Credits*](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md)*.* ##### Breakroom Toolkit[​](#breakroom-toolkit "Direct link to Breakroom Toolkit") The [*Breakroom Toolkit*](/getting-started/helpful-terms.md#breakroom-toolkit) consists of plug-and-play items designed to help [World Owners, Administrators, and Developers](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) add branding, media, and functional engagement to Regions. The Toolkit includes media displays, collaborative tools, interactive effects, and no-code gamification. ##### Conference system[​](#conference-system "Direct link to Conference system") Breakroom's [*conference system*](/getting-started/using-the-conference-system.md) consists of voice chat, webcam streaming, and screen sharing, as well as navigation, moderation, interaction, and scheduling tools. The conference system come pre-installed in most [Region templates](/building-new-worlds/region-template-descriptions.md), and can be [added](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) to any Region. ##### Moderator tools[​](#moderator-tools "Direct link to Moderator tools") Key event coordinators and stakeholders will have access to [moderator tools](/running-your-event/moderator-tools.md), which allow Moderators to broadcast messages, teleport single users or crowds, manage audience questions, control the audio stream, and assist with presentations. ##### Breakroom for Training[​](#breakroom-for-training "Direct link to Breakroom for Training") [*Breakroom for Training* ](/getting-started/helpful-terms.md#breakroom-training)is a comprehensive learning management system that allows [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) to facilitate online learning. Course designers can create touchback points and track student progress via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md), as well as manage instructor access to in-world tools. --- ### Keyboard shortcuts #### Overview[​](#overview "Direct link to Overview") In addition to the many point-and-click functions built into Breakroom, there are dozens of keyboard shortcuts that can make getting around the Metaverse a bit easier. [World Stream](/opening-the-doors/world-stream/world-stream-keyboard-shortcuts.md) also features variations on these. #### Toggle full-screen[​](#toggle-full-screen "Direct link to Toggle full-screen") To toggle between full-screen and windowed mode, press the **F11 key** on Windows, or **Command (⌘) + F** on MacOS. #### Toggle the UI[​](#toggle-the-ui "Direct link to Toggle the UI") Press the **F9 key** or **Alt + U** on Windows, or **Command (⌘) + U** on MacOS to toggle the [user interface](/getting-started/ui-tour.md) on and off. This will also clear any [seat tags](/getting-started/using-the-conference-system.md#seats-and-gestures) that may be hovering over unoccupied chairsβ€”useful for decluttering Regions when you want to take [photographs](/exploring-breakroom/snapshots.md) or capture video. #### Additional shortcuts[​](#additional-shortcuts "Direct link to Additional shortcuts") | Windows Command | MacOS Command | Result | | ---------------------- | ---------------------- | ------------------------------------------------------------------------------------------ | | F1 | FN + F1 | Calls up the Support Center. | | F5 | F5 | Calls up the bug report/feedback window. You can also use **Ctrl + Shift + P**. | | F12 | FN + F12 | Calls up your own [user profile](../exploring-breakroom/networking-with-other-users/). | | Ctrl + T | Ctrl + T | Toggles the [text chat](communicating-with-other-users#text-chat) window. | | Ctrl + M *or* Ctrl + ; | Ctrl + M *or* Ctrl + ; | Toggles the Breakroom [email window](communicating-with-other-users#in-world-email). | | Ctrl + F | Ctrl + F | Toggles the [People window](../exploring-breakroom/networking-with-other-users/people). | | Ctrl + E | Ctrl + E | Toggles the [Explore window](../exploring-breakroom/using-the-explore-window). | | Ctrl + Q | Ctrl + Q | Toggles the Quest window. | | Ctrl + I | Ctrl + I | Toggles the [Inventory window](../creating-custom-experiences/using-the-region-editor/). | | Ctrl + O | Ctrl + O | Toggles the [Outfit window](customizing-your-avatar/editing-avatars-in-the-outfit-window). | | Ctrl + S | Ctrl + S | Toggles the [Sinewave Shop window](customizing-your-avatar/using-the-sinewave-shop). | | Ctrl + Space | Ctrl + Enter | Moves your cursor into the [search field](ui-tour#the-search-toolbar). | | Ctrl + H | Ctrl + H | [Teleports](../exploring-breakroom/bookmarks-and-teleport-invites) your avatar back home. | | Ctrl + \` | Ctrl + \ | Launches the [Snapshot feature](../exploring-breakroom/snapshots). | | Ctrl + / | Ctrl + / | Calls up the [Settings panel](settings). | --- ### Language and accessibility #### Overview[​](#overview "Direct link to Overview") Breakroom is committed to hosting events where *everyone* feels included. This includes offering language support and visual accessibility options. #### Language support options[​](#language-support-options "Direct link to Language support options") Language support is built directly into Breakroom. Support offerings may vary based on: * Whether you're logging in on a [desktop application](/opening-the-doors/desktop-viewers.md) or using [World Stream](/opening-the-doors/world-stream.md). * Whether your device is running Windows or macOS. Currently, we offer display language support (such as translated UI components) and keyboard support. Below you will find tables detailing which options are available based on your login method and your computer operating system. ##### Desktop app support[​](#desktop-app-support "Direct link to Desktop app support") | Language | Desktop app | | -------------------- | ------------------- | | Korean | Language & keyboard | | Brazilian Portuguese | Language & keyboard | | German | Language & keyboard | | French | Language & keyboard | | Spanish | Language & keyboard | | Mandarin | Language & keyboard | | Japanese | Language & keyboard | ##### World Stream support[​](#world-stream-support "Direct link to World Stream support") | Language | Windows | macOS | | -------------------- | ------------------- | --------------------------- | | Korean | Language only | Language only | | Brazilian Portuguese | Language & keyboard | Language & keyboard | | German | Language & keyboard | Language only | | French | Language & keyboard | Language & keyboard | | Spanish | Language & keyboard | Language & partial keyboard | | Mandarin | Language only | Language only | | Japanese | Language only | Language only | ##### Changing the Breakroom display language[​](#changing-the-breakroom-display-language "Direct link to Changing the Breakroom display language") ![The login screen of the Breakroom desktop application. Highlighted: The Language drop-down menu.](/assets/images/Breakroom_GETTING_STARTED_ACCESSIBILITY_001_2026-b4167bf2e2eac1e41aa2c1fb190681da.jpg) *Pictured: Breakroom's display language can be changed by accessing the Language drop-down menu prior to login.* To select your Breakroom display language, follow these steps: 1. Launch the Breakroom desktop application or World Stream. 2. On the login page, click the **Language drop-down menu** and select the display language you would like to use. 3. Enter your account credentials and click the **Login button**. #### Visual accessibility options[​](#visual-accessibility-options "Direct link to Visual accessibility options") warning This section is currently under construction. In the meantime, the following links may be of assistance. For individual users: * [Changing the default UI scale and text chat size](/getting-started/settings.md#ui-settings) For World Owners and World Administrators * [Changing the default UI scale](/creating-custom-experiences/ui-customization-options.md#changing-the-default-ui-scale) * [Customizing the UI colors](/creating-custom-experiences/ui-customization-options.md#customizing-the-ui-colors) * [Enabling and disabling UI elements](/creating-custom-experiences/ui-customization-options.md#enabling-or-disabling-ui-functions) --- ### Reporting issues [YouTube video player](https://www.youtube.com/embed/neIspZnbSnY) #### Overview[​](#overview "Direct link to Overview") Despite our best efforts, sometimes things in the Metaverse can get a little wonky. If you run into a glitch on your journey, or if you encounter an abusive user, the best thing you can do is file a report. Our team will review your information and take action if necessary. #### Reporting bugs[​](#reporting-bugs "Direct link to Reporting bugs") Bug reports help our team identify and address tech issues on the platform. When filing a report, please be sure to include as much information as possible about the bug, including: * What you were trying to accomplish when the bug occurred * What you expected to happen, and what happened instead * Any steps you took prior to encountering the bug Including a log file and a screenshot of the bug can be very helpful. You can do this by ensuring that the **"Include a log file"** and **"Include a screenshot" options** are checked before you click the **Send Feedback button**. ##### Reporting a bug on the desktop app[​](#reporting-a-bug-on-the-desktop-app "Direct link to Reporting a bug on the desktop app") If you're using the Breakroom desktop viewer, you can access the bug report window by pressing the **F5 button** on your keyboard, or by pressing **Ctrl + Shift + P**. ##### Reporting a bug on World Stream[​](#reporting-a-bug-on-world-stream "Direct link to Reporting a bug on World Stream") If you're accessing Breakroom using World Stream, you can access the bug report window by clicking the **FN** or **FN Keys button** at the top of the screen, and then clicking the **F5 button**. #### Reporting users[​](#reporting-users "Direct link to Reporting users") If you encounter a user who is behaving in a rude, aggressive, or demeaning way, or who is otherwise violating Breakroom's Terms of Service, we encourage you to file an abuse report. You can do so by clicking on the **problematic user** and selecting **Abuse Report** in the action menu that appears. You can also mute the user by repeating the steps above, and selecting **Mute/Unmute** in the action menu. If the user is no longer available for you to click, you can file an abuse report using the bug report form, which can be accessed using the [steps detailed above](/getting-started/reporting-issues.md#reporting-a-bug-on-the-desktop-app). Please uncheck the **"This is a bug report" option** when submitting the form. info In addition to contacting Breakroom about abusive users, we encourage you to contact your own Breakroom World team in accordance with your institution's policies and support procedures. --- ### Settings [YouTube video player](https://www.youtube.com/embed/0CP1NtX9aHE) #### Overview[​](#overview "Direct link to Overview") The Settings window contains advanced graphics, media, camera, and UI options that you can use to customize your personal Breakroom experience. Any changes you make through the Settings window will apply only to your personal [desktop viewer](/opening-the-doors/desktop-viewers.md) or [World Stream](/opening-the-doors/world-stream.md) session. #### Opening the Settings window[​](#opening-the-settings-window "Direct link to Opening the Settings window") ![A closeup of the top toolbar of the Breakroom UI. The main menu is expanded to show all available functions, and the Settings button is highlighted.](/assets/images/Breakroom_GETTING_STARTED_SETTINGS_001_2026-12d80332ff728cda834fd6672f1c4dbd.jpg) *Highlighted: The location of the Settings button.* You can open the Settings window by clicking the **Menu > Settings button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar), or by pressing **Ctrl + /** on your keyboard. ![A closeup of the Settings button accessible on the upper right corner of the Breakroom login screen.](data:image/jpeg;base64,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) *Pictured: The Settings button on the login screen.* You can also access the Settings window prior to logging in by clicking the **Settings button** in the top right corner of the Breakroom login screen. The Settings window contains several tabs. Below, you'll find a brief overview of the options available under each tab. #### Graphics settings[​](#graphics-settings "Direct link to Graphics settings") ![A closeup of the Graphics tab. The UI for this tab is described below.](/img/breakroom/Breakroom_GETTING_STARTED_SETTINGS_003_2026.jpg) The Graphics tab allows you to customize your visual experience in Breakroom. You can maximize your graphics settings in order to fully enjoy Breakroom's virtual Regions, or reduce your graphics requirements to accommodate lower-end hardware. Key settings include: | Setting | Function | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Setting | Function | | Quick-adjust buttons | These buttons let you switch between a light graphics load (Low/Medium) and a heavier graphics load (High/Ultra) with a single click. | | Advanced Options | The sliders and check boxes located under Advanced Options allow you to make specific, granular changes to your graphics configuration. | | Framerate | This drop-down menu lets you set a target framerate. If set to a chosen value, Breakroom will attempt to meet this framerate, but will not exceed it. | | vSync | This drop-down menu can be used to enable or disable vSync. vSync helps your computer synchronize framerate with your monitor's refresh rate, so disabling this option may result in graphical "tearing." Generally, we do not recommend turning this off. | | Max Loaded Avatars | This drop-down menu lets you specify the maximum number of avatars that will be rendered in-world. Setting this to a lower value can help if you are dealing with a slow connection or using a computer with lower-end graphics capability. | | Display Mode | On the desktop application, these buttons allow you to toggle Breakroom between full-screen and windowed mode. | #### UI settings[​](#ui-settings "Direct link to UI settings") ![A closeup of the UI tab. Functions included under this tab are described below.]() The UI tab allows you to customize certain aspects of [Breakroom's UI](/getting-started/ui-tour.md). | Setting | Function | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Setting | Function | | Interface size buttons | These buttons let you reduce or increase the size of the [Breakroom UI](ui-tour) elements that frame your screen. | | Chat Text Size | This slider allows you to adjust the [chat window](communicating-with-other-users#text-chat) text size independently of other UI elements. | | "Enable Login to Preview" option | This option makes it possible to log in to the preview server. | | "Enable Highlight Effect" option | This option toggles the highlight "aura" that surrounds clickable objects and avatars when your mouse passes over them. | | "Prompt on Mouselook" option | This option enables or disables the prompt that appears when you use your mouse scroll wheel to transition into [mouselook](controlling-your-camera#mouselook). | | "Enable Camera Tooltips" option | This option enables or disables the camera tips that appear on screen. | | "Show name tag of yourself" option | This option toggles the visibility of your own overhead name tag. (Please note that others will always be able to see your name tag.) | info World Owners can make global changes to the default UI scale by visiting the World Customization tab on the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). #### Controls settings[​](#controls-settings "Direct link to Controls settings") ![A closeup of the Controls tab. The UI for this tab is described below.](/assets/images/Breakroom_GETTING_STARTED_SETTINGS_005_2026-82344b4fbca8fae3a1fa033402550690.jpg) The Controls tab allows you to toggle various input options. You can also adjust your mouse and input sensitivity and customize the way your avatar responds to certain movement commands. | Setting | Function | | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Setting | Function | | "Click to move" option | This option toggles the [click to move](controlling-your-avatar#click-to-walk) feature. | | "Can click on self" option | This option controls whether you can click on your own avatar. | | "Use Gamepad" option | This option enables or disables the use of a connected gamepad. | | "Inverse Y Axis in Mouselook" option | This option allows you to inverses the Y axis while in [mouselook](controlling-your-camera#mouselook). | | "Walk/Run State" option
(Previously "Always Run mode") | This option toggles your movement style between "walk *or* run" and "always run" mode. This option will persist between login sessions and across Region teleports until you disable it. It can also be enabled by pressing **Ctrl + R** on your keyboard. | | "Running: Switch" option
(Previously "Make Run Toggleable") | This option allows you to toggle between normal movement and "always run" mode using your keyboard. "Always run" can be toggled by pressing the **Shift key** once. | | "Crouch: Switch" option
(Previously "Make Crouch Toggleable") | This option allows you to toggle between normal locomotion and persistent crouching by pressing the **C key** once. Your avatar will then crouch until you press the C key again. | | Mouse Sensitivity | This slider adjusts the sensitivity (speed) of your mouse within the Breakroom viewer or screen. | | Input Sensitivity | This slider adjusts the sensitivity (speed) of other input devices, such as gamepads or joysticks. | | Movement Speed | This slider adjusts your avatar's default walk speed, so you can walk (and consequently run) slower or faster. | | Turning Speed | This slider adjusts your avatar's default turning speed. | #### Audio settings[​](#audio-settings "Direct link to Audio settings") ![A closeup of the Audio tab. The UI for this tab is described below.](/assets/images/Breakroom_GETTING_STARTED_SETTINGS_006_2026-54fb334a06338654465c61d8e0aa94c6.jpg) The Audio tab allows you to independently control the volume of the different types of media that might play in-world. You can also use the **Audio Test** and **Video Test buttons** to conduct [real-time tests](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md) on your audio/visual equipment, and use the **drop-down device selection menus** to [switch between active devices](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#the-change-devices-button). | | | | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | UI component | Function | | Reset to Default button | Resets all volume and device settings to the default configuration. | | Audio Test button | Launches the [Audio Test panel](using-the-conference-system/troubleshooting-audio-and-video-issues#the-mic-and-cam-test-button). | | Video Test button | Launches the [Video Test panel](using-the-conference-system/troubleshooting-audio-and-video-issues#the-mic-and-cam-test-button). | | Master Volume slider | Adjusts the overall volume of the Breakroom application. | | Music Volume slider | Adjusts the volume of any music streamed on the Breakroom platform. | | UI Volume slider | Adjusts the volume of the UI interactivity sounds. | | SFX Volume slider | Adjusts the volume of any special effects sounds. | | Voice Volume slider | Adjusts the voice streaming volume. | | Mic Sensitivity slider | Adjusts your own microphone's sensitivity, impacting your voice volume. | | Microphone Device menu | Allows you to select which microphone you want to use on Breakroom. | | Playback Device menu | Allows you to select which speakers you want to use. | | Webcam Device menu | Allows you to select which camera you want to use. | #### Miscellaneous settings[​](#miscellaneous-settings "Direct link to Miscellaneous settings") ![A closeup of the Miscellaneous tab. The UI for this tab is described below.](/assets/images/Breakroom_GETTING_STARTED_SETTINGS_007_2026-468954c2bdb567623842e4b2c2c677f3.jpg) The Misc tab allows you to enable or disable additional functions within Breakroom. | Setting | Function | | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Setting | Function | | Caching options | These controls can be used to clear your graphics cache and change the cache storage location on your device. | | "Media Screens" option | This option lets you enable or disable all in-world web browsers and video players. This includes the [Breakroom web browser](../creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-web-browser) and [Slido integration](../running-your-event/moderator-tools/participation). Generally, we do not recommend turning this off. | | "Enable Debug Mode" option | This option enables or disables Lua logging on [Live servers](../advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server). Useful for Lua programmers debugging their code. On Windows machines, the log is available at C:\Users\\AppData\LocalLow\Sine Wave Entertainment Ltd\sinespace\Player.log. | #### VR settings[​](#vr-settings "Direct link to VR settings") danger The settings available under this tab pertain to VR experiences in Breakroom. VR is only available on the Breakroom [desktop application](/opening-the-doors/desktop-viewers.md), and requires access to [advanced computer equipment](/help/system-requirements.md). **In general, we do not recommend the use of VR equipment with Breakroom at this time.** #### **Camera Controls settings**[​](#camera-controls-settings "Direct link to camera-controls-settings") ![A closeup of the Camera Controls tab.](/img/breakroom/Breakroom_GETTING_STARTED_SETTINGS_008_2026.jpg) The Camera Controls tab allows you to customize the way your in-world camera behaves. You can also save your custom settings for future use and to share with others. ##### Profile settings vs. global settings[​](#profile-settings-vs-global-settings "Direct link to Profile settings vs. global settings") Under the Camera Controls tab, you will see two groups of camera settingsβ€”**Profile Settings** and **Global Settings**. It is important to note that the camera settings listed under **Profile Settings** (from here referred to collectively as a *camera profile*) can be [reset](/getting-started/settings.md#resetting-the-camera-profile-to-default) with a single click. Camera profiles can also be [saved](/getting-started/settings.md#saving-camera-profiles), exchanged with other users, and [loaded](/getting-started/settings.md#loading-camera-profiles) on demand. On the other hand, the camera settings listed under **Global Settings** *will persist no matter what changes are made to your camera profile*. Global settings *cannot* be saved or exchanged, and will be applied in addition to any camera profile that you create or load. *They also cannot be reset to their default configuration with a single click*. ##### Saving camera profiles[​](#saving-camera-profiles "Direct link to Saving camera profiles") To save your current camera profile, follow these steps: 1. **Log in** to your Breakroom World. 2. Open the Settings window by typing **Ctrl + /** on your keyboard. 3. Click on the **Camera Controls tab**. 4. Click the **Save Profile to New Inventory Item button**. 5. A pop-up will appear confirming that a new **Camera Settings Group object** has been added to your Inventory. Click the **Okay button** to proceed. You can find the saved Camera Settings Group object in your Inventory under **Settings > Camera.** You can save multiple camera profiles and share them with others using [in-world email](/getting-started/communicating-with-other-users.md#receiving-email). ![A closeup of an example user Inventory window, featuring several Camera Settings Group objects. These are represented by yellow box icons containing a question mark.](/assets/images/Camera_Settings_002-6050f212b4a97544c3191f2229aba5b5.jpg) *Pictured: Camera Settings Group objects, located in the Inventory window.* ##### Loading camera profiles[​](#loading-camera-profiles "Direct link to Loading camera profiles") To load a saved camera profile, follow the steps below. 1. **Log in** to your Breakroom World. 2. Click the **Inventory button** in the bottom toolbar. 3. In the Inventory window that appears, locate the **Camera Settings Group object** you want to use. 4. Click on the **Camera Settings Group object**, and an action menu will appear. Click the **Use button**. ![A closeup of the same user Inventory window, with a Camera Settings Group action menu highlighted. The top button, marked \"Use,\" is currently active and thus highlighted.](/assets/images/Camera_Settings_003-cf6eae2d73e35082daa167803f1e9188.jpg) *Pictured: Camera Settings Group objects located in the Inventory window, and the location of the Use button.* ##### Resetting the camera profile to default[​](#resetting-the-camera-profile-to-default "Direct link to Resetting the camera profile to default") To reset your camera profile, follow these steps. 1. **Log in** to your Breakroom World. 2. Open the Settings window by typing **Ctrl + /** on your keyboard. 3. Click on the **Camera Controls tab**. 4. Click the **Reset Camera Profile to Default button**. Please note that clicking this button will **not** change your [global camera settings](/getting-started/settings.md#profile-settings-vs.-global-settings). #### Analytics and Marketing Preferences settings[​](#analytics-and-marketing-preferences-settings "Direct link to Analytics and Marketing Preferences settings") ![A closeup of the Analytics and Marketing preferences tab. Several privacy and marketing options are available here, including the collection of essential and diagnostic data, user analytics, and marketing consent.](/assets/images/Breakroom_GETTING_STARTED_SETTINGS_009_2026-511e3854d126e1517a2b63ba6f8c310a.jpg) The Analytics and Marketing Preferences tab allows you to change your privacy and marketing preferences whenever you like. info Note: World Owners and World Administrators can[ mandate](/opening-the-doors/privacy-policies-eulas-and-data-collection.md) that Analytics and Marketing data be collected from user logins. In such cases, end users will not be able to opt out of certain types of data collection via the Settings panel. --- ### UI tour #### Overview[​](#overview "Direct link to Overview") Breakroom's UI, or *user interface*, contains almost all of the information and tools you'll need to interact in virtual space. When enabled, the UI components will frame the screen. ![A female avatar in professional dress stands facing the camera in a futuristic conference center. On the screen around her are the various toolbars that make up the Breakroom UI.](/assets/images/UI_Tour_2026_001-a4cc05f43768e19876cf02bb5d3261b6.png) *An example of the UI in action. You can press the **F9 key** or **Alt + U (⌘ + U)** to toggle the UI on and off.* The tables below are designed to serve as a quick reference guide for the basic UI components and their functions. You can learn more about using Breakroom's [conference and moderator tools](/getting-started/using-the-conference-system.md) and accessing the [Breakroom for Training system](/getting-started/using-breakroom-for-training.md) in our [Getting Started](/getting-started.md) section. info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every component of the UI pictured above. #### The bottom toolbar[​](#the-bottom-toolbar "Direct link to The bottom toolbar") ![A closeup of the bottom toolbar of the Breakroom UI. This toolbar includes fuctions that assist with in-world communication and navigation.](/assets/images/Breakroom_GETTING_STARTED_UI_Tour_002_2026-ed1ad482bba06e44295e15ef6d8b14fa.jpg) *Pictured: The bottom toolbar, with the Hot Bar drawer extended.* From left to right, the bottom toolbar components include: | UI Component | Function | | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Show/Hide Chat | Toggles the [text chat](communicating-with-other-users#text-chat) window. | | People | Opens the [People window](../exploring-breakroom/networking-with-other-users/people). | | Explore | Opens the [Explore window](../exploring-breakroom/using-the-explore-window). | | Meetings | Opens the [Meetings window](../exploring-breakroom/using-the-meetings-window). | | Outfit | Opens the [Outfit window](customizing-your-avatar/editing-avatars-in-the-outfit-window). | | Shop | Opens the [Sinewave Shop](customizing-your-avatar/using-the-sinewave-shop). | | Inventory | Opens the [Inventory window](../creating-custom-experiences/using-the-region-editor/the-region-editor-advanced-window). | | Hot Bar (drawer) | Allows you to [bookmark items](controlling-your-avatar#installing-gestures-in-the-hot-bar) from your Inventory (clothing, gestures, etc.) for one-click deployment. | #### The top toolbar[​](#the-top-toolbar "Direct link to The top toolbar") ![A closeup of the top toolbar of the Breakroom UI. This toolbar includes both pinnable buttons and a collapsible hamburger menu. The main menu is expanded to show all available functions.](/assets/images/Breakroom_GETTING_STARTED_UI_Tour_003_2026-5fb54d7341347ab40507f16190c1c91b.jpg) *Pictured: Top toolbar with the menu expanded.* The top toolbar can be customized to suit your needs. All listed functions are available for one-click deployment under the expanded **hamburger menu**, and most options can be **pinned** for ease of access. ![A closeup of the top toolbar of the Breakroom UI, with all pinnable buttons activated and visible.](/assets/images/Breakroom_GETTING_STARTED_UI_Tour_004_2026-4eb57c267bb039ebdf86dfcd063a41f2.jpg) *Pictured: The top toolbar, with all button options pinned.* When pinned, from left to right, the top toolbar components include: | UI Component | Function | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Volume | Offers quick access to volume settings. | | Music Stream | Enables or disables the audio stream. | | Edit Region | Opens the [Region Editor](../creating-custom-experiences/using-the-region-editor/). Only visible to users with the appropriate [permissions](../opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions). | | Minimap | Opens the [mini map](ui-tour#the-mini-map). | | Create Bookmark | Allows you to [bookmark](../exploring-breakroom/bookmarks-and-teleport-invites) a Region. | | Snapshot | Launches the [Snapshot feature](../exploring-breakroom/snapshots). | | Mail | Opens the Breakroom [email window](communicating-with-other-users#in-world-email). | | My Regions | Displays a list of [Regions](../building-new-worlds/creating-and-managing-regions) that you own, along with various management options. | | Quests | Opens the Quests window, where you can track your progress on any quests you've started. | | Profile | Opens your [user profile](../exploring-breakroom/networking-with-other-users/). | | Notifications | Displays and allows you to manage notifications. | | Menu | Expands the main function menu. | ![A closeup of actions available under the main menu that cannot be pinned.](data:image/jpeg;base64,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) *Pictured: Unpinned functions available under the main menu.* Additional functions are available through the main menu. These functions cannot be pinned. | UI Component | Function | | ------------ | --------------------------------------------------------------- | | Settings | Opens the [Settings window](settings). | | Full Screen | Toggles full screen mode. | | Help | Opens Breakroom's in-world Support Center. | | Feedback | Opens the [bug report](reporting-issues#reporting-bugs) window. | | About | Accesses app version information. | | Logout | Logs out your current Breakroom session. | #### The mini map[​](#the-mini-map "Direct link to The mini map") ![A closeup of the Breakroom UI mini map, showing a top-down view of the Conference Region.](/assets/images/Breakroom_GETTING_STARTED_UI_Tour_006_2026-ab87f43cb03caaf75bf54fc75b05b199.jpg) *Pictured: The mini map.* When open, the mini map components include: | UI Component | Function | | ------------------ | ------------------------------------------------------------------------------------------------------------------------ | | Mini map window | Provides a general overview of the immediate area. | | Zoom buttons | Adjusts view of the local mini map. | | Region Information | Accessed by clicking directly on the map. Opens the [Region Information](../building-new-worlds/region-settings) window. | #### The search bar[​](#the-search-bar "Direct link to The search bar") ![A closeup of the search bar and associated tools.](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAyAhADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6HfKml/hGOtPPzYrlPHPiz/hH7Zbe2K/bphx38tem7Hqe30rgwOCrZhXjh6CvKX3er8kduPx9DLcNLFYh2jH8fJebNXVPEGn6Lg3l0kRbog+ZvyArE/4WZo/nbNtyU/56bBj+ef0rkvBPw98RfFDVpYdKtmuXU7ri8nbbFECerufx4GScHArvV/Z30+Sf7DF8SPDMmr52Cz+0DBfpt3ZznPbbn2r9PhwzlGEXs8XVcp9bdPkk7fNn5JPizO8c/a4GhGNO+l93820n8kW9J8RabreVtLpHf+4flb8jWj19q8f8ZeBNf+G+sJZ6xaPZz/fhmRtySAH7yOOD/Md8V2fgTxcdbha1uzm9iGQ2P9Yvr9R3+teBnXDKwdD67gZ89Lr1aXe63X5H0mQ8WvHYj6hmFP2dbpuk32s9U+29zrR+eaGXrzTsDnsKTnIzXwJ+jjWUCjqvWnt932zTT8tADdppOnFSY4AxSbTnNVytgNx2NIo+WpPKJXOPal8lugH50+SXYV0REUnXNT/Z24pfspp+zkLmRXKZFJ19+KuLa8daVbUd+TVezfcXMin14pGq+Ldc880fZ09KfsvMOYobS1AUitHyV9KdtHpT9mg5jNETdhzS+S5zxXafDzRrbXfGWm2V2nmW8jMzp/e2ozAfTIr6DXwZ4fXAGh6b/wCAkf8AhW0aKkrmE63I7WPkn7M2elO+yNX1r/whugf9APTf/ASP/Cj/AIQ3QP8AoB6b/wCAkf8AhWn1dGX1nyPkxbP1pVswOpzX1l/whugf9APTf/ASP/Cj/hDdA/6Aem/+Akf+FP2IvrB8nmzU077KnpX1d/whugf9APTf/ASP/Cj/AIQ3QP8AoB6b/wCAkf8AhT9k+4fWF2PlIW6gYxThEozxivqv/hDdA/6Aem/+Akf+FH/CG6B/0A9N/wDASP8Awo9k+4e3XY+Vdg9KNo9K+qv+EN0D/oB6b/4CR/4Uf8IboH/QD03/AMBI/wDCj2L7h7ddj5V20u2vqn/hDdA/6Aem/wDgJH/hR/whugf9APTf/ASP/Cl7F9w+sLsfK22jbX1T/wAIboH/AEA9N/8AASP/AAo/4Q3QP+gHpv8A4CR/4U/YvuH1hdj5V20uK+qf+EN0D/oB6b/4CR/4Uf8ACG6B/wBAPTf/AAEj/wAKPYvuH1hdj5V20ba+qv8AhDdA/wCgHpv/AICR/wCFH/CG6B/0A9N/8BI/8KPYvuH1hdj5V20ba+qv+EN0D/oB6b/4CR/4Uf8ACG6B/wBAPTf/AAEj/wAKPYvuH1hdj5V20Yr6q/4Q3QP+gHpv/gJH/hR/whugf9APTf8AwEj/AMKPZPuH1hdj5V20Yr6q/wCEN0D/AKAem/8AgJH/AIUf8IboH/QD03/wEj/wo9k+4fWF2PlXFGK+qv8AhDdA/wCgHpv/AICR/wCFH/CG6B/0A9N/8BI/8KPZPuH1hdj5V20ba+qv+EN0D/oB6b/4CR/4Uf8ACG6B/wBAPTf/AAEj/wAKPZPuH1hdj5V20Yr6q/4Q3QP+gHpv/gJH/hR/whugf9APTf8AwEj/AMKPZPuH1hdj5V20mK+q/wDhDdA/6Aem/wDgJH/hR/whugf9APTf/ASP/Cj2T7h9YXY+VcUm2vqv/hDdA/6Aem/+Akf+FJ/whvh//oBab/4CR/4UeyfcPrC7HymzY6VH1r6w/wCEL8P/APQC03/wDj/+Jo/4Qvw//wBALTf/AADj/wDiazeHk+o/rC7HyftpMV9Y/wDCF+Hv+gFpn/gHH/8AE0n/AAhfh7/oA6Z/4Bx//E1P1Z9x/WV2Pk0n0ppr60/4Qnw9/wBAHTP/AADj/wDiaP8AhCfD3/QB0z/wDj/+Jo+rvuP6yux8lYo219W6h8PfDmoWctudFsYfMUr5kFukbr7ggA18qYrKpTdO1zWnUVS9iXA25zXh/i/UH1LxHfSuchZDGvsqnA/l+te9iNfTNfP3iW3a08QajEy7Stw5wfQkkfoa/R+CacFia0n8XKrel9f0Py3xCqT+p0Ir4XJ39bafqe3ePrHVNB0Hw/8AC/wpEyyy6d/a2rOjrG1y5UuwZjjhQh4zyNo7Vx7fCm10nwvq19eXLXdz/wAI7Z63amMFBE006rsPJ3YXIzx16cV79rl9oOvfFvT/AAjcaGYtUvtG48QW1y0VzDmFztXHbaCOvO7kYrwjRfG9xrmoz+EtUjVmvLOz8M29zbLt8uOK6XDsCeTt3dMcge5r6nA168qaUFy/DOXeV5au/bR6aOx8fmOGw0azc3zX5oRWto8sVaNrb6p31V3fc6nw7Z6p4o8FeL/hv4sDf234dtTqWmvKVlkgCAFot4J+UhlA54Dn0AHiPhu+fT9esZkbbiVVb/dJwR+Rr6x0rXPD0fxB8ceG7LQDHqmn6NOH12e4aW4usIgcSFuepXByfu9ug+SNGtzdavZQjrJOi/mwrrwM1Xp4iNWPLGSTa0t70dWt7J2vY4sxpvD1cLOlPmnGTinrf3ZLlTdldq9r2ttY+gBbnnNbvhrw7Z6hDql/qdxLBpel2jXdwbdd0rKvZR69ay61vDU9/b3kradrdpoM/lH/AEq+dVhYZHyMGGCD6H8xX4TFRvsf0fKTtoySTQdM1rwp/b+hx6pb20dz9lmtdWjVZQxAIZSvBByB61r+HfAunya9/YGuwapbawyvMrWxjMCxqgYbm5OTk9Ko+LvHEv8Awjdv4XuNf0vX9Zvr6OaYaKira2VvGwbkrnLFgPfn2GbfgP8AsXwn8QNRkbxFZ30CpI1xqDXYMYcxj5S7HAxwMZ7Y9q1skzDmk4vUzLex8Pal8P7vXbNNVjurU2kbi5WMRO8xQZTHJA3evHvUngPw3aeJteWyu3lig8p5C0BAb5RnuCKztF1Kzt/gtc2ct3BFd3Fxpvk27yKJJcSRk7VJycAEnHpW98MtUstF8TG71C6gs7VLeXdLcyiNB8vQsSBS6oq7tIpeH7fwx46t75dAOuWN7b2zXax6xbKsc8a4ztZCRnkdf/1XtY8BrZ+CdL1+0kklEy5uUYgiPJwrDA6ZGOe5Fcs3j7VtQ8OvYaD4b0vwtDf24glvYp3mmELLyqZAwSP855rsP+EustHl8H2YuY720XSprbUrGOUOwjaRANyg8N1Izjofen7rJvJFTSfBiT+CdZ8RXryxRWsTPbxx4zIV+8TnsDgcd81l+E9Hi17xFYafO7pDcSbGaMjcBg9Mg1d/4Tm117SfG85mXTdEj0wabotpdMI3kVWO5trHl3bt1wBVHwtqyaF4i0+/kUtHBMrOF67ehx+GalpKxScncfo2k2ureL00vdKto189rvyN+FkKZ6Yzx6Vr+HtN8K614wHhlovEAv2ubqAXUccX2VfJeUfM/UEiL06kdM1Npv8Awi3h7xFL4jl8Y6M+kw3Ut6I0uAbrLOziPyvvbgWxjrx07VlfCnxBbt4zttc1CWPTba5uLy9d7pxGsSy+a43MTgfeFOyW5PM2tOxHo1voXjXXF07QYtasIoI5Z7y+1mGNYEiQgblKnnr3/wAapzeJPh5PDdi1vtehWFGaPUrix3WkxH8I2jcM9iQBUngDXNO0+1u4tSZ/7J1Owlsria3G5kjkH31AyTgenr3qa40Pw5o+mzXUnjbQDp0MZ8n7LcCWWQgfKoiXkds9cUbrRDu07NmGrBlDDkEZFLQrB1DKcgjIpayNzrvhJ/yULSv+2v8A6KevfNS1g2N5b2cNrJeXU6PKsaMqgIhUMSWI7uox714J8Jf+Sg6V/wBtf/RL17n4it0uvJV9Kur9lyyTWkqRvC3sxdSM+3pzXVS+E4a/xF2TWLW0jtzezRafLOBthuJUVt3Hy9cEjPYmnS6tYw3iWcl5bx3b/cgaVQ7fRc5NcjPoOq7hJfC8vvtGnx2s62Twbtyl9wbzMAghxyuOQeOlS6lpus3cn2URXDW8V1avCd8Ii8pHjYlifnL5Vvbgfjsc51H9sWHnSRfbrbzI0aR081cqqnazEZ4AIIJ7GqEvi7TI7i1AvLV7SaOV/tYuF8tShQbc9MnzPXtWe3h+5XQbyJLZTcPqbXph3KPPQXPmAE9MsgA59gaui3n1LXtLv5LCS2jt4bhCJ2jLKzGLaflY9QG6envQBtQTx3UKSwyLLE43LJGwZWHqCOtSVgaOl7o2mmA6fJM3mXkwEciAAGZ2jXk9WVhjsMc4rXtriWaSVZLZ4FQqFZmUh8qCcYPGCSOfSgCxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVweqa14l8R+KtU0fw3eafpFvpAiW6vL60a6aWaRPMEaIJECqEKksSclsAcGuu1vWLfw/pN1qN0JTb20ZkdYY2kc47Kqgkk9ABXnemeBPEfiLVL3xVc65feDdR1JI4hpunpBII7dN2wTeYjhpvmOWXG3hRnGTLPcy6nTjGpXrOMUlaLkrrmuvs2d/dvfRpXV9WjrfAfia78Rabex6lDDBqum3klheLbEmJpECsHTPO1kdGweRnGTjNfLNfWnhfwzaeEtJWwtGmmBkeaW4uX3yzyudzyO3diT9OwAAAr5Mrkr7K5nKVKVepKgrRvp/XTyXTY0K82+KXhSSZhrFqhchQtwijnA6N/Q/QV6TQVDDBGQe1ejluYVMsxMcRT1tuu66o8TNsspZvhJYWtpfVPs+j/roclZ/tLT2tjb3T+GdPm8W21n9hh15mO8JjAJTHLY9+pPY4rx611G5stRhv4ZWS7hlWdJepDg7g3PfPNes698LdP1SVprOQ2EzHLKo3IT9O34Vzf/AAp/UvOwL218r+98278sf1r9YwGdZLGDlCXI5bp3+7qra7LTyPxTM+H+IJVIwnH2ijs42+/o76K7f3nU65+0fJqel6m1p4YsNM8R6rai0vtahYl5EwA21cfKSB6nGB1wK5/4W+FJDcDWLlCkagi3Vh94kYLfTHT61r6H8KbDT5Vmvpmv3U5Cbdsf4jvXcKoRQqgKoGAB0FfL5rnmEp0J4TLFpP4pa7dlfXbTslsfZZLw7jqmJhjs4lrD4Yq2+93bS99erb3egtRzQR3MTRTRrLGwwyOMg/gakor87P1Er2en2unqVtraG3DdfKQLn64pfsNt5c0f2eLZMSZF2DDk9SR3/Gp6KAIGsrd1hVoImWEgxAoMIR0K+mPanzQx3ETRyxrJGwwyOMgj0IqSigBscaxoqIqoijAVRgAegpgtoVuGnESCZl2mQKNxHpn0qWigCK4t4bqPZNEkyZB2yKGGR0PNSUtFAFObSLG4uBPJZ28k/wDz0aJS354qzJGk0bRyKrow2srDIIPUEU+igBkUKQRrHGixxqMKigAAegFVTo9g1yLg2VuZ8583yl3Z9c4q7SUAFFLRQB1fwpkSHx/pLOwUZkXJ9TE4A/Mivo+vkZWaNgykqynIIOCK1R4w15Rga3qIH/X3J/jW0J8qsYVKbm73PqSivlz/AITDX/8AoN6l/wCBcn+NH/CYa/8A9BvUv/AuT/Gr9quxn7B9z6jor5c/4TDX/wDoN6l/4Fyf40n/AAmGv/8AQb1L/wAC5P8AGj2q7B7B9z6kor5b/wCEw1//AKDmpf8AgXJ/jR/wmGvf9BvUv/AuT/Gj2q7B7B9z6kor5b/4TDX/APoOal/4Fyf40f8ACYa//wBBvUv/AALk/wAaParsHsH3PqSivlv/AITDX/8AoN6l/wCBcn+NH/CYa/8A9BvUv/AuT/Gj2q7B7B9z6kor5b/4TDX/APoOal/4Fyf40f8ACYa//wBBzUv/AALk/wAaParsHsH3PqSivlv/AITDX/8AoN6l/wCBcn+NH/CYa/8A9BzUv/AuT/Gj2q7B7B9z6kor5b/4TDX/APoOal/4Fyf40f8ACYa//wBBzUv/AALk/wAaParsH1d9z6kor5b/AOEw1/8A6Depf+Bcn+NH/CYa/wD9BvUv/AuT/Gj2q7B9Xfc+pKK+W/8AhMNf/wCg5qX/AIFyf40f8Jhr/wD0G9S/8C5P/iqParsHsH3PqSivlv8A4TDX/wDoN6l/4Fyf40f8Jhr/AP0HNS/8C5P8aParsHsH3PqSivlv/hMNf/6Dmpf+Bcn+NH/CY6//ANBzUf8AwLk/xo9quwewfc+pKK+W/wDhMNf/AOg5qX/gXJ/jR/wmOv8A/Qc1L/wLk/xo9quwewfc+pKK+Wv+Ew1//oOal/4Fyf40f8Jjrw/5jmpf+Bcn+NHtV2D2D7n1LRXywfGWv/8AQc1LH/X3J/jTf+Ey1/8A6Dmpf+Bkn+NR9YXYf1d9z6por5W/4TLX/wDoOal/4Fyf/FU1vGmv/wDQc1L/AMC5P8aPrC7B9Xfc+q6K+Uv+E08Qf9B3Uv8AwMk/+Ko/4TPxD/0HdS/8DJP8aPrC7D+rPufVtFfKX/CaeIP+g7qf/gZJ/wDFUn/CZ+IP+g7qX/gZJ/8AFUfWF2D6u+59XUV8pf8ACZ+IP+g7qf8A4GSf/FUn/CaeIP8AoO6l/wCBkn+NH1hdhfV33Pq6ivlH/hM/EH/Qd1L/AMDJP/iqP+Ez8Q/9B3Uv/AyT/Gj6wuwfV33PquWVIY3kkYJGgLMzdAB1NfHVat14n1q+t3gudXv7iFuGjluXZT9QTzWZtrCpU9pax0Uqfs73ZdpO1FFMoX1ooooADSetFFAC0lFFAC0naiigBfWiiigBD1o9aKKADtRRRQAtJRRQAveiiigBKSiigA7Ud6KKAFobpRRQAd6KKKACkoooGFHeiigAP9aVulFFABRRRQAlFFFABSdzRRQMU0GiigAooooEIaU9KKKACk7miigYtJ60UUCD1prdaKKiWwxtIelFFZDBulRnrRRQUgpD0oooGLRRRQSJQelFFAwpR1oopoGLSnpRRSA//9k=) *Pictured: The search toolbar.* The search bar located at the top of the screen has several tools associated with it. These include: | UI Component | Function | | --------------- | ---------------------------------------------------------------------- | | Connection icon | Details your connection status when clicked. | | Clock | Displays the current UTC time, as well as other time zones if clicked. | | Search bar | Allows you to search for Regions, users, and Sinewave Shop items. | #### Conference system components[​](#conference-system-components "Direct link to Conference system components") You may not see the following tools or options in every Region. For more detailed information about using Breakroom's [conference and moderator tools](/getting-started/using-the-conference-system.md) and accessing the [Breakroom for Training system](/getting-started/using-breakroom-for-training.md), please consult our linked documentation. ##### Conference toolbar[​](#conference-toolbar "Direct link to Conference toolbar") ![A closeup of the conference toolbar. This toolbar includes fuctions that assist with in-world media sharing and event participation.](/assets/images/UI_Tour_2026_008-d0f438e7a5ab953a2b0028eda38c47a4.png) *Pictured: The conference toolbar.* The conference toolbar allows you to access voice chat, share your screen, react with emojis, and more. Here's a brief overview of the UI. | Button | Function | | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Microphone | Toggles your[ microphone](ui-tour#voice-chat) within voice-enabled zones. | | Presentation | Toggles your [webcam](ui-tour#webcam-streaming) or [screen sharing](ui-tour#screenshare) within video-enabled zones. | | Screen Appearance | Allows you to [control](ui-tour#screen-appearance) where video streamed by other users appears on *your* screen. | | Device Settings | Allows you to [change your device settings](using-the-conference-system/troubleshooting-audio-and-video-issues#the-change-devices-button) and [troubleshoot](using-the-conference-system/troubleshooting-audio-and-video-issues) common audio and video issues. | | Emoji | Opens the [emoji menu](ui-tour#raise-hand-and-emoji-buttons), where you can choose from several animated emojis (such as clapping hands). These emojis will float over your avatar's head. | | Animations | Allows you to emote via single-person [gestures](controlling-your-avatar#gestures) while seated in a conference area. | | Camera | Adjusts your camera angle while seated in a conference area. | | Raise Hand | Causes a hand icon to appear over your head until dismissed. Useful for impromptu polls, audience questions, and more. | | Question | Allows you to submit a question for [Moderator review](../running-your-event/moderator-tools/). | ##### Start Here panel[​](#start-here-panel "Direct link to Start Here panel") ![A closeup of the Start Here panel, expanded to show all available functions.](/assets/images/UI_Tour_2026_009-590f6e3638f7e8f1d6d54b317919fe04.png) *Pictured: The Start Here panel.* The Start Here panel comes pre-equipped in most Breakroom [Region templates](/building-new-worlds/region-template-descriptions.md). Depending on the setup of the Region, you may be able to: * [Teleport](/getting-started/using-the-conference-system.md#navigating-an-event) to key areas of interest * Take an animated [camera tour ](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-tour-cameras.md)of the Region * Select an avatar from the [default avatar collection](/creating-custom-experiences/selecting-default-avatars/default-avatar-collections.md) * Teleport to a specialized triage location for technical support To view all available options, click the **expansion arrow** located at the bottom. ###### Areas of Interest[​](#areas-of-interest "Direct link to Areas of Interest") ![A closeup of the Areas of Interest window, displaying one-click teleport buttons to several Regional destinations.](/assets/images/UI_Tour_2026_011-3cd98e31de29cc1acda1c04350ea8d2f.png) *Pictured: An example Areas of Interest window.* Clicking the **Signpost / Areas of Interest button** will open the Areas of Interest window. Here you'll find one-click teleport access to key event spaces. You can right-click on this window and drag it anywhere you like. ###### Camera Tour[​](#camera-tour "Direct link to Camera Tour") Clicking the **Eye /** **Take Tour button** will launch a preprogrammed Region tour. To exit the tour, press the **Esc key**. ###### Avatar Selection[​](#avatar-selection "Direct link to Avatar Selection") ![A closeup of the avatar selection menu. Ten different avatars are displayed, including a diverse range of body types, genders, and cultural clothing items.](/img/breakroom/Choosing_Starter_002.jpg) *Pictured: The avatar selection menu.* Clicking the **Silhouette / Avatar Selection button** will open the avatar selection menu. To change your look, click the **Click to select button** corresponding to the [starter avatar](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md) you'd like to use. You can right-click on this window and drag it anywhere you like. ###### Triage[​](#triage "Direct link to Triage") If available, clicking on the **Question mark / Triage button** will teleport your avatar directly to a designated tech support area. ##### Breakroom for Training widget and Moderator tools[​](#breakroom-for-training-widget-and-moderator-tools "Direct link to Breakroom for Training widget and Moderator tools") ![A closeup of the Breakroom for Training widget (a round widget marked by a graduation cap, divided into four function buttons) and the Moderator tools button (an expandable menu marked by a wrench icon).](/assets/images/UI_Tour_2026_010-3878ebbd531bd019f97fa6665e01e5cb.png) *Pictured: The Breakroom for Training widget and the Moderator tools button.* If the [Breakroom for Training system](/getting-started/using-breakroom-for-training.md) is enabled in a Region, you'll see the Breakroom for Training widget appear on your screen. You can right-click on this widget and drag it anywhere you like. If you have access to the [Moderator tools](/running-your-event/moderator-tools.md), clicking the **Wrench / Moderator tools button** will open the associated menu. --- ### Using Breakroom for Training [YouTube video player](https://www.youtube.com/embed/Opl3PJuSK4U) #### Overview[​](#overview "Direct link to Overview") The Breakroom for Training system is designed to support online learning through the streamlined management of educational content. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and other stakeholders can create student- or Instructor-led courses consisting of structured learning modules, waivers, and quizzes, and integrate these touchpoints into live online instruction. This section will show you how to access the Breakroom for Training tools as a student. For more information about [creating](/breakroom-for-training/creating-and-managing-courses.md) Breakroom for Training courses or administering courses as an [Instructor](/breakroom-for-training/instructor-orientation.md), please see our dedicated [Breakroom for Training section](/breakroom-for-training.md). #### Logging in[​](#logging-in "Direct link to Logging in") ![A screenshot demonstrating how the Breakroom for Training UI may appear on a user\'s screen. The Course Info panel is displayed, and the location of the Breakroom for Training widget is highlighted. An auburn-haired female avatar stands in front of an abstract sculpture in a white, minimalist art gallery setting.](/assets/images/LMS_001-b0c20c6d612d66d2a1cb260dde87be0b.jpg) *Highlighted: The location of the Breakroom for Training widget.* When you enter a [Region](/getting-started/helpful-terms.md#region) that contains the Breakroom for Training system, you'll see the Breakroom for Training widget appear automatically on your screen. This widget can be dragged around the screen by clicking and holding the **center button**. ![A closeup of the Breakroom for Training widget. The UI for this widget is described below.](/assets/images/Breakroom_USING_BREAKROOM_TRAINING_002_2026-0084fa78b36317bca37ccb86035e0e35.jpg) *Pictured: A closeup of the Breakroom for Training widget.* Depending upon the settings in place, you may be guided through a quick tour of the widget tools. For reference, here's an overview of the four buttons, starting in the upper right corner and moving clockwise. | Button | Purpose | | ---------------------------------------------------------- | ----------------------------------------------------------------------------------- | | Quiz Activity | Allows you to review your quiz activity and progress for all active courses. | | [My Notes](https://www.youtube.com/watch?v=iVieOdbgiA4) | Opens your own personal in-world notepad, where you can take notes for each course. | | Notifications | Contains notices, alerts, and messages about your course activity. | | [Course Info](https://youtu.be/obxEln-O_5U?feature=shared) | Allows you to view descriptions of all offered courses. | warning It's important to note that Breakroom for Training notifications will not persist between user sessions. When you log off, this information will no longer be accessible to you. #### Taking quizzes[​](#taking-quizzes "Direct link to Taking quizzes") [YouTube video player](https://www.youtube.com/embed/PwkThuqN-jw) Quizzes are pushed forward to students either by the Instructor or by execution of an automated [syllabus](/getting-started/using-breakroom-for-training.md#running-syllabuses). Quizzes may contain a mix of timed and untimed material review, multiple choice questions, free answer spaces, and matching games. ![A closeup of the Reference buttons - \"See Reference Links\" on the left, and \"See Reference Images\" on the right.](data:image/jpeg;base64,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) *Pictured: The Reference buttons.* Question cards may contain **See Reference Links** or **See Reference Images buttons**. Clicking on these buttons will allow you to review material that may be necessary to answer a question, such as charts or writing excerpts. ![A closeup of a Breakroom for Training multiple choice quiz as viewed by a student. The question asked is, "You can move your avatar around using the..." and the user has opted to select two answers: WASD keys and arrow keys. The Breakroom for Training widget is visible in the lower right corner.](/img/breakroom/LMS_World_005.jpg) *Pictured: An example multiple choice question.* The top portion of each question card contains grading requirements. Here you can see: * Whether the question is required or optional * What the answer requirements are (for example, you may need to make two choices, or write a minimum number of words) * Whether the answer requirements have been met (denoted by a red light or a green light) * How many points the question is worth * How many total questions are on the quiz You can navigate between questions by using the **forward** and **back arrows** in the top right corner, or by clicking the **Previous** and **Next buttons** at the bottom of the quiz screen. ![A closeup of a Breakroom for Training submission confirmation screen as viewed by a student. The Breakroom for Training widget is visible in the lower right corner.](/img/breakroom/LMS_World_006.jpg) *Pictured: The submission confirmation screen.* When you're done taking a quiz and click the final **Next button**, you'll be asked to confirm whether you want to submit your quiz for a final grade. Click the **Submit button** to do so, or click the **Review button** to continue working. #### Completing waivers[​](#completing-waivers "Direct link to Completing waivers") ![A closeup of a Breakroom for Training waiver as viewed by a student. The waiver asks: \"During this course, we may discuss topics related to online harassment. This information may cause distress and anger. Knowing this, do you wish to continue?\" Yes and No options are presented to the student at the bottom of the window.](/assets/images/LMS_World_007-d880c11dcc4ce8ffd8b34acca3b25ec3.jpg) *Pictured: An example Breakroom for Training waiver.* Waivers can consist of syllabus information, content warnings, disclaimers, or requests for feedback. Just like quizzes, Instructors and automated [syllabuses](/getting-started/using-breakroom-for-training.md#running-syllabuses) can both push waivers to students. When you receive one, review the included information and click the relevant **button** to register your response. #### Running syllabuses[​](#running-syllabuses "Direct link to Running syllabuses") A syllabus is a standardized educational content module that can include on-screen annotations and other messages, timers, quizzes, waivers, viewable media files, and more. Syllabuses can be Instructor- or student-led. If a syllabus is meant to be used as part of a virtual classroom environment, the Instructor will launch and control the associated interface. If a syllabus is set up to launch automatically for individual users, it will begin running when your student avatar enters the Region. ![A closeup of the Syllabus and Breakroom for Training widgets). The UI for the Syllabus widget is described below.](/assets/images/Breakroom_USING_BREAKROOM_TRAINING_004_2026-2eac6a9597386d4c0c068f887d2f5e76.jpg) *Pictured: The Syllabus and Breakroom for Training widgets.* Once a syllabus is launched, a **Syllabus widget** will appear on all Instructor and student screens (or the individual student's screen, if the syllabus is student-led). Here's an overview of the associated UI. | Button | Purpose | | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | Drag handle | Allows you to move the widget around the screen by **clicking and dragging** on it. | | Annotation button | Toggles the Annotation panel. | | Step indicator | Displays the current syllabus step. Allows you to navigate to a specific step by typing a number into the step field and pressing the **Enter key**. | | Total steps | Displays the total number of steps in the syllabus. | | Arrow buttons | Allows whoever is controlling the syllabus to **rewind** and **advance** through the steps. | ![A screenshot demonstrating how the syllabus components may appear on a user\'s screen. A large media window in the center displays an introductory image for the course, while the Annotation panel on the left offers the user - in this case, an Instructor - guidance on how to proceed. The Breakroom for Training widget is visible in the lower right corner.](/assets/images/LMS_002-6d8e4d646df10d1e6d9cf28e19f47a83.jpg) *Pictured: An example of how a syllabus may appear on the user's screen.* If you are participating in a student-led syllabus, you will use the **arrow buttons** on the Syllabus widget to execute the program of instruction. Click the **Annotation button** to toggle the Annotation panel, and interact with the media, [quizzes](/getting-started/using-breakroom-for-training.md#taking-quizzes), and [waivers](/getting-started/using-breakroom-for-training.md#completing-waivers) that appear on your screen as instructed. ![A closeup of a syllabus confirmation box. The text asks: "Are you sure you're ready to end 'Orientation' and mark it completed?" Yes and No options are presented to the student at the bottom of the window. The Syllabus widget is visible in the lower right corner.](/img/breakroom/LMS_Syllabus_046.jpg) *Pictured: The student-led syllabus confirmation box.* When you progress to the end of a student-led syllabus, you'll be presented with a confirmation box. Once you click the **Yes button**, the syllabus will be marked as complete and closed. warning ##### "Done This Before"[​](#done-this-before "Direct link to \"Done This Before\"") When rewinding syllabus steps, it's important to note that the Breakroom for Training system remembers the highest step you have reached. Certain actions *will not be repeated* when you advance through that step again, even if they were triggered during the first use. This also applies if you choose to manually jump over a step and then backtrack, rather than advancing through the content using the arrow buttons on the Syllabus widget.

For example: 1. You are on step 15 in a syllabus. 2. You advance to step 16. All actions for step 16 happen, as you’ve never been this far in the syllabus before. 3. You then use the rewind arrow to backtrack to step 12. Steps 16-12 (working backwards) are considered "already done" and will not trigger the actions listed below. All other actions will be repeated. 4. Starting at step 12, you then use the arrow button to advance the syllabus until you are at step 17. Steps 13-16 are still considered to have been "already done." You've never been on step 17, however, so all actions on step 17 will be executed. The β€œskipped if already done” actions currently include: * Tours conducted through use of the Breakroom Tour Cameras * Countdown timers * Starting a quiz * Starting a waiver * Some custom functions --- ### Using the conference system #### Overview[​](#overview "Direct link to Overview") Breakroom's conference system consists of several collaborative and interactive tools, as well as in-world seating options and breakout areas. This quick-start guide is intended for new event attendees, and explains: * [Where to find the conference system tools](/getting-started/using-the-conference-system.md#conference-system-tools) * [How to use voice chat](/getting-started/using-the-conference-system.md#voice-chat) * [How to turn on your webcam](/getting-started/using-the-conference-system.md#webcam-streaming) * [How to share your screen](/getting-started/using-the-conference-system.md#screen-share) * [How to change the location of your on-screen video feed](/getting-started/using-the-conference-system.md#screen-appearance) * [How to use emoji reactions and raise your hand](/getting-started/using-the-conference-system.md#emoji-and-raise-hand-buttons) * [How to submit a question to the Moderators](/getting-started/using-the-conference-system.md#submitting-questions) * [How to sit down in an audience seat and use the built-in gestures and camera system](/getting-started/using-the-conference-system.md#seats-and-gestures) * [How to use presenter seats](/getting-started/using-the-conference-system.md#presenter-seats) * [How to use breakout areas](/getting-started/using-the-conference-system.md#breakout-areas) * [How to get around an event Region](/getting-started/using-the-conference-system.md#navigating-an-event) Users with Moderator permissions can find more information about the [moderator tools](/running-your-event/moderator-tools.md) in our [Running Your Event](/running-your-event.md) section. If you encounter any technical problems, you can also find more information on [troubleshooting common audio and video issues](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md). info World Owners and World Administrators can [enable and disable parts of the UI](/creating-custom-experiences/ui-customization-options.md) via the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). You may not have access to every function described in this section. #### Conference system tools[​](#conference-system-tools "Direct link to Conference system tools") ![A closeup of the primary conference system controls, which includes the conference toolbar, the Areas of Interest window, and the Start Here panel.](/assets/images/Conference_Tools_001-3187bd5f9f40811035e1afd216efb4b9.jpg) *Pictured: The conference system tools, located at the top of the screen.* For most attendees, the conference system tools fall into two categoriesβ€”[communication](/getting-started/using-the-conference-system.md#communicating-at-an-event) and [navigation](/getting-started/using-the-conference-system.md#navigating-an-event). Upon entering a conference Region, you'll likely see the conference toolbar appear at the top of your screen. You may also see the Start Here panel appear in the upper left corner. #### Communicating at an event[​](#communicating-at-an-event "Direct link to Communicating at an event") ![A closeup of the conference toolbar. The UI for this panel is described below.](/assets/images/UI_Tour_2026_008-d0f438e7a5ab953a2b0028eda38c47a4.png) *Pictured: The conference toolbar.* The conference system communication panel allows you to access voice chat, share your screen, react with emojis, and more. Here's a brief overview of the UI. | Button | Function | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Microphone | Toggles your[ microphone](./#voice-chat) within voice-enabled zones. | | Presentation | Toggles your [webcam](./#webcam-streaming) or [screen sharing](./#screenshare) within video-enabled zones. | | Screen Appearance | Allows you to [control](./#screen-appearance) where video streamed by other users appears on *your* screen. | | Device Settings | Allows you to [change your device settings](troubleshooting-audio-and-video-issues#the-change-devices-button) and [troubleshoot](troubleshooting-audio-and-video-issues) common audio and video issues. | | Emoji | Opens the [emoji menu](./#emoji-and-raise-hand-buttons), where you can choose from several animated emojis (such as clapping hands). These emojis will float over your avatar's head. | | Animations | Allows you to emote via single-person [gestures](../controlling-your-avatar#gestures) while seated in a conference area. | | Camera | Adjusts your camera angle while seated in a conference area. | | Raise Hand | Causes a hand icon to appear over your head until dismissed. Useful for impromptu polls, audience questions, and more. | | Question | Allows you to submit a question for [Moderator review](../../running-your-event/moderator-tools/). | ##### Voice chat[​](#voice-chat "Direct link to Voice chat") ![A closeup of the Microphone button.](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCACEAIoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5cooor9IPz8KKKKACiiigAopQpboM1bt9Ivbr/VW0r/RTSbS3Gk3sU6K1v+EV1bGfsE3/AHyarT6LfW3+ttZU+qGlzR7lckluilRTmUrwQQabVEBRRRQAUUUUAFFFFABRRRQAUUVYsbGbULlIIELyOcACjYaTeiIY42mcIilmPAAGa7jw78L7vUQs1632aE87f4jXY+DvANvoUSz3Cia8Izk9F+ldh06V5dbFPametRwateoc/pfgfSdKUbLZZHH8UnzGtyO3jiXCIqj2FSUVwSk5atnpRio6JCbR6U1oUkGGQEe4p9FSMxNT8G6VqqkS2qBv7yDBrgfEXwqntQ02nP50fXy2+8P8a9ZoraFadPZmFShCpuj5puLeS1laOVGjdTgqwxUVe7eLPBNp4ihZwoiugPlkA6/WvFtW0m40a8e2uEKup/A169GtGqvM8atQlRfkUqKKK6DlCiiigAooooAVVLMABknivZPh34QXSbNby4TN1KMjI+6K4T4d6B/bWto0i5gh+duOD6CvcFUKoA4ArzcVV+wj1cHR/wCXjFooorzD1goor2P9m74IxfFrX7q61VpE8P6ZtM6Rkq1xI2dsQbsMAliOQMAY3ZESkoLmY4pydkeOUV9iXXxQ+AWi60NB/wCEZ0+4t4T9nbU49IimgGOCTIcyP0+8A2eoJ615r+0p8DNL+H9vp3ibww+fDuoOsRg83zBFIylkKMSSyMqseScEdcEAZRrXaTVrmjp2V07ngtFFFdBkFcv458Jx+INPZ41AuoxlWx19q6iiqjJwfMiJRU1ys+Z5oXglaN1KupwQe1Mrufij4fGn6oLyJcRXHX/erhq9+nNVIqSPnKkHTk4sKKKK0MgoopVGWA96APZfhZpYs9B+0EfPO2c+w6V2tZXhW3Fr4fsYwMYiX+VatfPVJc02z6anHlgkFFFFZmoV9e/soMYvgX4zkQ7ZBdXJDDgjFrGRXis3wKmj+BcXxGXV0ZS/z6cYCCEM/kAh93J3YOMDg9eOfav2VP8AkgvjT/r5uv8A0ljrjryUoO3c3ppqWp8hV9ifEn9/+xnozyDeyWWn7SecYZF/lxXx3X2J8RP+TMdJ/wCvHT//AEZHTrfFD1FT2l6Hx3RXqngP4EzeNvhX4k8ZjV0tF0gTlbMwF/O8qIStltw25BwODzXlddKkpNpdDJprcKKKKoRzPxC0wal4buMDLxDzF/CvC+lfSOpQi40+4jIyGQj9K+crlPLuJF/usRXq4OXuuJ4+OjqpEVFFFegeYFPj/wBYv1plKOooA+jNDYNo9mR08pf5VerC8E3gvPDdk4OSqBT+HFbtfOSVpNH1EXeKYUUUVJZ9bW9rLqn7DDRWqGaSOJpGVeoWPUC7k/RVJ+gp37HN5b618OvGHhpZljvmmaUhuySwiMMPXBQ5+o9a5/8AZG+JWnRx6j8P9eaP7HqjM1msw+SR3XbJAT/tKAQOASGHVgDy3jn4d+MP2afHA17w/LcPpG5vs2oom9PLJGYLgdM9OvDYDLgjC+e46ypPRt3R1X2mvQ83vvhj4r0/xG2hS+H9QOqCQxrCluzb8EjcpAwy8Z3DjHOcV9O/H4f8ID+zL4f8MXzRnU5UtLMxq4OGjUPIw9VBULn/AGl9a5q3/bm1NdOVJ/CdpJf7MGeO8ZIi3r5ZUnHtu/GuE0zRvHn7VHjaK7vWZbCMlJLzyilnYx5yUQZ+ZuRhcljxk4BIt88mpVFZIhcqTUdWz1T4K2kumfskeNbi4XyoryHUpIWbgOptxFkf8DRh9RXyPX1b+1B400jwN4D074XeHmQFEi+2RpgmKFMOiucf6x3Cue+Bk8OM/KVaUbtOb6smp0j2CiiiukyI7k4t5M/3TXzhqHN9Of8Abb+dfQmvXQs9Iu5icbY2P6V87StvkZvU5r08GviZ5OOfwoZRRRXpHlBRRRQB6r8I9YElrPYu3zId6j2NejV89eGNafQtYguVPyg4Yeo717/Z3cd9axzxMGRxkEV42Kp8s+boz3cJU54cvVE1FFFcZ3Do5GikV0Yo6nKspwQR3FfRfw2/bF1XQ7GLTPF1gfEFmqiMXsTBbnbgj5wflk4wMnaepJYmvnKis5041FaSKjJx2PvnTZPhdr3w7m+ICeCtP/syOOWd1k0q3887GKt8o4JyD3ryHx1+2XLJpp03wPow0aHbsW8u1QvGuDwkS5VT05JYdeO9cPoXx+XRvgTf+Af7KMl3N5kUV55n7sRSOWcsvXcMsBjjkHtg+OVzU6Cu+f5G0qmi5Sa9vbjUrya6u55Lm5mcySzTMWd2JySSeSSahoortOcKKKZNKsMbO5CqoySaBHGfFLWBZaKLZWxJOcY9hXjVdF448QHXtakkVswx/In09a52vdw9P2cEmfP4mp7So7bIKKKK6DlCiiigArv/AIc+NBpsg0+8fFux+R2/hNcBSgkHI4NZ1IKpHlZrTqOnLmR9Mo4kUMpyp5BFLXkHg34jSaXstb8mS36K/da9WsdRt9SgWW3lWVD3U14lSlKm7M9+lWjVV0WaKKKxNwooooAKKKhuryGziaSaRY0XkljigRMTgZPArzL4keNgytpllJnPErr/ACqHxl8SzcK9pphwnRpu5+lecsxkYsxyTySa9LD4d355nl4nEq3JASkoor0zyQooooAKKKKACiiigArR0vXr7R5Q9rO0f+zng1nUUmk1ZjUnF3R6VpPxedVC31tu/wBuM/0rprX4laLcgbpzEfR1NeH0VySwtOW2h2RxlSO+p77/AMJxouM/bo/zqrdfEfRLdSRc+YfRFJrw3NJUfU4dzR42fRHp+q/F4bWWxtsns8h/pXC6x4m1DXJC1zOzL2QcAfhWVRXTCjCnsjlqV6lTdhRRRWxgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9k=) *Pictured: The Microphone button, currently toggled *On*.* If voice chat is available in your current location, you will see the **Microphone button** appear in the conference toolbar. To get started with voice chat, follow these steps. 1. Click the **Microphone button**. A pop-up will appear asking you to grant Breakroom permission to access your microphone. To continue, click the **Enable button**. 2. Once activated, the microphone icon will highlight (as pictured above). This indicates that your microphone is live, and that other users can hear you in voice chat. 3. To mute your microphone, click the **Microphone button** again. You'll see a slash appear through the icon, indicating that other users can no longer hear you. Depending on the setup of your Breakroom World, you may have access to [additional communication options](/getting-started/communicating-with-other-users.md), such as text chat and in-world email. ##### Webcam streaming[​](#webcam-streaming "Direct link to Webcam streaming") ![A closeup of the Presentation button.](data:image/jpeg;base64,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) *Pictured: The Presentation button.* If you move your avatar into an area where you have permission to share your webcam, you'll see the **Presentation button** appear in the conference toolbar. To start streaming video, follow these steps. 1. Click the **Presentation button**. In the menu that appears, click **Share Camera.** 2. A pop-up may appear asking you to grant Breakroom permission to access your camera. To continue, click the **Accept button**. You may also be asked to activate your [microphone](/getting-started/using-the-conference-system.md#voice-chat). 3. Once activated, the Presentation button will highlight. This indicates that your webcam is live, and that other users can see you. 4. To turn off your webcam, click the **Presentation button** again. In the menu, click **Stop Sharing.** ##### Screen share[​](#screen-share "Direct link to Screen share") Likewise, if you move your avatar into an area where you have permission to share your computer screen, you'll see the **Share Screen** option appear in the conference toolbar. To get started, follow these steps. 1. Click the **Presentation button**. In the menu that appears, click **Share Screen.** 2. A pop-up may appear asking you to grant Breakroom permission to access your computer. To continue, click the **Accept button**. ![A closeup of the screen share control panel. Here you can select a desktop screen or a single window to stream in-world, as well as whether or not to share your system audio.](/assets/images/Screen_001-04aa52a3947b6f87098fcff17807106b.jpg) *Pictured: The screen share control panel.* 1. The screen share control panel will appear on your screen. Here you can choose a **desktop** or **individual screen** to share. You can also choose whether or not to share your computer audio by toggling the **Share system audio option**. 2. When you are satisfied with your choices, click the **Share button**. If you've elected to leave voice chat off, you may be asked to confirm this decision. 3. Once activated, the Presentation button will highlight. This indicates that your screen is live, and that other users can see what is happening on your computer. 4. To stop sharing your screen, click the **Presentation button** again. In the menu, click **Stop Sharing.** ##### Screen appearance[​](#screen-appearance "Direct link to Screen appearance") ![A closeup of the Screen Appearance button.](data:image/jpeg;base64,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) *Pictured: The Screen Appearance button, currently toggled to *See In World* mode.* By default, when users share their webcam or computer screen the video will be displayed on an in-world screen. The **Screen Appearance button** allows you to "detach" streaming media from the in-world screen for better viewing. ![A screenshot demonstrating what happens when a user toggles the Screen Appearance button to \"See on Screen\" mode. Instead of being shown on a communal in-world screen, the shared media now appears centered in the user\'s own browser or app window.](/assets/images/Appearance_002-45ed4b088863fd66da6b0045887bfb37.jpg) *Pictured: A shared screen displayed through "See on Screen" mode.* By toggling "See on Screen" mode, you can view streaming media in a separate window. You can expand this window by clicking the **full screen toggle** in the upper right corner. If multiple presenters are streaming media at the same time, you will see multiple preview windows parked underneath the conference controls while in "See on Screen" mode. You can switch between webcam and screen share feeds by clicking on these windows. ##### Emoji and Raise Hand buttons[​](#emoji-and-raise-hand-buttons "Direct link to Emoji and Raise Hand buttons") ![A closeup of the Emoji button.](data:image/jpeg;base64,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) *Pictured: The Emoji button.* Clicking the **Emoji button** reveals a menu of various emojis. When you then click on an emoji, it will be displayed in an animated burst above your avatar's head. ![A closeup of the Raise Hand button.](data:image/jpeg;base64,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) *Pictured: The Raise Hand button.* Clicking the **Raise Hand button** animates your avatar, allowing them to raise their hand. A colorful hand icon will also appear over your avatar's head and remain there until you dismiss it by clicking the **Raise Hand button** again. ##### Submitting questions[​](#submitting-questions "Direct link to Submitting questions") ![A closeup of the Question button.](data:image/jpeg;base64,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) *Pictured: The Question button.* You can submit a question to the Moderator queue by clicking the **Question button**. Enter your question in the dialogue box that appears, and then click the **Submit button**. #### Seats and gestures[​](#seats-and-gestures "Direct link to Seats and gestures") ![A screenshot of an auburn-haired female avatar standing in front of a row of stadium seating in an empty auditorium. Transparent blue seat tags hover over the available seats.](/assets/images/Animation_002-f87004c263c53995b8875028b1151697.jpg) *Pictured: A virtual auditorium. Note the blue tags hovering over the available seats.* When you enter an auditorium, breakout space, or any area that contains [furniture designed to work with the Breakroom conference system](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md), you will see blue tags hovering over the available seats. To sit down, click on a **blue seat tag**. To stand up again, click the **Stand Up button** that appears at the bottom of your screen. Once you are seated, two new buttons will appear in the conference toolbar. ##### Animations button[​](#animations-button "Direct link to Animations button") ![Closeup of the Animations button.](data:image/jpeg;base64,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) *Pictured: The Animations button.* Clicking on the **Animations button** allows you to emote via single-person [gestures](/getting-started/controlling-your-avatar.md#gestures) while seated. ##### Camera button[​](#camera-button "Direct link to Camera button") ![Closeup of the Camera button.](data:image/jpeg;base64,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) *Pictured: The Camera button.* Clicking on the Camera button lets you adjust your current camera angle. The **Free Look button** releases your camera so that you can control it manually, using Breakroom's standard [camera controls](/getting-started/controlling-your-camera.md). info If the camera control buttons become unresponsive while you're seated in a chair, press the **Esc key** to exit fly camera mode. ##### Presenter seats[​](#presenter-seats "Direct link to Presenter seats") If you have been invited to make a presentation or participate in a roundtable discussion, you may be asked to stand or sit on a *presenter seat*. By using a presenter seat, you'll gain access to voice chat and media sharing functions within a particular voice zone, even if these functions are restricted for most visitors. To take up a presenter seat, click on the **blue seat tag** indicated to you. Presenter seats are normally located in an obvious place, like on a stage or at the front of a breakout area. To leave the presenter seat, click the **Stand Up button** that appears at the bottom of your screen. #### Breakout areas[​](#breakout-areas "Direct link to Breakout areas") ![A screenshot of a gray-haired female avatar standing outside a breakout area located in a sculpture garden. A transparent blue voice zone boundary indicator stands in front of her. To her left is an event sign advertising Upward Con.](/assets/images/Using_Conference_System_015-39be9a9109ed0d1eee270f4f82cadac6.jpg) *Pictured: An avatar on the threshold of a breakout area. Note the voice zone boundary indicator.* Most Breakroom Regions contain multiple voice zones. Only users with avatars located *inside* a particular voice zone can use voice chat, webcam streaming, and screen share to communicate with other users in that zone. This design makes it possible for different meetings or events to be held concurrently in the same Region without technical interference or audio competition. When you approach the edge of a voice zone, a transparent blue *boundary indicator* will appear. This serves as a reminder that you are leaving your current voice zone and entering a new one. Keep in mind that you may not be able to hear or speak with avatars located on the other side of a boundary indictor, even if you can see them. To use a breakout area, you will need to move your avatar inside. #### Navigating an event[​](#navigating-an-event "Direct link to Navigating an event") ![A closeup of the Areas of Interest window, featuring one-click teleport links to various areas within a Region.](/assets/images/UI_Tour_2026_011-3cd98e31de29cc1acda1c04350ea8d2f.png) *Pictured: An example Areas of Interest window.* In addition to Breakroom's [Region navigation tools](/exploring-breakroom/region-navigation-tools.md), the Areas of Interest window offers one-click teleport access to key event spaces. If seats are available, you will be seated automatically upon arrival. To open it, click **Signpost / Areas of Interest button** in the [Start Here panel](/getting-started/ui-tour.md#start-here-panel). Here's a brief overview of the UI. | | | | -------------- | --------------------------------------------------------------------------------------- | | Button | Target location | | Auditorium | Teleports your avatar to the auditorium. | | Entrance | Teleports your avatar to the Region entrance or to a designated information booth. | | Networking | Teleports your avatar to the designated lounge or networking area. | | Floor | Teleports your avatar to the main "floor" of the event (e.g. vendor booths, game area). | | Breakout areas | Teleports your avatar to the specified breakout room or booth. | | Triage areas | Teleports your avatar directly to a designated tech support area. | info The General Navigation panel's appearance can vary. **Based on the contents of a particular Region, you may not see all of the teleport links pictured above.** You may also see different icons for each area type (e.g., a cocktail glass instead of a coffee cup). --- ### Troubleshooting audio and video issues #### Overview[​](#overview "Direct link to Overview") To access Breakroom's audio and video troubleshooting tools, click the **Device Options button** in the [conference toolbar](/getting-started/using-the-conference-system.md) at the top of your screen. This will reveal a drop-down menu containing two buttonsβ€”**Device Testing** and **Change Devices**. ![A closeup of the conference toolbar located at the top of the screen. The Device Options button has been clicked, revealing a drop-down menu containing two buttons - Device Testing and Change Devices.](/assets/images/Troubleshooting_001-65abac97cf062d48afbd94366587cf42.jpg) *Highlighted: The location of the Device Options button.* In the sections that follow, we'll explore these tools and explain how they can be used to resolve issues and customize your media setup. #### The Device Testing button[​](#the-device-testing-button "Direct link to The Device Testing button") Clicking the **Device Testing button** will open a dedicated media testing panel. The UI will vary depending on whether you are accessing Breakroom through the [desktop viewer](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#desktop-viewer-mic-and-cam-test-overview) or [World Stream](/opening-the-doors/world-stream.md). ##### Desktop viewer testing[​](#desktop-viewer-testing "Direct link to Desktop viewer testing") ![A closeup of the Audio Test panel. The UI for this panel is described below.](/img/breakroom/Breakroom_AUDIO_VIDEO_001_2026.jpg) *Pictured: The desktop viewer Audio Test panel.* To access the media testing panel through the Breakroom desktop viewer, follow these steps. 1. Click the **Device Options button** in the conference toolbar. 2. Click the **Device Testing button**. You will then see the panel pictured above. Here's an overview of the key UI components. | UI component | Function | | ------------------------------ | ------------------------------------------------------------------------------------ | | Audio Test Feed drop-down menu | Allows you to select the audio input device (e.g. microphone) to be tested. | | Audio Device check | Provides information on the selected audio input device. | | Audio Networking check | Provides information on the audio network connection. | | Audio Volume check | Provides information on audio volume. | | Speaker drop-down menu | Allows you to select the audio output device (e.g. speaker or headset) to be tested. | | "Click to test speaker" button | Plays a tone that allows you to test your speaker. | | Next button | Launches the Video Test panel. | | Skip All link | Closes the media testing panel. | ![A closeup of the Video Test panel. The UI for this panel is described below.](/img/breakroom/Breakroom_AUDIO_VIDEO_002_2026.jpg) *Pictured: The desktop viewer Video Test panel.* Once the Audio Test panel is open, you can access the Video Test panel by clicking the **Next button**. Here's an overview of the key UI components. | UI component | Function | | ------------------------------ | ----------------------------------------------------------------------- | | Video Test Feed drop-down menu | Allows you to select the video input device (e.g. camera) to be tested. | | Live video feed | Allows you to visually confirm that your camera is working. | | Video Device check | Provides information on the selected video input device. | | Video Networking check | Provides information on the video network connection. | ##### World Stream testing[​](#world-stream-testing "Direct link to World Stream testing") ![A closeup of the World Stream media test page. This website combines the options of the previous two panels, with video options on the left and audio options on the right.](/assets/images/Basic_Troubleshooting_004-85a1714eb963af4f0c94903911fe6644.jpg) *Pictured: The World Stream media test page.* To access media testing through World Stream, follow these steps. The testing panel will open as a new tab in your browser. 1. Click the **Device Options button** in the conference toolbar. 2. Click the **Device Testing button**. Functionally, the web-based testing panel contains all of the same UI elements described [above](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#desktop-viewer-mic-and-cam-test-overview). #### Basic troubleshooting tips[​](#basic-troubleshooting-tips "Direct link to Basic troubleshooting tips") If you're experiencing an issue related to voice chat or streaming media, please access the relevant media testing panel as described [above](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#the-mic-and-cam-test-button). You can then do a basic troubleshooting rundown. 1. As a first step, make sure that Breakroom can detect the input devices you want to use. All of the devices you've given Breakroom permission to access are listed in the relevant drop-down menus. If a device is working and detectable, its name will be listed under the **Audio** or **Video Device Check section** when you select it, and a green check mark will be displayed. 2. If your devices aren't working despite being selected, or you do not see them listed at all, you may need to troubleshoot your computer or input devices to learn more about the problem. 3. Next, make sure that the Audio and Video Networking checks are successful. If you do not see a green check mark confirming this, it means that your equipment is not currently connected to the Internet. This may indicate a device or networking problem. 4. You can also test your speaker by clicking the **test button** at the bottom of the Audio Test panel. This will play a tone, allowing you to test your speaker volume or identify which audio output device is currently active. 5. If everything looks good, but you're still having issues, please verify that Breakroom is set up to use your preferred equipment by [changing your device input and output settings](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#the-change-devices-button). ##### Audio feedback [](#audio-feedback)[​](#audio-feedback- "Direct link to audio-feedback-") One common issue users encounter is audio feedback, or hearing themselves echo when they talk. This can happen if you're using a microphone to speak but listening to audio through your computer speakers. To solve this problem, you will need to use earbuds or a headset. Plug a headset into your computer and then [switch your audio output to the headset](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#the-change-devices-button). ##### Important note concerning voice chat [](#important-note-concerning-voice-chat)[​](#important-note-concerning-voice-chat- "Direct link to important-note-concerning-voice-chat-") Voice capabilities are currently restricted by login method. This means that if one user is logged in via the [desktop viewer](/opening-the-doors/desktop-viewers.md) and another is logged in via [World Stream](/opening-the-doors/world-stream.md), they will not be able to hear each other, even if they are standing in the same Region. Users who log in via the same method can communicate freely over voice chat. Therefore, we strongly suggest that World Owners take this into consideration when planning events and require all guests to use the same login method. We apologize for the inconvenience and hope to provide a solution soon. #### The Change Devices button[​](#the-change-devices-button "Direct link to The Change Devices button") Clicking on the **Change Devices button** allows you to select which audio and video devices you want Breakroom to access. The UI will vary depending on whether you are accessing Breakroom through the [desktop viewer](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#desktop-viewer-mic-and-cam-test-overview) or [World Stream](/opening-the-doors/world-stream.md). ##### Changing devices in the Breakroom desktop app[​](#changing-devices-in-the-breakroom-desktop-app "Direct link to Changing devices in the Breakroom desktop app") Clicking the **Change Devices button** will open the Audio Settings panel. There you can use the **drop-down menus** to select the audio and video devices you want to use. You can also independently adjust the volume for different audio types. ![A closeup of the Audio settings tab under the Settings window. The UI for this window is described below.](/assets/images/Breakroom_GETTING_STARTED_SETTINGS_006_2026-54fb334a06338654465c61d8e0aa94c6.jpg) *Pictured: The Breakroom Audio Settings window.* | | | | ----------------------- | ------------------------------------------------------------------------------------------------------------------ | | UI component | Function | | Reset to Default button | Resets all volume and device settings to the default configuration. | | Audio Test button | Launches the [Audio Test panel](troubleshooting-audio-and-video-issues#world-stream-mic-and-cam-test-ui-overview). | | Video Test button | Launches the [Video Test panel](troubleshooting-audio-and-video-issues#world-stream-mic-and-cam-test-ui-overview). | | Master Volume slider | Adjusts the overall volume of the Breakroom application. | | Music Volume slider | Adjusts the volume of any music streamed on the Breakroom platform. | | UI Volume slider | Adjusts the volume of the UI interactivity sounds. | | SFX Volume slider | Adjusts the volume of any special effects sounds. | | Voice Volume slider | Adjusts the voice streaming volume. | | Mic Sensitivity slider | Adjusts your own microphone's sensitivity, impacting your voice volume. | | Microphone Device menu | Allows you to select which microphone you want to use on Breakroom. | | Playback Device menu | Allows you to select which speakers you want to use. | | Webcam Device menu | Allows you to select which camera you want to use. | ##### Changing devices in World Stream[​](#changing-devices-in-world-stream "Direct link to Changing devices in World Stream") Clicking the **Change Devices button** will launch the Device Management panel. There you can use the **drop-down menus** to select the audio and video devices you want to use. You can also refresh your connection and settings or submit a report about your issue. ![A closeup of the World Stream Device Management panel. The UI for this panel is described below.](/assets/images/Basic_Troubleshooting_006-d4533c19dbd97e1b86531b1fed3b061d.jpg) *Pictured: The World Stream Device Management panel.* | | | | ------------------------ | --------------------------------------------------------------------------- | | UI component | Function | | Audio input source menu | Allows you to select which microphone you want to use on Breakroom. | | Audio output source menu | Allows you to select which speakers you want to use. | | Video input source menu | Allows you to select which camera you want to use. | | Refresh button | Refreshes your media connection and pushes any changes forward. | | Report button | Allows you to log a report indicating that you're having issues with media. | --- ## Help ### HELP #### [πŸ“„οΈWhere to find support](/help/where-to-find-support.md) [If you need assistance with anything related to Breakroom, you can submit a ticket through the Support Tickets tab on Dashboard. Please note that whil](/help/where-to-find-support.md) --- ### Account management #### Passwords [](#passwords)[​](#passwords- "Direct link to passwords-") ##### Resetting your password [](#resetting-your-password)[​](#resetting-your-password- "Direct link to resetting-your-password-") To reset your password, visit the [Breakroom homepage](https://www.breakroom.tech/) and click the **Log In button** located at the top. Then click the **Forgot Password?** link. Enter the email address used to register your account, and we'll send you a verification code and login instructions. ##### Password choice [](#password-choice)[​](#password-choice- "Direct link to password-choice-") We recommend that you create a highly secure, but *memorable* password for use in Breakroom, as you'll need to enter it a lot! You can also make things easy on yourself by using a reputable password manager. #### Account creation [](#account-creation)[​](#account-creation- "Direct link to account-creation-") ##### Tying your subscription to a pre-existing Breakroom account [](#tying-your-subscription-to-a-pre-existing-breakroom-account)[​](#tying-your-subscription-to-a-pre-existing-breakroom-account- "Direct link to tying-your-subscription-to-a-pre-existing-breakroom-account-") If you already have an account on Breakroom or Sinespace, you do not need to create a new one in order to subscribe to Breakroom. Just click the **Login link** when asked to register for a new account during the subscription signup process, and you will be prompted to enter your existing login credentials. --- ### System requirements #### World Stream requirements [](#world-stream-requirements)[​](#world-stream-requirements- "Direct link to world-stream-requirements-") Minimum: * Operating System: 64-bit Windows 10 (update 20H2 or later if using Edge) or MacOS 10.92 * Memory (RAM): 4GB or more * Internet speed: 10Mbps or above. Wired Internet connections offer superior performance. * Browser: * Chrome version 91.0.4472.77 or higher * Firefox version 88.0 (standard) or higher * Edge version 90.0.818.66 (standard) or higher * *The ability to share audio while* [*screen sharing*](/getting-started/using-the-conference-system.md#screen-share) *is currently only supported on Chrome or Edge running on a Windows PC.* * Additional: * Microphone required for voice chat * English language keyboard (local language keyboards are not supported at this time) warning IMPORTANT: Browsers other than Chrome, Firefox, and Edge are not supported at this time. Linux is not supported. #### Desktop system requirements [](#desktop-system-requirements)[​](#desktop-system-requirements- "Direct link to desktop-system-requirements-") ##### Low spec: 0-50 avatars in a space, simple scenes [](#low-spec-0-50-avatars-in-a-space-simple-scenes)[​](#low-spec-0-50-avatars-in-a-space-simple-scenes- "Direct link to low-spec-0-50-avatars-in-a-space-simple-scenes-") Minimum specifications: * Operating System: 64-bit Windows 10 or MacOS 10.92 (Linux available but unsupported) * Memory (RAM): 8GB or more * Storage: 4GB available space (2GB installed size, 2GB cache) * CPU/GPU: * Intel: Intel i3 at 2Ghz+, with Intel UHD Graphics 620 * AMD: AMD Athlon 3050U with Radeon Graphics, or better * DirectX: Version 10 * Network: Broadband internet connection. Wired Internet connections offer superior performance. * Additional: * Microphone required for voice chat * English language keyboard (local language keyboards are not supported at this time) warning Please note that these specifications assume that [Breakroom's graphics settings](/getting-started/settings.md#graphics-settings) have been customized to the least demanding option ("Fastest," with the detail slider dragged to the far left). These recommendations also assume that the system is in good condition, with minimal background activity while using the application. ##### Medium spec: 50-100 avatars in a space, medium to complex scenes [](#medium-spec-50-100-avatars-in-a-space-medium-to-complex-scenes)[​](#medium-spec-50-100-avatars-in-a-space-medium-to-complex-scenes- "Direct link to medium-spec-50-100-avatars-in-a-space-medium-to-complex-scenes-") Medium specifications: * Operating System: 64-bit Windows 10 or MacOS 10.92 (Linux available but unsupported) * Memory (RAM): 16GB or more * Storage: 4GB available space (2GB installed size, 2GB cache) * CPU/GPU: * Quad core or better Intel i5, or AMD equivalent * Discrete non-integrated GPU (may work with higher end integrated GPUs, such as AMD Radeon APUs) * DirectX: Version 10 * Network: Broadband internet connection. Wired Internet connections offer superior performance. * Additional: * Microphone required for voice chat * English language keyboard (local language keyboards are not supported at this time) ##### High spec: 200+ avatars in a space, complex scenes [](#high-spec-200-avatars-in-a-space-complex-scenes)[​](#high-spec-200-avatars-in-a-space-complex-scenes- "Direct link to high-spec-200-avatars-in-a-space-complex-scenes-") High specifications: * Operating System: 64-bit Windows 10 or MacOS 10.92 (Linux available but unsupported) * Memory (RAM): 32GB or more * Storage: 4GB available space (2GB installed size, 2GB cache) * CPU/GPU: * Quad core or better Intel i5, or AMD equivalent * Discrete GPU, nVidia GeForce 1050M or better. (GeForce 1650 recommended) * DirectX: Version 10 * Network: Broadband internet connection. Wired Internet connections offer superior performance. * Additional: * Microphone required for voice chat * English language keyboard (local language keyboards are not supported at this time) warning Some features may not work in MacOS clients older than OSX 10.11. We recommend updating to 10.12 or 10.13 if possible. #### Unity and Sinespace SDK requirements [](#unity-and-sinespace-sdk-requirements)[​](#unity-and-sinespace-sdk-requirements- "Direct link to unity-and-sinespace-sdk-requirements-") **Minimum:** * Unity version: 2018.4.x - through 2018.4.36. Later versions may not work as intended * Sinespace SDK: [Available through Unity Asset Store](/advanced-tutorials/uploading-your-own-region/installing-unity-and-the-breakroom-sdk.md) --- ### Troubleshooting network ports and firewalls info This information is intended for System Administrators. If you are not listed as an Administrator on your network, the information covered on this page may not be useful for you. In these cases, we suggest that you consult our [World Stream](/opening-the-doors/world-stream/troubleshooting-world-stream-issues-on-chrome.md) and [audio/video troubleshooting](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md) guides. #### Basic World Stream functionality [](#basic-world-streaming-functionality)[​](#basic-world-stream-functionality- "Direct link to basic-world-stream-functionality-") World Stream access is provided by AWS and Furioos, both of which use a variety of locations for delivery. In order for World Stream to be delivered, you will need to whitelist the following domains: `*.breakroom.tech` `*.amazonappstream.com` `*.appstream2.eu-central-1.aws.amazon.com` `*.appstream2.eu-west-1.aws.amazon.com` `*.appstream2.eu-west-2.aws.amazon.com` `*.appstream2.eu-east-1.aws.amazon.com` `*.furioos.com` Additionally, please enable outbound UDP and TCP traffic on ports 443, 8433, and 53. AWS is our default World Stream provider. You can learn more about AWS allowed domains by visiting [this page](https://docs.aws.amazon.com/appstream2/latest/developerguide/allowed-domains.html). If you encounter problems with WebRTC, you can perform a WebRTC test at . Users attempting to connect to Breakroom from behind an aggressive firewall may run into issues, as they will have limited access to the internet. In these cases, a commercial TURN server may provide the necessary solution. #### Breakroom services [](#breakroom-services)[​](#breakroom-services- "Direct link to breakroom-services-") For efficient use of Breakroom and its associated websites, we recommend that you whitelist the following addresses: `*.breakroom.tech` `*.breakroom.net` `*.sine.space` #### Voice [](#voice)[​](#voice- "Direct link to voice-") For World Stream voice services to work properly, you will need to whitelist the following addresses: `*.swe-voice2.com` `*.highfidelity.com` `*.highfidelity.io` Additionally, please enable incoming and outgoing UDP and TCP traffic on ports 443, 3478, and 5349, to and from `*.swe-voice2.com, *.sine.space.` **Note for Google Chrome Enterprise users:** If your Group Policies include an enabled`DefaultMediaStreamSetting_BlockAccess`setting, voice and video services will not work, even for passive listening. info For Breakroom clients using the standalone [desktop application](/opening-the-doors/desktop-viewers.md) (*not* on [World Stream](/opening-the-doors/world-stream.md)), you will also need to whitelist \*.vivox.com. ##### An important note concerning voice chat [](#an-important-note-concerning-voice-chat)[​](#an-important-note-concerning-voice-chat- "Direct link to an-important-note-concerning-voice-chat-") Voice capabilities are currently restricted by login method. This means that if one user is logged in via [World Stream](/opening-the-doors/world-stream.md) and another user is logged in via a Breakroom [desktop viewer](/opening-the-doors/desktop-viewers.md), they will not be able to hear each other over voice chat, even if they are standing in the same Region. Users who log in via the same method can communicate freely. Therefore, we strongly suggest that you take this into consideration when planning your events, and require *all* guests to use either World Stream or the desktop app. We apologize for the inconvenience, and hope to provide a solution soon. #### Webcam and screen share [](#webcam-and-screen-sharing)[​](#webcam-and-screen-share- "Direct link to webcam-and-screen-share-") Webcam and screen share functionality are delivered by Agora. For World Stream to work properly, you will need to whitelist the following domains: `.agora.io` `.edge.agora.io` `.agoraio.cn` `.edge.agoraio.cn` And the following ports on those domains: `TCP/80; 443; 3433; 5668; 5669; 4700 - 5000; 6080; 6443; 8667; 9667; 30011 - 30013 UDP/3478; 4700 - 5000` Agora provides a basic testing service, which is [available here](https://webdemo.agora.io/agora_webrtc_troubleshooting/). --- ### Tutorial video playlists #### Overview[​](#overview "Direct link to Overview") While you'll find individual tutorial videos posted throughout our Breakroom documentation, the pages in this section host tutorial playlists in their entirety. Links are provided to additional context or supplementary material. #### Available video playlists[​](#available-video-playlists "Direct link to Available video playlists") [platform-basics.md](/help/tutorial-video-playlists/platform-basics.md) [dashboard.md](/help/tutorial-video-playlists/dashboard.md) [moderator-tools.md](/help/tutorial-video-playlists/moderator-tools.md) [breakroom-games.md](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md) [creator-core.md](/help/tutorial-video-playlists/creator-core.md) [breakroom-for-training-students.md](/help/tutorial-video-playlists/breakroom-for-training-students.md) [breakroom-for-training-instructors.md](/help/tutorial-video-playlists/breakroom-for-training-instructors.md) [breakroom-for-training-dashboard-and-backend.md](/help/tutorial-video-playlists/breakroom-for-training-dashboard-and-backend.md) --- ### Breakroom for Training - Dashboard and Backend #### Overview[​](#overview "Direct link to Overview") [Breakroom for Training](/breakroom-for-training/installing-breakroom-for-training.md) supports online learning through the streamlined management of educational content. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and other stakeholders can create instructor-led courses consisting of waivers and quizzes, and enable access to course materials in any number of Breakroom Regions. The videos in this playlist offer an overview of the in-world system components. For more information about [using the Region Editor](/creating-custom-experiences/using-the-region-editor.md) or [accessing the Dashboard](/building-new-worlds/breakroom-dashboard-tour.md), please see our [Creating Custom Experiences section](/creating-custom-experiences.md). Detailed instructions for building Breakroom for Training courses and managing student data are also [available](/breakroom-for-training/installing-breakroom-for-training.md). #### Videos[​](#videos "Direct link to Videos") ##### Enabling Breakroom for Training in Your Region[​](#enabling-breakroom-for-training-in-your-region "Direct link to Enabling Breakroom for Training in Your Region") [YouTube video player](https://www.youtube.com/embed/233YqC0v5dc?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Creating a New Course[​](#creating-a-new-course "Direct link to Creating a New Course") [YouTube video player](https://www.youtube.com/embed/c7_de8P_w6E?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Adding and Reviewing Waivers[​](#adding-and-reviewing-waivers "Direct link to Adding and Reviewing Waivers") [YouTube video player](https://www.youtube.com/embed/l8FdH6ApPpQ?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Adding and Grading Quizzes[​](#adding-and-grading-quizzes "Direct link to Adding and Grading Quizzes") [YouTube video player](https://www.youtube.com/embed/n7o04WNFAPk?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Quiz Question Types[​](#quiz-question-types "Direct link to Quiz Question Types") [YouTube video player](https://www.youtube.com/embed/vakoplYsGgo?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Archiving Quizzes and Waivers[​](#archiving-quizzes-and-waivers "Direct link to Archiving Quizzes and Waivers") [YouTube video player](https://www.youtube.com/embed/Py0_4Ji8stI?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Reviewing Student Information[​](#reviewing-student-information "Direct link to Reviewing Student Information") [YouTube video player](https://www.youtube.com/embed/yBE-h_var6E?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Confined Spaces Training Demo - Sneak Peek[​](#confined-spaces-training-demo---sneak-peek "Direct link to Confined Spaces Training Demo - Sneak Peek") [YouTube video player](https://www.youtube.com/embed/9-f3ZgKLKr4?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) --- ### Breakroom for Training - Instructors #### Overview[​](#overview "Direct link to Overview") [Breakroom for Training](/breakroom-for-training/installing-breakroom-for-training.md) supports online learning through the streamlined management of educational content. [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and other stakeholders can create instructor-led courses consisting of waivers and quizzes. Instructors can then integrate these touchpoints into their live online classes, fostering student engagement and gathering student feedback in real time. The videos in this playlist offer an overview of the in-world system components. For more information about administering courses as an [Instructor](/getting-started/using-breakroom-for-training.md#instructor), please see our [Getting Started section](/getting-started.md). Additionally, Instructors with the [appropriate permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) can review student data (including [submitted quizzes](/breakroom-for-training/installing-breakroom-for-training.md#grading-quizzes)) by visiting the [Dashboard](/breakroom-for-training/installing-breakroom-for-training.md). #### Videos[​](#videos "Direct link to Videos") ##### Overview[​](#overview-1 "Direct link to Overview") [YouTube video player](https://www.youtube.com/embed/Opl3PJuSK4U?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Instructor Mode[​](#instructor-mode "Direct link to Instructor Mode") [YouTube video player](https://www.youtube.com/embed/_qQ-JtjSi94?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Posting and Reviewing Waivers[​](#posting-and-reviewing-waivers "Direct link to Posting and Reviewing Waivers") [YouTube video player](https://www.youtube.com/embed/hNn1tH4Xs5Y?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Posting and Reviewing Quizzes[​](#posting-and-reviewing-quizzes "Direct link to Posting and Reviewing Quizzes") [YouTube video player](https://www.youtube.com/embed/J9rrPP3i2As?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) --- ### Breakroom for Training - Students #### Overview[​](#overview "Direct link to Overview") [Breakroom for Training](/breakroom-for-training/installing-breakroom-for-training.md) supports online learning through the streamlined management of educational content. Students can use the Breakroom for Training interface to access course information, take notes, and respond to touchpoints administered by a live instructor, all without navigating away from their Breakroom session. The videos in this playlist offer an overview of the in-world system components. For more information about interacting with the Breakroom for Training system as a [student](/getting-started/using-breakroom-for-training.md#student), please see our [Getting Started section](/getting-started.md). #### Videos[​](#videos "Direct link to Videos") ##### Overview[​](#overview-1 "Direct link to Overview") [YouTube video player](https://www.youtube.com/embed/Opl3PJuSK4U?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Course Information[​](#course-information "Direct link to Course Information") [YouTube video player](https://www.youtube.com/embed/obxEln-O_5U?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### My Notes[​](#my-notes "Direct link to My Notes") [YouTube video player](https://www.youtube.com/embed/iVieOdbgiA4?list=PLMmBhuOTME3WNFgr4OWMAj7XNy8v92jzY) ##### Completing Quizzes and Waivers[​](#completing-quizzes-and-waivers "Direct link to Completing Quizzes and Waivers") [YouTube video player](https://www.youtube.com/embed/PwkThuqN-jw?list=PLMmBhuOTME3WHS37-HDWNViydP96GfDOv) --- ### Breakroom Games #### Overview[​](#overview "Direct link to Overview") The Breakroom Games component objects can be installed any Region to create fun activities and foster user engagement. By combining the available components, you can set up scavenger hunts, exploration reward systems, trivia contests, and more. The videos in this playlist offer an overview of the components, while [detailed usage instructions](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md) are available in our [Creating Custom Experiences section](/creating-custom-experiences.md). #### Videos[​](#videos "Direct link to Videos") ##### Leaderboard[​](#leaderboard "Direct link to Leaderboard") [YouTube video player](https://www.youtube.com/embed/VMiZLR2Imk4?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Taskboard[​](#taskboard "Direct link to Taskboard") [YouTube video player](https://www.youtube.com/embed/MO9plkqvY8U?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Clickable[​](#clickable "Direct link to Clickable") [YouTube video player](https://www.youtube.com/embed/OswLJBvXNfI?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Findable[​](#findable "Direct link to Findable") [YouTube video player](https://www.youtube.com/embed/1ZzGWOqNQzI?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Sittable[​](#sittable "Direct link to Sittable") [YouTube video player](https://www.youtube.com/embed/oPxZWnWK40Y?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Explorer[​](#explorer "Direct link to Explorer") [YouTube video player](https://www.youtube.com/embed/898DJQJjGEM?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Sightseeing[​](#sightseeing "Direct link to Sightseeing") [YouTube video player](https://www.youtube.com/embed/Ims9Fm37tJY?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Photobooth[​](#photobooth "Direct link to Photobooth") [YouTube video player](https://www.youtube.com/embed/8-v8hKNfg80?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Tour Camera[​](#tour-camera "Direct link to Tour Camera") [YouTube video player](https://www.youtube.com/embed/t8kicy3VHvw?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Trivia[​](#trivia "Direct link to Trivia") [YouTube video player](https://www.youtube.com/embed/rQ18jWRMogk?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) ##### Rewards[​](#rewards "Direct link to Rewards") [YouTube video player](https://www.youtube.com/embed/6v-ojHLNxb4?list=PLMmBhuOTME3Ute_h2UwNcWILRmfDBhUX0) --- ### Creator Core #### Overview[​](#overview "Direct link to Overview") The Creator Core program is designed to teach users with [advanced permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) how to access the [Region Editor](/creating-custom-experiences/using-the-region-editor.md), understand and manage the main parts of the [conference system](/running-your-event/understanding-the-conference-system.md), deploy items from the [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md), and achieve custom effects through editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). The videos in this playlist offer an overview of the system components, while more detailed information is available in our [Creating Custom Experiences section](/creating-custom-experiences.md). We also offer advanced tutorials for [creating custom voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md). #### Videos[​](#videos "Direct link to Videos") ##### Opening the Region Editor[​](#opening-the-region-editor "Direct link to Opening the Region Editor") [YouTube video player](https://www.youtube.com/embed/oeCQf71xpwM?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Object Windows[​](#object-windows "Direct link to Object Windows") [YouTube video player](https://www.youtube.com/embed/Z3INDzrr_0w?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Inspector Windows[​](#inspector-windows "Direct link to Inspector Windows") [YouTube video player](https://www.youtube.com/embed/Y1bT4j35mE8?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### The Inventory Window[​](#the-inventory-window "Direct link to The Inventory Window") [YouTube video player](https://www.youtube.com/embed/MMeCPktVxa4?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### The Sky Window[​](#the-sky-window "Direct link to The Sky Window") [YouTube video player](https://www.youtube.com/embed/elhSjnqCMGg?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Editing and Moving Objects[​](#editing-and-moving-objects "Direct link to Editing and Moving Objects") [YouTube video player](https://www.youtube.com/embed/2JWmr95W3-c?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Region Editor Best Practices[​](#region-editor-best-practices "Direct link to Region Editor Best Practices") [YouTube video player](https://www.youtube.com/embed/YUBB-Gwc-pM?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Opening Your Starter Bundle[​](#opening-your-starter-bundle "Direct link to Opening Your Starter Bundle") [YouTube video player](https://www.youtube.com/embed/OiAP2OO4fxY?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Start Here UI[​](#breakroom-start-here-ui "Direct link to Breakroom Start Here UI") [YouTube video player](https://www.youtube.com/embed/kDlE_2Jw0S8?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Video Player[​](#breakroom-video-player "Direct link to Breakroom Video Player") [YouTube video player](https://www.youtube.com/embed/yBSL8K4a5gU?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Web Browser[​](#breakroom-web-browser "Direct link to Breakroom Web Browser") [YouTube video player](https://www.youtube.com/embed/SHCteM7Nn1g?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Tour Cameras[​](#breakroom-tour-cameras "Direct link to Breakroom Tour Cameras") [YouTube video player](https://www.youtube.com/embed/T2JuekPeSmo?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Note Board[​](#breakroom-note-board "Direct link to Breakroom Note Board") [YouTube video player](https://www.youtube.com/embed/orE4hd3ptyA?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Image Viewer[​](#breakroom-image-viewer "Direct link to Breakroom Image Viewer") [YouTube video player](https://www.youtube.com/embed/j2co0i7utqY?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Basic Emojis[​](#breakroom-basic-emojis "Direct link to Breakroom Basic Emojis") [YouTube video player](https://www.youtube.com/embed/4ysyhaUvGXQ?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Addon Seats[​](#addon-seats "Direct link to Addon Seats") [YouTube video player](https://www.youtube.com/embed/erI62mQVJTA?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakout Areas Showcase[​](#breakout-areas-showcase "Direct link to Breakout Areas Showcase") [YouTube video player](https://www.youtube.com/embed/vH1tFz_3L5o?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Adding Breakout Areas to Your Region[​](#adding-breakout-areas-to-your-region "Direct link to Adding Breakout Areas to Your Region") [YouTube video player](https://www.youtube.com/embed/PCyj05j1mPM?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Breakroom Voice Zone Objects[​](#breakroom-voice-zone-objects "Direct link to Breakroom Voice Zone Objects") [YouTube video player](https://www.youtube.com/embed/DRun0PPbAJA?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### Voice Zone Components[​](#voice-zone-components "Direct link to Voice Zone Components") [YouTube video player](https://www.youtube.com/embed/8yM7qDZTYHE?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) ##### The RoomFurniture Component[​](#the-roomfurniture-component "Direct link to The RoomFurniture Component") [YouTube video player](https://www.youtube.com/embed/hPiwHQUT7RE?list=PLMmBhuOTME3Vs_f1GRW5pJ9myXSkjxUip) --- ### Dashboard #### Overview[​](#overview "Direct link to Overview") The Breakroom Dashboard allows [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) to manage almost every aspect of their account, including billing details, support tickets, Region creation and management, user account generation, access settings, and setting up Breakroom for Training courses. The videos in this playlist offer an overview of the available features. Our [Dashboard tour page](/building-new-worlds/breakroom-dashboard-tour.md) is another useful resource, as it contains an FAQ specifically geared toward Dashboard questions. info Only World Owners and World Administrators can access the Dashboard. While World Owners can edit every feature described in this section, World Administrators have [limited permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md). #### Videos[​](#videos "Direct link to Videos") ##### World Customization - Basic Information and Features[​](#world-customization---basic-information-and-features "Direct link to World Customization - Basic Information and Features") [YouTube video player](https://www.youtube.com/embed/mXJ8cHAgNIQ?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### World Customization - Regions and Avatars[​](#world-customization---regions-and-avatars "Direct link to World Customization - Regions and Avatars") [YouTube video player](https://www.youtube.com/embed/lopbVUHpt7o?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### World Customization - Color Theme and World Access[​](#world-customization---color-theme-and-world-access "Direct link to World Customization - Color Theme and World Access") [YouTube video player](https://www.youtube.com/embed/rI09diYGED4?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### World Credits[​](#world-credits "Direct link to World Credits") [YouTube video player](https://www.youtube.com/embed/kI_2kZsSSIU?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Manage Users[​](#manage-users "Direct link to Manage Users") [YouTube video player](https://www.youtube.com/embed/yb99cXQ1Oyo?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### World Stream[​](#world-stream "Direct link to World Stream") [YouTube video player](https://www.youtube.com/embed/UoGOcGFAu1Y?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Integration[​](#integration "Direct link to Integration") [YouTube video player](https://www.youtube.com/embed/QUQ4cFpSw10?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Billing[​](#billing "Direct link to Billing") [YouTube video player](https://www.youtube.com/embed/_CTh4CzE4zk?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Your Apps[​](#your-apps "Direct link to Your Apps") [YouTube video player](https://www.youtube.com/embed/Kh2AyamoQKM?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Analytics[​](#analytics "Direct link to Analytics") [YouTube video player](https://www.youtube.com/embed/2BPuWnU70Ro?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Support Tickets[​](#support-tickets "Direct link to Support Tickets") [YouTube video player](https://www.youtube.com/embed/IMP6jeMlbYw?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Knowledge Base[​](#knowledge-base "Direct link to Knowledge Base") [YouTube video player](https://www.youtube.com/embed/F3zAgpuwlb4?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Activity Log[​](#activity-log "Direct link to Activity Log") [YouTube video player](https://www.youtube.com/embed/PTpHnTtNpDI?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) ##### Settings[​](#settings "Direct link to Settings") [YouTube video player](https://www.youtube.com/embed/gnNfsd5k5sk?list=PLMmBhuOTME3Vc4C2DhumOi01z5DW6hk6O) --- ### Moderator tools #### Overview[​](#overview "Direct link to Overview") Breakroom's built-in moderator tools allow event runners to direct virtual traffic, communicate with attendees, organize live presentations, and more. The videos in this playlist offer an overview of the available moderator tools, while [detailed usage instructions](/running-your-event/moderator-tools.md) are available in our [Running Your Event section](/running-your-event.md). #### Videos[​](#videos "Direct link to Videos") ##### Crowd Control[​](#crowd-control "Direct link to Crowd Control") [YouTube video player](https://www.youtube.com/embed/ODDfMepQNXU?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) ##### Broadcast Messages[​](#broadcast-messages "Direct link to Broadcast Messages") [YouTube video player](https://www.youtube.com/embed/RE-o6MegYT4?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) ##### Slido Integration[​](#slido-integration "Direct link to Slido Integration") [YouTube video player](https://www.youtube.com/embed/JEQg0oH570w?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) ##### Audio Streams[​](#audio-streams "Direct link to Audio Streams") [YouTube video player](https://www.youtube.com/embed/jdNHaK3qAKg?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) ##### Audience Questions[​](#audience-questions "Direct link to Audience Questions") [YouTube video player](https://www.youtube.com/embed/SwNBkdxkzKE?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) ##### UI Toggle[​](#ui-toggle "Direct link to UI Toggle") [YouTube video player](https://www.youtube.com/embed/RBKehGq2f84?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) ##### Presentation Controls[​](#presentation-controls "Direct link to Presentation Controls") [YouTube video player](https://www.youtube.com/embed/x4Ar5mgCuZ4?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) --- ### Platform basics #### Overview[​](#overview "Direct link to Overview") The videos in this playlist are intended to help with new user orientation. Users will learn how to customize and control their avatars, adjust common settings, communicate in-world, and report platform issues. These topics are covered in more depth in our [Getting Started section](/getting-started.md). #### Videos[​](#videos "Direct link to Videos") ##### Entering Your World[​](#entering-your-world "Direct link to Entering Your World") [YouTube video player](https://www.youtube.com/embed/Jjq2pxuQA-g?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Controlling Your Avatar[​](#controlling-your-avatar "Direct link to Controlling Your Avatar") [YouTube video player](https://www.youtube.com/embed/PtouvK9WcnA?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Camera Movement[​](#camera-movement "Direct link to Camera Movement") [YouTube video player](https://www.youtube.com/embed/GzDo8HbOgqY?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Social Interaction[​](#social-interaction "Direct link to Social Interaction") [YouTube video player](https://www.youtube.com/embed/mv-Ma37QNNs?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Avatar Customization[​](#avatar-customization "Direct link to Avatar Customization") [YouTube video player](https://www.youtube.com/embed/ejjRVO6s_5s?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Exploration[​](#exploration "Direct link to Exploration") [YouTube video player](https://www.youtube.com/embed/XmNQYZwWJJ0?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Collaboration[​](#collaboration "Direct link to Collaboration") [YouTube video player](https://www.youtube.com/embed/vckdoReN9-o?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Settings[​](#settings "Direct link to Settings") [YouTube video player](https://www.youtube.com/embed/0CP1NtX9aHE?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) ##### Reporting Issues[​](#reporting-issues "Direct link to Reporting Issues") [YouTube video player](https://www.youtube.com/embed/neIspZnbSnY?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy) --- ### Where to find support #### Contacting the Customer Success Team [](#contacting-the-customer-success-team)[​](#contacting-the-customer-success-team- "Direct link to contacting-the-customer-success-team-") If you need assistance with anything related to Breakroom, you can submit a ticket through the [Support Tickets tab](/building-new-worlds/breakroom-dashboard-tour.md#support-tickets) on [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). Please note that while you can elect to mark your ticket as low, medium, or high priority, response times may vary based on your Support Plan. You can learn more by reviewing the [Breakroom Terms of Service](https://www.breakroom.net/terms-of-service). #### Bug reports and development requests[​](#bug-reports-and-development-requests "Direct link to Bug reports and development requests") If you run into problems in-world, you can submit a [bug report ](/getting-started/reporting-issues.md)or product feedback by pressing the **F5 key** on your keyboard (or by clicking the **FN button** at the top of the screen and then pressing the **F5 key**, if you're logged in via World Stream). In addition to space for a written report, the report window includes the following options: * **Include a log file**: Checking this option will submit a log file of your recent activity to our development team along with your written report. Log files can assist our team in diagnosing and troubleshooting your problem. * **This is a bug report**: Checking this option will flag your submission as a bug report. Unchecking this option will flag your submission as feedback or a development request. * **Include a screenshot**: Checking this option will submit a screenshot of your current screen to our development team along with your written report. --- ## Opening The Doors ### OPENING THE DOORS #### [πŸ“„οΈSeats and concurrency](/opening-the-doors/seats-and-concurrency.md) [With Breakroom, it's easy to make room for everyone to join the conversation. Learn more about seats, user licenses, concurrency, and how to expand user capacity as needed.](/opening-the-doors/seats-and-concurrency.md) --- ### Analytics [YouTube video player](https://www.youtube.com/embed/2BPuWnU70Ro) #### Overview[​](#overview "Direct link to Overview") Breakroom provides basic analytics reports in the form of an auto-generated CSV file, which [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can download from the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md) or email to themselves. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Interpreting basic analytics report data[​](#interpreting-basic-analytics-report-data "Direct link to Interpreting basic analytics report data") ![](/assets/images/Analytics_001-4da0f96201fcd10fe6065a7350e04b9f.png) *Pictured: An example of a basic analytics report.* User visits are represented by rows, while key information is listed in each column. | Column | Contents | | ---------- | --------------------------------------------------------------------------------------------------------- | | Grid | This number corresponds to the grid, or World, the user accessed. | | UserID | The ID of the user who visited your World. | | Username | The user's name. | | Region | The Region ID the user visited. | | RegionName | The name of the Region the user visited. | | LoginTime | When the user logged in. | | LogoutTime | When the user logged out. | | SpendTime | How long the user spent in a particular Region. | | LoginFrom | Whether the user logged in from a [desktop viewer](desktop-viewers) or via [World Stream](world-stream/). | | Session | The user's session ID. | | Email | The email associated with the user's account. | warning Users may decline to share certain data by personalizing the [Analytics and Marketing Preferences](/getting-started/settings.md#analytics-and-marketing-preferences-settings) available under the Settings panel. If users decline to share their data, you may see this data (such as usernames, user IDs, and email addresses) replaced by asterisks in your analytics report. #### Accessing basic analytics reports[​](#accessing-basic-analytics-reports "Direct link to Accessing basic analytics reports") ![](/assets/images/Analytics_002-a833f371444305a17f3c47cbd894788d.png) *Pictured: The Dashboard > Analytics tab.* To generate and download a basic analytics report, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Analytics tab**. 3. Use the calendars to select a start date and an end date for your report. 4. Click the **Generate Analysis Report button**. ![](/assets/images/Analytics_003-c30e8dc87d701afd6e77bdbbe54de4f9.png) 5. A pop-up will appear confirming that your report has been created. Click the **Email Report button** to send a copy of the report file to your email address. Click the D**ownload Report button** to immediately download the report file to your computer. info The filename will automatically indicate the World ID, ISO date, and generation time of the report. Please note that the generation time is listed in 24-hour format GMT. --- ### Creating and managing user accounts [YouTube video player](https://www.youtube.com/embed/yb99cXQ1Oyo) #### Overview [](#overview)[​](#overview- "Direct link to overview-") There are a number of ways that you can invite users to join you in Breakroom. You can: * Create multiple user accounts simultaneously by [uploading a CSV file](/opening-the-doors/creating-and-managing-user-accounts.md#importing-and-exporting-users-lists) * Create user accounts one at a time by manually [editing your user records](/opening-the-doors/creating-and-managing-user-accounts.md#adding-individual-users) * Allow users to [register their own account](/opening-the-doors/creating-and-managing-user-accounts.md#enabling-self-registration) the first time they visit your World * Enable your existing [single sign-on (SSO)](/opening-the-doors/creating-and-managing-user-accounts/single-sign-on.md) service Finally, if you're hosting a free or for-cost ticketed event in Breakroom, you'll want to take advantage of [Eventbrite integration](/opening-the-doors/creating-and-managing-user-accounts/eventbrite-integration.md) to make logistics a snap. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Importing and exporting user lists[​](#importing-and-exporting-user-lists "Direct link to Importing and exporting user lists") CSV files, or *comma-separated values* files, are spreadsheets containing relevant user account information. Uploading a populated CSV file will create an account for each user listed on the spreadsheet, complete with password. You can also include important institutional information about each user, which may be displayed in their [user profile](/exploring-breakroom/networking-with-other-users.md) or in-world hovertext (the identifying text that appears above each avatar's head). ##### Downloading a blank CSV file[​](#downloading-a-blank-csv-file "Direct link to Downloading a blank CSV file") You can download a fresh, unpopulated CSV file by clicking on the file link below. [Download Breakroom CSV 2024.csv]() You can also download an unpopulated CSV file directly from the Dashboard. Click on the **Manage Users tab**, and then click the **Import Users button**. The Import Users window will appear. Click on the link that says "Download CSV Model," and save the file to your computer. ![](/assets/images/Managing_Users_001-c7a89413affcf96873e08886de1c78f2.png) *Highlighted: The location of the "Download CSV Model" link.* ##### Opening and editing a CSV file[​](#opening-and-editing-a-csv-file "Direct link to Opening and editing a CSV file") ![](/assets/images/Managing_Users_002-c82b49829c1c882c36c16199c4034f48.png) *Pictured: A blank Breakroom CSV file open in Microsoft Excel.* You can open and edit CSV files using any commonly available spreadsheet software, such as Microsoft Excel or Google Sheets. When you open a blank Breakroom CSV file, you will see a series of fields where you can enter required or optional information. Required information includes: * Display Name: This is the name that serves to identify the user while they are in-world. It will appear in the identification tag that hovers over the user's avatar, as well as in the user's [profile](/exploring-breakroom/networking-with-other-users.md). *Display names can be changed at any time by the World Owner or a World Administrator.* * Username: This is a permanent username that serves to identify the account. It can also be used in place of the user's email address during the login process on the [desktop viewer](/opening-the-doors/desktop-viewers.md). * Email address: This should be an email address to which the user has full access, in case they need to change their password. * Password: This should be a complex, unique password of six or more characters. * Type: This field should contain the user's [World-level permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) type. (If you do not enter a value in this field, the user type will default to [*Guest*](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#guest)*.*) info Usernames can contain a maximum of 32 characters. Only alpha-numeric characters, spaces, underscores, periods, and dashes can be used. *If you do not enter a custom username, one will be auto-generated from the user's display name.* Optional fields include: * Title: This is optional information that will also appear in the hover tag displayed above the user's avatar, as well as in their profile. For instance, you might use this field to identify a "Senior Delegate," or make it something fun like "Metaverse Wanderer." * Job Title: This refers to the user's actual job title. If you supply this information, it will be displayed in the user's hover tag and in their profile. * Company: The company the user works for. If you supply this information, it will also be displayed as described above. ![](/assets/images/Managing_Users_003-f646bcb9092bd55831c5f1c021354371.png) *Pictured: Using Google Sheets to export (download) an example file in CSV format.* Once you've entered the minimum required user data, you will need to save or export the document in CSV (.csv) format. You can change the document name if you like. ##### Uploading a CSV file[​](#uploading-a-csv-file "Direct link to Uploading a CSV file") ![](data:image/png;base64,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) *Highlighted: The location of the Import Users button.* To upload a CSV file, navigate to the **Manage Users tab** of your Dashboard and click the **Import Users button**. ![](/assets/images/Managing_Users_005-58b3d0a465a305eba9762429cbfda035.png) *Highlighted: The location of the "Upload file" field.* In the Import Users window that appears, click the "**Upload file" field**. This will launch a standard file import window on your computer. Locate the CSV file you want to upload, click on it, and then click the **Open button**. ![](/assets/images/Managing_Users_006-2bda78b3fd6dd17837e5e53fc19f17f8.png) *Pictured: The CSV file verification message.* If your CSV file contains any errors, the document will be rejected and those errors will be highlighted so you can make the necessary corrections. If no errors are detected, you will see the "CSV file verification succeeded" message displayed in the image above. Click the **Import CSV button** to continue. ![](/assets/images/Managing_Users_007-5063e591f5c0e0991428b32712e4dcd6.png) *Pictured: The Manage Users panel.* Once you've successfully imported your users, you will see them listed under the Manage Users panel. You can click the **pencil icon** located next to a user's name to manually edit their information, or click the **trash can icon** to remove them from your user list altogether. If you need to locate a particular user or set of users, you can also make use of the following functions: * The **search field** in the upper left corner allows you to search for a name, email address, or specific user ID. * The **"Search by status" drop-down menu** allows you to display only those users who have a particular status (e.g. active, pending, etc.). * The **"Select user type" drop-down menu** allows you to display only users of a certain type (e.g. World Administrators, World Developers, etc.). ##### Exporting existing users as a CSV file[​](#exporting-existing-users-as-a-csv-file "Direct link to Exporting existing users as a CSV file") ![](data:image/png;base64,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) *Highlighted: The location of the Export Users button.* To download a CSV file containing all of your current user information, click the **Export Users button**. #### Adding individual users[​](#adding-individual-users "Direct link to Adding individual users") ![](data:image/png;base64,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) *Highlighted: The location of the Add Users button.* Adding a user to your roster manually is as simple as filling out a text form. To begin, navigate to the **Manage Users tab** on your Dashboard and click the **Add Users button.** ![](/assets/images/Managing_Users_010-3beb97d9c4a0611772c42b90b43268d7.png) *Pictured: The Add Users window.* The Add Users window will appear. To create a new user account, you will need to provide at least a **Display Name, Username**, **email address**, and **password**. You'll also need to choose a [user type](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md). If you want to add more than one user during a single session, click the **plus icon** in the bottom left corner to generate an additional set of user information fields. When you are finished keying in your user data, click the **Add User button**. #### Assigning user types[​](#assigning-user-types "Direct link to Assigning user types") ![](/assets/images/World_Permissions_001-0014c771c04d9c6f05f4604b77417d69.png) User types correspond to [World-level user permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md), and can be changed by clicking the **pencil icon** located to the right of a user's name and then selecting the type to be assigned. A detailed explanation of the different user types and [step-by-step instructions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#assigning-and-revoking-advanced-world-level-permissions) for assigning or revoking World-level user permissions are also available. #### Managing user status[​](#managing-user-status "Direct link to Managing user status") ![](/assets/images/Managing_Users_011-b7a8ab7c6e9c289690659690ede0c4d1.png) *Highlighted: The "Search by status" drop-down menu and the user status column.* In addition to a user type, each user is also assigned a *status*. You can use the **"Search by status" drop-down menu** to display only the users assigned that particular status, and to narrow down your search for a specific user. The status types are: * Active: The user's account is active and accessible to the user. They can log in to your World. If you have assigned them advanced [World-level user permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md), they have access to the virtual tools they need (e.g. Curator). * Inactive: The user's account information is preserved, but they cannot currently log in to your World. See the section that follows for more information about [activating and deactivating users](/opening-the-doors/creating-and-managing-user-accounts.md#activating-and-deactivating-users). * Pending: The user's account is pending activation, and they have not yet logged in. This may be due to a lack of available [seats](/opening-the-doors/seats-and-concurrency.md). warning By default, inactive users will not be displayed in your user list. To see your Inactive users, please use the **"Search by status" drop-down menu** to select the *All* or *Inactive* option*.* #### Activating and deactivating users[​](#activating-and-deactivating-users "Direct link to Activating and deactivating users") ![](/assets/images/Managing_Users_012-994b7dc389f5c5150264c918c59de819.png) *Pictured: The Manage Users tab on Dashboard, with the user management tools highlighted.* Users can be deactivated individually or in bulk. When a user is deactivated, they will still appear under the Manage Users tab, with their user status changed to *Inactive*. They will no longer be able to log in, and will no longer take up one of your account's [seats](/opening-the-doors/seats-and-concurrency.md). ![](/assets/images/Managing_Users_013-d5c6b53f742170e898aad460cee9867a.png) *Pictured: A deactivated member listing. Notice how the trash can icon has been changed to an "undo" icon.* To deactivate an individual user, click on the **trash can icon** located to the right of their name. The trash icon will then change to an **undo icon**. To reactivate the user, click the **undo icon**. To deactivate or activate multiple users at once, check off each relevant name in your user list and then click the **trash can icon** or **undo icon** located in the top right above the user list. ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAAA2CAYAAAAbFM0HAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDsMgDPvnFDsCeRDCcejaSbvBjj9T0qndZolgbGRC0vZ6PtJtgEmTlurWzDKgTRt3EM8Tfa+Uda87KodHVz2JhcGQBLvMo4dOh06fgLl1sHIK8nsYy9VoGvn+FRQdyeho8DWCWgQJT4MioM9vZWtez19YtnyFz5VGUb+2/XOumN5a8I4wb0KSUUV8NiBjaZIOYqgshoskBVyhdVy1CMNA/s3pQHoD73VZI2eP3y0AAAGEaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBzFX1O1IhURO0hxyFCd7KIijqWKRbBQ2gqtOphc+gVNGpIUF0fBteDgx2LVwcVZVwdXQRD8AHF2cFJ0kRL/lxRaxHhw3I939x537wChWWWq2RMDVM0y0om4mMuvioFX9CGMYQQhSszUk5nFLDzH1z18fL2L8izvc3+OQaVgMsAnEseYbljEG8Szm5bOeZ84xMqSQnxOPGnQBYkfuS67/Ma55LDAM0NGNj1PHCIWS10sdzErGyrxDHFEUTXKF3IuK5y3OKvVOmvfk78wWNBWMlynOYYElpBECiJk1FFBFRaitGqkmEjTftzDH3b8KXLJ5KqAkWMBNaiQHD/4H/zu1ixOT7lJwTjQ+2LbH+NAYBdoNWz7+9i2WyeA/xm40jr+WhOY+yS90dEiR8DQNnBx3dHkPeByBxh90iVDciQ/TaFYBN7P6JvywMgtMLDm9tbex+kDkKWulm+Ag0NgokTZ6x7v7u/u7d8z7f5+AKZNcrsEbGNFAAANdmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpiZmU3YWJkZi00MTQyLTQ1OWUtYjY0My02NDgwOWQ2MjkyMmMiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OGQzMDA5OWYtOGM4OS00Yjk3LTkyNmYtOWI3MGU4MTFkN2VkIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MGQzZmI4ZWItNjUxMy00YmUyLWJhMDEtYzIyMzVkZWJhOWQwIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTk0MzA4Mzc0NTE2MzEiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDY6MjZUMTU6NDA6MzYtMDQ6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA2OjI2VDE1OjQwOjM2LTA0OjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Mjk2NTFjZjYtMjI3Mi00OGM1LTlmZGItMDU4MDZhODU2NjcxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA2LTI2VDE1OjQwOjM3Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PhMaAtUAAAAGYktHRAA1ADcASMmhtj4AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBhoTKCWOHhbQAAADXElEQVR42u2cz0vjQBTHvw2SonQuJgiTgwSE8VIPErpdvHjUBT31f9RTTx4WBRG8uCyMePFgUIgomYtBaKKYUM0elgZ3q2vEH5sJ73Mq9KVt5sN78+a1tPHl67cchPYYeU4edefh4QEGAJBMvSUC+C2SZOot8Q+RJFNfiQAw8XdAnuf4+eM7rVSF6XRXx5sdWpaadK20BCSSIJEEiSRIJIkkSCRBIgkSSSIJEkmQSOLNTHzmm8VxDKUUoihCFEW4urqC53lYWFjQdgHzPMfx8TGiKAIATE9Po91uo9Fo1Fek7/uQUsKyLFiWhcFggCAI4LoukiRBGIaIoghxHINzjqWlpcqLPDw8xNHRESYnJwEAZ2dnuL29Rbfbra9IxhgAwLIsAECWZVBKYXNzcyzWNE0tMvLi4gKO42BlZQUAsLe3hyAIPl1ko9NdHftZwHt8sTwqn6NyGscx4jh+Nt40zSJTbdsuHleFJEmwsbHxptfo9Xrvck9PfbH8YRm5vb2NJEmefI5zDsYYGGPgnMO27cpnoGma8DwPUko4jgPOeanrlFIIwxCe52Fqakq/0soYQ7PZBGOsyK7RYx15LJJzDs/zSl0npSxEarlHrq+vY2trC0EQIAiCV13red6H3zidI1+BrtlXlvPzc/T7fQDA/v4+dnd3AQD9fh+np6f16Vqbzeabutuqk6ZpcX4cDAZI07Ro9O7u7uoj8qUGRghRND2tVgtRFOHg4ACtVotqZZVEvlRaHceBEIIsVH2PfIkwDMfOaiPBRIUy0rbtQsyodKZpCtu20W63x4T9a2BAVGCPDMMQQgj0er2xmCzLsLOzAyEE4jim/bGKIh/j+z6UUhBCFHvn6IyZZVlRZstOTIhPFsk5h1KqKJ1SytosnmVZxeBCCIH7+/tioDEzM1PPjCyLTo3O48H+4+77f0ylPrxr1eVwX3rBDAPD4bB0/HA4hGEY+mek67rwfb90fNXPlXNzczg5OcHl5WWp+JubG7iuWw+Ra2trCIKgGGc9V6bm5+crn8HLy8uQUuL6+rpU/OzsLBYXF+uxRzqOU5tDvmEY6HQ61ftc1LjXZO+mJSCRBIkkSCRBIkkkQSIJEkm8gicnO0/9JJ3QLCPpHyJrIJIk1kAkSayBSJKoP78AEb4/PNAkb6QAAAAASUVORK5CYII=) *Pictured: The undo icon and the trash can icon.* If a user seems to disappear from your user list when you deactivate them, make sure that the **"Search by status" drop-down menu** is set to show *All* users or *Inactive* users. If it is set to any other option, you may not see your full user list. ![](/assets/images/Managing_Users_015-8f6598913a1618073287a525aa30ea78.png) *Pictured: The "Search by status" drop-down menu, showing the different filtering options.* warning When you reactivate an inactive user account, the account will default to *Pending* status and *Guest* type. You will need to update their [World-level user type](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) manually. #### Enabling self-registration[​](#enabling-self-registration "Direct link to Enabling self-registration") ![](/assets/images/Managing_Users_016-f67156938172028895b127058d8291c9.png) *Highlighted: The location of the Self Registration toggle.* When self-registration is enabled, users who access your World through [World Stream](/opening-the-doors/world-stream.md) or a dedicated [desktop app](/opening-the-doors/desktop-viewers.md) can sign up for their own account. Each user registration will take up one of your available [seats](/opening-the-doors/seats-and-concurrency.md), and users will be given the opportunity to pick a [starter avatar](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md) from your default avatar collection. You can enable or disable self-registration from your Dashboard by following the steps below. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > World Access tab.** 3. Click the **Self Registration toggle** to enable or disable self-registration. info If self-registration is disabled, you will need to import or manually create user accounts using the steps outlined [above](/opening-the-doors/creating-and-managing-user-accounts.md#overview), or [enable SSO](/opening-the-doors/creating-and-managing-user-accounts/single-sign-on.md). --- ### Eventbrite integration [YouTube video player](https://www.youtube.com/embed/QUQ4cFpSw10) #### Overview [](#overview)[​](#overview- "Direct link to overview-") By integrating your Breakroom account with Eventbrite, you can sell or distribute tickets to a virtual event and trust the backend logistics to us. Breakroom will automatically create a user account for anyone who purchases a ticket, using their ticket number as the password. If an account already exists under a user's email address, Breakroom will reactivate that account and reset the password to the ticketholder's current ticket number. ![](/assets/images/Eventbrite_001-6b798ecab36212beebbad9aa0daf094e.png) *Pictured: An example event listing in Eventbrite.* In order to integrate Breakroom and Eventbrite, you will need an active Eventbrite account. As a first step, log in to your Eventbrite account and **create the event** you plan to host in Breakroom. You can then follow the instructions outlined below to integrate your event with Breakroom's systems. #### Getting your Eventbrite API key [](#getting-your-eventbrite-api-key)[​](#getting-your-eventbrite-api-key- "Direct link to getting-your-eventbrite-api-key-") Once you've created your event on Eventbrite, you'll need to locate the API key associated with that event and enter it into the Breakroom Dashboard. To get started, navigate to your **Eventbrite account settings page**. ![](/assets/images/Eventbrite_002-e7954133ed7bc3c4ce5c012d2ee042fa.png) *Highlighted: The location of the Account settings page on Eventbrite.* On the left side of the account settings page, you'll see a drop-down menu called **Developer Links**. Expand it, and click on the tab that says **API Keys**. Then click on the button that says **Create API Key**. ![](/assets/images/Eventbrite_003-48972d6a45650584f4e49bb4208b7d71.png) *Highlighted: The API Keys tab, as well as the location of the "Create API Key" button.* Fill out the required information, and click the **Create Key button**. ![](/assets/images/Eventbrite_004-0703fcc0748ff0d5cb875f6dd988b7db.png) *Pictured: The Eventbrite API key request page.* ![](/assets/images/Eventbrite_005-58fd9383564590d3a6e0875fbf23aa41.png) *Pictured: An example of how your API key may appear once generated, with the private token key highlighted.* Your API key should be generated automatically. Click the **> arrow** above the application name (in this case, **Breakroom**) to expand the key information menu. **Highlight and copy the private token key**. ![](/assets/images/Eventbrite_006-0cb4892714b7d82f4776682b194284ca.png) *Pictured: The Dashboard > Integration tab.* From here, you will need to enter the private token key into the Breakroom Dashboard. Follow the instructions below to do so. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Integration tab**. 3. Under the **Select an integration to configure** panel, click on the **Eventbrite button**. 4. Paste your Eventbrite private token API key into the **field**. 5. Click the **Create payload URL button**. Under the **Payload URL** panel, a special URL will be generated for you. 6. **Highlight and copy the payload URL**. 7. Return to the Eventbrite page to complete setup. #### Setting up Webhook with payload URL[​](#setting-up-webhook-with-payload-url "Direct link to Setting up Webhook with payload URL") ![](/assets/images/Eventbrite_007-6d8688308dd0767632cfb45c43d4ad91.png) *Pictured: The Webhooks tab on Eventbrite, with the Add Webhook button highlighted.* After you receive your payload URL, click on the **Webhooks tab** under Developer Links on your Eventbrite account settings page. Then click the button that says **Add Webhook**. ![](/assets/images/Eventbrite_008-f05c28509269177e2d27f50c1e490016.png) *Pictured: The Eventbrite "Add Webhook" page.* From here, you will need to enter the payload URL into Eventbrite. Follow the instructions below to do so. 1. Paste the **payload URL** into the top field. 2. Using the drop-down **Event menu**, select either a specific event or *All Events*, if you want to link more than one event to a single ticket purchase. 3. Check the box beside **order.placed**. 4. Click the button that says **Add Webhook**. Once all of these steps are completed, you are ready to go. #### **Onboarding Eventbrite ticketholders** [](#onboarding-eventbrite-ticketholders)[​](#onboarding-eventbrite-ticketholders- "Direct link to onboarding-eventbrite-ticketholders-") When users purchase a virtual event ticket through Eventbrite, they will **not** receive a confirmation email from Breakroom. Therefore, we strongly encourage event organizers to use their Eventbrite listing, email, or other relevant tools to provide ticketholders with the information they will need to log in. Key points to communicate to ticketholders include: * Breakroom will automatically create a user account for anyone who purchases a virtual event ticket through Eventbrite. Their login will be the e-mail they provided to Eventbrite, and their password will be their ticket number. * If a Breakroom account already exists under a user's email address, Breakroom will reactivate that account and reset the password to the ticketholder's **current** ticket number. * Users will need to download the custom Breakroom desktop app or sign in through World Stream. Links to [download the app](/opening-the-doors/desktop-viewers.md) or access your dedicated [World Stream](/opening-the-doors/world-stream.md) can be found on the **Your Apps** tab on the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md#your-apps). --- ### Region-level user permissions #### Overview[​](#overview "Direct link to Overview") There are two categories of special user permissions that you can assign to teammates, event coordinators, or end usersβ€”[**World-level permissions**](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md), and **Region-level permissions**. It is important to note that these two categories are distinct, with their own separate spheres of influence and control. On this page, we will discuss Region-level user types. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Region-level user types[​](#region-level-user-types "Direct link to Region-level user types") Users with advanced Region-level permissions have *powers that apply to individual Regions within your World*. These users can assist with setting up individual Regions and moderating events, but cannot access the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md) in order to manage user accounts, approve content submitted to [Curator](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md), or change your World-level settings unless you have *also* assigned them [advanced World-level permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md). It may be helpful to think of advanced Region-level permissions as those you can assign and manage through the [Region Information window](/building-new-worlds/region-settings.md). In brief, the current Region-level user types are: * Owner * Administrator * Moderator * Developer * Member * Guest * VIP Region Owners have absolute control over the Region and its settings. Region Owners can: * Access the Region [moderator tools](/running-your-event/moderator-tools.md). * Access the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). * Access the [Region Information window](/building-new-worlds/region-settings.md) and edit the Region settings. * Manage the [Region member list](/building-new-worlds/region-settings.md#controlling-region-access) and deal with [disruptive users](/building-new-worlds/region-settings.md#muting-and-banning-region-visitors). * Assign other users advanced [Region-level permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md#assigning-and-revoking-advanced-region-level-permissions). Region Administrators can perform many of the same tasks as Region Owners. They cannot appoint additional Administrators. Region Administrators can: * Access the Region [moderator tools](/running-your-event/moderator-tools.md). * Access the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). * Access the [Region Information window](/building-new-worlds/region-settings.md) and edit most Region settings. * Manage the [Region member list](/building-new-worlds/region-settings.md#controlling-region-access) and deal with [disruptive users](/building-new-worlds/region-settings.md#muting-and-banning-region-visitors). * Assign other users advanced [Region-level permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md#assigning-and-revoking-advanced-region-level-permissions) below the Administrator level. Region Moderators have access to the moderator controls and certain Region settings. They cannot appoint additional Moderators. Moderators can: * Access the Region [moderator tools](/running-your-event/moderator-tools.md). * Access the [Region member list](/building-new-worlds/region-settings.md#controlling-region-access) and in order to deal with [disruptive users](/building-new-worlds/region-settings.md#muting-and-banning-region-visitors). * Assign other users advanced [Region-level permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md#assigning-and-revoking-advanced-region-level-permissions) below the Moderator level. Region Developers have access to the Region Editor, and can decorate and modify the Region to which they are assigned. They do not occupy a [World Developer sea](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#developer)t, and cannot upload content to Curator. Developers can: * Access the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). Region Members have no special privileges, but will be permitted to enter the Region should [Contact Only](/building-new-worlds/region-settings.md#contact-only-1) or[ Approved Only](/building-new-worlds/region-settings.md#approved-only) access be enabled. If an unassigned user enters your Region, they will appear in the member list as a *Guest*. Guests have no special privileges, and will not be permitted to enter the Region if access is [controlled](/building-new-worlds/region-settings.md#controlling-region-access). Designating a user as a VIP gives them no special powers. Currently, this role is only useful for Lua script functionality and [presenter seats](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md). #### Assigning and revoking advanced Region-level permissions[​](#assigning-and-revoking-advanced-region-level-permissions "Direct link to Assigning and revoking advanced Region-level permissions") ![](/assets/images/Region_Settings_007-a4fefa49af11e134dbf06279820e588d.png) *Pictured: The Region Information window > Members tab.* To assign advanced Region-level permissions to individual users, follow the steps below. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click the **Region Information button** located above the [mini map](/getting-started/ui-tour.md#the-mini-map). 3. Click on the **Members tab** in the Region Information window. 4. Click the **Add Members button** to open the "Add new members" dialog box. Locate the user you want to whitelist by using the **search field**, and then click the **Add button** beside their name. 5. Once the user is added to the Region members list, check the **box** next to their name and then click on the **Set Role drop-down menu**. From this menu, select the permissions level you'd like to assign the user. To revoke advanced Region-level permissions, repeat the steps above and select a new role (e.g. *Member* or *Guest*). You can learn more about [managing Region members](/building-new-worlds/region-settings.md#approving-region-members) in our [Building New Worlds section](/building-new-worlds.md). ##### Removing Region members[​](#removing-region-members "Direct link to Removing Region members") To remove a user from the Region members list entirely, follow these steps. 1. Click the **Region Information button** located above the [mini map](/getting-started/ui-tour.md#the-mini-map). 2. Click on the **Members tab** in the Region Information window, and use the **search field** to search for the user's name. 3. Once you locate the user you want to remove, click the **Edit button** located to the right of their name. In the action menu that appears, click **Delete**. #### Assigning Region control to a group [](#assigning-region-control-to-a-group)[​](#assigning-region-control-to-a-group- "Direct link to assigning-region-control-to-a-group-") By enabling the ["Groups Only" Region access option](/building-new-worlds/region-settings.md#groups-only), you can assign control over a Region to one or more [groups](/exploring-breakroom/networking-with-other-users/groups.md). When a Region is set to "Groups Only," then the group member lists will override the Region's existing members list, *including any Region members with advanced permissions.* This means that only *Group* Administrators, *Group* Moderators, *Group* Developers, etc. will be able to exercise their powers over the Region as a whole. Additionally, only group members will be permitted to visit the Region. Any users in the Region member list will be ignored. To disable group control over the Region, [choose](/building-new-worlds/region-settings.md#controlling-region-access) a different Region access option. Doing so will restore access and advanced permissions to any users in the Region members list. --- ### Single sign-on #### Overview [](#overview)[​](#overview- "Direct link to overview-") By enabling single sign-on (SSO) on Breakroom, you can provide your users with a secure and simplified login process. Integrating your current identity management system with Breakroom takes only a few minutes, but has the potential to save you a lot of hassle. In order to enable SSO, you will need to contract for services with an Identity Provider (IdP). Some IdPs to consider include Okta and Microsoft Azure. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Enabling SSO [](#enabling-sso)[​](#enabling-sso- "Direct link to enabling-sso-") To enable SSO within Breakroom, you will need to copy the parameters Breakroom provides and enter them into your IdP's SAML Signing Certificate generator. Your IdP will then provide you with a SAML Signing Certificate, which will include a metadata file containing additional information. You will need to enter this information into the Breakroom Dashboard in order to complete setup. ![](/assets/images/Single_Sign_001-14114efebd5e3546e63bcf0811f2d53c.png) *Highlighted: The Dashboard > World Customization > World Access tab, and the location of the SSO Login toggle.* You can enable SSO within Breakroom by following the steps below. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > World Access tab**. 3. Click the **SSO Login toggle** to enable SSO. ![](/assets/images/Single_Sign_002-eda5d5edab206cf335294a44a7083ac6.png) *Pictured: The SSO Settings > Identity Provider Setup panel.* 5. Once the SSO Login toggle is enabled, several additional sections will appear on your screen. Scroll down to the **Identity Provider Setup panel**. 6. Here you will see two parameters provided in the form of linksβ€”the **SSO URL** and the **SP Entity ID**. You can click the **copy icon** located next to either of these parameters in order to copy it. 7. Enter these parameters into the SAML Signing Certificate generator on your IdP's website. Once your IdP finishes creating your SAML Signing Certificate, they will provide you with a metadata file. ![](/assets/images/Single_Sign_003-ddec0254f7f3c9bba68d38b6eaaf8307.png) *Pictured: The IdP panel.* 8. Return to the Breakroom Dashboard and scroll to the **Details Provided by your Identity Provider section**. Enter the **Entity ID, X.509 Certificate, and Sign-in URL parameters** from the IdP metadata file into the relevant fields. 9. Click the **Save button**. ##### Important notes [](#important-notes)[​](#important-notes- "Direct link to important-notes-") Upon enabling SSO, user accounts are *not* automatically generated in Breakroom, and you will not see any users appear under the [Manage Users tab](/opening-the-doors/creating-and-managing-user-accounts.md). Instead, Breakroom accounts will be generated as users log in. Each user account will occupy one of the available [seats](/opening-the-doors/seats-and-concurrency.md) under your Breakroom account. ##### Disabling SSO [](#disabling-sso)[​](#disabling-sso- "Direct link to disabling-sso-") To disable SSO integration, follow steps 1-2 as [detailed above](/opening-the-doors/creating-and-managing-user-accounts/single-sign-on.md#enabling-sso) and click the **SSO Login toggle** again. #### Customizing the Breakroom login screen[​](#customizing-the-breakroom-login-screen "Direct link to Customizing the Breakroom login screen") ![](/assets/images/Single_Sign_004-6f63b29057f961775a7b18dcdede0cf5.png) *Pictured: Here the SSO buton has been customized, and the self registration and standard login features have been disabled. The end result is visible in the Login Screen Preview panel.* The World Access tab features a login panel preview, so you can see how your changes will appear on the [World Stream](/opening-the-doors/world-stream.md) landing page and on the [desktop app](/opening-the-doors/desktop-viewers.md). You can also personalize your SSO button with a logo and custom text. To customize the login panel, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > World Access tab**. 3. First, choose which login methods will be available for your users. 1. Enable or disable [self-registration](/opening-the-doors/creating-and-managing-user-accounts.md#enabling-self-registration). 2. Enable or disable [SSO](/opening-the-doors/creating-and-managing-user-accounts/single-sign-on.md#enabling-sso). 3. Enable or disable the standard login (Breakroom account email and password). 4. If you have chosen to enable SSO, you can then customize the SSO login button appearance. 1. In the **Button Text field**, enter the text you would like to appear on the button. 2. If you want to upload a custom logo for the SSO login button, click the **Browse link** in the Button Image field. This will launch a standard file import window on your computer. Locate the image file you want to use, click on it, and then click the **Open button**. 3. If you want to clear the current logo, click the **Delete button.** 5. When you are satisfied with your changes, click the **Save button**. --- ### World-level user permissions #### Overview[​](#overview "Direct link to Overview") There are two categories of user permissions that you can assign to teammates, event coordinators, or end usersβ€”**World-level permissions**, and [**Region-level permissions**](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md). It is important to note that these two categories are distinct, with their own separate spheres of influence and control. On this page, we will discuss World-level user types. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### World-level user types[​](#world-level-user-types "Direct link to World-level user types") Users with advanced World-level permissions have *broad powers that apply to the entirety of your Breakroom World*, but *not necessarily powers that apply to individual Regions*. Users with advanced World-level permissions generally have powers that allow them to manage your Breakroom account, oversee events, and upload new content. ![](/assets/images/World_Permissions_001-0014c771c04d9c6f05f4604b77417d69.png) *Pictured: The user type selection menu, accessible through Dashboard > Manage Users > Edit user.* It may be helpful to think of advanced World-level permissions as those you can assign and manage through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). In brief, the current World-level user types are: * Owner * Administrator * Moderator * Developer * Member * Guest World Owners are responsible for managing [billing details](/building-new-worlds/breakroom-dashboard-tour.md#billing) for their account, and can review their past invoices via the Dashboard. In addition, World Owners can: * Access the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). * Purchase additional [seats](/opening-the-doors/seats-and-concurrency.md), [Daily Passes](/opening-the-doors/seats-and-concurrency.md#daily-passes), and [World Credits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md). * Request [pre-allocation](/opening-the-doors/world-stream/pre-allocation-campaigns.md) for events. * Create and edit [Regions](/building-new-worlds/creating-and-managing-regions.md), [filter Shop contents](/creating-custom-experiences/filtering-the-sinewave-shop.md), make use of World [customization options](/creating-custom-experiences.md). * Edit all [meetings](/exploring-breakroom/using-the-meetings-window.md) hosted on the World. * Access platform [analytics](/opening-the-doors/analytics.md) and make decisions about [user privacy and data collection](/opening-the-doors/privacy-policies-eulas-and-data-collection.md). * Access all [moderator tools](/running-your-event/moderator-tools.md). * Log in to their World while it is [offline](/opening-the-doors/toggling-world-availability.md). * [Upload content](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) to Curator and approve their own content. * [Review](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md) and [approve ](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md)content uploaded by other users. * Modify or overwrite any content uploaded by other users. * Appoint World Administrators and change user types through the [Dashboard](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#assigning-and-revoking-advanced-world-level-permissions) or [CSV](/opening-the-doors/creating-and-managing-user-accounts.md#importing-and-exporting-user-lists). World Administrators can perform many of the same tasks as World Owners, except they will not have access to billing information. They also cannot appoint additional World Administrators. World Administrators can: * Access the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). * Purchase additional [Daily Passes](/opening-the-doors/seats-and-concurrency.md#daily-passes) and [World Credits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md). * Request [pre-allocation](/opening-the-doors/world-stream/pre-allocation-campaigns.md) for events. * Create and edit [Regions](/building-new-worlds/creating-and-managing-regions.md), [filter Shop contents](/creating-custom-experiences/filtering-the-sinewave-shop.md), make use of World [customization options](/creating-custom-experiences.md). * Edit all [meetings](/exploring-breakroom/using-the-meetings-window.md) hosted on the World. * Access platform [analytics](/opening-the-doors/analytics.md) and make decisions about [user privacy and data collection](/opening-the-doors/privacy-policies-eulas-and-data-collection.md). * Access all [moderator tools](/running-your-event/moderator-tools.md). * Log in while the World is [offline](/opening-the-doors/toggling-world-availability.md). * [Upload content](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) to Curator and approve their own content. * [Review](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md) and [approve ](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md)content uploaded by other users. * Modify or overwrite any content uploaded by other users. * Change sub-Admin user types through the [Dashboard](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#assigning-and-revoking-advanced-world-level-permissions). World Moderators have universal access to the moderator controls, so they can moderate events held in any Region. They do not have access to the Dashboard, and they cannot administrate or edit any Regions unless they own that Region or have been given advanced [Region-specific permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md). World Moderators can: * Edit all [meetings](/exploring-breakroom/using-the-meetings-window.md) hosted on the World. * Access all [moderator tools](/running-your-event/moderator-tools.md). * Log in while the World is [offline](/opening-the-doors/toggling-world-availability.md). * Access [Region settings](/building-new-worlds/region-settings.md) in order to mute and block abusive users. World Developers can create and upload content to your World, as well as approve content uploaded by other users. They can also edit existing Regions using the in-world Region Editor. World Developers can: * [Upload content](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) to Curator and approve their own content. * [Review](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md) and [approve ](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md)content uploaded by other users. * Modify or overwrite any content uploaded by other users. * List uploaded items for sale on the [Breakroom Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md). * Access all [moderator tools](/running-your-event/moderator-tools.md). * Log in while the World is [offline](/opening-the-doors/toggling-world-availability.md). * Access the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). info After you have granted a user World Developer permissions, they will need to [log in to Curator](/advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server.md) and accept the Terms and Conditions before they can access the [preview grid](/advanced-tutorials/uploading-your-own-region/testing-items-on-the-preview-server.md). World Members occupy a seat and don't have any special privileges. You may choose to assign World Members [advanced Region-level permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md). World Guest accounts are created when: * You create user accounts by [uploading a CSV](/opening-the-doors/creating-and-managing-user-accounts.md#importing-and-exporting-user-lists), and do not specify another user type in the **Type field**. * While creating user accounts by uploading a CSV, you attempt to import more users than you have available [seats](/opening-the-doors/seats-and-concurrency.md). In this case, the extra user accounts will be created as Guests. * User accounts are automatically generated by [Eventbrite](/opening-the-doors/creating-and-managing-user-accounts/eventbrite-integration.md), or any automated registration process you may choose to use. When World Guest accounts log in for the first time, their account [status](/opening-the-doors/creating-and-managing-user-accounts.md#managing-user-status) will be updated to *Active*. Member-type accounts and higher are always given login priority over Guest accounts. #### Assigning and revoking advanced World-level permissions[​](#assigning-and-revoking-advanced-world-level-permissions "Direct link to Assigning and revoking advanced World-level permissions") ![](/assets/images/World_Permissions_002-bef0478de7d0756aa756d6c28eb3339a.png) *Pictured: The Dashboard > Manage Users tab.* You can assign advanced World-level permissions to individual users by following the steps below. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Manage Users tab**. 3. Locate the name of the user whose permissions you want to edit. (Tip: You can use the **search field** to search by name or email address.) Click the **pencil icon** to the right of their name. 4. In the Edit User window that appears, click on the **permissions type** you would like to assign. 5. Click the **Update button** to save your changes. To revoke advanced World-level permissions, repeat the steps above and select a new user type (e.g. *Member*). You can learn more about [creating and managing user accounts](/opening-the-doors/creating-and-managing-user-accounts.md) in our [Opening the Doors section](/opening-the-doors.md). --- ### Desktop viewers [YouTube video player](https://www.youtube.com/embed/Jjq2pxuQA-g) #### Overview[​](#overview "Direct link to Overview") Breakroom provides desktop application installers for both Windows and macOS. When users log in through your dedicated Breakroom viewer, there are no additional access fees above the cost of their [seat](/opening-the-doors/seats-and-concurrency.md)β€”which means that you won't need to dip into your pool of [World Credits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md). However, users will need to install the Breakroom app on a computer equipped with [hardware](/help/system-requirements.md) that can effectively render 3D Worlds. #### An important note concerning voice chat [](#an-important-note-concerning-voice-chat)[​](#an-important-note-concerning-voice-chat- "Direct link to an-important-note-concerning-voice-chat-") Voice capabilities are currently restricted by login method. This means that if one user is logged in via [World Stream](/opening-the-doors/world-stream.md) and another user is logged in via the desktop app, they will not be able to hear each other over voice chat, even if they are standing in the same Region. Users who log in via the same method can communicate freely. Therefore, we strongly suggest that you take this into consideration when planning your events, and require *all* guests to use either World Stream or the desktop app. We apologize for the inconvenience, and hope to provide a solution soon. #### Downloading the application installers[​](#downloading-the-application-installers "Direct link to Downloading the application installers") ![](/assets/images/Desktop_001-fd7512a7bec69756488eb17c58fcdb21.png) *Highlighted: The location of the Download App button.* You can find your custom application installers on the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). Once you're logged in, click the **Download App button** in the tab header, or navigate to the **Your Apps tab**. ![](/assets/images/Desktop_002-e0de60dd464eeccdae6d9e765848a24a.png) *Pictured: The Dashboard > Your Apps tab.* After you finalize your subscription purchase, it will take 48 hours for Breakroom to generate app installers for your world. Once your installers are ready, they will be added to the **Dashboard > Your Apps tab**, where you can download one or both installers by clicking the **Windows** or **macOS buttons**. We also provide download links that you can distribute to your users. #### Installing the desktop application [](#installing-the-desktop-application)[​](#installing-the-desktop-application- "Direct link to installing-the-desktop-application-") Breakroom's desktop viewer represents a major graphics and performance upgrade compared to [World Stream](/opening-the-doors/world-stream.md). For best performance, you will need a PC or laptop that is capable of running 3D worlds. For maximum performance, we recommend using a machine with a dedicated graphics card. Please review our [system requirements](/help/system-requirements.md) for more information. To install the desktop viewer, follow the steps below. 1. Download the correct installer (Windows or macOS) for your computer. 2. Locate the installer on your hard drive, and double-click on it. 3. Follow the installer prompts. #### Re-creating your installers [](#re-creating-your-desktop-application-installers)[​](#re-creating-your-installers- "Direct link to re-creating-your-installers-") If you decide to update any custom [branding images](/creating-custom-experiences/branding-tools.md) associated with your World, or if you [rename](/building-new-worlds/breakroom-dashboard-tour.md#world-customization) your World as a whole, you will need to create and distribute fresh desktop app installers in order to push those changes to your users. To update your desktop application installers, follow the steps below. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Your Apps tab**. 3. Click the **Re-create Installers** button. Please note that it may take Breakroom up to 48 hours to re-create your app installers. If you need your app installers sooner, please reach out to our [Customer Success Team](/help/where-to-find-support.md). --- ### Privacy Policies, EULAs, and data collection #### Overview [](#overview)[​](#overview- "Direct link to overview-") While few resources are more valuable, there are legal and ethical issues to consider when it comes to collecting and retaining user data. Breakroom offers a suite of tools designed to help [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) implement their existing Data Collection Policies, as well as comply with legislation such as the General Data Protection Regulation (GDPR) and California Consumer Privacy Act (CCPA). Users can also [customize](/getting-started/settings.md#analytics-and-marketing-preferences-settings) their data profile within these specified parameters. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Adding a custom Privacy Policy[​](#adding-a-custom-privacy-policy "Direct link to Adding a custom Privacy Policy") If you plan to collect and retain [user analytics](/opening-the-doors/analytics.md), a custom Privacy Policy is strongly encouraged. Users will be presented with your organization's Privacy Policy the first time they access Breakroom, and will be required to accept the terms before they can log in. ![](/assets/images/Privacy_001-05cc283b98d06dc6ed3eb0f9a18cc6b4.png) *Pictured: An example Privacy Policy.* To add a custom Privacy Policy to your World, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Basic Information tab**. 3. Scroll to the **World Privacy Notice panel**, and paste your Privacy Policy text into the **field**. 4. Toggle the World Privacy Notice **on**. 5. When you are satisfied, click the **Save Changes button**. To disable your custom Privacy Policy, follow steps 1-3 above and toggle the World Privacy Notice **off**. #### Adding a custom EULA[​](#adding-a-custom-eula "Direct link to Adding a custom EULA") If you are running an event that requires an additional End-User License Agreement (EULA), Breakroom makes it easy to seamlessly integrate review and acceptance of this document into the user login experience. Your EULA will appear after the Breakroom TOS, and users will need to accept both in order to access your World. ![](/assets/images/EULA_001-bc2a35ef8c6ded12aadc28226e90be3c.png) *Pictured: An example EULA.* To add a custom EULA to your World, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Basic Information tab**. 3. Scroll to the **Your World's EULA panel**, and paste your EULA text into the **field**. 4. Toggle the Your World's EULA **on**. 5. When you are satisfied, click the **Save Changes button**. To disable your custom EULA, follow steps 1-3 above and toggle the Your World's EULA **off**. #### Managing end user data collection[​](#managing-end-user-data-collection "Direct link to Managing end user data collection") ![](/assets/images/Data_001-1157dc4cb4a1f6b42a76649ab0a9a3c4.png) *Pictured: The World Customization > Basic Information > Data collection panel.* World Owners and World Administrators can make the collection of [user analytics](/opening-the-doors/analytics.md), diagnostic data, and marketing data *optional*. By making the collection of such data optional, you give users the ability to[ opt in or opt out](/getting-started/settings.md#analytics-and-marketing-preferences-settings) of data collection at any time. In certain circumstances, you may have a legitimate interest in tracking platform usage. In these cases, you may elect to make data collection *mandatory*. Please be aware that you have full liability for any misuse of this functionality, and it is strongly recommended that you consult a legal or privacy professional prior to doing so. info For the proper functioning of the platform and security purposes, Breakroom must collect essential data. Essential data are generated primarily in response to actions performed by users, which amount to requests for services. This includes such actions as setting privacy preferences, logging in, and managing content. ##### Turning data collection on or off[​](#turning-data-collection-on-or-off "Direct link to Turning data collection on or off") ![](/assets/images/Data_002-297926b3ac6201bd0b9049de851c8ea7.png) To toggle data collection on or off as a whole, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Basic Information tab**. 3. Scroll to the **Analytics User Consent Management panel**. 4. Choose either to **Collect Data** or **Do Not Collect Data**. 5. When you are satisfied, click the **Save Changes button**. ##### Customizing the user consent pop-up[​](#customizing-the-user-consent-pop-up "Direct link to Customizing the user consent pop-up") ![](/assets/images/Data_003-93571b647585e0a1af295e28debbdcec.png) If you opt to turn on data collection, you can review the different types of data collected and make the collection of each type *Optional* or *Mandatory* using the In-World User Consent Popup panel. Any data collection type marked as *Optional* can be accepted or rejected by users at any time through the in-world [Settings panel](/getting-started/settings.md#analytics-and-marketing-preferences-settings). To customize your data collection policies and user consent pop-up, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Customization > Basic Information tab**. 3. Scroll to the **In-World User Consent Popup panel**. 4. Review the different data types, and toggle each one to be **Optional** or **Mandatory**. 5. Using the **consent toggle** in the upper right corner, confirm whether you want to display the consent pop-up to your end users. 6. When you are satisfied, click the **Save Changes button**. --- ### Seats and concurrency #### Overview [](#overview)[​](#overview- "Direct link to overview-") **Seats** correspond to user licenses, and represent the number of active user accounts that your Breakroom World can accommodate. In addition to the *persistent seats* included with your Breakroom subscription, you can add *temporary seats* to your account through the use of [Daily Passes](/opening-the-doors/seats-and-concurrency.md#daily-passes). **Concurrency** refers to the number of users who can log in simultaneously. Please note that your Breakroom account's concurrency cap may be different than your total seat count. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. info If you need additional persistent seats, please contact our [Customer Success Team](/help/where-to-find-support.md). #### Daily Passes[​](#daily-passes "Direct link to Daily Passes") Daily Passes are temporary seats that permit individual users to access your World for 24 hours, giving you the ability to scale your seat count to meet increased user demand. You can use Daily Passes to invite delegates to a conference, sell tickets to a professional or artistic event, or allow contractors to access your virtual workspace. The possibilities are endless. ##### Usage details[​](#usage-details "Direct link to Usage details") * Daily Passes are activated when your Breakroom account has no open [persistent seats](/opening-the-doors/seats-and-concurrency.md#overview) and a [Guest](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#guest) logs in. * Once activated, a Daily Pass will lock to a single user account and will be deducted from your pool of available Daily Passes. * Daily Passes expire 24 hours after activation. * Unused Daily Passes will roll over month-to-month until your Breakroom subscription is cancelled or expires. ##### Purchasing Daily Passes[​](#purchasing-daily-passes "Direct link to Purchasing Daily Passes") ![](/assets/images/Seats_Passes_001-baaec06cc2afbda421e444ad609d308e.png) *Highlighted: The location of the Daily Pass button.* [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can purchase Daily Passes at any time through the Dashboard by following these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Manage Users tab**. 3. Click on the **Daily Pass button** located in the bottom right corner. This will open the Add Daily Passes window. ![](/assets/images/Seats_Passes_002-f64584bcbadb518d43fc191d46f92b8b.png) *Pictured: The Add Daily Passes window.* 4. Move the **slider** to indicate the number of Daily Passes you need, or enter the number manually in the field located above the slider. 5. Confirm your purchase by clicking the **Add Daily Pass button**. --- ### Toggling World availability ##### Overview [](#overview)[​](#overview- "Direct link to overview-") Breakroom's World Status toggle allows you to restrict access to your World with the flip of a switch. When your World status is set to *Off*, only users with [advanced permissions](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) will be able to log in. You can also schedule a day and time when your world will automatically become accessible to a larger audience, and post a customized message to keep everyone in the loop. warning When your world status is set to *Off*, only World Owners, World Administrators, World Moderators, and World Developers will be able to log in. Members and Guests will no longer have access. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Taking your World offline[​](#taking-your-world-offline "Direct link to Taking your World offline") ![](/assets/images/Availability_001-e1a5f32bf335fef35854631cc011b883.png) *Pictured: An example of the Take World Offline window.* To take your World offline, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Settings tab**. 3. Toggle the **World switch** to *Off*, and the **Take World Offline window** will open. In this window you can: 1. Select a **World Online date and time** (required): This is the time that your Breakroom World will once again become accessible. This time will be displayed to users who try to log in while your World is offline. 2. Enter a **World Offline Notice** (optional): In addition to your chosen go-live time, this notice will be displayed to users who try to access your World while it is offline. 3. Enter a **User Ejection Notice** (optional): This notice will be displayed to online users before they are ejected from your World. 4. Select any **User Types to Be Ejected** (optional): All online users of the selected types will be forcibly logged out once your World goes offline. 4. Once you're satisfied, click the **Take World Offline button**. You will be asked to confirm your choice. ![](/assets/images/Availability_002-deb3b60fbfd065f050bc5ab8bf84cd74.png) *Pictured: Example settings for an offline World.* Once your World is offline, the Settings tab will change to display your chosen go-live time and offline message. You can change these at any time by clicking the relevant **Edit links**. A link is also provided so that you can change your World's [login screen](/creating-custom-experiences/branding-tools.md#uploading-a-custom-login-screen) to a temporary placeholder, as this can assist with messaging. #### Bringing your World online[​](#bringing-your-world-online "Direct link to Bringing your World online") To bring your World back online before your specified go-live time, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **Settings tab**. 3. Toggle the **World switch** to *On*, and confirm your choice by clicking the **Bring World Online button**. --- ### World Stream [YouTube video player](https://www.youtube.com/embed/Jjq2pxuQA-g) #### Overview[​](#overview "Direct link to Overview") World Stream is an innovative cloud-based solution for enterprise and educational communities where members might not have access to advanced graphics processing hardware. World Stream renders your Breakroom World in a series of cloud servers, and then streams a dynamic, *interactive* live video of that World to each user's device. This offers many benefits, including: 1. Users don't need to download or install anything. No plugins, no standalone apps. 2. Users don't need to have the latest and greatest computer hardware. As long as their device can run a supported browser and has access to the Internet, they're ready to stream. World Stream is currently supported on [Chrome](https://www.google.com/chrome/), [Firefox](https://www.mozilla.org/en-US/firefox/new/), and [Microsoft Edge](https://www.microsoft.com/en-us/edge). ***For the best possible experience, we recommend using Chrome.*** You can review detailed [technical specifications](/help/system-requirements.md) in our [Help section](/help.md). warning Microsoft Edge usually comes bundled with Windows. In order to use World Stream, you must use the version of Edge which, like Google Chrome, is built on the Chromium engine. Prior to logging in to World Stream through Microsoft Edge, please make sure that Windows Update has been run recently and that you are using the most recent version of Edge. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Basic World Stream functionality [](#basic-world-streaming-functionality)[​](#basic-world-stream-functionality- "Direct link to basic-world-stream-functionality-") World Stream access is provided by AWS, which uses a variety of locations for delivery. Upon logging in, World Stream users will automatically be assigned to an available, low-latency AWS instance close to their physical location. In order for World Stream to be delivered, system administrators will need to whitelist the following domains: `*.breakroom.tech` `*.amazonappstream.com` `*.appstream2.eu-central-1.aws.amazon.com` `*.appstream2.eu-west-1.aws.amazon.com` `*.appstream2.eu-west-2.aws.amazon.com` `*.appstream2.eu-east-1.aws.amazon.com` `*.furioos.com` Additionally, please enable outbound UDP and TCP traffic on ports 443, 8433, and 53. You can learn more about AWS allowed domains by visiting [this page](https://docs.aws.amazon.com/appstream2/latest/developerguide/allowed-domains.html). If you encounter problems with WebRTC, you can perform a WebRTC test at . info Users attempting to connect to Breakroom from behind an aggressive firewall may run into issues, as they will have limited access to the Internet. In these cases, a commercial TURN server may provide the necessary solution. #### World Stream server types[​](#world-stream-server-types "Direct link to World Stream server types") Breakroom offers two types of server accessβ€”Ultra Servers and Lite Servers. Ultra Servers are recommended for [high user concurrency](/opening-the-doors/seats-and-concurrency.md) cases, while Lite Servers are an economical choice for smaller events. Please see our information on [purchasing and managing World Credits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#choosing-your-world-stream-server-type) and [event pre-allocation](/opening-the-doors/world-stream/pre-allocation-campaigns.md) for more details. #### World Credits[​](#world-credits "Direct link to World Credits") When users log in through your dedicated Breakroom [desktop app](/opening-the-doors/desktop-viewers.md), there are no additional access fees above the cost of their [seat](/opening-the-doors/seats-and-concurrency.md). World Stream access, on the other hand, must be purchased on a per user/per time basis using a digital currency known as *World Credits.* [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can [purchase additional World Credits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md) at any time. Unused World Credits never expire, even if your Breakroom subscription lapses. ##### Partial hours and World Credit consumption[​](#partial-hours-and-world-credit-consumption "Direct link to Partial hours and World Credit consumption") Due to the way AWS structures its billing, World Stream usage is currently calculated in hourly increments (i.e., multiples of 60 minutes). This hourly calculation policy also extends to [pre-allocation campaigns](/opening-the-doors/world-stream/pre-allocation-campaigns.md) and [user session time limits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#setting-usage-limits). This means that users cannot consume partial hours while logged in to World Stream. For example, if a user logs in for 20 minutes, the cost of one hour of access (60 minutes) will be deducted from the World Credits available on the account. #### Launching World Stream[​](#launching-world-stream "Direct link to Launching World Stream") World Stream can be accessed just like any other website. When you purchase a Breakroom subscription, you will be provided with a dedicated World Stream URL. You can copy this URL in order to share it with your users. ![](/assets/images/World_Stream_001-4d3e310d54dbb72581aff92a173a6e8a.png) *Highlighted: The Breakroom access buttons in the site and secondary tab headers.* When you log in to the Breakroom [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md), you will see a permanent *site header* (in the example image above, this header is dark purple). You will also see a secondary *tab header* on each Dashboard tab you visit. Several of the buttons in these headers can be used to launch World Stream or access the World Stream URL. Here's a brief overview of the UI. | Header button | Function | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Add Credits | Allows you to purchase World Credits instantly from any page on the Dashboard. | | Enter Your World | Opens your dedicated World Stream URL in a new tab. | | Advanced | Allows World Owners, Administrators, and Developers to log in to [Curator](../../advanced-tutorials/uploading-your-own-region/pushing-items-to-the-live-server). | | Power icon | Logs you out of the Dashboard. | | Copy World URL | Copies your World Stream URL to your computer's clipboard. | | Download App | Directs you to the [Your Apps tab](../../building-new-worlds/breakroom-dashboard-tour#your-apps). | ##### Media access permissions[​](#media-access-permissions "Direct link to Media access permissions") When you click on a World Stream URL, your browser may request permission to use your microphone or camera. If a pop-up like this appears, click **Allow** or **Okay.** If you accidentally refuse permission or close the pop-up without making a choice, see our [troubleshooting documentation](/opening-the-doors/world-stream/troubleshooting-world-stream-issues-on-chrome.md) for assistance. #### Logging in to World Stream[​](#logging-in-to-world-stream "Direct link to Logging in to World Stream") ![](/assets/images/World_Stream_002-c65302af3b2dffe70e422f9b6454f05d.png) Once you've opened the World Stream URL in your web browser, you'll see an **Account Login panel**. Here you can either enter your credentials and click the **Login button** to connect to World Stream, or sign up for a new account if [self-registration](/opening-the-doors/creating-and-managing-user-accounts.md#enabling-self-registration) is enabled. Once you've successfully logged in, that's it! Basic information about using Breakroom can be found in our [Getting Started section](/getting-started.md). ##### Switching World Stream user accounts[​](#switching-world-stream-user-accounts "Direct link to Switching World Stream user accounts") ![](/assets/images/World_Stream_003-f70c54fa5c4c9ec3740923bd06d9ecfa.png) If you close World Stream and attempt to start it again a short time later, you may see an account confirmation dialog box appear during the login process. If you want to log in under the account you previously used, click **Continue**\*\*\*.\*\*\* If you want to log in with another user account, click **Switch Account**\*\*\*.\*\*\* #### Important notes[​](#important-notes "Direct link to Important notes") ##### Cross-platform voice capabilities[​](#cross-platform-voice-capabilities "Direct link to Cross-platform voice capabilities") Voice capabilities are currently restricted by login method. This means that if one user is logged in via [World Stream](/opening-the-doors/world-stream.md) and another user is logged in via a Breakroom [desktop viewer](/opening-the-doors/desktop-viewers.md), they will not be able to hear each other over voice chat, even if they are standing in the same Region. Users who log in via the same method can communicate freely. Therefore, we strongly suggest that you take this into consideration when planning your events, and require *all* guests to use either World Stream or the desktop app. We apologize for the inconvenience, and hope to provide a solution soon. ##### Browser auto-play[​](#browser-auto-play "Direct link to Browser auto-play") Some browsers come equipped with "auto-play policies" that automatically block websites from playing audio and video until you interact with the content. In addition to [granting media permissions](/opening-the-doors/world-stream.md#launching-world-stream) to World Stream, you may also need to click on the page or otherwise interact with the streaming content in order to enable audio. You will need to repeat this action if you refresh the page. --- ### Pre-allocation campaigns #### Overview[​](#overview "Direct link to Overview") Breakroom's World Stream service uses "virtual machines" to process and stream your content. The number of on-demand World Stream machines is limited to a maximum of 100 per World. This means that at any given time, you can host up to 100 concurrent World Stream users without any special accommodations. For events where you anticipate hosting more than 100 concurrent World Stream users, you must request pre-allocation. This will reserve the number of virtual machines required for your special event, ensuring that everything goes off without a hitch. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Important notes [](#important-notes)[​](#important-notes- "Direct link to important-notes-") * When pre-allocating virtual machines for your event, the baseline maximum of 100 users *should not* be taken into account while planning. ***Instead, please be careful to*** ***specify the exact number of users who will be attending your event**.* For example, if 101 people RSVP to your event, you would request pre-allocation for 101 users. * The maximum number of users World Stream can accommodate at this time is 1000. The system will not permit you to book an event for more than 1000 users. * Please note that each reservation must be made for a minimum of one hour. * When a live event consumes all pre-allocated [World Credits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md) due to longer than expected event duration or higher than expected user count, a notification will be sent to the [World Owner](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator). World Credits will then be automatically deducted from the account to cover login time, provided the Breakroom account has World Credits available. * Please keep in mind that World Stream use is calculated in [60-minute increments](/opening-the-doors/world-stream.md#partial-hours-and-world-credit-consumption). If a user is logged in for 20 minutes, they will still consume one 60-minute block of World Stream time. * When making your reservation, please book for the maximum number of users for the longest duration required. * All reservations must be submitted a minimum of 48 hours prior to the event. * Please contact our [Customer Success Team](/help/where-to-find-support.md#contacting-the-customer-success-team) if you have any questions about requesting a reservation. info Pre-allocation campaigns require advance payment in the form of World Credits. The required amount of World Credits will be deducted from your account when you submit your pre-allocation campaign request. World Credits can be purchased during the pre-allocation process if needed. #### Cancellation and refund policies[​](#cancellation-and-refund-policies "Direct link to Cancellation and refund policies") Whether a pre-allocation campaign can be cancelled or advance payment refunded depends on several factors, including when cancellation is requested and whether the submitted event has been approved by staff. | Time to event? | Event approved? | Can be cancelled? | Refund amount? | | -------------- | --------------- | ----------------- | -------------- | | N/A | NO | YES | 100% | | >24 hours | YES | YES | 80% | | <24 hours\* | YES | NO\* | 80%\* | warning The automated pre-allocation system built into the Dashboard will not allow you to cancel less than 24 hours before your approved event start time. In these cases, we may be able to manually cancel your event. Please contact our [Customer Success Team](/help/where-to-find-support.md#contacting-the-customer-success-team) by submitting a support ticket through the [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md#support-tickets). If we are unable to cancel your event prior to five minutes before start time, your advance payment will not be refundable. We apologize for the inconvenience. #### Requesting pre-allocation[​](#requesting-pre-allocation "Direct link to Requesting pre-allocation") ![](/assets/images/Preallocation_001-2cd0a0f01689de6e064cfd4e93b9436f.png) *Pictured: The Pre-allocation request panel.* To submit a pre-allocation request, please follow the steps below. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Stream tab.** 3. Scroll down to the **Pre-allocation panel** and click the **Book Pre-Allocation button**. This will expand the panel. 4. First, select your preferred [World Stream server type](/opening-the-doors/world-stream.md#world-stream-server-types) by clicking the relevant **Select button**. 5. Then, select either a **One-time Reservation** or a **Recurring Reservation**. 1. For a one-time reservation, select your **event date** using the calendar. 2. For a recurring reservation, select both your **Start Date** and **End Date**. Once you specify these dates, the weekday buttons will become active. **Click on the days** for which you are requesting pre-allocation. (E.g. Every Saturday over the specified time period.) 6. After you have selected your event day(s), use the **Start time** and **End time drop-down menus** to specify the time duration for your event. (Note: Reservations must be a minimum of one hour in length.) 7. Enter the number of users who will be attending your event in the **Number of users field.** 8. Review the pricing breakdown. Remember: Pre-allocation campaigns require advance payment in the form of World Credits. The specified number of World Credits will be deducted from your balance after you confirm the booking. 9. When you are satisfied with your choices, click the **Request Pre-Allocation button**. After you submit your request, our Customer Success Team will review the details and get in touch to let you know whether your event has been approved or declined. [
](https://docs.breakroom.tech/open-the-doors/world-stream/purchasing-and-managing-world-credits) --- ### Purchasing and managing World Credits [YouTube video player](https://www.youtube.com/embed/kI_2kZsSSIU) #### Overview[​](#overview "Direct link to Overview") When users log in through your dedicated Breakroom [desktop app](/opening-the-doors/desktop-viewers.md), there are no additional access fees above the cost of their [seat](/opening-the-doors/seats-and-concurrency.md). World Stream access, on the other hand, must be purchased on a per user/per time basis using a digital currency known as *World Credits.* [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can purchase, track, and manage World Credits using the Dashboard. Unused World Credits never expire, even if your Breakroom subscription lapses. info Only [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can access the Dashboard. #### Purchasing World Credits[​](#purchasing-world-credits "Direct link to Purchasing World Credits") ![](/assets/images/World_Credits_001-b6203906e01d26bb48a6005dad9908e7.png) *Pictured: The Add Credits panel.* To purchase World Credits, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click the **Add Credits button** located in the site header. 3. In the pop-up that appears, enter the number of World Credits you would like to purchase. Please note that World Credits must be purchased in increments of 1000 Credits. 4. Click the **Next button**, and complete your payment information. 5. When you are satisfied, click the **Confirm button** to finalize your purchase. #### Tracking your World Credits[​](#tracking-your-world-credits "Direct link to Tracking your World Credits") ##### World Credit Balance widget[​](#world-credit-balance-widget "Direct link to World Credit Balance widget") ![](/assets/images/World_Credits_002-76f980122399c2da148c7c1f2fbdf0da.png) The World Credit Balance widget on the [Dashboard landing page](/building-new-worlds/breakroom-dashboard-tour.md) allows you to quickly check your World Credit balance and most recent account activity. If you need[ additional World Credits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#purchasing-world-credits) fast, the **Add Credits link** is also available. ##### World Credits tab[​](#world-credits-tab "Direct link to World Credits tab") Alternatively, you can access a detailed breakdown of your World Credit purchases, refunds, and analytics by clicking the **World Credits tab** on your Dashboard. ![](/assets/images/World_Credits_003-e1e78955511974a3019538cd1c720bb9.png) *Pictured: An example of how the World Credits tab may appear.* In addition to information about your World Credit transactions, the World Credits tab contains a number of important tools. Here's a brief guide to key parts of the UI. | Button or link | Function | | -------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | World Credit Balance panel | Displays your current World Credit balance, as well as your current-month purchases and expenditures. | | Add Credits link / button | Allows you to purchase additional World Credits. | | World Credit Analytics panel | Generates a quick World Credit purchase, expenditure, and availability breakdown based on your selected timeframe. | | Transaction History panel | Provides a detailed, itemized list of your World Credit transactions and usage. | | Transaction History search field | Allows you to search for a particular transaction. | | Transaction History date pickers | Allows you to narrow the transaction history down to a specific date range. | | Download CSV | Downloads a CSV file containing all transactions for the date period selected. | ##### Generating World Credit transaction and usage reports[​](#generating-world-credit-transaction-and-usage-reports "Direct link to Generating World Credit transaction and usage reports") ![](/assets/images/World_Credits_004-e165f63a1b5c5eae0475201bdcce2f1b.png) *Pictured: An example combined World Credit transaction history and usage report.* **Transaction reports** You can download your World Credit transaction history at any time by following these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Credits tab**. 3. Scroll down to the **Transaction History panel**. 4. Use the **search field** or the **date pickers** to filter the transactions list, if necessary. 5. Click the **Download CSV link** located above the **date pickers** to download a spreadsheet containing your selected transaction data. **Usage reports** World Stream access and activity can also be tracked using the Transaction History panel on the World Credits tab. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Credits tab**. 3. Scroll down to the **Transaction History panel**. 4. Enter the term "usage" into the **search field**, and press the **Enter key** on your keyboard. Usernames are identified in the **Items column**. 5. Click the **Download CSV link** located above the **date pickers** to download a spreadsheet containing your selected transaction data. info If you're looking for more detailed information concerning user session times and Region access, we suggest generating an [analytics report](/opening-the-doors/analytics.md). #### Managing World Credit usage[​](#managing-world-credit-usage "Direct link to Managing World Credit usage") ##### Partial hours and World Credit consumption[​](#partial-hours-and-world-credit-consumption "Direct link to Partial hours and World Credit consumption") Due to the way AWS structures its billing, World Stream usage is currently calculated in hourly increments (i.e., multiples of 60 minutes). This hourly calculation policy also extends to [pre-allocation campaigns](/opening-the-doors/world-stream/pre-allocation-campaigns.md) and [user session time limits](/opening-the-doors/world-stream/purchasing-and-managing-world-credits.md#setting-usage-limits). This means that users cannot consume partial hours while logged in to World Stream. For example, if a user logs in for 20 minutes, the cost of one hour of access (60 minutes) will be deducted from the World Credits available on the account. For this reason, Breakroom gives [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) tools to limit World Stream user session times and World Credit consumption. World Owners can also place a cap on the number of World Credits that can be purchased each month by the administrative team. ##### Setting World Stream usage limits[​](#setting-world-stream-usage-limits "Direct link to Setting World Stream usage limits") ![](/assets/images/World_Credits_008-0b3b175531f413fa45b335d5be637cbc.png) *Pictured: The Manage World Stream Usage panel.* To help you get the most out of your World Credits, there are three types of usage limits you can impose: 1. **Maximum session time per user**, which sets a cap on how much time an individual user can spend in a *single* World Stream session. 2. **Monthly usage quota per user**, which sets a cap on how much time an individual user can spend in World Stream per month. 3. **Monthly usage quota for World**, which limits how many minutes *all* of your users can collectively spend in World Stream each month. To enable any of these usage limits, follow the steps below. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Stream tab**. 3. Scroll down to the **Manage World Stream Usage panel**. 4. Locate the usage cap you want to enable. Click the **Edit button** located to the right of the usage cap name. 5. Enter your preferred **number of minutes** or click the **Unlimited button**. 6. Click the **Save button** when you are finished. warning Important notes about monthly usage quotas: * The **Monthly usage quota per World** cap does not discriminate between individual users. This means that a single user could potentially consume the entirety of your monthly usage quota. * The World Credit [partial hours](/opening-the-doors/world-stream.md#partial-hours-and-world-credit-consumption) calculation policy also applies to monthly usage quotas. Users who log in for less than 60 minutes will still consume one 60-minute block of time from your monthly usage quota. ##### Choosing your World Stream server type[​](#choosing-your-world-stream-server-type "Direct link to Choosing your World Stream server type") ![]() Another way that [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and [World Administrators](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#administrator) can manage costs is to select an appropriate World Stream server type. An updated list of server type features, prices, and regional availability can be found on the Dashboard, but in general, our Lite Servers offer acceptable performance for smaller events at a reduced cost. To change your World Stream server type for all users, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Stream tab**. 3. Scroll to the **Your World Stream server type panel**. ![]() *Highlighted: The "Change my World Stream server type" link.* 4. On the left side of the panel, you will see your current World Stream server type listed. To change it, click the **"Change my World Stream server type" link** located on the right side. 5. A pop-up will appear. Click on the server type you prefer. ##### Setting World Credit purchase limits[​](#setting-world-credit-purchase-limits "Direct link to Setting World Credit purchase limits") ![](/assets/images/World_Credits_005-5a04e4c50bb3dbbbd0236866189aab99.png) *Highlighted: The Monthly Purchase Limit section of the World Credits tab.* To limit the amount of World Credits that can be purchased on your Breakroom account each month, follow these steps. 1. Navigate to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). 2. Click on the **World Credits tab**. 3. Scroll to the **My Balance panel**. You will see your current **Monthly Purchase Limit** listed there. 4. To change the monthly limit, click the **Pencil icon** located to the right. A pop-up will appear. Enter the new purchase limit in the field, and click the **Save button**. --- ### Troubleshooting World Stream issues on Chrome #### Overview [](#overview)[​](#overview- "Direct link to overview-") In order to help troubleshoot audio and video connectivity issues, Breakroom provides users with a dedicated AV diagnostics panel. You can learn more about how to access this service on our [general troubleshooting page](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md), as well as how to [change devices](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#changing-devices-in-world-stream) from within the World Stream platform itself. However, some connectivity issues may require adjusting your browser settings. The instructions on this page are written specifically to assist users who may encounter issues while running World Stream on the Chrome browser. #### Permission denied error / No device error[​](#permission-denied-error--no-device-error "Direct link to Permission denied error / No device error") ![](/assets/images/Troubleshooting_Chrome_002-7b728dd49ca737f285deb164e6761fc3.png) *Pictured: A completely non-functioning system, as seen in a general AV troubleshooting test.* If you run a [general AV troubleshooting test](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md) and the video or audio section reads "Permission Denied," and the video or audio device is listed as "No Device / Unauthorized," you may have accidentally blocked access to your camera and microphone, or your System Administrator may have blocked access within your browser. ![](/assets/images/Troubleshooting_Chrome_003-b2b5d3b6eff7b7726d1a6b76933acd36.png) *Pictured: The Chrome settings > Privacy and security tab, with the location of the Camera and Microphone permissions for breakroom.tech highlighted.* To fix this problem, you may be able to manually grant permissions by following these steps. 1. Click the **vertical ellipses button** in the upper right corner of your Chrome browser, and select **Settings**. 2. Search for **"site settings"** using the search field, and click on the **Site settings button**. 3. Click on the Breakroom.tech link to adjust settings for this site. 4. In the Permissions panel that appears, use the **drop-down menu**s to select **"Allow"** for the Camera and/or Microphone. 5. Refresh your browser tab by pressing the **F5 key** or by clicking the browser **refresh button**. If you are running Chrome on macOS, you may also need to [grant media permissions](/opening-the-doors/world-stream/troubleshooting-world-stream-issues-on-macos.md) on the OS level. #### Unrecognized device errors[​](#unrecognized-device-errors "Direct link to Unrecognized device errors") If you run a [general AV troubleshooting test](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md) and the listed video or audio device is incorrect (meaning that the device selected is missing, or wrong), you may need to change the default devices that your browser is set up to recognize. This can be done from [within the Breakroom platform](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#changing-devices-in-world-stream), but you can also accomplish this through your browser. ![](/assets/images/Troubleshooting_Chrome_004-df29db46ff20b3eefe72932206607fad.png) *Pictured: The Chrome settings > Privacy and security > Site settings tab, with the location of the Camera and Microphone permissions highlighted.* To change the default devices in Chrome, follow these steps. 1. Click the **vertical ellipses button** in the upper right corner of your Chrome browser, and select **Settings**. 2. Search for **"site settings"** using the search field, and click on the **Site settings button**. 3. Scroll down to the Permissions section. Click on either the **Camera** or **Microphone settings**, depending on what you would like to change. 4. In the Permissions panel that appears, use the **device selection drop-down menu** located near the top to choose your preferred input device. 5. After you've selected your new default devices, refresh the **World Stream tab** and your changes will take effect. #### Important notes[​](#important-notes "Direct link to Important notes") ##### Cross-platform voice capabilities[​](#cross-platform-voice-capabilities "Direct link to Cross-platform voice capabilities") Voice capabilities are currently restricted by login method. This means that if one user is logged in via [World Stream](/opening-the-doors/world-stream.md) and another user is logged in via a Breakroom [desktop viewer](/opening-the-doors/desktop-viewers.md), they will not be able to hear each other over voice chat, even if they are standing in the same Region. We apologize for the inconvenience, and hope to provide a solution soon. ##### Browser auto-play[​](#browser-auto-play "Direct link to Browser auto-play") Some browsers come equipped with "auto-play policies" that automatically block websites from playing audio and video until you interact with the content. In addition to [granting media permissions](/opening-the-doors/world-stream/troubleshooting-world-stream-issues-on-chrome.md#launching-world-stream) to World Stream, you may also need to click on the page or otherwise interact with the streaming content in order to enable audio. You will need to repeat this action if you refresh the page. --- ### Troubleshooting World Stream issues on macOS #### Overview[​](#overview "Direct link to Overview") Due to increased security restrictions on macOS, you will need to take extra steps to permit camera and microphone access when using World Stream. These permissions are necessary for the proper functioning of Breakroom's[ conference system](/getting-started/using-the-conference-system.md). If you do not grant Breakroom permission to use the microphone and camera when initially asked, you will need to manually approve their usage by editing the Privacy & Security settings on macOS. #### Allowing camera and microphone access[​](#allowing-camera-and-microphone-access "Direct link to Allowing camera and microphone access") ![](/assets/images/Troubleshooting_macOS_001-c7f24688e55cff4177c697982804e0c1.png) *Pictured: An example macOS permission pop-up.* If you are running World Stream in Chrome on macOS, you will see *four* camera and microphone access dialog boxes appear the first time you log in. Two dialog boxes will ask you to confirm access for the Chrome browser, and two will ask you to confirm access for macOS. To permit Breakroom to access your media devices, click the **Allow button** each time when prompted. ##### Correcting access errors[​](#correcting-access-errors "Direct link to Correcting access errors") If you click the **Don't Allow button** for either camera or microphone access during initial setup and then want to correct this, you'll need to[ grant Chrome permission ](/opening-the-doors/world-stream/troubleshooting-world-stream-issues-on-chrome.md)to access the device(s). You must then grant macOS the same permissions. ![](/assets/images/Troubleshooting_macOS_002-41fdada4ec51d1b9ae9292e000c77026.png) *Pictured: The Privacy & Security > Microphone settings in macOS.* To grant Breakroom access to your microphone and camera on macOS, follow these steps. 1. Click the **System Settings icon** in the Dock, or navigate to **Apple menu > System Settings**. 2. Click on **Privacy & Security**, and then **Camera** and/or **Microphone**. 3. You will see a list of installed applications. **Toggle access on** for **Breakroom**, **Sinespace**, or the **custom name** of the Breakroom World desktop app in question. ##### Revoking access[​](#revoking-access "Direct link to Revoking access") To revoke Breakroom's access to your camera and microphone on macOS, follow steps 1-3 above and **toggle access off**. #### Sound input and output[​](#sound-input-and-output "Direct link to Sound input and output") MacOS gives you access to sound input and output volume controls. Making adjustments to your microphone and speaker volume can be very helpful when you run into audio issues in-world. ##### Input options[​](#input-options "Direct link to Input options") ![](/assets/images/Troubleshooting_macOS_003-4ee115ae289b76fe8fe3eecfdb6c787a.png) *Pictured: The Sound > Input settings in macOS.* To locate the sound input options, follow these steps. 1. Click the **System Settings icon** in the Dock, or navigate to **Apple menu > System Settings**. 2. Click on **Sound**, and scroll down to the **Output & Input section**. Then click the **Input tab**. The **device identification window** allows you to select your input device if you have multiple devices connected, or to identify your current device if you are uncertain which you may be using. The **input volume slider** allows you to control the volume of your input device. Lowering the volume on your microphone can assist with problems such as pitchiness or peaking, but may make it harder for others to hear you. ##### Output options[​](#output-options "Direct link to Output options") ![](/assets/images/Troubleshooting_macOS_004-8dae552433240d60882eb3f0866e9b00.png) *Pictured: The Sound > Output settings in macOS.* To locate the sound output options, follow these steps. 1. Click the **System Settings icon** in the Dock, or navigate to **Apple menu > System Settings**. 2. Click on **Sound**, and scroll down to the **Output & Input section**. Then click the **Output tab**. The **device identification window** allows you to select your output device if you have multiple devices connected, or to identify your current device if you are uncertain which you may be using. The **output volume control** allows you to adjust your headphone volume independent of your speaker or master volume. You can also mute your headphones directly from this window. --- ### World Stream keyboard shortcuts #### Overview[​](#overview "Direct link to Overview") Since World Stream runs in your browser, keyboard shortcuts may differ compared to those used in the [desktop Breakroom application](/opening-the-doors/desktop-viewers.md). You can find specific keyboard shortcuts listed below. #### Shortcuts[​](#shortcuts "Direct link to Shortcuts") | | | | | ------------------------ | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Windows Command | MacOS Command | Result | | F1 | F1 | Calls up the help menu. | | F12 | F12 | Calls up your own user profile. | | Ctrl + Shift + F8 | FN + Ctrl + Shift + F8 | Enables [camera](../../getting-started/controlling-your-camera) and [object ](../../creating-custom-experiences/using-the-region-editor/)drag mode when connected via AWS World Stream. | | Ctrl + M | Ctrl + M | Toggles the Breakroom email window. | | Ctrl + F | Ctrl + F | Toggles the People window. | | Ctrl + E | Ctrl + E | Toggles the Explore window. | | Ctrl + Q | Ctrl + Q | Toggles the Quest window. | | Ctrl + I | Ctrl + I | Toggles the Inventory window. | | Ctrl + O | Ctrl + O | Toggles the Outfit window. | | Ctrl + S | Ctrl + S | Toggles the Shop. | | Ctrl + H | Ctrl + H | Toggles the Rooms window. | | Ctrl + `Ctrl +` | Launches the Snapshot feature. | | | Ctrl + / | Ctrl + / | Calls up the Settings panel. | | Ctrl + Shift + P | Ctrl + Shift + P | Calls up the bug report/feedback window. | --- ### World Stream viewer toolbars #### Overview [](#overview)[​](#overview- "Direct link to overview-") ![](/assets/images/Toolbar_001-756e829e1402556d96a806e72028b0b0.png) *Highlighted: The location of the World Stream toolbar.* World Stream features a specialized toolbar designed to help users address common streaming issues. This toolbar is located at the top of the browser window, and can be collapsed or expanded by hovering your cursor over it and clicking the **arrow** that appears. On this page, we'll review the available functions and how to use them. #### Copying and pasting [](#copying-and-pasting)[​](#copying-and-pasting- "Direct link to copying-and-pasting-") [AWS](https://docs.breakroom.tech/open-the-doors/world-stream#world-stream-providers) runs Breakroom on a remote machine with its own clipboard, so copying and pasting text is a slightly more complex process. The World Stream toolbar gives you the ability to copy and paste text between the Breakroom stream and your own computer. ##### Copying text from World Stream [](#copying-text-from-world-stream)[​](#copying-text-from-world-stream- "Direct link to copying-text-from-world-stream-") To copy text from a World Stream session to your local computer, follow these steps. ![](/assets/images/Toolbar_002-7c3a216584aa9d763dac1a95ee9edebd.png) *Pictured: An example of text highlighted within a Breakroom World Stream session.* 1. **Highlight the text** you want to copy within your Breakroom World Stream Session, and press **Ctrl + C** on your keyboard. ![](/assets/images/Toolbar_003-b4c8cec92b3ea4ea04a709f67deb73ea.png) *Highlighted: The location of the Clipboard button.* 2. Click the **Clipboard button** in the World Stream toolbar. A pop-up window will appear containing your highlighted text. 3. **Highlight the text** again, and press **Ctrl + C** a second time to copy the text to your local computer clipboard. You can then paste it wherever you like. ##### Pasting text into World Stream [](#pasting-text-into-world-stream)[​](#pasting-text-into-world-stream- "Direct link to pasting-text-into-world-stream-") To paste text into a Breakroom World Stream session, follow these steps. 1. Highlight the text on your local computer and press **Ctrl + C** to copy it. 2. Click the **Clipboard button** in the World Stream toolbar. A pop-up window will appear containing a text field. Press **Ctrl + V** to paste the text to the remote machine clipboard. 3. Once the text is entered, you can press **Ctrl + V** to paste the text anywhere you like in-world, including in text chat fields. #### Preferences[​](#preferences "Direct link to Preferences") ![](/assets/images/Toolbar_004-61eed988ebaa8ad7c9aa7c0f0e1cb132.png) *Highlighted: The location of the Preferences button.* Clicking the **Preferences button** will reveal a panel containing several tabs. Many key stream settings are available here, including streaming mode and screen resolution, streaming metrics, and regional and keyboard settings. ##### General[​](#general "Direct link to General") As pictured above, the General settings panel allows you to customize: * Your streaming mode (responsiveness vs. image quality) * Your resolution * Your tab appearance All of these settings will become active the moment you select them, and you can change your settings at any time. ##### Regional settings[​](#regional-settings "Direct link to Regional settings") ![](/assets/images/Toolbar_005-868a1e2fdf4ba2e9b333c8b6a780fff8.png) *Pictured: The World Stream Preferences > Regional settings tab.* Clicking on the **Preferences > Regional settings tab** allows you to customize your time zone and geographical location. If you are using a Chinese, Japanese, or Korean keyboard, you can also specify your keyboard language in this panel. To do so, follow the steps below. 1. Click the **Preferences button**, and then click the **Regional settings tab**. 2. Using the **Input method drop-down menu**, select the keyboard language you would like to use. 3. Click the **Save button**. ##### Performance[​](#performance "Direct link to Performance") ![](/assets/images/Toolbar_006-8cbfb567145c929c2a3c611c4ee0b243.png) *Pictured: The World Stream Preferences > Performance tab.* Clicking on the **Preferences > Performance tab** allows you to track streaming metrics in real time. #### Function keys[​](#function-keys "Direct link to Function keys") ![](/assets/images/Toolbar_007-536fff9ab454f262cab73fb8052236a2.png) Clicking the **Fn Keys button** in the World Stream toolbar will open a virtual on-screen keyboard that you can click with your mouse cursor or finger. This can assist with data entry or [keyboard shortcuts](/opening-the-doors/world-stream/world-stream-keyboard-shortcuts.md). --- ## Release Notes ### RELEASE NOTES #### [πŸ“„οΈBreakroom SDK](/release-notes/breakroom-sdk.md) [Release notes for Breakroom SDK v2021.7.7.13756.](/release-notes/breakroom-sdk.md) --- ### Breakroom Dashboard #### Dashboard version: v24282[​](#dashboard-version-v24282 "Direct link to Dashboard version: v24282") ##### New Features[​](#new-features "Direct link to New Features") * **New Feature: Syllabus** * Build up to **150 steps** per syllabus; drag-and-drop, multi-select, duplicate, insert, and bookmark steps from a timeline view. * Each step supports **up to 10 Actions**: * Change Camera (switch preset view) * Custom Function (call Lua script with rich metadata) * Draw Attention (highlight Mic, Webcam, etc.) * Participation Level (toggle Quiet / Voice-only / Full) * Send Broadcast (conference chat message) * Show Toast (on-screen popup to user/everyone) * Start / Stop Quiz (full or selected questions) * Start Timer (count-down with label) * Start Waiver (present waiver form) * Take Tour (trigger region tour) * Teleport (move user/everyone to location / multi-zone) * View Image, Visit Website, Watch Video (to screen, presentation, placed, or external) * Per-step **Annotations**: student-visible guidance and private instructor notes (text, image, link). * **β€œDone-this-before” logic**: repeats of Timer, Tour, Quiz, Waiver, etc. are skipped when rewinding or revisiting steps unless force-run. * **New Feature:** The Learning Management Dashboard now includes a "Quick View" feature to display quizzes with selected due dates on the calendar. * **Improvement:** Updated the LMS Dashboard to display course-specific participant lists for easier access and management. * **Improvement:** Enhanced the Dashboard's image/video library to ensure tag functionality allows clickable tags and seamless integration with the search feature. ##### Improvements[​](#improvements "Direct link to Improvements") * Enhanced the media library to display newly uploaded images or videos at the top of the list for easier access. * The Learning Management Dashboard now includes a "last edited" timestamp for easier visibility of recent updates. * The Dashboard now automatically distinguishes file formats, optimizing the image/video upload process. * Enhanced the process to activate archived courses directly from the Learning Management Dashboard for a more consistent user experience. * Enhanced the Dashboard filter functionality by adding a search bar to facilitate easier quiz and lesson searches. * The Dashboard's left sidebar is now collapsible to enhance workspace efficiency. ##### Bug Fixes[​](#bug-fixes "Direct link to Bug Fixes") * Corrected typographical errors throughout the Dashboard. * Resolved several user-interface inconsistencies. * Applied minor bug fixes for improved stability. --- ### Breakroom SDK #### SDK version: 2021.7.7.13756[​](#sdk-version-20217713756 "Direct link to SDK version: 2021.7.7.13756") ##### Features[​](#features "Direct link to Features") * Added new Lua functions with options for Audio Reactive Light/Animation/Material/Transform/Particle components. * Server scripts now have support for Script libraries (requires processing server change to be deployed) * Added support for changing uploaded UI element colours to match the application via Lua script. * Added support to disable crouching/flying/jumping/running via script. * Added Space.TypeName(obj) to scripting. * Added SScript.Session to scripting. Returns a unique ID each time the viewer is started which remains consistent throughout the viewer during that time. * Added SShared.SetSuperGlobal / GetSuperGlobal - similar to SetGlobal/GetGlobal except these values will persist between scenes when teleporting. * Added OnApplicationQuit event for Lua. * Added SAvatar.SynchroniseState() which forces a network synchronization of the player state: It is useful in cases when you have blocked avatar movement or similar events which may block the avatar from transmitting a script-driven update. Only works once per 5 seconds. * Added SScript.TrackingAllowed(string key) & SScript.TrackingRequest(string key, string reason, Action\\\ callback); only usable on white label grids. Handles GPDR & similar prompts. * Added Space.Input.CursorInUI * Added onComplete Closure to SWebservice.GetImage. Added a way to get the Width and Height of Texture2D * Added SAvatar.TeleportToNextEvent, so the creator can Teleport user to the next event which will start in a defined time. * Added StartRecording ,StopRecording and StringToHash. Added a function transfer message based on SignalR, for sharing messages between different regions/shards. * Added Space.Grid to Lua SDK for accessing grid information on white labels. * Added AttachmentHelper to Lua API. * Added Space.Chat.JoinGridVoice * Added SAvatar.JobTitle and SAvatar.Company. AnalyticsEvent and SAnalyticsEvent. Added Space.Version which returns the revision number of a release. * Added OpenDevicePicker in SUI and Furioos. * Added SGameObject.OnParticleCollision. * Added SVideos for allowing videos to be uploaded to Sinespace. * Added SUIInputField.ActivateInputField() SUIInputField.DeactivateInputField() SUIInputField.Select() * Added a method and Lua interface to link playerID and VirtualGoodID. * Added Space.Scene.OnEditModeAdd and Space.Scene.OnEditMoveRemove. BlockMovement status would memorise the placement of the SAvatar object. * Added the Lua interface for GetCurrentAnimatorStateInfo * Added a new class for AnimatorStateInfo. Fixed null reference to make STween usable. * Added Cancel() function to stop a running tween in STween. * Added SGameObject.AddAnimator(). Fixed an issue where OnStateChange event in EmbeddedVideo does not pass the correct new state when transitioning from Stopped to Play * Added SGraphicRaycaster and SUIRaycastResult for raycasting UI elements. * Added StartFly and EndFly for player avatar control. * Added SAvatar.Gender which returns "Male" or "Female". * Added Scripting Resources component for attaching resources to objects without a runtime. * Added MouseX and MouseY in SInput.Enable to read the right stick value with these properties. * Added SGameObject.Networking to Lua SDK to access new SimpleNetworking component. * Added Boolean as option to ScriptDataVariableType and PublicScriptVariableType * Added an Avatar property to Clothing Item Settings for replacing the built-in animation skeleton layout in built-in-human avatars. * Added SContentSizeFitter. Added EnableInput API for block or enable browser's input. * Added WASM support for scripting. * Added C headers for scripting API which can be used with emscripten to compile WASM which can be loaded by the script engine. * ToolTipHint component added to allow tooltips to be added to any UI element automatically. Includes Lua scripting support. * Added an option in the scene save settings feature where users can select whether the fog will affect the skybox. The default will be false. * Added more animation Override slots for cloth items. * Added a new component "Attachment Control" - this component is designed to be used on Attached clothing items, it will show or hide the item, depending on whether it is attached to the player. This can be used, for example, to hide canvases that should only be seen by the player who owns the item. * Quest Designer: Added an option in quest designer which can show other avatars in quest conversation * Browser Surface: Added mute/unmute function for BrowserSurface, and a Lua function for the same. * Added an option for ultra skin for avatars and the option to activate it. * Creator Settings: Added a warning if you delete the Editor Default Resources folder in the editor pack * Added FrameCount and IsPlaying in SEmbeddedVideo. * Added Space.Grid.PlayerIsAdmin for grid admin, different from region admin. White Label Only. * Added support for SGameObject.UILayout to modify layout groups from Lua. Added ShowSearch, ShowMailButton, and ShowClock in SUI. Add Loop and ClearRenderTexture for MediaPlayer. * Enabled OnParticleTrigger() in Lua SDK. * Added SParticle to control each particle. * Added Set/GetTriggerParticles in SParticleSystem. ##### Improvements[​](#improvements "Direct link to Improvements") * ObjectRef public variables / data variables return as SGameObject in Lua now. * Added the SimpleStateMachine component for creating interactive content without Lua scripts. Also accessible from scripts via Object.StateMachine. * Added the ScriptingEvents component for attaching Unity events to objects without a scripting runtime. Also accessible from scripts via Object.Events. * SChat.JoinVoice can now create spatialized zones. * SDialogues.OpenURL takes optional newTab parameter. * Added Script support for VoiceZone Components * Added OnUploadStart event in SPhotos and modified some code to fit SVideo. * Added Audio Source Lua API. (PlayClipAtPoint) * Added a Lua function to call the enabled region list. * Tweaked LUA API for LineRenderer using a 0-based index. If ScriptingRuntime's index is Lua Standard, the index will be 1-based. * White label scripting APIs can now be toggled on/off on a per-grid basis for those not wanting to enable them. * The Editor Pack will now propose to set up lightmaps for export if baked lighting is detected in the scene; prior to uploading the scene. * Hardened script runtime against accidental non-play mode execution * Changed the annotation of SaveClothingBaseInternal in order to make the ClothingItemSetting component support the multi-object editing feature. * When previewing the scene in Unity, it can now generate the users' avatar. ##### Fixes[​](#fixes "Direct link to Fixes") * Fixed scripts showing the wrong name in the System chatbox when calling Space.Log during startup. * Fixed an issue where Space.Input.MouseLook = true is not working * SWebService.GetImage source security hole is now fixed * SNetwork.Chat.JoinChat should now properly open a chat tab. * Fixed an issue where SSeat.InUse could incorrectly return 'false'. * SGameObject.StateMachine and SGameObject.Events should now work in Lua scripting. * Fixed an issue where avatars can move while playing animations by Lua. * Fixed an issue where images remained grey while loading on SWebService.GetImage * Fixed an issue with SharedPlayback being broken when using UMP to play videos. * Space.Scene.Find / FindID should no longer cause an exception that terminates the script if the object is not found. SUI.ShowActivityPanel should work now. * Chat channel joined via SChat can now exit normally when the user changes region. * Space.LoginTime will now return the total seconds since the user logged in. * ResetOutfitToTemplate will now refresh the inventory correctly. * Space.Log will no longer write to the player log on the live server, only the preview server. This is to minimize lag caused by synchronous log writes. * Space.Camera.MainCamera should now return null if the main camera is not initialized, instead of causing a fatal exception. * Fixed a Lua script crash when reading the custom tag. User-defined tags are unsupported. * Fixed a bug in SBrowserSurface, where the zoom function was not working in the BrowserSurface component. Also fixed an issue with SUISlider.Direction. * Fixed an issue with packaging custom .asset mesh files. * Fixed an issue with mesh preservation failing on temporary assets * Fixed an issue where emission materials on uploaded contents would have their shaders replaced. * Removed SNetwork.ReconnectGlobalNetwork and SNetwork.OnGlobalNetworkDisconnect * Fixed an issue with SChat generating invalid chat channel names. * SGameObject.AddClickable will now return an existing Clickable if it already exists. * Fixed an issue where an item cannot be uploaded if a particle is added to a virtual good. * Fixed an issue where two blank spaces appeared in the auto-generated Virtual Good name. * Fixed Steps in BranchedQuestWindow being dragged out of view, this will no longer be possible. * Fixed an issue in Branched Quest Window, where "Next Step" set to "End" won't automatically link to the newly created step. * Fixed Parts of Conversation in Quest Window not being visible on the screen. * Attachments can no longer be uploaded as Rigged Clothing if they have been previously attached to a bone. * Materials will no longer disappear when using Convert to Reweighting. * Fixed an issue where attachment ClothingItem doesn't work with the clothing previewer component. --- ### Breakroom Viewer #### Viewer version: 2025.5f20496[​](#viewer-version-20255f20496 "Direct link to Viewer version: 2025.5f20496") ##### New Features & Improvements[​](#new-features--improvements "Direct link to New Features & Improvements") **Chat Text Size** * Chat text size can now be adjusted independently from the overall UI scale. * Improves readability and accessibility without changing the size of other interface elements. **Notifications** * New and improved unified notifications menu that combines all messages, friend requests, and system updates. * Includes quick/bulk actions like **Mark all as read** (mail) and **Accept all / Decline all** (invites). **Menu & Pins** * A new main menu provides a single place to access key controls, tools, and viewer options such as Settings, Help, and About. * Items within the menu can be pinned to the toolbar, allowing each user to choose which tools remain visible on-screen for quicker access. * The menu header now displays the current region and, when applicable, the active zone. * The Minimap can now also be pinned or hidden. **Toolbar & Interface Updates** * The new toolbar at the top-right of the interface brings together commonly used controls such as microphone, volume, music, and other quick-access tools, along with any items the user pins from the main menu. * The overall interface has been refined for clearer layout, improved spacing, and better visual consistency across panels and menus. * The loading indicator now appears in a less obtrusive position, and a confirmation popup was added to the Log Out option for clarity. * Numerous small visual and functional adjustments improve alignment, readability, and interaction throughout the interface. **Connection Indicators** * The connection status UI now provides clearer, context-aware feedback across **voice**, **chat**, and **server** connections. * Different indicators and status messages appear as conditions change, helping you pinpoint where an issue is occurring (voice, chat, or server). * Visibility and behavior of these states have been refined for consistency and faster troubleshooting. **Settings Improvements** * The Graphics Settings window now includes clearer labels for presets and improved text to make configuration easier to understand. * Several settings have been reorganized into more intuitive categories. ##### Bug Fixes[​](#bug-fixes "Direct link to Bug Fixes") * **User Interface** * Fixed an issue where text or hyperlinks in the Microphone & Camera Audio Test panel could spill or overflow when resized; text now wraps correctly and the layout adjusts to maintain alignment. * Fixed an issue where the displayed used region size could show incorrect values under certain conditions in the Edit Region and Explore panels, or when switching between floors; the used size now counts all floors correctly and displays consistently across panels. * Fixed an issue where the connection icon could display β€œConnection Status: No issues.” while the chat panel still showed it was connecting to the XMPP server; the connection status now displays correctly. * Fixed an issue where dragging chat tabs out and back could leave a white duplicate of the chat panel; toggling Hide/Show Chat now correctly updates the chat display and hides/shows all chat channels. * Fixed an issue where the region name could be invisible in the Edit Region Profile panel; the region name now displays correctly. * Fixed a crash that occurred when using the Moderator tools’ β€œReveal hidden UI features” option; hidden UI buttons now display correctly without crashing. * Fixed an issue where screen sharing or camera would unexpectedly stop when turning the microphone on or off; the displayed share/camera state now stays in sync with the actual stream. * Fixed an issue that prevented users from resizing the Gestures window in the Inventory. * When composing mail, clicking β€œSelect More” now brings the Select Recipient window to the front so it is no longer hidden behind the Mail window. * Fixed an issue where emojis could appear at the wrong size when editing messages or changing the chat text size; emojis and regular text now display consistently. * Bug fix - When a region has no active text chat channels, the chat button is now hidden so users will no longer see or open a blank chat window. * Fixed an issue where the Regions and Shop buttons only became visible after clicking the Outfit button; they now appear correctly without that extra step. * Fixed an issue where disabling the Hot Bar in the Dashboard and then re-enabling it via Viewer’s Moderator Tools made previously added Hot Bar items disappear. * Fixed an issue where the β€œChat Connection Lost” panel could not be closed by clicking its X button; the panel can now be dismissed using the close button. * **Avatar & Content** * Fixed an issue that could prevent avatars from loading. * Fixed an issue where, after logging out, the avatar briefly appeared pink or visually broken before the login screen; logging out now advances directly to the login screen without showing the broken avatar. * Fixed an issue where bundle item appearance chances didn’t match the configured probabilities; bundle drops now follow the configured settings. * Fixed an issue where some accessories would not appear in an outfit preview when worn with a full humanoid avatar, which could prevent the Save button from becoming active. * Fixed a bug where certain attachments could become excessively large and float when worn on full-body avatars; attachments now retain their correct scale when attached. * **App (General)** * Embedded videos now respect object audio sources so spatial audio works correctly again; the viewer now prioritizes the built-in video player and falls back to an alternate player only when necessary. * Fixed an issue where the video player opened the full browser page instead of playing embedded videos; embedded YouTube videos now play in the player (some YouTube content may still require signing in). * Fixed an issue where some long-standing regions could fail to load after updating the client; affected regions should now load correctly. * Fixed an issue that could prevent users from joining some regions (the app could freeze or disconnect during finalizing); joining those regions now works normally. * Fixed an issue where in-world video playback could ignore the Master and Voice volume sliders, so changing the sliders did not affect the video’s sound. * Fixed multiple crashes that could cause the app to exit unexpectedly β€” including when entering or teleporting between regions, viewing a world’s Privacy Notice/EULA, logging in, changing audio/microphone settings, editing room names, or browsing shop items. * Fixed an issue that caused content that uses Flickr (such as the board in Welcome Center) to sometimes appear blank or lose images. * **App (Mac)** * Fixed an issue on Mac where choosing outfits other than the default could display a black silhouette instead of the selected outfit. * Fixed a crash on Mac that could cause the viewer to close unexpectedly when others join a region, after teleporting, or after being open for a period of time; the issue related to in-world script interaction has been addressed. * Fixed an issue where the eject-user countdown timer could overlap the search bar on Mac; the timer and search bar are now properly aligned. --- ## Running Your Event ### RUNNING YOUR EVENT #### [πŸ—ƒUnderstanding the conference system](/running-your-event/understanding-the-conference-system.md) [2 items](/running-your-event/understanding-the-conference-system.md) --- ### Customizing the conference system components #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Breakroom_Fun_001-3e9e6cdeaf8f031acaddb54cc97e5963.png) When you're building your Breakroom World, you can customize it as little or as much as you like. Plug-and-play breakout areas allow you to deploy conference Regions with just a few clicks, while our custom voice zones allow you to shape the aural landscape to control media sharing and audience interaction. #### Important links in this section[​](#important-links-in-this-section "Direct link to Important links in this section") [adding-breakout-areas.md](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) [creating-custom-voice-zones.md](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) [setting-up-presenter-and-audience-zones.md](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md) --- ### Adding breakout areas [YouTube video player](https://www.youtube.com/embed/PCyj05j1mPM) #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Breakout_Areas_001-0a0684e3112cb26b6ac41881d231d4c5.png) *Pictured: A breakout area being added to a Region.* Breakroom's prefab [breakout areas](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) come with voice zones and conference tools pre-installed. Each breakout area object you install in your Region will automatically receive its own custom [Zone ID](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-id), [Zone Color](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-color), and a unique [Zone Name](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-name) that will be added to the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel). These options can all be changed to suit the needs of your event. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning After using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to add or edit a voice zone, always remember to click the **Reset Zones button** to reset the conferencing system. If this doesn't seem to push your changes forward, try saving your work, leaving the Region, and entering it again. #### Locating the breakout area objects [](#locating-the-breakout-area-objects)[​](#locating-the-breakout-area-objects- "Direct link to locating-the-breakout-area-objects-") A selection of prefab breakout rooms, booths, offices, and workshops can be found in the [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md). Detailed descriptions of each breakout area object are also [available](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md). #### Adding breakout areas using the Region Editor[​](#adding-breakout-areas-using-the-region-editor "Direct link to Adding breakout areas using the Region Editor") You can add any of the [breakout area objects](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) to your Region using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). The quick-start instructions below are provided for your convenience. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Inventory Button** to launch your [Inventory window](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). 4. Locate the **Breakroom Breakout Area object** you want to use. Add it to your Region using your [preferred method](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). 1. The breakout area will automatically receive its own Zone ID, Zone Color, and a unique Zone Name. If you want to edit any of these properties, please refer to the [section](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md#editing-breakout-area-details) that follows. 5. Using the Region Editor tools, [position](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) the breakout area to meet your specifications. 6. Click the **Reset Zones button** to reset the conferencing system. 7. When you are satisfied, click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. #### Understanding breakout area Display Names[​](#understanding-breakout-area-display-names "Direct link to Understanding breakout area Display Names") ![](/assets/images/Breakout_Areas_002-ec0943879695e001eedfc60eb12d5370.png) *Pictured: The Objects and Inspector windows. Notice how the highlighted Breakroom Breakout Area A object is tagged with both its Zone ID and Zone Name.* If you add multiple copies of any object to your Region, you will notice that every copy is identified by the same name in the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). The same is true of breakout area and voice zone objects. However, to facilitate Region setup and management, these objects will acquire two additional information tags after installation: * [Zone ID](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-id): This number will be displayed using \[brackets] * [Zone Name](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-name): This information will be displayed in (parenthesis) These information tags can help you identify your breakout areas and resolve [duplicate zone errors](/running-your-event/customizing-the-conference-system-components/troubleshooting-duplicate-zone-errors.md). #### Editing breakout area details[​](#editing-breakout-area-details "Direct link to Editing breakout area details") Breakout areas are designed to automatically set themselves up. However, you may run into situations where you need to change some breakout area details. To do this, you will need to locate and edit the object's [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). ![](/assets/images/RoomFurniture_001-62c581efd8fade156ab0f56395fc6938.png) *Pictured: The RoomFurniture component, expanded to display all 15 fields.* 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, locate the **Breakroom Breakout Area object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 5. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. info The RoomFurniture component properties are covered in more detail in our [RoomFurniture component documentation](https://docs.breakroom.tech/run-your-world/the-conferencing-system/voice-zones-and-conference-permissions/the-roomfurniture-component). There you can learn how to enable or disable chat in voice zones, adjust the screen aspect ratio and size, change a breakout area's zone type, and other advanced tricks. For the purposes of quick Region setup, this page will focus on the following properties: * **Zone ID**: The ID number of the audio zone associated with the breakout area * **Zone Name**: The name/room number associated with the audio zone * **Zone Color**: The color of the breakout area and its corresponding teleport button There are certain situations where you may want to manually change the values in these property fields. ##### Zone ID[​](#zone-id "Direct link to Zone ID") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhsAAAA/CAYAAABJhQq0AAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDsCAiocx65tshvs+EOlTduMxCegPB7A9v3s8OpGSUBy1WKloJuYGDV3FKe1gQll4AwWpMje8sB7FJGn2G+eoZYoPPJRcBI29/KFSN9np9uDSfDrgygacVfUta1BZEHENB9SELQ5FhbTeh1h2fBuOg90sHV8xWSh5hFL9e2t2fsw0caJ0ZFZpwDuR4CbO9WR2EX5Jxl+HfljJF/Ivz0dBj+zR1n4dIuMtgAAAYVpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfU6UiLYIW/MAhQ3Wyi4o4lioWwUJpK7TqYHLph9CkIUlxcRRcCw5+LFYdXJx1dXAVBMEPEGcHJ0UXKfF/SaFFjAfH/Xh373H3DhAaFaaaXTFA1SwjnYiLufyKGHhFAIPoxzBCEjP1ZGYhC8/xdQ8fX++iPMv73J8jpBRMBvhE4hjTDYt4nXhm09I57xOHWVlSiM+JJwy6IPEj12WX3ziXHBZ4ZtjIpueIw8RiqYPlDmZlQyWeJo4oqkb5Qs5lhfMWZ7VSY6178hcGC9pyhus0R5HAIpJIQYSMGjZQgYUorRopJtK0H/fwjzj+FLlkcm2AkWMeVaiQHD/4H/zu1ixOTbpJwTjQ/WLbH2NAYBdo1m37+9i2myeA/xm40tr+agOY/SS93tYiR0DfNnBx3dbkPeByBxh60iVDciQ/TaFYBN7P6JvywMAt0Lvq9tbax+kDkKWulm6Ag0NgvETZax7v7uns7d8zrf5+AJT2crTubXaXAAANdmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpiYTI3NGE5MC1lYWFlLTRjNWItOWI5OC0yY2NjMmI2ZWEzYmYiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTIzM2I2YWUtZTRkYS00YWUyLWI3YWMtYzk4Y2ZiZjk1NjYyIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YzY1OWM0YmMtYWZmYS00YTc3LWE5M2UtOGFmNTMxYzlmYThmIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MjE3NTkyMjUzMjAxNDQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDc6MjNUMTQ6Mjc6MDMtMDQ6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA3OjIzVDE0OjI3OjAzLTA0OjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YWRmZTkyNzctZjQzOS00ODA1LTk3YTMtOWQ0Zjg4Y2YwOTJiIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA3LTIzVDE0OjI3OjA1Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pvw7Lh8AAAAGYktHRAD+AGcAXVYFpa8AAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAHdElNRQfoBxcSGwWP08hyAAAHuUlEQVR42u3da1BU5x3H8d8uewFBkJsIIoqFGO/XpvGuJWm8YlOLtuOYTmw1Vls7nTo408tM25noG2PSzDQTp85k0kZnjDWORmsrlcSoHUQxYkAaRCSgoKyAsAvsDbYvHHG2u7UBd5kwfD/veJ5nzzn7n4flt+ec52DwbX7JJwAAgDAx+nxkDQAAEB7d3d0yShKBAwAAhCNoSHoQNggcAAAgHEHDL2wQOAAAQKiDhiSZ/nuAz+fT8uh5VAoAAPTaccfZgDYjZQEAAOFE2AAAAIQNAAAwcJkoAeCvu7vrsf2dbc3yelzyup0UC8DgCw6WSJnMVkUPSyZsAOHi9bg0IyNeMyeMoRgABp2SazW6XNvSu4BC2YBehg23U89O/ZrW5eVSDACDjvnQMRVXnevVa7hnAwAAhBVhAwAAEDYAAABhAwAAgLABAAAIGwAAgLAB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) If two breakout areas or voice zones are assigned the same Zone ID, users in those areas will be considered to be within the same audio zone, even if they are separated by the entire length of a Region. Such a setup may result in cross-talk and general confusion. If you encounter a situation like this and want to resolve it, or if you want to renumber your breakout areas and voice zones for more efficient Region management, you can do so by following these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Make sure the[ Objects window ](/creating-custom-experiences/using-the-region-editor.md#the-objects-window)is open by clicking the **Objects button** located on the bottom right. 4. Locate the **Breakroom Breakout Area object** you want to edit in the Objects window, and click on it. This will open the **Inspector window** for that object. 5. Expand the RoomFurniture component in the Inspector window by clicking the **> icon** located to the left. 6. Locate the **Zone ID property**. In the associated field, enter the ID number you wish to use for that breakout area. 7. Click the **Reset Zones button** to reset the conference system. 8. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. info If you need additional help resolving duplicate zone errors in your Region, please visit our dedicated [troubleshooting page](/running-your-event/customizing-the-conference-system-components/troubleshooting-duplicate-zone-errors.md). ##### Zone Name[​](#zone-name "Direct link to Zone Name") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAA/CAYAAACrWRHNAAAAxnpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDgMhCPz3FD0CAiocx30lvUGPXxS22d2URIRBxoG0f95Heg3DzIlLk6q1ghkrK3YLBNz69Bl4ek9WwEBveKIjmtAgsps8lRqNJx4NP8JuUbkQyRqF5V5QDn55EMVHNBQNbVsQaRAReiEHQfexoKq06wjLDncTP2k43eZTyBpqHjk3295W7B9C3CkTmCcSF0DjcKJuQTOPZKLsEc/YkXNUW8i/PZ2WvrVsWf2QJ2CdAAABhWlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9TpSItghb8wCFDdbKLijiWKhbBQmkrtOpgcumH0KQhSXFxFFwLDn4sVh1cnHV1cBUEwQ8QZwcnRRcp8X9JoUWMB8f9eHfvcfcOEBoVpppdMUDVLCOdiIu5/IoYeEUAg+jHMEISM/VkZiELz/F1Dx9f76I8y/vcnyOkFEwG+ETiGNMNi3ideGbT0jnvE4dZWVKIz4knDLog8SPXZZffOJccFnhm2Mim54jDxGKpg+UOZmVDJZ4mjiiqRvlCzmWF8xZntVJjrXvyFwYL2nKG6zRHkcAikkhBhIwaNlCBhSitGikm0rQf9/CPOP4UuWRybYCRYx5VqJAcP/gf/O7WLE5NuknBOND9YtsfY0BgF2jWbfv72LabJ4D/GbjS2v5qA5j9JL3e1iJHQN82cHHd1uQ94HIHGHrSJUNyJD9NoVgE3s/om/LAwC3Qu+r21trH6QOQpa6WboCDQ2C8RNlrHu/u6ezt3zOt/n4AlPZytO5tdpcAAA12aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjBlNjBhZTk2LWViYTItNGZhMy04MzdhLTk3ZjIyMTJlMTE5ZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3ODdjOTczNi0zMDE5LTRkOTQtOGUzYi1jN2Q4NDc2NjZkNGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ZjYzZDYwMC03Y2M0LTQyZDEtODJmNS0xMDZjYjQzOTNlZGMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTcyMTc1OTI0NzE5Njk2NSIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM4IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNDowNzoyM1QxNDoyNzoyNS0wNDowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjQ6MDc6MjNUMTQ6Mjc6MjUtMDQ6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2NjBiNWFiMS1lMmEzLTQyYzctYWQwZi01N2FjOGMyMmQxZGQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDctMjNUMTQ6Mjc6MjciLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+/psrhAAAAAZiS0dEAP4AZwBdVgWlrwAAAAlwSFlzAAASdAAAEnQB3mYfeAAAAAd0SU1FB+gHFxIbG3Xc9REAABFsSURBVHja7d15VFPXogbwDwgJhinIPFURVFAcWsQBuFhE7cWpDpfSW57Tu7bYPtReUWrx1q621tZlxWVdWly9fbfa4WlxKpbqu4BYQEVs5amoRVTAKiBTYiCEkJC8P6ipaQKCGlvK91vLtSRn75Ozd8LJl7P32Vjoli7QgYiIiMiMLHU65g0iIiIyH61WC0sAYOggIiIic4UNAB2Bg6GDiIiIzBU2DAIHQwcRERGZI2wAgODXBXQ6HabbRrCnqI//orR3ub2poRpPPeGEkGED2VlE1Of8cKkCZ29I4ejqY3L7N835Ro8J2G1EPSewFuHsDSmKrlazM4io750DhTYQWIt6VofdRmTM0tKqy+22Eld2EhFRT86r7AIiIiJi4CAiIqJej0MqRCbcb9KoUt4IjVoFTVsrO4uI+l54+HkOR0+Glxk4iB6ARq1CqJ8zQoP92BlE1OecKSnHmfKGnoUUdhvRAwSOtlaEBvshPnYWO4OI+qAMnCq91aManMNBREREZsfAQURERAwcRERExMBBRERExMBBREREDBxERETEwEFERETEwEFEREQMHEREREQMHERERMTAQURERAwcRNQrNTY2orCwECqVip1BRI/FQ/3xNkk/a6z+68T7lmtTa/DWZ8d7RYe8vXASTp67iqP/d6PTMstnjYGsSYnduRf5DiIDSqUSOTk5+p8tLCxgbW0NR0dH+Pr6wsvL63dxnFVVVUhISEBubi5EIlGv62eVSoW8vDx4enoiODiYbzyiP3rg0Oo6wkRnrKwsERIcgBtVtb2mQ0YNG4jhQ3xRefsQLlffMVkmKMAH9dImAAwcZPxBuHbtWoSFhenDRWNjI0pKSlBbW4v58+cjMTERNjY27CwAFy5cgI+PD5ycnLpdp66uDhs2bMCxY8fw2muvMXAQ9YXAIW9Vd3nlYsPfJqNF2YoPPsvpVZ0iEgmRvOgZLE89gCaVhu8S6rGFCxdi/Pjx+p/VajXy8vKwcuVKBAYGYsaMGewkAJs3b8a6deu6HTjOnTuH5ORkxMXFQSgUsgOJ+krg6MpLfx6NEYEDsXX3/+JaXZPRdj8XO4QN94WPuxOk8hacv1qFwquGV0KGejhgRvgwbN5fCF8nMcYH+WCQjwvuNCtx8nwFzt+Umnzu4V4ShAb5wN3ZEdV1MpwouWHyGDpz4vvLCB0ZgLXzJ2HNP//d7XoutiI8PeoJ+Lg7QSiwwq3aOzhwshRKdXun7fJzscOEYT4Y4OkCaZMCR05fQWWDAgAwyMUOU0MHw8nRFtI7CuSfK8fFKplZ2kzmZW1tjejoaIwYMQIlJSX6wKFSqaBQKNC/f38AHUMdcrkcXl5ecHBw0NfX6XSorq6GXC6HnZ0dvLy8YGlpegpWW1sbpFIpmpubYW9vDxcXl07L/lpra6u+3r1DLTqdDrW1tZBKpRAKhfD29jYailEqlVAoFHB2doaFhYXBtpaWFrS0tMDFxUX/2OXLl1FcXAyZTIb6+noAgEQigUAg6PTqUWpqKpKTkxEdHY1Vq1bxjUXU1wNHdLAPZkWPwTfHfkD2hZ+Mti+ZOgrTo55CU7MSNfVS+Pm6Y1Z0KIovXcOm/8mHvFUNAPB1dUR02EiUXK3CS89FoVHWDHlzC0YEDsS0iU/hUPYZ/HfWeYN9L5s5BpPDR6KmXgqprBmDB3pgztSx+Dr7DD7NKenW8TfImvHpwTwkxE3G0mlPIu3b4vvWWRA1HM9OHoNWlRq1DXeg1WoxbvQQTJs4Gv/YkYHy+mZ92bvt+rG8Bv85byLqGuVQtqrw5HA/RE8YgXU7vsZAdwleipuERlkTZHIFhg/2RczEJ7H325P4Mu/HR95mejy0Wq0+XABAWVkZkpKSkJGRge3bt2PXrl0AgN27d2PUqFEAgNraWmzcuBHZ2dmQSCSQyWSIiopCSkoK3NzcDPZ/4MABfPTRR6itrYWTkxOkUikmT56MlJQUODs7d3lszc3NSElJgbu7O1avXq1//Pbt20hNTcXRo0chFov1weHNN99EZGSkvlxRURGWL1+OwsJC9OvXz2DfJ0+eRFJSEs6ePQsrKyvs3bsXGzZsAAAsXrxYXy4zMxM+Pj4mj08kEmHnzp364ShOeCXq44FjkIsdEp6LQklpJdKOGH9QzwodhNlTx2LfkVMGH4Zhg92xPH4KXv1LGN7+/DuDOovm/Albdv8bBaXVAABLCyDlr5F4dvIYFJyvwJXbcgBAbNgQTA4fibS9OThSXKmvHxs+BAtnT0RljRS5F291qx0ZZ67D3+ccpkeF4NrNemSd/6nL8rJmJfZknkL6ySsGVzy2/H0OXnx2AlI+yTKqEz8zHBs/+RZF1+sAAA421nhv6TT848Xp6GcjxCf7juObH8o7XihLC7y5MArznhmHnOIK3G5qfeRtJvPR6XQoKipCaWkp3nnnHYNtNTU1SEtLg4ODA7KysmBra6sfLlAqlUhKSkJQUBByc3PRv39/NDQ0YPPmzVi7di22b99uMLTg6+uLbdu2wc/PDyKRCNXV1Xj11Vfx+eefY8WKFZ0en1KpxPr16+Hg4ICkpCT9PhUKBVasWIEBAwbgyJEj8PDwgFqtxokTJ7Bs2TKkpaVhwoQJPe6P2NhYjB07FrNnz8b+/fvh5+cHALCysuqy3r1zX3Q6Hd9YRL3II70t1kZgiTWLp0KhVOHdz3JNn2ieGYuzF64ZffM+WXYb6UdPY9zooQj0cDTYllt4UR82gI7Jqlv2nQAAjA365dvQrOgQfFd00eCDFwDST1zBmfNl+MuUMT1qz5aDp3G1ohovxUYhwM3+vgHl3rABAPUKFb6/cA2+nqa/WeacuqAPG0DHnJiDOWfh5GiHc5cr9GEDADRaHXbsP4V+NiKMGexhtjbTo7F3716kpqYiNTUV7777LhYsWIDCwkLs378f/v7+RuVbW1uxZMkSuLm5wdbWFtbW1vorA+Xl5UhMTNRfGXF2dsbSpUtRVFSECxcuGOwnNDQUgYGB+uEOT09PxMfHIzc3t9NjbWtrw6ZNm6BWq5GSkmLwoV5QUICysjIkJyfrh3FEIhEmTZqEhIQEpKamQqPp+TwnS0tLfbi4+//7hQ0i4hUOvddfmAhniT3Wbf/a5GRLJ7EQ/SX2+OroaZP1D5+5hsXznsaoAA/8WPPLHSI//HjTqKyirR135C3wdOkIJ862QvR3tING047Y8CHGJ3RVGzxcJT1u0/pPs7B15TysWfQMlm05aDQf4162QiuM8XeHt6sDBD+fPJ2d7GErNn1HQvGVKqPHLlZ2jGVfqagx2lYtV6JFqYK3m8SsbaaH5+3trQ8WbW1tcHBwQE5ODiQSCVxdXWFra2tQfubMmSb3U1hYiKioKIhEIoMhhLvh4/r16wgJCTFZt729HRqNBmKxGOXl5Whvbzf6UNdqtdi2bRtqamqwceNGiMVio+efNm2ayeGYyMhI7Ny5E7du3cKAAQP4ohPR4wkci6KDETIyADv3ZHc6sdFLIoaFhQWkcqXpb1rtWihbVXCyNzzpVUsVJstr2tv1k+E8HDv2PdTPCwO8XU2Wr7hZi37WVl2Ghl9rULQh9bMsvJEwEyn/8TTe+JfpO25iRg/A4rmRUChVqJfK0a7RdoQsiV2n+64x0a5mVcf8FVmT6T7SaNphaWlh1jbTw4uIiDC4SwUAFixYgFWrVqGyshJvvPGGwcTKzuZXlJWVobi4GBkZGSa3KxSG76GSkhIcP34cBQUFuHz58n2PMz09Hbt378brr78Oe3vjq3jXr19HeHi4yboSSUeYlclkDBxE9HgCx58CPTF36jhkFZzD4e/LOy13sUoGVZsaAb4uKLhi/A3e10kMW7ENrt6sN3i8O0O1d/d9orgMX+ZdfqSddLaiHl8ePoHF857G36bWmSwTPzMMxZfK8d6eAsMPmajhmD0l1GSdrtqlg+43bTM9eo6OjoiNjcXq1asNhkiArucuxMfHY9GiRSa33Tv8kZmZiZSUFKxfvx5z5syBRCKBUCjE8ePHO72j48aNG3j//fexZs0aBAcHG61pIRaLOx0y0Wo7QnV37oBpb2fgJerrHnoOh7dEjFeen4SyiipsPVR03/Kl125hctgI2AqNT7AvzhqPO00KnL5S/UDHUnrtFqaGj4C9yDhHDXKxe6h2pp+8gu9OX8ScKePQ39F4Xw52YpTfNA4jI4b6mvUFNGebyQwJ/+dbPpVKZbfKBwUF4aeffoKbm5vJf3dvnVWr1XjvvfewcuVKzJw5E97e3vq5IDKZrNP9JyUlISYmBq+88grWrFmDxsZGg+1Dhw5FWVmZyboNDQ0AfhneuXvF5m4Qudev90tEDBw9O3laWmDt4qkQWFkh4/g5hA5y7fRfP+uOgPFhej6srCyxfdU8zB0fgAA3e0QN98b7S6bgqWB/fJZx4oEX29r6VT5EImtsS5qL2PAhGOrhgAmD3bFi9likrnoOE4MeblnpTeknUH7zNuztxEbbKm7WYkr4CIz06VjAaIyfK96c/zSe8HQx6wto7jbTo6PRaJCdnQ0XFxe4urp2q05ERATy8vJQWlraZTmtVoumpia4u7sbPK5Wq3Hs2LHOTwA/X51YuHAhvL298cEHHxhc0QgPD8exY8dQWVlpVDczMxMhISHw9PQEAP2QTF1dnVG7jx492unVme6GLyLq5V+4HqbyhCEeGOjTsQ7Aa0u6Xjlx7Yf7UVzZgKo7SqzYvB+J88IQFzMeS+zEULWpUVXTgLc/OmRw10ZPVcuVWLZpH/5r7gTMmzoWi+3EUGs0qGuQ45/pufjuctVDdZZWB2z4VxY2/32u0bYPvsjBsucisX5Zx7YWpQql12/hUPb3iI0Zb7YX0NxtpgdTUVGhv/qg0WjQ2NiIw4cPIzs7Gzt27Oj2Kpnjxo3DjBkzkJiYiLVr1yIgIAACgQAymQwlJSWIjIyEm5sbRCIRpk+fjj179iAwMBDOzs5oaGjAV199ZTRB1RQbGxusW7cOcXFx2LdvH55//nkAQEhICObOnYu33noLSUlJ8PHxgVKpRFZWFtLT0/HFF1/oQ0tAQAAkEgnS0tKQkJAAiUQCqVSKvXv3Gi0EBgBOTk7w9/fHwYMH4eHhAWtrawiFQi77TvQHZaFNmG80WWC6bcRjOwBnWyEaFG1m2beTWIimVjU02sd3v76lBdBfLEK94rdZlOi3aPMfkVbb9ZwDaXU5ls+LQHzsLIPHZTIZJk40/IOGAoEAgwYNQkREBGJiYjBkyC93FJWUlCA+Ph45OTkGq3Deq7W1FYcOHcLHH3+sX5FTIBAgLi4OCQkJcHR01F9Z2LJlCzIzMwEAHh4eSE5ORlBQEGJiYvSLbt37vHfX9rgrPz8fiYmJ2LVrF0aPHg2gY4GtgwcPIi0tDVJpx+q+kZGRePnllzFs2DCDYy0rK8PWrVuRn5+vP4bly5fD398fcXFxBscAAJcuXUJKSgrKyzvmfh04cMDkbcOmJCYmIiwsDC+88ALfsESP2RfpGfhwfwGcvQNMbv+mOf/3FziI/kiBw5za29tx584d6HQ62Nvbd3qVRKFQQKVSwdHR8ZGubaHRaCCXy2FtbW3yjpZ7tbS0oLW1FQ4ODp0uVX5vu+RyOYRCYbeuxhBR7wwcAnYbUe9gZWVlcDWiM7a2tmb54BYIBN16fqDj7pZfr+nRVbt68tdiiah3smQXEBEREQMHERERMXAQERERMXAQERERAwcRERExcBARERExcBAREREDBxEREREDBxERETFwEBEREQMHEREREQMHERER/Q7wj7cRPcgvjtAGZ0rKAWSwM4iozzlTUg6B0IaBg8jsgcNahDPlDThVeoudQUR98kuXwFrEwEH0sCwtrbrcbitxZScREfXkvMouICIiIgYOIiIi6vVMDql805zPniEiIqJHxugKh06nY68QERGR+QIHwwYRERGZNXAwbBAREZFZAwfDBhEREZnT/wPDkoWpOH6DCQAAAABJRU5ErkJggg==) Each breakout area has a Zone Name in the format of "Breakout N," where *N* is a unique number. This name relays several important pieces of information to the Breakroom conference system. Most importantly, it indicates: * That the breakout area should be included in the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel) * How many breakout areas there are, and which number identifies this particular breakout area ![](/assets/images/Using_Conference_System_016-556417bd46c80298c4f04d0e13ca6fae.png) *Pictured: An example Breakout Rooms panel.* There may come times when you need to edit the teleport button lineupβ€”for instance, if the first breakout area you set down (which automatically became "Breakout 1" and was assigned to the "1" button) has been moved to a far-off area, and you'd rather make it "Breakout 5." Alternatively, you may wish to create a [custom voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) and add it to the Breakout Rooms panel. You can edit the Zone Name by following the steps below. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Make sure the[ Objects window ](/creating-custom-experiences/using-the-region-editor.md#the-objects-window)is open by clicking the **Objects button** located on the bottom right. 4. Locate the **Breakroom Breakout Area object** you want to edit in the Objects window, and click on it. This will open the **Inspector window** for that object. 5. Expand the RoomFurniture component in the Inspector window by clicking the **> icon** located to the left. 6. Locate the **Zone Name property**. In the associated field, enter a new name for the breakout area. This name must be input as "Breakout N," where *N* is the new number. 7. Click the **Reset Zones button** to reset the conference system. 8. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. ##### Zone Color[​](#zone-color "Direct link to Zone Color") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAA/CAYAAACrWRHNAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDgMhCPznFD0CAiocx30lvUGPX1S22d2URIRBxgHYP+8DXt0oCUiuWqwUdBMTo+aB4rQ2fEIZfiYrUqA3HPiIJnKI/eaZaonGE4+GH2HzKF+IdI3Cci+YBL8+iOIj7oq6ti2ILIiYZiEFQZtjYTGt1xGWHe+m80B3to2nmCzUPHKpvr0t+z9MtHNidM+sUwD3I8DNg+qe2EX5IxmxDvwc1Rfyb0+nwRe1Rln8ZwGThAAAAYVpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfU6UiLYIW/MAhQ3Wyi4o4lioWwUJpK7TqYHLph9CkIUlxcRRcCw5+LFYdXJx1dXAVBMEPEGcHJ0UXKfF/SaFFjAfH/Xh373H3DhAaFaaaXTFA1SwjnYiLufyKGHhFAIPoxzBCEjP1ZGYhC8/xdQ8fX++iPMv73J8jpBRMBvhE4hjTDYt4nXhm09I57xOHWVlSiM+JJwy6IPEj12WX3ziXHBZ4ZtjIpueIw8RiqYPlDmZlQyWeJo4oqkb5Qs5lhfMWZ7VSY6178hcGC9pyhus0R5HAIpJIQYSMGjZQgYUorRopJtK0H/fwjzj+FLlkcm2AkWMeVaiQHD/4H/zu1ixOTbpJwTjQ/WLbH2NAYBdo1m37+9i2myeA/xm40tr+agOY/SS93tYiR0DfNnBx3dbkPeByBxh60iVDciQ/TaFYBN7P6JvywMAt0Lvq9tbax+kDkKWulm6Ag0NgvETZax7v7uns7d8zrf5+AJT2crTubXaXAAANdmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDphNTBmODYzMC02ZjkzLTRiYTQtYTVjNi1jYzZjYzdiOTczZWIiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M2FhNGY2OWYtZjU0My00NDIzLWFlMzEtNjRiN2NjMWZlOWUwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NmEyYmNkZDktOTUzOS00N2JlLTk5ZGMtYWVkNmE2MjYyYmRiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MjE3NTkyODczODE0NTYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDc6MjNUMTQ6Mjg6MDUtMDQ6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA3OjIzVDE0OjI4OjA1LTA0OjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWY2MDgzMTQtZTIwNC00MTU4LWI0NTQtY2RhYjVjMGFhZTQwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA3LTIzVDE0OjI4OjA3Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PlPgbukAAAAGYktHRAD+AGcAXVYFpa8AAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAHdElNRQfoBxcSHAcunD+ZAAALjElEQVR42u3dfVRT5x0H8C9JeAsEAgFEhFUgKrT4MgS0iHooL1tbS0WrtOW42emKU6Rb7Y4op6dn3ZlnPa1tcXNz0+OZ1a5z6hmlrrUWRiuClFiYGrWIiK+EyktCgLwQSPYHw56Y8E4U5fs5J//c+zw3eX73Qr7Jfe6Nk2XdTywgIiIiciCBxcK8QURERI5jNpshAACGDiIiInJU2ADQGzgYOoiIiMhRYcMqcDB0EBERkSPCBgCI7m5gsVjwtEcCK0UT+I+kZ8D17S0qxIbKEBsVymIR0YSjUNZDUd8Cb//gftsc7Si1WSZi6YiGR+TsCkV9C07V3GIxiGji/Q90cYPI2XX4/Vg6ImsCgXDA9R5SfxaJiGi4/1tZAiIiImLgICIiogceT6kQ3WWwSaN6bSu6TUZ0dxlYLCKaeMHh/3M4hnt6mYGDaJi6TUZepUJE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) When you add a new prefab breakout area to your Region, it will automatically assign itself a unique Zone Color. This color will be applied to the actual breakout area object, and will also be used as the teleport button background color in the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakout-rooms-panel). If you want to change a breakout area's color, you can do so by following these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Make sure the [Objects window](https://docs.breakroom.tech/customization/using-the-region-editor#the-objects-window) is open by clicking the **Objects button** located on the bottom right. 4. Locate the **Breakroom Breakout Area object** you want to edit in the Objects window, and click on it. This will open the **Inspector window** for that object. 5. Expand the RoomFurniture component in the Inspector window by clicking the **> icon** located to the left. 6. Locate the **Zone Color property**. In the associated field, enter any of the following colors: 1. Blue 2. Orange 3. White 4. Grey 5. Magenta 6. Teal 7. Black 8. Cyan 9. Red 10. Purple 11. Pink 12. Green 13. Yellow 7. Click the **Reset Zones button** to reset the conferencing system. 8. Click the **Save button** to store your changes. If you want to change the hexadecimal code associated with any of these color keywords, you can find instructions by reviewing our [RoomFurniture component documentation](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-color). #### Editing breakout area cameras[​](#editing-breakout-area-cameras "Direct link to Editing breakout area cameras") All of Breakroom's voice zones, including those built into the prefab breakout areas, come equipped with cameras. These cameras integrate with the conference system [gesture and camera controls](/getting-started/using-the-conference-system.md#seats-and-gestures), allowing users to switch between a variety of camera angles while seated. ![](/assets/images/Using_Conference_System_014-ba721ac0924f933da01aab4ae2d1153c.png) *Pictured: An avatar seated in an audience seat. Note the Gestures and Camera View panels on the left side of the screen.* The Behind Camera and Forward Camera are fixed relative to the user. However, the angle and location of the **Speaker Camera**, **Screen Camera**, or **Audience Camera** can be customized to support your individual needs. ![](/assets/images/Breakout_Areas_Cameras_001-be4fb822b65698a20e38cbde64ed3fef.png) In the image above, you can see the location of these cameras highlighted in the [Region Editor](/creating-custom-experiences/using-the-region-editor.md). There are three cameras, each represented by a **3D camera icon** bounded by a translucent box. The box color corresponds to the camera type, and these colors are consistent between all voice zones and breakout areas. | Box Color | Camera Name | Camera Focus | | --------- | ----------- | -------------------------------- | | Orange | Audience | The audience as a whole. | | Blue | Screen | The presentation screen. | | Green | Speaker | The presenting speaker's avatar. | ![](/assets/images/Breakout_Areas_Cameras_002-9be9c60ed3f0967d0314c46d11d53941.png) *Highlighted: The static audience camera selected in Region Editor. Notice how the Workshop object has been expanded in the Objects window.* If you want to change the angle of any of these cameras, you can do so by following the instructions below. info Note: In this section, we will refer to the built-in camera that you want to move as the *static camera*, and your own user camera as the *working camera*. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Make sure the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window) is open by clicking the **Objects button** located on the bottom right. 4. Locate the **Breakroom Breakout Area object** you want to edit in the Objects window. Click the **> icon** to the left of the object name to expand it. 5. Locate the **Breakroom Voice Zone object**, and click the **> icon** to the left of the object name to expand it. 6. Locate the **Cameras object**, and click the **> icon** to the left of the object name to expand it. 7. Click on the **static camera** you want to move (either the Screen Camera, Audience Camera, or Speaker Camera). This static camera will be highlighted on your screen, and the [movement gizmo ](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#movement)will center on it. 8. Leaving the static camera object selected, move your working camera into position. *This angle and position will replace the current angle of the selected static camera.* ![](/assets/images/Breakout_Areas_Cameras_003-9c898dc7bc037083cf8c39096076ff03.png) *Highlighted: The location of the Move Object to Camera button.* 9. Click the **"Move Object to Camera" button** located in the bottom toolbar. The static camera will snap into its new position. 10. Click the **Reset Zones button** to reset the conference system, and click the **Save button** to store your changes. 11. Click the **Close button** to exit the Region Editor. To make sure your UI is refreshed, exit the breakout area or voice zone. When you return to that zone, your new camera angle will now be accessible. --- ### Creating custom voice zones [YouTube video player](https://www.youtube.com/embed/8yM7qDZTYHE) #### Overview[​](#overview "Direct link to Overview") [Voice zones](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md) give users the ability to connect through voice chat, webcam streaming, and screen sharing. Breakroom allows you to nest voice zones within one another, opening up a world of Region design possibilities. Through the use of customized voice zones, you can create a virtual space full of offices, cozy coffee corners, and bustling auditoriumsβ€”all in the same Region, with no audio cross-chatter or audio interference. Elsewhere, we covered how you can [set up the prefab breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) included in the [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md). In this section, we'll explore how you can set up custom voice zones. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning After using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to add or edit a voice zone, always remember to click the **Reset Zones button** to reset the conferencing system. If this doesn't seem to push your changes forward, try saving your work, leaving the Region, and entering it again. #### Introduction to the voice zone objects[​](#introduction-to-the-voice-zone-objects "Direct link to Introduction to the voice zone objects") Voice zones take the form of boundary objects that encompass the virtual areas where audio and video sharing will take place. These boundary objects are normally invisible to you and your users. There are different [types of voice zones](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md), each designed to offer a unique media experience. ![](/assets/images/Custom_Voice_001-4aba235b8b45da6dc2931ecb5e314f30.png) *Pictured: A Breakroom Conference Region viewed in the Region Editor. Notice how transparent green boundary objects surround the three breakout areas in back.* When you launch the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) in an area that contains breakout areas or other voice zones, you'll see these boundary objects highlighted in transparent green, as in the image above. ![](/assets/images/Custom_Voice_002-5134ed838b79ff0ab5ad17904160ab55.png) In the Region Editor, there are two specialized tools you'll use while editing voice zones. Clicking the **Reset Zones button** will refresh all of the voice zones within the Region, pushing forward any changes you've made. Clicking the **Visibility button** will toggle the transparent green boundary object highlighting on and off, which is useful when you need to maneuver your working camera inside a voice zone. ![](/assets/images/Custom_Voice_003-bd798ab076c0b4539436ba00caeb6fd9.png) *Highlighted: The Breakroom Voice Zone objects in a user's Inventory.* In addition to the prefab breakout areas included in the [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md), you will receive two customizable voice zones with no additional building or seat components attached to them. These items are called **Breakroom Voice Zone** and **Breakroom Voice Zone Round**. You can find them in the **Furniture > Collaboration section** of your [Inventory](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). ##### Voice zone shapes[​](#voice-zone-shapes "Direct link to Voice zone shapes") ###### Breakroom Voice Zone[​](#breakroom-voice-zone "Direct link to Breakroom Voice Zone") ![](/assets/images/Custom_Voice_004-9ab30dd847bfc9bdadfa293120ef1bc2.png) Here in the [Region Editor](/creating-custom-experiences/using-the-region-editor.md), you can see that we've set out a copy of the **Breakroom Voice Zone object**. This voice zone is shaped like a cube, and the transparent green walls indicate its size and boundaries. It contains other components, such as a screen, cameras, and a landing pad. ###### Breakroom Voice Zone Round[​](#breakroom-voice-zone-round "Direct link to Breakroom Voice Zone Round") ![](/assets/images/Custom_Voice_005-bfa42f6e1c64749437ef5ddcab388c21.png) Here we've set out the **Breakroom Voice Zone Round object**, which is shaped like a sphere. Again, the transparent green walls indicate its size and boundaries, and it contains additional components. ##### Voice zone components[​](#voice-zone-components "Direct link to Voice zone components") ![](/assets/images/Custom_Voice_006-335af5306268d1699ac9fd758f70e6ef.png) In order to fully customize a Breakroom Voice Zone object, you will need to edit its individual components. After you have added a Breakroom Voice Zone object to your Region, follow the steps below to locate these components. 1. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the **Breakroom Voice Zone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for "voice zone" if you like.) 4. Click the **> icon** located to the left of the object name to expand it. If necessary, you can expand some individual components by clicking the relevant **> icons**. In the illustrated tutorial below, we will discuss how these components work together to create a cohesive voice zone and how you can edit them to achieve the level of function you desire. Before we leap into our tutorial example, however, let's start with a brief overview of each voice zone component. *** ![](/assets/images/Custom_Voice_007-d560e4424f820be3166340ff1da0c204.png) *Pictured: The zone collider highlighted in the Objects window. Notice how the movement gizmo is centered within the boundary object.* 1. **The ZoneCollider component**: The zone collider represents the size and boundaries of the voice zone itself. Its [size, location, and rotation](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) can be edited independently of the other components that make up the voice zone object. ![](/assets/images/Custom_Voice_008-dd8ebeaf2e159c585eec489741740cb7.png) *Pictured: The screen component highlighted within the Objects window.* 2. **The screen**: The screen component indicates where the video feed will appear when users opt to share their webcams or screens, as well as the size and location of the screen. Like the zone collider, the screen component can be edited independently of the other voice zone objects. ![](/assets/images/Custom_Voice_009-c59c03d10a1cf74ff51e826e6205178a.png) *Pictured: The landing pad highlighted within the Objects window.* 3. **The landing pad**: This object indicates where avatars will "land" when they teleport directly into the voice zone. It can be edited independently of the other voice zone components, allowing you to place it wherever you like. ![](/assets/images/Custom_Voice_010-46918dbf5def2593e023ae14acf425c3.png) *Pictured: All cameras highlighted within the Objects window. Notice how you can expand the Cameras object to select individual cameras.* 4. **The cameras**: Colored boxes indicate the default locations for the screen, audience, and speaker cameras. This information is critical for the correct functioning of the conference system [gesture and camera controls](/getting-started/using-the-conference-system.md#seats-and-gestures), and the [location](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md#editing-breakout-area-cameras) of each camera can be customized. ##### Voice zone furniture items[​](#voice-zone-furniture-items "Direct link to Voice zone furniture items") In order to take full advantage of the tools built into Breakroom's conference system, you will need to use furniture items that are designed to work with voice zones. There are several sets of [conference-ready furniture](/creating-custom-experiences/exploring-the-breakroom-toolkit/add-on-seats.md) included in the Breakroom Toolkit. Voice zones do *not* need to contain seating or other furniture in order to function, and if you do not include seating in a custom voice zone, users will still be able to voice chat, turn on their webcams, and share their screens. However, seats let users access additional tools like [gestures](/getting-started/using-the-conference-system.md#seats-and-gestures) and [camera options](/getting-started/using-the-conference-system.md#seats-and-gestures). #### Setting up a voice zone[​](#setting-up-a-voice-zone "Direct link to Setting up a voice zone") The following tutorial offers step-by-step instructions for setting up a custom voice zone in your Region. For this example, we will be using a **Breakroom Voice Zone round object** and a set of **Breakroom Add-on Stools** to create a networking area where users can "grab a cup of coffee" and chat. This section is written for administrative clients who are already familiar with customizing the Breakroom platform. If you need help accessing the [Region Editor,](/creating-custom-experiences/using-the-region-editor.md) [moving objects](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md), or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#the-roomfurniture-component), please consult the linked documentation before proceeding. ##### Editing voice zone furniture items[​](#editing-voice-zone-furniture-items "Direct link to Editing voice zone furniture items") ![](/assets/images/Custom_Voice_011-95bd5b5d39cf64e8cf8f76962323a64d.png) *Pictured: The future site of much coffee and networking.* 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Inventory Button** to launch your [Inventory window](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). 4. We want our voice zone to contain seating, so as a first step we will set out a conference-ready furniture item and edit it. For this tutorial, we will use the **Breakroom Add-on Stools object**. To find it, use the **search field** at the top of the Inventory window to look for "stools." 5. When you locate the Breakroom Add-on Stools object, set it down in your Region using your [preferred method](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). Click the **Save button**. ![](/assets/images/Custom_Voice_012-927271b444071f0f4dd0acf3a895ed17.png) *Pictured: The Breakroom Add-on Stools object, as viewed through the Region Editor.* Here we encounter our first challenge. There are too many stools in this seating arrangement, and every user who sits down will be facing the same direction. For our next step, we will remove all but six stools from the Breakroom Add-on Stools object, leaving three matched pairs. 6. In the Objects window, click the **> icon** located beside the Breakroom Add-on Stools object to expand it. 7. Click the **> icon** located beside the Seating Arrangements Stools object to expand it. 8. Here you will find the individual stools that make up the linked stools object. To make a stool invisible, click the **eye icon** located to the right of its name. Click the **Save button**. ![](/assets/images/Custom_Voice_013-f6c22dc68ba119909d3be321376af2fc.png) In the image above, you can see that we have reduced 14 stools to six. However, there's still a major issue. ![](/assets/images/Custom_Voice_014-35439850815c34ca92c3489c6984f478.png) All six stools are still facing the same way. We need to rotate three of the stools 180Β° so that two users sitting at the same table will face each other. ![](/assets/images/Custom_Voice_015-9051459ffcbe9e0ade9431d60b935d35.png) *Pictured: An individual stool object and its Inspector window.* 9. Locate the first stool you want to edit under **Breakroom Add-on Stools > Seating Arrangements Stools** in the Objects window. Click on the **stool name** to launch the **Inspector window** for that object. 10. In the Inspector window, locate the **Transform component**. Click the **> icon** located to the left to expand it. 11. You will see three properties listed under the Transform component, each with three associated fields. Locate the **Local Euler Angles property**, and **enter "180" into the Y-axis field**. 12. Repeat this set of tasks for every stool you want to "turn around." When you are done, click the **Save button**. ![](/assets/images/Custom_Voice_016-aa95a56a98e243d461fb9099dac968c7.png) The stools now face each other, so let's place them into position and dress the scene a little. ![](/assets/images/Custom_Voice_017-01a97b7303bbd4767d9f55f899610ba3.png) *Highlighted: The set of six visible stools.* 13. For the sake of convenience, we will move all six stools as a whole. Click on the **Breakroom Add-on Stools object** in the Objects window, and then use the [movement](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#movement) and [rotation tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#rotation) to position it in your Region. 14. Our networking area needs some tables and accessories. Click the **Inventory button** to open your Inventory window. When you find an item you like, feel free to add it to your scene. Use the movement, rotation and [scaling tools](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling) to edit each item as you see fit. (Remember: You can use the [Sine Wave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md) to purchase additional furniture and decor items.) 15. When you are done, click the **Save button**. ![](/assets/images/Custom_Voice_018-ff943d24a906618d2a007771be0bc74e.png) Success! We've created a lovely networking area overlooking the water. Now, let's make it a voice zone. ##### Editing voice zone objects[​](#editing-voice-zone-objects "Direct link to Editing voice zone objects") ![](/assets/images/Custom_Voice_019-127ecc04e982e6de8029f8d766b0faa9.png) *Pictured: A Breakroom Voice Zone Round object in the Region Editor.* In order to accommodate users at different points in their Breakroom tech journey, we will begin this part of the tutorial fresh. If you are interested in learning more about conference-ready voice zone furniture items, please review the [preceding section](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#editing-voice-zone-furniture-items). If you need a refresher on the different voice zone object components, you can find that information at the [start](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#voice-zone-components) of this page. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Inventory Button** to launch your [Inventory window](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). 4. Locate the Breakroom Voice Zone object you want to use. (For this tutorial, we are using the **Breakroom Voice Zone Round object**.) Add it to your Region using your [preferred method](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). 5. The Breakroom Voice Zone Round object will default to its standard size. In the example image above, you can see that there are several issues: 1. The zone collider is too large. 2. The screen is placed in an inconvenient location. 3. The landing pad is right on top of the seating area. ![](/assets/images/Custom_Voice_020-23cf2143803d0b22cbc0c13db170ce18.png) *Pictured: The voice zone, rotated so that the screen component is in a more convenient location.* 6. To begin tackling these issues, select the **top-level Breakroom Voice Zone Round object** in the Objects window. Then, using the Region Editor tools, [move](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#movement) and [rotate](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#rotation) the **entire voice zone** until the **screen component** appears where you want it to be. By moving the entire voice zone as a linked set, you will preserve the existing camera angles. ![](/assets/images/Custom_Voice_021-7c1eb5fc1c90239642a5d786aee36838.png) *Highlighted: The landing component.* 7. Next, we will reposition the landing pad. In the Objects window, click the **> icon** to the left of the Breakroom Voice Zone Round object name to expand it. Then click on the **Landing component** to highlight it. 8. Using the Region Editor tools, move, rotate, and resize the landing pad to meet your specifications. info The size of the landing pad indicates the area into which your users will teleport. You can make the landing pad bigger or smaller by highlighting it in the **Objects window** and then changing the local scale values listed under its [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component), or by using the [scale tool](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling) in the Region Editor. 9. Finally, we'll customize the size of the voice zone boundary object itself. In the Objects window, click the **> arrow** to the left of the Breakroom Voice Zone Round object name to expand it. Then click on the **ZoneCollider component** to highlight it. 10. Using the Region Editor tools, move, rotate, and resize the zone collider to meet your specifications. 11. Click the **Reset Zones button** to reset the conference system. 12. When you are satisfied, click the **Save button** to store your changes. ![](/assets/images/Custom_Voice_022-bf244f88e58f707eb019d9d23a5ac765.png) *Pictured: The zone collider resized to create a smaller, more contained space for voice chatting.* #### Special instructions for screens[​](#special-instructions-for-screens "Direct link to Special instructions for screens") ![](/assets/images/Custom_Voice_023-84d6d8932c9c1946c20b5c814f1aec59.png) After resizing the voice zone collider, you may find that the default screen size is too large or small for your intended purpose. By editing the ScriptingData component attached to the screen object, you can customize how the screen appears. ![](/assets/images/Custom_Voice_024-622d85eba6982c29a3e3b5d5ca3ea4ec.png) *Pictured: The screen highlighted in the Objects window, and its associated ScriptingData component expanded in the Inspector window.* To locate the ScriptingData component and edit it, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects button** to launch the Objects window. Locate the **Breakroom Voice Zone object**, and click the **> icon** to the left of the object name to expand it. Then click on the **Screen component** to highlight it. 4. In the **Inspector** window that opens, click on the **> icon** to the left of the **ScriptingData component** to expand it. You will see three properties, each with an associated field. 5. *If you want to change the aspect ratio of the screen*, you can enter independent values into the **Width** and **Height fields**. For instance, you may wish to create a narrow, long screen to accommodate the webcams of several different speakers. 6. *If you want to change the size of the screen while preserving the current aspect ratio*, you can enter a value in the **Scale** field, which is normally set at 1. Because this is a multiplier field, you can enter *0.5* to reduce the screen size by half, *2* to double the screen size, etc. 7. Click the **Reset Zones button** to reset the conferencing system. 8. When you are satisfied, click the **Save button** to store your changes. ![](/assets/images/Custom_Voice_025-46912b26f9ba66a4299ae8397dfb72df.png) For this tutorial, we entered a *.75* value into the Scale field. This made the screen smaller overall, while preserving the default aspect ratio. Once we save our work and take a look at the voice zone, you can see that the screen appears at a much more manageable size. #### Special instructions for cameras[​](#special-instructions-for-cameras "Direct link to Special instructions for cameras") ![](/assets/images/Custom_Voice_026-c345a9ba17eee9f1d80237e5e01210ab.png) *Highlighted: The voice zone cameras, as well as the conference system camera panel.* If you create a custom voice zone that contains [furniture items](/creating-custom-experiences/exploring-the-breakroom-toolkit/add-on-seats.md) designed to work with Breakroom's [conference system cameras](/getting-started/using-the-conference-system.md#seats-and-gestures), you may find that you want to change the camera focus points. (For example, if you move the screen out of range of the Screen Camera.) You can edit the voice zone cameras by using the "Move Object to Camera" button in the Region Editor. Detailed instructions are [available](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md#editing-breakout-area-cameras) in our [Running Your Event section](/running-your-event.md). #### Special instructions for landing pads[​](#special-instructions-for-landing-pads "Direct link to Special instructions for landing pads") When installing a Breakroom Voice Zone object, you can choose between *default landing* and *clustered landing* effects for users who teleport straight into the voice zone. You can also randomize the direction your users will face upon arrival. ##### Default landing[​](#default-landing "Direct link to Default landing") The default landing pattern is automatically enabled upon voice zone installation. Under the default landing pattern, users will arrive at random points within the boundary designated by the landing pad object. info To avoid a teleportation bottleneck, make your landing pad object as large as possible. ##### Clustered landing[​](#clustered-landing "Direct link to Clustered landing") By enabling the *clustered landing* option, you can arrange for users to arrive in *groups* within the zone designated by the landing pad object. This can help foster an atmosphere of socialization and camaraderie. To enable and manage clustered landing, follow the steps below. ![](/assets/images/Custom_Voice_027-97c51d85319b6851a5d07df664df6f51.png) *Highlighted: The location of the landing pad object in the Objects window, as well as the relevant landing pad components in the Inspector window.* 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects button** to launch the Objects window. Locate the **Breakroom Voice Zone object** you want to edit, and click the **> icon** to the left of the object name to expand it. Then click on the **Landing component** to highlight it. 4. In the **Inspector** window that opens, click on the **> icon** to the left of both the **Transform** and **ScriptingData components** to expand them. At this point, it is useful to explain what a few of these component properties do, as well as some of the math involved in creating clustered landing areas. The key properties to consider are: * *Transform component > Local Scale.* This property controls the size of the landing pad object. In the example image above, you can see that the object is 6x1x12 meters, or 6x12 along the axes that "count." * *ScriptingData component > Clustered Landing.* This property controls whether clustered landing is enabled or disabled. If clustered landing is turned off, users will arrive in the [default](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#default-landing)/randomized landing style. * *ScriptingData component > Cluster Size.* This property controls the size of the clustered landing areas *within* the landing pad object. * *ScriptingData component > Random Orientation.* This property controls whether users will arrive in a group facing each other (i.e. oriented toward the center of the cluster), or facing in random directions. The most important property to consider is the *Cluster Size.* This value must be entered as a number. If you enter the numeral *N*, we might summarize the instructions relayed to the system as "*create as many clustered landing areas of NxN meters as will fit within the scale values of the landing pad object."* In the example image above, you can see that the landing pad object is 6x12 meters in size. Under the ScriptingData component, you can see that the Cluster Size property has been set to 6. This will result in the creation of two 6x6 meter clustered landing areas within the boundary designated by the landing pad object. With this explained, let's return to the instructions. 5. Make sure the **landing pad object** is the size you need by changing the [local scale values](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) listed under its Transform component, or by using the [scale tool](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#scaling) in the Region Editor. 6. Under the **ScriptingData component**, enable or customize the following properties: 1. Random Orientation: 1. If you want users to arrive in a cluster facing each other, enter *no* into the field. 2. If you want users to arrive in a cluster facing in random directions, enter *yes*. 2. Clustered Landing: Enter *yes* into the field. 3. Cluster Size: Enter the size of your clustered landing points into the field (e.g. *3* to create 3x3 clustered landing points). 7. Click the **Reset Zones button** to reset the conferencing system. 8. When you are satisfied, click the **Save button** to store your changes. ##### Random Orientation[​](#random-orientation "Direct link to Random Orientation") Whether you choose to implement [default landing](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#default-landing) or [clustered landing](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md#clustered-landing) for your teleport points, you can randomize the direction that your users will face when they arrive. To do so, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects button** to launch the Objects window. Locate the **Breakroom Voice Zone object** you want to edit, and click the **> icon** to the left of the object name to expand it. Then click on the **Landing component** to highlight it. 4. In the **Inspector** window that opens, click on the **> icon** to the left of the **ScriptingData component** to expand it. 5. In the **Random Orientation field**, enter *yes*. 6. Click the **Reset Zones button** to reset the conferencing system. 7. When you are satisfied, click the **Save button** to store your changes. To return a landing pad to standard orientation, repeat steps 1-4 above and enter *no* into the Random Orientation field. Click the **Reset Zones button**, followed by the **Save button**. #### Assigning a Zone ID[​](#assigning-a-zone-id "Direct link to Assigning a Zone ID") In order to identify your custom voice zone as a standalone media point, your custom voice zone needs a unique Zone ID. This number should be automatically assigned when you place the voice zone object down. To change a voice zone's Zone ID, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 2. Make sure the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window) is open by clicking the **Objects button** located on the bottom right. 3. Locate the **Breakroom Voice Zone object** you want to edit in the Objects window, and click on it. This will open the **Inspector window** for that object. 4. Expand the RoomFurniture component in the Inspector window by clicking the **> icon** located to the left. 5. Locate the **Zone ID property**. In the associated field, enter a new ID number for the voice zone. 6. Click the **Reset Zones button** to reset the conferencing system. 7. Click the **Save button** to store your changes. If you need help resolving duplicate zone errors, please visit our dedicated [troubleshooting page](/running-your-event/customizing-the-conference-system-components/troubleshooting-duplicate-zone-errors.md). #### Assigning a Zone Name[​](#assigning-a-zone-name "Direct link to Assigning a Zone Name") It is best practice to assign your custom voice zone a unique Zone Name. To do so, follow these steps. 1. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 2. Make sure the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window) is open by clicking the **Objects button** located on the bottom right. 3. Locate the **Breakroom Voice Zone object** you want to edit in the Objects window, and click on it. This will open the **Inspector window** for that object. 4. Expand the RoomFurniture component in the Inspector window by clicking the **> icon** located to the left. 5. Locate the **Zone Name property**. In the associated field, enter a new name for the voice zone. (Tip: If you want to add the voice zone to the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakout-rooms-panel), you can input the name as "Breakout N," where *N* is a unique number.) 6. Click the **Reset Zones button** to reset the conferencing system. 7. Click the **Save button** to store your changes. If you need help resolving duplicate zone errors, please visit our dedicated [troubleshooting page](/running-your-event/customizing-the-conference-system-components/troubleshooting-duplicate-zone-errors.md). #### Adding voice zones to navigation tools[​](#adding-voice-zones-to-navigation-tools "Direct link to Adding voice zones to navigation tools") ![](/assets/images/Using_Conference_System_017-062a960856fcd1d1ea6cfb00a6fc3591.png) *Pictured: The Areas of Interest panel.* When you add a custom voice zone to your Region, you may see it appear in the Areas of Interest panel. This panel is visible on the right side of the screen when activated, and can be set up to offer direct teleport links to any voice zone that has the "Zone Visible" option enabled in its [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-visible). *Zones already linked in the General Navigation or Breakout Rooms panel will be ignored by the Areas of Interest panel.* This makes it a flexible solution for offering additional teleport options to your users. You can [enable, disable, or rename individual links](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md#the-areas-of-interest-panel) within the Areas of Interest panel. If you disable all of your custom voice zones from appearing within the Areas of Interest panel, the panel will not be displayed on your screen. You can also add a custom voice zone to the [Breakout Rooms panel](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md). ##### Enabling auto-sit on teleport[​](#enabling-auto-sit-on-teleport "Direct link to Enabling auto-sit on teleport") If you set up your custom voice zone using furniture designed to work with the Breakroom conference system, you can enable the auto-sit feature. This means that when users teleport into the voice zone, they will be automatically seated in an available chair. To enable the auto-sit feature, please follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). Locate the **furniture item** you want to edit. Click on the object name to launch the **Inspector window**. 4. In the Inspector window, click on the **> icon** to the left of the **RoomFurniture component** to expand it. 5. You will see a single property titled **Zone Name**. In this field, *enter the same exact Zone Name you used for the associated Breakroom Voice Zone object.* (For example, if your voice zone is named "Coffee Bar," then the Zone Name for the stools should also be "Coffee Bar.") 6. Click the **Reset Zones button** to reset the conferencing system. 7. Click the **Save button** to store your changes. #### The RoomFurniture component[​](#the-roomfurniture-component "Direct link to The RoomFurniture component") The **RoomFurniture component** attached to the Breakroom Voice Zone objects contains several fields that can be manually edited. By doing so, you can: * Change the voice zone type * Disable or enable voice and text chat * Adjust the voice zone's spatial settings * Edit voice zone priority and "nest" voice zones * Enable or disable audience cameras, and more These are advanced settings that Region designers can use to create wholly customized points of interactivity. Please see our [RoomFurniture component documentation](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md) for more information. --- ### Designating triage zones #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Toolkit_StartHere_001-d6d0bc69b4c719908e199fbfd6ba1269.png) *Pictured: The Start Here UI.* Breakroom offers World Owners and their users a variety of support resources, including: * [Built-in device and networking testing](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md) * [Device](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md#basic-troubleshooting-tips), [World Stream](/opening-the-doors/world-stream/troubleshooting-world-stream-issues-on-chrome.md) and [network](/help/troubleshooting-network-ports-and-firewalls.md) troubleshooting guides * [New user guides](/getting-started.md) However, for large events you may want to designate a *triage zone* where attendees can access immediate technical assistance. By specifying a triage zone in the Start Here UI, you will add a button that attendees can click to teleport directly to your support area. Moderators can also send attendees to the triage area using the teleportation options built into the [moderator tools](/running-your-event/moderator-tools/crowd-management.md). info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning After using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to add or edit a voice zone, always remember to click the **Reset Zones button** to reset the conferencing system. If this doesn't seem to push your changes forward, try saving your work, leaving the Region, and entering it again. #### Assistance options [](#assistance-options)[​](#assistance-options- "Direct link to assistance-options-") It is important to note that triage zones are quick-teleport destinations available through the Start Here UI. They have no special functionality. Instead, you will need to make key decisions about the way you use your triage area based on the needs of your audience. If you have a large team, you may want to train several "triage leaders" who will actively staff the triage zone for the duration of your event. Triage leaders could be trained to: * Identify struggling users and [reach out to them](/running-your-event/moderator-tools/broadcast-messages.md) using the moderator tools * Use the moderator tools to [move users](/running-your-event/moderator-tools/crowd-management.md) to the triage zone * Communicate with users via [text](/getting-started/communicating-with-other-users.md#text-chat) and [voice chat](/getting-started/communicating-with-other-users.md#voice-chat) * Troubleshoot any issues that are preventing users from participating in the event If you have a small team, you may opt to offer passive assistance with or without a limited triage leader presence. This might look like: * Graphic guides posted on [Breakroom Image Viewers](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-image-viewer.md), with or without built-in links * Tutorial or troubleshooting videos accessible through [Breakroom Video Players](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-video-player.md), with or without built-in links * Interactive website assistance offered through [Breakroom Web Browsers](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-web-browser.md) #### Designating your triage zone[​](#designating-your-triage-zone "Direct link to Designating your triage zone") ![](/assets/images/Triage_001-f6935451d54b723fee0b5fdfabef57fc.png) After setting up a [breakout area](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) or [custom voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md), you can specify it as a triage zone by following the steps below. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, locate the **Start Here UI object**. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 5. In the Inspector window, locate the **RoomFurniture component** (highlighted above). Expand it by clicking the **> arrow**. 6. Locate the **Triage Zone field**. Into this field, enter the **name** of the zone you want to designate as the triage zone. (In the example above, we have named a custom voice zone *Triage Zone*, as highlighted in the Objects window.) 7. Click the **Save button** to store your changes. Click the **Reset Zones button** to reset the conferencing system. 8. Click the **Close button** to exit the Region Editor. Leave the Region and return to activate the Get Help button in the Start Here UI. --- ### Setting up Presenter and Audience zones #### Overview [](#overview)[​](#overview- "Direct link to overview-") ![](/assets/images/Presenter_Audience_001-506d7215c3c7999244b6a69cb9a4cb31.png) *Pictured: Here a keynote speaker is standing in one of the presenter seats in a Presenter zone, and is able to share her screen.* Breakroom allows you to customize your Regions with a variety of [*voice zone types*](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md), each with its own set of rules governing what kinds of media can be shared and by whom. Among these, Presenter and Audience zone types are unique, as both make use of special *presenter seats*. By positioning their avatars in these seats, presenters can gain access to voice chat and media sharing functions within a particular voice zone, even if these functions are otherwise restricted. Users with access to the Breakroom [moderator tools](/running-your-event/moderator-tools.md) (hereafter referred to collectively as *Moderators*) can also grant access to voice chat or media sharing functions as needed. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning After using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to add or edit a voice zone, always remember to click the **Reset Zones button** to reset the conferencing system. If this doesn't seem to push your changes forward, try saving your work, leaving the Region, and entering it again. #### Using Presenter and Audience zones[​](#using-presenter-and-audience-zones "Direct link to Using Presenter and Audience zones") ![](/assets/images/Presenter_Audience_002-7eb27254eb38dc6c52ccae5313f08587.png) *Pictured: An example of how a Presenter or Audience zone might appear, with five presenter seats set up on a stage.* Presenter seats are represented by the usual blue seat tag. Depending on which [Region template](/building-new-worlds/region-template-descriptions.md) or [breakout area](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md) is being utilized, you may see these tags arranged on a stage, set in front of a main screen, or otherwise located in the logical spot for a presenter to occupy. To take up a presenter spot, simply click on a blue **presenter seat tag**. This will position your avatar and give you access to voice chat and media streaming options. To leave the presenter seat, click the **Stand Up button** at the bottom of the screen. ##### Presenter and Audience zone functionality [](#presenter-and-audience-zone-functionality)[​](#presenter-and-audience-zone-functionality- "Direct link to presenter-and-audience-zone-functionality-") Presenter and Audience voice zones are similar, in that both restrict media access to certain users. For reference, here is a comparison of the default settings for Presenter and Audience zones. | Zone type | Voice chat | Media share (webcam, etc.) | | --------- | --------------- | -------------------------- | | Presenter | All users | Presenters only | | Audience | Presenters only | Presenters only | In the following sections, we will explain how presenters can access the media sharing functions they need, and how Moderators can enable or disable media streaming. Instructions are also provided so that [World Owners](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) and other users with access to the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) can customize the number of available presenter seats in a given voice zone, or place limitations on who can use those presenter seats. #### Setting up Presenter and Audience zones [](#setting-up-presenter-and-audience-zones)[​](#setting-up-presenter-and-audience-zones- "Direct link to setting-up-presenter-and-audience-zones-") You can customize Presenter and Audience zones by adding or removing presenter seats. You can also set limitations on who can use those seats. The following tutorials offer step-by-step instructions for specific use cases, but the same general principles can be used to create many different presenter configurations. ##### Adding presenter seats[​](#adding-presenter-seats "Direct link to Adding presenter seats") ![](/assets/images/Presenter_Audience_003-8f9db03eb0e4bcbab754ad150461d154.png) *Pictured: An example of the default Breakroom Helpdesk setup.* For our first tutorial example, we'll add some additional presenter seats to a [Breakroom Helpdesk](/creating-custom-experiences/exploring-the-breakroom-toolkit/conference-rooms-and-booths.md#breakroom-helpdesk). We will assume that the Breakroom Helpdesk object is already installed in a Region, along with its single presenter seat. The [Breakroom Toolkit](/creating-custom-experiences/exploring-the-breakroom-toolkit.md) includes a variety of [presenter seat objects](/creating-custom-experiences/exploring-the-breakroom-toolkit/add-on-seats.md) that you can add to any Presenter or Audience zone. Our goal is to place one additional standing presenter seat on either side of the desk to accommodate event staff. To get started, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Inventory Button** to launch the [Inventory window](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). 4. Locate the **Breakroom Addon Presenters object**. This object consists of nine standing presenter seats. To find it, use the **search field** at the top of the Inventory window to look for "presenters." 5. When you find the Breakroom Addon Presenters object, set it down in your Region using your [preferred method](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). Click the **Save button**. ![](/assets/images/Presenter_Audience_004-d20aff938852c5920f8e4e186f46dd7b.png) *Pictured: The Breakroom Addon Presenters object added to a Region, with its contents expanded in the Objects window.* Here we encounter our first challenge. There are too many standing presenter seats for our purposes. For our next step, we will make all but two seats invisible. 6. In the Objects window, click the **> arrow** located beside the Breakroom Addon Presenters object to expand it. 7. Click the **> arrow** located beside the Presenter Sits object to expand it. 8. Here you will find the nine individual seats that make up the linked presenter seats object. To make a seat invisible, click the **eye icon** located to the right of its name. Repeat this step for every seat you want to make invisible. Click the **Save button**. ![](/assets/images/Presenter_Audience_005-bba88acbb1923ccd8366f26f2598b6e9.png) *Pictured: Nine standing presenter seat tags reduced to two.* Now we need to move the seat tags into position by placing one on either side of the desk. 9. Locate the first seat you want to edit under Breakroom Addon Presenters > Presenter Sits in the Objects window. Click on the **seat name** to highlight that individual seat. 10. Use the [movement](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#movement) and [rotation](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#rotation) tools to position the seat tag in your Region. You can also key position values into the tag's [Transform component](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component). 11. Once you have the first seat tag in position, repeat this process for the remaining seat. Click the **Save button**. ![](/assets/images/Presenter_Audience_006-9d90a25911153f561ff97dde6384e385.png) Finally, we need to connect the new presenter seats to the Breakroom Helpdesk voice zone. 12. Click the **Objects button** to launch the Objects window. Locate the **Breakroom Addon Presenters object**. Click on the object name to launch the **Inspector window**. 13. In the Inspector window, click on the **> arrow** to the left of the **RoomFurniture component** to expand it. 14. You will see a property titled **Zone Name**. In this field, *enter the Zone Name you want to attach the presenter seats to.* (For example, my Helpdesk voice zone is named "Entrance," so I would type in "Entrance.") 15. Click the **Reset Zones button** to reset the conference system. 16. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. warning You can add as many presenter seats as you like to a voice zone. However, it is important to note that Breakroom's media streaming system cannot accommodate more than 17 simultaneous webcam or screen share users. ##### Removing presenter seats[​](#removing-presenter-seats "Direct link to Removing presenter seats") To remove presenter seats from a voice zone (for example, if you want two presenter spots instead of nine), you would follow the same instructions included in the example tutorial above. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. In the Objects window, click the **> arrow** located beside the Breakroom Addon Presenters object to expand it. 4. Click the **> arrow** located beside the Presenter Sits object to expand it. 5. Here you will find the individual seats that make up the linked presenter seats object. To make a seat invisible, click the **eye icon** located to the right of its name. Repeat this step for every seat you want to make invisible. 6. Click the **Reset Zones button** to reset the conference system. 7. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. warning The Presenter and Audience zones seats that come preconfigured in Breakroom's Region templates cannot be edited, as they are uploaded with the Region as a whole. We apologize for the inconvenience. ##### Restricting presenter seat access[​](#restricting-presenter-seat-access "Direct link to Restricting presenter seat access") ![](/assets/images/Presenter_Audience_007-419aa64e6b36a7ca0ef03abe06999f0f.png) *Pictured: An individual presenter seat being isolated and edited in the Region Editor.* It is possible to prevent unauthorized users from jumping on empty presenter seats by restricting access to VIPs or staff members only. To get started, follow these steps. 1. Log in to your Breakroom world and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. In the Objects window, click the **> arrow** located beside the Breakroom Addon Presenters object to expand it. 4. Click the **> arrow** located beside the Presenter Sits object to expand it. 5. Here you will find the individual seats that make up the linked presenter seats object. To edit a seat, **click on it** in the Objects window. Doing so will launch the **Inspector window** for that seat. 6. In the Inspector window, locate the **ScriptingData component**. Click the **> arrow** on the left to expand it. 7. Here you will see three properties and their associated fields. We are concerned only with the **VIP** and **Staff fields**. *The Reserved field should not be edited.* 1. VIP field: To restrict presenter seat access to [Region VIPs](https://docs.breakroom.tech/open-the-doors/managing-access-to-your-world/region-level-user-permissions) and above, as well as [world-level Administrators](https://docs.breakroom.tech/open-the-doors/managing-access-to-your-world/world-level-user-permissions) and above, type *yes* into this field. 2. Staff field: To restrict presenter seat access to [Region Moderators](https://docs.breakroom.tech/open-the-doors/managing-access-to-your-world/region-level-user-permissions) and above, as well as [world-level Administrators](https://docs.breakroom.tech/open-the-doors/managing-access-to-your-world/world-level-user-permissions) and above, type *yes* into this field. 8. Repeat these steps for every seat you want to restrict. When you are satisfied, click the **Reset Zones button** to reset the conference system. 9. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. warning The Presenter and Audience zones seats that come preconfigured in Breakroom's Region templates cannot be edited, as they are uploaded with the Region as a whole. We apologize for the inconvenience. #### Controlling audience voice chat and media access[​](#controlling-audience-voice-chat-and-media-access "Direct link to Controlling audience voice chat and media access") ![](/assets/images/Crowd_007-e15e9e8e9c632d2b6bb83c29d16a5a4d.png) *Pictured: The Crowd management panel.* Using the [Crowd management panel](/running-your-event/moderator-tools/crowd-management.md), Moderators can permit or restrict access to voice chat, webcam streaming, and screen sharing in Presenter and Audience zones. To locate this panel, click the **Moderator controls/Key button** located on the right side of the screen, and then the **Crowd management button**. In order to moderate Presenter and Audience zones, you will use the buttons under the **Zone Settings section**. In detail, the available zone settings are: * **Quiet Mode**: When turned on, Quiet Mode will mute every user who is not currently seated on a [presenter seat](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md#using-presenter-and-audience-zones). * **Audience Mode**: When turned on, Audience Mode grants users access to *all enabled* communication options in that voice zone (e.g., voice chat, webcam, and screen share). Audience Mode overrides Quiet Mode, if Quiet Mode is also turned on. * **Admin Mode**: When turned on, Admin Mode permits Moderators to access *all enabled* communication options in that voice zone (e.g., voice chat, webcam, and screen share). Admin Mode overrides Quiet Mode. To customize a voice zone's communication settings, follow the steps below. 1. Navigate your avatar to the appropriate Region. 2. Position your avatar inside the voice zone that you want to customize. 3. Click the **Moderator tools/Key button** located on the right side of the screen. 4. Click the **Crowd management button**. In the **Crowd Management panel** that appears, locate the **Zone Settings section**. 5. Click the relevant buttons to customize the voice zone. 1. If a button says **Quiet/Audience/Admin is On**, then that communication setting is currently *enabled*. Click the button again to disable it. 2. If the button says **Quiet/Audience/Admin is Off**, then that communication setting is currently *disabled*. Click the button again to enable it. 6. Repeat this process for every voice zone you want to customize. The most common change Moderators will make is to toggle Quiet Mode on or off in Presenter zones. This will enable the audience to use voice chatβ€”for example, during a Q\&A session. --- ### The RoomFurniture component [YouTube video player](https://www.youtube.com/embed/hPiwHQUT7RE) #### Overview[​](#overview "Direct link to Overview") When you select a prefab [breakout area](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) or [voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) object in Breakroom's [Region Editor](/creating-custom-experiences/using-the-region-editor.md), you'll see a number of *components* listed in the Inspector window for that object. ![](/assets/images/RoomFurniture_002-422be2c6f4697176d9243db99dab1b81.png) *Pictured: An example Inspector window, with three components listed for the selected object.* These components contain properties that can be edited to customize various object factors and behaviors. For example, the *Transform component* contains information about a virtual object's position and size. You can [edit](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md#editing-the-transform-component) these properties manually by entering new values into the fields. When it comes to editing and customizing prefab breakout areas and voice zones, the **RoomFurniture component** is of key importance. In the sections that follow, we'll explore the various object factors that the RoomFurniture component controls. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning After using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to add or edit a voice zone, always remember to click the **Reset Zones button** to reset the conferencing system. If this doesn't seem to push your changes forward, try saving your work, leaving the Region, and entering it again. #### Accessing the RoomFurniture component[​](#accessing-the-roomfurniture-component "Direct link to Accessing the RoomFurniture component") ![](/assets/images/RoomFurniture_001-62c581efd8fade156ab0f56395fc6938.png) *Pictured: The RoomFurniture component, expanded to display all 15 fields.* After you add a Breakroom Breakout Area or Breakroom Voice Zone object to your Region, follow the steps below to locate the RoomFurniture component and view its properties. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, locate the **Breakroom Breakout Area** or **Breakroom Voice Zone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 5. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. In the sections that follow, we'll explain the functions each property controls and discuss ways to customize your Breakroom Region setup. #### Zone ID[​](#zone-id "Direct link to Zone ID") When you add a new Breakroom Breakout Area or Breakroom Voice Zone object to your Region, it will be automatically assigned a unique **Zone ID**. This number identifies the zone as a self-contained media point. To change the Zone ID: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone ID field**, enter the ID number you want to use. 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. info Grouping certain types of Zone IDs together can help with project organization. For example, important zones such as a help desk and an auditorium could be identified as Zones 1 and 2 respectively, while breakout rooms could be identified from Zone 10 upwards. ##### ❗ IMPORTANT NOTE ABOUT ZONE IDS ❗[​](#-important-note-about-zone-ids- "Direct link to ❗ IMPORTANT NOTE ABOUT ZONE IDS ❗") If two breakout areas or voice zones are assigned the same Zone ID, users in those areas will be considered to be within the same voice zone, even if they are separated by the entire length of a Region. This may be just the trick you need to create points of interest and interaction for your usersβ€” or it could result in cross-chatter and confusion. ![](/assets/images/RoomFurniture_003-f38d821567d322da0918742827cdad7d.png) **If you are experiencing issues with voice zones, always check your Zone IDs.** If you do have duplicate Zone IDs within a Region, the warning pictured above will appear in the Region Editor. Please see our page on [troubleshooting duplicate zone errors](/running-your-event/customizing-the-conference-system-components/troubleshooting-duplicate-zone-errors.md) for more information. #### Zone Name[​](#zone-name "Direct link to Zone Name") When you add a new Breakroom Breakout Area or Breakroom Voice Zone object to your Region, it is automatically assigned a **Zone Name**. In the case of prefab [breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md), this name will take the form of "Breakout N," where *N* is a unique number. This naming convention ensures that the breakout area is added to the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel). In the case of [custom voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md), the zone name will default to "Workshop." You can rename a breakout area or voice zone at any time. Uses for this may include: * Fixing issues caused by redundant prefab breakout area names, or manually reordering breakout areas * Designating a custom voice zone as a breakout area by changing its name to "Breakout N" (where *N* is a unique number). This will add it to the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel) and the [moderator tools](/running-your-event/moderator-tools/crowd-management.md) * Linking a breakout area or custom voice zone to the [General Navigation panel](/getting-started/using-the-conference-system.md#the-general-navigation-panel) or [Areas of Interest panel](/getting-started/using-the-conference-system.md#the-areas-of-interest-panel) when [installing the conference system](/advanced-tutorials/uploading-your-own-region/installing-the-conference-system-components.md) in a bespoke Region To change the Zone Name: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Name field**, enter the name you want to use. 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. #### Zone Type[​](#zone-type "Direct link to Zone Type") As explained in our documentation concerning [voice zones and conference permissions](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md), there are five types of voice zones available for use in Breakroom. To review, these are: * **Presenter:** Presenter zones restrict the use of screen and webcam sharing to *only* users in a designated presenter seat. Voice chat is available to everyone. * **Audience:** Audience zones go a step further than Presenter zones, restricting voice chat and media sharing to *only* users in a designated presenter seat. * **Meeting:** In Meeting zones, voice chat and media sharing are enabled for all users. * **Voice:** Within Voice zones, only [voice chat](/getting-started/using-the-conference-system.md#voice-chat) will work. * **Silent:** In Silent zones, voice chat and media sharing are disabled for all users. You can change a breakout area or voice zone's Zone Type at any time by following these steps. 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Type field**, enter the type (presenter, audience, meeting, voice, silent) you want to use. 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. #### Zone Voice[​](#zone-voice "Direct link to Zone Voice") The Zone Voice property controls whether voice chat is enabled in a particular breakout area or voice zone. To enable or disable voice chat: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Voice field**, enter the word *yes* or *no.* 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. warning Disabling the Zone Voice property may not disable voice chat entirely. For instance, a user standing in a breakout area with Zone Voice deactivated will still be able to hear and participate in chat from the *surrounding* voice zone (e.g. the [Global voice zone](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md#voice-zone-types)), as nested voice zones can impact one another. However, this property is useful in certain cases. For example, you may want to create a custom voice zone where users can share their screens while they participate in Global chat. #### Zone Spatial[​](#zone-spatial "Direct link to Zone Spatial") The **Zone Spatial** property controls the [spatial audio effect](/running-your-event/understanding-the-conference-system/voice-chat-and-spatial-audio.md) that users will experience when standing in a breakout area or voice zone. When spatial audio is enabled, voice zones behave much like you would expect in the "real world"β€”other avatars (or people) standing nearby will be easy to hear, while avatars standing at a distance may be more difficult to hear, if you can hear them at all. By entering *0* in the Zone Spatial field, you can turn off spatial audio entirely. This means that everyone in the voice zone will be heard at the same volume, with no spatial audio effect. If you enter a *1* or above in the Zone Spatial field, you will enable spatial audio. The number represents the number of meters surrounding each avatar wherein their voice feed can be heard by others. *1* equals one meter, *5* equals five meters, etc. To edit the Zone Spatial property: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Spatial field**, enter either a *0* or the number of meters you prefer. 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. #### Zone Chat[​](#zone-chat "Direct link to Zone Chat") The Zone Chat property controls whether a dedicated, zone-specific text channel is available to users. To enable or disable text chat: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Chat field**, enter the word *yes* or *no.* 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. warning Turning Zone Chat off will not disable text chat as a whole for end users. It will simply remove the option of having a dedicated text chat within the specified voice zone. If you want to disable text chat across the whole of your Breakroom World by [customizing the UI](/creating-custom-experiences/ui-customization-options.md), please see our [Creating Custom Experiences section](/creating-custom-experiences.md). #### Auto Configure[​](#auto-configure "Direct link to Auto Configure") This field is for internal Breakroom use. You will not need to manually edit it. #### Zone Priority[​](#zone-priority "Direct link to Zone Priority") ![](/assets/images/RoomFurniture_004-b7a2c434970db55802eb793bcf034baf.png) *PIctured: An example of two nested voice zones in the Region Editor, with the smaller one highlighted.* The **Zone Priority** property can be used to create "nested" voice zones, or voice zones located inside other voice zones. In the image above you will see multiple voice zones, some of which are overlapping: * The cozy chat area (highlighted), located in its own cube-shaped voice zone * The concourse end (center), located in a spherical voice zone * The auditorium (back), with its own associated voice zone * The Global voice zone (not highlighted), which covers the entirety of the Region Let us consider the voice zones represented by the cube and the sphere, specifically. By setting the large spherical voice zone as *Priority 2* and the cube as *Priority 3*, we can specify that users seated within the cozy chat area should only participate in audio or video chat with each other, even though their avatars are technically *also* located inside the sphere... which is located inside the Global voice zone. Creating nested voice zones may appear to be a simple matter stacking voice zones on top of one another. However, doing so may not achieve the effect you wantβ€”what matters is the Zone Priority number each voice zone has been assigned. The Global voice zone is always *Priority 1*; the higher the number, the higher the zone priority. To edit an area's Zone Priority: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Priority field**, enter the priority number you want to assign to the voice zone. 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. #### Zone Color[​](#zone-color "Direct link to Zone Color") When you add a new Breakroom Breakout Area to your Region, it will automatically assign itself a unique **Zone Color**. This color will be applied to the actual breakout space, and will also be used as the teleport button background color in the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel). To change the Zone Color: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Color field**, enter one of the following color keywords: 1. Blue 2. Orange 3. White 4. Grey 5. Magenta 6. Teal 7. Black 8. Cyan 9. Red 10. Purple 11. Pink 12. Green 13. Yellow 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. ##### Changing the Zone Color presets[​](#changing-the-zone-color-presets "Direct link to Changing the Zone Color presets") ![](/assets/images/RoomFurniture_005-4a653500cb4f3c450c17afcdeaf0c433.png) *Highlighted: The location of the Colors component.* If you like, you can change the hexadecimal presets for each of the color keywords listed above. To do so, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, locate the **Breakroom Breakout Area** or **Breakroom Voice Zone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Expand that object by clicking the **> arrow** located to the left of the object name. 5. Locate the **Colors** component and click on it. This will launch the **Inspector window**. ![](/assets/images/RoomFurniture_006-c8311e337691ec25fa56a712f0faa1fc.png) 7. In the Inspector window, expand the **ScriptingData component** by clicking the **> arrow** next to its name. 8. Enter the [hexadecimal color codes](https://www.w3schools.com/colors/colors_picker.asp) you would like to assign to each keyword. 9. Click the **Reset Zones button** to reset the conferencing system. 10. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. info Color keywords can only be edited on a per-object basis. They cannot be changed on a global basis. #### Zone Camera Default[​](#zone-camera-default "Direct link to Zone Camera Default") By editing the **Zone Camera Default** property, you can change which camera angle users see when they first sit down in a breakout area or voice zone. Camera options include: * Behind * Forward * Speaker * Screen * Audience * Free To change the default camera: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Camera Default field**, enter the name of the camera you would like to use (behind, forward, speaker, screen, audience, or free). 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. #### Zone Camera List[​](#zone-camera-list "Direct link to Zone Camera List") By editing the **Zone Camera List**, you can change which camera angles users will be able to access through the [gesture and camera panel](/getting-started/using-the-conference-system.md#seats-and-gestures). Camera options include: * Behind * Forward * Speaker * Screen * Audience * Free By default, the Zone Camera List is blank, indicating that users have access to all of the cameras listed above. If you enter one or more specific camera names, users will be restricted to only those choices. To edit the Zone Camera List: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Camera List field**, enter the camera names you want to make available, separated by commas. For example: ```text Behind,Speaker ``` 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. #### Zone Visible[​](#zone-visible "Direct link to Zone Visible") The **Zone Visible** property controls whether a breakout area or custom voice zone appears in any navigation tools. This includes the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel) and the [Areas of Interest panel](/getting-started/using-the-conference-system.md#the-areas-of-interest-panel). To add or remove a breakout area or custom voice zone from Region navigation tools: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Zone Visible field**, enter the word *yes* or *no.* 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. #### Screen options (Width, Height, Scale)[​](#screen-options-width-height-scale "Direct link to Screen options (Width, Height, Scale)") The **Width**, **Height**, and **Scale properties** can be used to change the aspect ratio or size of the screen used to display user-driven media inside a breakout area or voice zone. By manually editing the Width and Height fields, you can create custom aspect ratios. You can also edit the final display size of the screen overall by changing the number in the Scale field. The value in this field is a multiplier with a default of 1, so you might enter *.5* to create a screen half the size, or *2* to create a screen double the size. Our [custom voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) walkthrough contains an illustrated example of how you might edit this field. As a brief overview, to edit a voice zone screen's aspect ratio or size: 1. Follow the [steps above](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#accessing-the-roomfurniture-component) to access the RoomFurniture component. 2. In the **Width, Height, or Scale fields**, enter the value(s) you prefer. 3. Click the **Reset Zones button** to reset the conferencing system. 4. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. --- ### Troubleshooting duplicate zone errors #### Overview[​](#overview "Direct link to Overview") The prefab [breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) and [voice zone](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md) objects included with your Breakroom subscription are designed to set themselves up automatically. When added to a Region, each object should assign itself a unique Zone ID and Zone Name. However, occasionally you may run into situations where two or more voice zones are assigned the same information. ![](/assets/images/Duplicate_001-6b8fb5e43cf3d705148e169520d4d1f3.png) *Pictured: An example Duplicate Zone Name warning, with beacons turned on.* In these situations, the Region Editor will display a warning panel in the lower middle portion of the screen. Depending on the type of information that has been duplicated, you may see a *Duplicate Zone ID warning*, a *Duplicate Zone Name warning*, or both. Clicking on either warning will trigger beacons designed to help you locate the conflicting voice zones. You can then make any necessary changes. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning After using the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) to add or edit a voice zone, always remember to click the **Reset Zones button** to reset the conferencing system. If this doesn't seem to push your changes forward, try saving your work, leaving the Region, and entering it again. #### Fixing duplicate Zone IDs[​](#fixing-duplicate-zone-ids "Direct link to Fixing duplicate Zone IDs") ![](/assets/images/Duplicate_002-295a6dc131ffb8f4ee5dc9565483ff6a.png) If the Region Editor displays a *Duplicate Zone ID warning*, it means that two or more breakout areas or voice zones are assigned the same Zone ID. You can learn more about [Zone IDs](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-id) in our [RoomFurniture component documentation](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md), but the key things to remember are: * A Zone ID identifies the breakout area or voice zone as a self-contained media point. * If two voice zones are assigned the same Zone ID, then users located in those two zones can hear one another over voice chat, see each other over webcam, etc., even if the voice zones are located a good distance from each other. This may result in cross-chatter and confusion. To change a breakout area or voice zone's Zone ID, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, locate the **Breakroom Breakout Area** or **Breakroom Voice Zone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window.** 5. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 6. In the **Zone ID field**, enter the ID number you want to use. 7. Click the **Reset Zones button** to reset the conferencing system. 8. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. info Remember: Clicking on the Duplicate Zone ID warning will trigger highlight beacons over both duplicate zones. #### Fixing duplicate Zone Names[​](#fixing-duplicate-zone-names "Direct link to Fixing duplicate Zone Names") ![](/assets/images/Duplicate_003-b81c387fc54b9b65cfbb8dfddbd0e11a.png) If the Region Editor displays a Duplicate Zone Name warning, it means that two or more breakout areas or voice zones are assigned the same [Zone Name](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-name). Zone Names mainly serve to identify or label destinations that will appear in the [Breakout Rooms panel](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel) and the [Areas of Interest panel](/getting-started/using-the-conference-system.md#the-areas-of-interest-panel). To change a breakout area or voice zone's Zone Name, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, locate the **Breakroom Breakout Area** or **Breakroom Voice Zone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window.** 5. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 6. In the **Zone name field**, enter the name you want to use. 7. Click the **Reset Zones button** to reset the conferencing system. 8. Click the **Save button** to store your changes. Click the **Close button** to exit the Region Editor. info Remember: Clicking on the Duplicate Zone Name warning will trigger highlight beacons over both duplicate zones. --- ### Moderator tools #### Overview [](#overview)[​](#overview- "Direct link to overview-") Breakroom's moderator tools offer event coordinators a virtual leg-up when it comes to attendee support and logistics. By accessing a single menu, you can message users as a whole or individually, teleport users to different locations within a Region, and field questions from audience members. You can also stream music and video to create a unique multimedia experience. #### Accessing the moderator controls [](#accessing-the-moderator-controls)[​](#accessing-the-moderator-controls- "Direct link to accessing-the-moderator-controls-") ##### Moderator tool permissions [](#moderator-control-permissions)[​](#moderator-tool-permissions- "Direct link to moderator-tool-permissions-") Key event coordinators and stakeholders will have access to the moderator tools by default. This list includes: * The [World Owner](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md#owner) * [World-level](/opening-the-doors/creating-and-managing-user-accounts/world-level-user-permissions.md) Administrators, Moderators, and Developers * [Region-level](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md) Owners, Administrators, and Moderators This section of the documentation refers to these individuals collectively as "Moderators." ##### Launching the moderator tools[​](#launching-the-moderator-tools "Direct link to Launching the moderator tools") ![](/assets/images/Moderator_001-c00a2de2741af07018892e0b311ed295.png) *Highlighted: The expanded moderator tools, with an arrow pointing to the **Maximize button**.* To launch the moderator tools, click the **Moderator tools/Key button** located on the right side of the screen. To further expand the moderator tools menu, click the **Maximize button** located at the bottom. ![](/assets/images/Moderator_002-b1b8323b8e051c259e21a8430862ada9.png) *Pictured: The fully expanded moderator tools.* Here's a brief overview of the moderator tools UI, with links to relevant information. | Button | Purpose | | | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | | Close button | Closes the menu. | | | [Breakroom Training Instructor Mode button](../../getting-started/using-breakroom-for-training#as-an-instructor) | Allows Moderators to act as an Instructor on the Breakroom for Training system. | | | [Broadcast messages button](broadcast-messages) | Allows Moderators to send messages to one or more attendees in the Region. | | | [Crowd management button](crowd-management) | Allows Moderators to teleport one or more users around the Region, and to control access to [voice chat](../../getting-started/using-the-conference-system/#voice-chat). | | | [Audience questions button](audience-questions) | Allows Moderators to review audience questions [submitted](../../getting-started/using-the-conference-system/#submitting-questions) through the conference system. | | | Raised hands button | Allows Moderators to identify users who have their [hands raised](../../getting-started/using-the-conference-system/#raise-hand-and-emoji-buttons). | | | [Presentation controls button](presentation-controls) | Allows Moderators to control signage and videos for presentations. | | | Support requests button | Allows Moderators to address submitted support requests. (Note: This feature is currently unavailable.) | | | [Hidden UI button](hidden-ui-toggle) | Allows Moderators to reveal UI elements that are hidden from most users. | | | [Participation button](participation) | Allows Moderators to post a participation system URL for use in the Region, such as Slido. | | | [Audio stream button](audio-streams) | Allows Moderators to switch the Region audio stream. | | | Minimize button | Minimizes the expanded menu. | | We'll explore the moderator tools in more detail in the sections that follow. danger The **Moderator tools/Key button** is normally visible only to the user types listed [above](/running-your-event/moderator-tools.md#moderator-control-permissions). However, other users may see this button if you have enabled a password on the moderator tools to make them more broadly accessible. If you would like to enable a password as part of your event security or logistics plan, please contact our [Customer Success Team](/help/where-to-find-support.md) for more information. --- ### Audience questions [YouTube video player](https://www.youtube.com/embed/SwNBkdxkzKE?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) #### Overview [](#audience-questions-overview)[​](#overview- "Direct link to overview-") ![](data:image/png;base64,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) *Highlighted: The location of the Audience questions button.* Breakroom's conference system allows users to [direct questions](/getting-started/using-the-conference-system.md#submitting-questions) to your event management team. This functionality can be used to facilitate question-and-answer sessions, keep crowds hyped and engaged, or streamline user supportβ€”the choice is yours. info If you prefer to use your own system for tracking questions, or if you want to replace the audience question function with a feedback form, polls, etc., you can do so using the [Participation button ](/running-your-event/moderator-tools/participation.md)located in the moderator tools. #### Reviewing audience questions[​](#reviewing-audience-questions "Direct link to Reviewing audience questions") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHkAAAB8CAYAAABNNx/6AAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDsMgDPvnFDsCeRSS49C1k3aDHX8G0qmtZgljksgkSfvn/UqPDiZNulQrXkoG1NW5QVieaIMp6+CB6pGjazzVZyQYIcEt82kl6o84/Qzm1aCWk5GFEa3XhGv4280oPpLeEUNsYeRhJDwTFAZtjpWLWz2PsO75CpsndfJtlGaK+e9vrdjetuAfYd6FJINFbDYg/WiSBlHBJBWFJAs0ikaEoxMs5N+eDqQvflhZ2swVFAIAAAGEaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBiG36ZKRSoidhBxyFCd7OAP4lhasQgWSluhVQeTS/+gSUOS4uIouBYc/FmsOrg46+rgKgiCPyDODk6KLlLid0mhRYx3HPfw3ve+3H0HCM0qU82eKKBqlpFOxMRcflUMvCKAIZpTgMRMPZlZzMJzfN3Dx/e7CM/yrvtzDCgFkwE+kTjKdMMi3iCe27R0zvvEIVaWFOJz4kmDLkj8yHXZ5TfOJYcFnhkysuk4cYhYLHWx3MWsbKjEs8RhRdUoX8i5rHDe4qxW66x9T/7CYEFbyXCd1hgSWEISKYiQUUcFVViI0K6RYiJN5zEP/6jjT5FLJlcFjBwLqEGF5PjB/+B3b83izLSbFIwBvS+2/TEOBHaBVsO2v49tu3UC+J+BK63jrzWB+U/SGx0tfAQMbgMX1x1N3gMud4CRJ10yJEfy0xKKReD9jL4pDwzfAv1rbt/a5zh9ALLUq+Ub4OAQmChR9rrHu/u6+/ZvTbt/P57ycrhBunIWAAANdmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpiNDk0ZDllMy0yYjUyLTRmMjgtYmY3OS04ZWQ3NzFhNTMwNjYiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YjlkMzg3ZmMtZGMyZS00YmNiLThhNTItZDY2YzNmZWUzNTI1IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ODE1ZGE1NzktM2FkZS00OTZhLWJiYzktZGIzZTRlZWQ3OTZjIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MjEyNDUwOTQyMDQyMjUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDc6MTdUMTU6Mzg6MTItMDQ6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA3OjE3VDE1OjM4OjEyLTA0OjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZTFkOWNmYzAtZDhjZC00N2RhLWIzM2MtOTk0ODFhM2NmZTNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA3LTE3VDE1OjM4OjE0Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PqFWg5UAAAAGYktHRAD+AGcAXVYFpa8AAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAHdElNRQfoBxETJg5WQGyvAAAICklEQVR42u2de4gVVRzHv7+5D3fdtHDXNbUVTc3SFHqZRbloWIqh2CaLmI9STKMgTCKDWgWh0DQokh4bWeK6G1YQhItBVpR/iFiwlEaEa6HRuhX5wJU7d379cdfdu3vfc8/MnHPm/P4Q9c6cc+Z8fs9z5kEzZy1gGNFaLGbDWGdxHAcWABjQ+gIGkIJsQOsLeABkA1pPwAAQHXwAM+PAwQNSDJYBkNuTicDMIALgpBoiSrXmMEDoVWjq/aMcBafewUogDfMbMv4vKrNGUlkawqnz0zTlqqeiwZrkghCB4CCtD5mza+PcXLgXAHwVsAollKFWPNjy3YuBLJyHq3OJBMcNA1mCOE4D/6ZhhWHcNfQvGw3kEIiBbCAbMZCNGMhGCmf7ZCCLyJsptY7dN6nUP7uUPtHk4RiCze21gExEeayE+9exkVqO7JtdTp9ozmiT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) *Pictured: The Audience questions button, with a green light to indicate a new question has been received.* When a new audience question has been submitted, Moderators will be alerted by the appearance of a **green dot** next to the Audience questions button in the moderator toolbar. ![](/assets/images/Audience_003-276db60f0ebb7889889dc54f9898495e.png) Clicking the **Audience questions button** will open the Submitted Questions window. Questions can then reviewed and addressed individually, by any means that is appropriate. A content question may be presented to a guest speaker, while a request for help may be addressed via direct text message. Clicking the relevant **Delete button** will remove the question from the Submitted Questions window. --- ### Audio streams [YouTube video player](https://www.youtube.com/embed/jdNHaK3qAKg?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) #### Overview[​](#overview "Direct link to Overview") ![](data:image/png;base64,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) *Highlighted: The location of the Audio stream button.* The **Audio stream button** (highlighted above) allows Moderators to enter a known audio stream address. This stream will then be played in real time throughout the Region. info Users with advanced permissions can access additional audio stream options through the [Region Information window](/building-new-worlds/region-settings.md#region-wide-audio-streams), including a menu of live audio streams. #### Enabling an audio stream[​](#enabling-an-audio-stream "Direct link to Enabling an audio stream") ![](/assets/images/Audio_002-3e0f22c2c27fad76a69d8e59ce64ab71.png) To enter an audio stream address using this tool, follow the steps below. 1. Navigate your avatar to the Region you want to edit. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Audio stream button**. 4. A pop-up will appear. Paste your stream address into the provided field, and click **Set URL**. ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALoAAAA7CAIAAABDgAfbAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABWmSURBVHhe7V0JeBRVEu5JAoFwhCiEIxDMLioIIYByCSgLKiqiyKGAwMollwEFFJeg3AiCIoeCnKJIwMgpSESJAosKaICgXB5IYhIuIYgcgTCzf1W96enpzNEhKnzu/DQ9VfX+V6+6u/q918dMbDVqNtUCCMAaghwOhxIDCMAn7HZ7ED4CGROAXyBXsKZ0AQIZE4APSK4Atuq3NREJaPhEPCwQHPwPsNlsdocjyGYjDSll4396ekF00lABCLLR6EYqE2AUiy4QW/gumdZOzeiTG7RpCEAa1QFvsLBP+KGG4VCxdQekUkN2uyMoiGhs1gnUPtVyCZDsNhvOH6KxT/LB2w4NahBzCRI/VyKNqzC4BXaoq2BiX0tTbKRPtYt4DZ0ryFY4QU1x/A67wxaEUq7F8XMTpFMpF7AAo512suwcZ/yoy2So5v1PBHJGkakCFQitSWPP25fO5DKC6l0E7JZALlCBg3RuAXmUOADocEStkUS1qCWqQyao0p7wIZOg2E6+iByc7pDIUkCQttzckpW9QcMaqQALjigZqUmpwU5IhQfVBFenteLwjtAFGGkhgWjkgUq5GaqGAiqihnmBmYvIxE4AKqQPYTqLmElcttGaeE4mUoEMtAEUBu8JFLAvtil/XE/WwiEKx68EKpOGpBkVPwzgsJ2KKHLyzCTeLdwEgQ0qKi4mOn+y6IRbukjQ7IjbYBewcwAsCZhGroUvvjkKaQwratdpFFloVITTRchOmtTik5s3klukGMQlASUEsTst4h862dhqQ0eCtdKYKWzxxnTlDBLWzBeXsr0EXnPrXIeKyaRo5Ip19sFuySP3gtQNoBSeKCiuS76UIw5MvHEVgrilRWhIHXXYqICaIW9MgsKuica7gj7QeXBr5JJK9JWzFfFDGyc+ZHN4YylYMlENllVXRLUJsIumI/9gBCbJFBD7alqzSo1qUZE3li4WWpQKAvjb4WLupeMnz+z/MXNr2hE+8urQc6ppOxJnKZ6mBZctF61ETatcuxHRCEg+rdINJbo9WL9OzZjwUmEhIcGKFMDfDji44aVLVKtaoUbVyKxjp367cIk6J8oWwJH57U4WCG6DkYB6LeRKRImubRpVLH+DsgbwfwAc7q5tGleKKMm9htjUh8CULjwOYeXQ2v4rrlSJ4mwM4P8IpUoWf7RlnaAgXEaR6kwaBQ9zF6BJrehWzWqLHMB1iND0n8L2phbNOBxyJif4zGll9YIr4RF54WWulI44X7ve+Vr1lNUnPt6ye8ueI5wrNq9zl6jYhjzN0Vo1ro7BTFkDuG6AzLhx5XtlE+eX/PqLUM6VoNyLqsw7wAGzyPFsZFj4pvVFjmWfj/WTNEVDglMP/oJcwZw3y8fchS+ftMiy4aIGcP0gYv0HUZMTwr5NVfrVAh6iRwyAN6V7AhJARiG66jHAnC5yWRS4Zr6ugE6l/JwppbalKP2PALzBp7eBDAkgHYesdbjNXRp0iedrbW3cgIeUKYBrDUxTyiYuMB1XTEdyq8ScbdoiLzwCsrJ6Aepi5ApLS83fM6Huyc69cqP/oXQDEmauka7FOHfJPxgpIYDrATjSplyhA9yld+bwCVjjMPvNFQAczHDBT5/4JtbKysjvXwfnCt/aNsAtXfi+snm4CuAaArNa47HMjY5Boli8uvEI1EXSGD1wxsxXijvQd5i6D9OF9CAZq6wMRnl5Vwa+nKiUgqNx9UpPdmyhlL8WFy7mPjMlSSlXi9ef61i8WKhSLCD72K+j525QihOjn3qgYvkblZIPmI0a5ytnm7Q43bqDUgqIXXt/mLP6qyo3lhw5oK1Y/DqXwQj5sHPZG8rkYe7CsJIuT419F+vebRqIWiCcPPXb6m0HRvV5IKpiWWX6C1GYyAXzP9yB9dyXuonqF0d+OTZh4cYSoSGd73Od1okbU8/l5iX0vK9q5fLK5A5cvyiJewXTOGIFFy7kvr44+fDx3yCj9VH92pQJLylFAKa6oemHlaJp6LeMQ9vIWWuQHuhidiR6S5cn4umRus023kK69BmzuM/DDRvUra70AqKQ1QuDwje9Y9eBeWu3zxv1b6X7A1qsUCZs3OCOSnfixelJR3POe/RTdul848wUI4iSrGHr9r3vJKvqnVvGtWhaR2QTcGWuD3amjBw5a60MNcbexX2qi1J+DmkFpkusgqKQ1QsD301PmrOq9+i3sUycvUqZPKFA8YM8rMeDSjEARm9+jLlivV858WvO0FeWIvjFG76pfEOJKc+0Ry56yxXgdOv2SnJvUZB/Ipvvvovlma7d7jj4U9aO1P1Xt9CbTYXImCMZR58cuUAWzKKU1Rp8NN3zpUWHsnLaNbsNyw/ZOVBVgQkOh7yZZRG0r35Ilw0Xi8gwevRjOnJW5rZrPv4S0Q6fvur077l92jScP/rJUfEdjEOPR8CzcQDCRbuSCJTJpmwOUZ9OgEB9jAVgj6XsPoxF6X8hhk5acuLsxXKlik189rE+Y9+Z+ObKlwaZ+3kf4LchPeCTzd+gaMGYnvzOlHb/v+r3GrUQxnvvvl0IRnhz4hEgz171hcgN6tXAWlc9IizNlS6+cyUj89i4eR9dvkLB3F6tfO9O9xX0FmtulZgw53gUtjfVdQ+GH0qbTitzulgei+iluAHtm8jGXwWeTPB88eYbO1P3z0jaCmHCwIejK1eAgNP8+2wPtw18QF55zI/3Nu7CWnJFBDBh9JwuBeldQH57gtuAsmhcLxE87ofg31xbdL62h3S5csWe9OGW5J0/iPp893tuu/UmkQuKs01b6J1Z0QzXyY/N46HGbTPz9S70op6ljMEZ423ctYKCVr+cl9dv9MLcPHuDWyoO6vmIsrIfJVmGt6anPfe4kpwAMy6mnFIMQHUr7W7/Zl/D22+DADJkMYpFV3U/OhkIOZMjAoCzX0ma9tq8VXsOn1CKAZMXb1SSBWCLhvR5VCmalmcYjIztctci77q7YE4XhqWjyIPu1acLqhcLLaIUT8CMZPzM9w9luzYAmJ3QLdx9PM4/9l++nPfvhHmLxvcOLerZv7fII8qUUhIjae1mMHt0vEfpbrA0d5mVtFUyAGTIYhSLrurQyYDx1pxxbrHrx+Mdm9d6+H7XxWxBsTZ5W9Ln3yqFYfRvbBcnBHUc7udVvqkuQyk+YeX00oG2uw6fjSVx1SaxvDupb1ytm0X2iG7/eetg1mk+jxWWvtLflCuAFIk8YcZyrIsUCYFl5KtLxZgffiNHwiHUNdv2dbk3zpRDOqxsvs6BgO2VRSy6auSI4APglC9XBsIz4xchQjFaAcioAgHVrTQE8BdNzGeV+0MA3u/63vcNOr0sEQnxYxaC365ZzQ+/OGjxQsZutyM/EqcMwAJZ/2aUCcaitCMnnn/5bQjxHZumnzwrxvzwG/moaYngvPNyvwdaNlImExzsxB90jg+yFY4O4jDr+JkLOr/Lc2+aFqNROCCjCknWIgeQBug3TF2HW7rQlxYI1nsXPw2fP88hatqvv1/o3aZBu4fuQq3klK/E6BscrooEMiCyCcai+I7Nfj5BWVI39lZvfMBv5Jjs/iOylD7n9QS493+O6hwIZ878LrIRMBo5IvgAcyjypVMGYBGjyMbFaDRyWLQUuQC70JRb7r0Lh+JjRxuBc9o38/EhM3qMnIc1FpCbN6UZ/s0Vwt9N/kaMWNZuMA/hOjA7UBLLRtUIY1HZG0qLXLx4qDc+4Dfy8c91w6IUT6Bd7t2/DnAOH8kUYfys98VoBIziBzSLDi0eHW+wGLkg/8zENNWlR0omhjf4jnt32kEQlr826Of0rO2p+5vfSW8Lwz52WLePN31VtGhIo/qxH6z9fMnG1IcfaCZVTJBdI8H42EJj0aKkz0T1vfd9Rw5kZh3HOqpSpKge4dcJAM7Et9bMmzhg8uAOz7+e1GfEm70edW3sglVbz1y4/MqzdMcINIsOX1uaomH5K+AhHrd04UOD//7jBvh4eGVGlosAYc+3h+rE3hpTNQqWxcs2bNn905j4Dq2cEwLMJUXwCCRLu0HTlOIdoClJ0w4dzRnbrw2EaQvXGe0m+I4cGDz5Paw/mP6sqJ5g6Rwd2//hkW+sPvxzZsxNUdOe7zx40ntTl3yqyhgzXniiUsVIEE6fyx0/UD0r9gE0Oqxry0b1r/6t+692pk1doq42/AF9h5J0mKa6lL++dqQB1Nt7p2IvNKkRNW7uuqxsOlOffnH22m37cs5dHDxpycWLubB0HfI6PCyZ7HroakLStEG3RZUBR1/aDpyac8Y8gZUikVfNHBJb8+YrV+yY577U28MzGgHxfW5ki7iq99Zz3e3wAOwoC+lS/ZaYapGlh726bHfagaiKkcg/04K9hCIQQANZVfMOY+RL3k9uH/8qlneXm9+L8AVrkQvQfZgGGrfeBalicSQC/I6iz/Z7bMvTU+ctTR41tDtOn2c6Nb+76R2PPj11V9rBxg1qn7uUh364mPdXRkJCQia80FMpcnE7dHr3F2Y3r111SH/X/bT8Z3lwcNCIHq3qxnl94Ow38gE92ynJC1DdR+9lxKSEXhOnLxkzd52mrXuseexN0RVVAY2Y2Umb90Kof3OFEYO7itE39MiRIiu3ftf+rpqQV2z5Dget62MPcImGPSyCEatmDRPBeuQA54Nbh+LxNp0l+O3S35i/Apw+Xe6HXK5kKAZdGnc1rU7sLViHBtuGvbp8+WuDfWSMEUWKhCyfMXT7zrRx8zek9J38RkK3qtGVYEfnIgQjGtwRqyRPQFQnThbsuYEJqJ4/Tb0BqZCT89vEmcuWpezRNCwu3FqxzIj4TmXKlFa6P+j7/IPNezvcXUtSBAc16fO9erromeEF6Fws9y7y/XsDTHMXLrbWv1Cr3vM0O/t48tffj+3/CPpbqHMnxc9ZtPKz1B+nDu9avHgxWJZNH9qm36SOz0z7cM4LXMMSGtavva5+7b7DZ/Qfv7hKRInpY/tiKIqrWrB3rNo0umXe2i+xKF3TjDHMWbhy/Y5DSvGOR+4swOsySIhXXnxKZGw11r63+kp4hH6DFYJ+41Xf5247vyAXO/nJ3u4gEzXfRNbUu1CZxaeMOK3HL9gwUmkulCwZFlvzlqPHfwWhTu3qPx3O2Jm67+6mt/fr0a5fDyJs3PRF0SIhjRvW6Xh3reWfUW9cULw1edDhwxn9x7/TdgB1vOOGs1/L6N297f0tjmZkHoW879CRlVv1xzeOh/rSsRzYvqm3m7mCKlEVKvMDzquAx+7QhLzwMvpRDHFLF1W3Y/PYZSlpoixPSXu8hWvy2/qpl5VkwPq5/1FSvgBCDY8V0a6SCJQGfi6kUWrqf7xhxYwhGCbHzluvdAM2zE+oG1fDbl/5YJ+JYnl7w9cfzUuA8xfGvbXnyEkyvfMJVv0fvZPkgiMmpkryggSlFBw42Prx/mAzPUNJz8jqO4Zuk2MGWqJEGJf8KbDSE1yqEqO/Flnqvym5XdRLBXrd7p1ao5dI/HQ35M4t46CKHTBmhkeYAjC+LHGltKt3kaHGlAtuL1/W7/w01jio4wbQ5Wjhce7chRL8vfxWPcfhCvDeFndCGNCuySMPXZuXuvPjy692jZ67rm2TGqu37a9WvvQbLw9WBX8asAew/njhi6J6RGj6T+XnqBkrupbM4RNERt3RTz3UuFFdUa8Csr3G1o1vBJ/s0lt/vWbkzDWYFKNv2bnc9d6n6TvSDTintBYNblWmwqGo85nwJynbk3ccLO7I3XkgY8yQbsF8y+56QMYvR1N2HtiffgIX3v17+LkgKgxOnz6za89+aQ7nbLUK4ZBLlgiTmZwJSJHwTarbDsq9eLl8xcuRdEm1eNXnp46fLFW8COpe3bLio23ZOee7t20uzsO+TQ3b6+pdTnZ2vZSzaccBGmtsNuN3pE3fBKDeBekyfuAf07voQAd4z5NjIPR88I6unf5g54XB3r0HBk9J/HD28D91AAKGvDhzt4zCBtSpWva1cerbFyYYX+3WO5jUXd8Nm+bhYUKBMPXZx+rVpStwwMeXDRJmrsEavcsOb18cocEI/U9QUOBLr9ccmOpGTXZNznKjY471e04pfxB8f9lgxIzVMpM1DkZug4JMhU3XTgFcE6BHOdvENcPDzNf3byYUFPBmzBVjWwJKBGQCf+hwfwhAJJq7BHA94HTrDuhUlMK/mYD+QCmFg+n3HNCKp+9HSia4ZYN5yolZGDLmYu4lpQdwTYG5p37TBUB/gNmGsVcoKFAXY5zxy4vwb5zhCiQB+P0nt97F/cqotvoeaPXocoFfj7oe4ChW/FJ0TPHv9xt/JUr/ESgcSntoMXBUgRdgGlT0eHbE+hURH60o+fUXRlecK70ul6fHKUZkHfv1630Zkiper4zu6DSQf8PO0Sw2utVdccoawLUGjnfZxPnGLuEPAcYgU++lI3nzrq1p6XTdY7MZr4zcp7ryzEjTtu5Nzzp2SowBXHPgiOKyKP9stDCAN/j0mCs49MgVygRcGCmbgofbZRiwkDerU3af/V29aRvA9QDMRk0/zXJ1gIfM4RO8/fYHDvrqTzE30l9lcUsY811dJaHahcuH049VjgwvVTLw67rXEc7H1jvTsvXl8hVxHO3FiuHU9vvjl+hCwL9Qq15O6/an2nWFB2/THfQr7yfvyDz1Oz1m5oEGKZP1nde7uvHgAJJZMjZhHlPjn5Uiy4YHft/w7wr5mwD7fviFxyA7H3mY6ehD8vpzQPojRvoCsOqL1KW1WXZekutF+GATVwSPi/hTCcSUUkWjKjb+g0HBXCFP0+x6XacnI3SHCuLQCZGoBtHscO/044yZt0tk+s4DV1BFJOlWtnAtaU4Efc2FFD97ZLvBmy6TSi5dEA9KcVd1poTDdmlA3LGs7xuyEh0ricdZSjYhQ1H+uSoE7GfdFdd0fpIHneiUuS0qcrg9YnSfu4AIFvnkumxRAZGVXLv8yR9TERXHhwlSkXkkMMu5l9kx4PxE9DZksngLDtJCbVoRySEqJO9MYw/0QUwJgmQqUapuFtdYsRuy0A6iAhK4HQpIEZxNQJUNoCrMpoVrCYv4FAO3qRpRTFHJmw5mgc9ViARBLKqi6ASlwgULZOFQyLlYuFHh67X5ZCaC8sQFDudbLMylTxbIEQRn/EwhPhXiP5GgSoxSXxVSWRA3zooT7umCWs5nxfAC9/oO5cjIRh4kFNaxJkU1qKDKmIu1YjNHqU4yhCuadtlBCwpCNEfRYAqBOFRMIC/yoQR1aKk2a/RXeJgA/wQi6u5VDRbYpGRVl6isAVTGkCoAQhaVwRxyShKXK1cKvE26BTJ/sKKrLMipxZ64CsfvdOyqThZWad+QAIPLyGCfpElFdkNh8yftURW/qoEPipAkYUo9jkYK9fhZYckIt8HIEyGAAFxw9S6BXAnAL1xDjwgBBOADlC6BXAnAEjTtf4cy1lpjEiKOAAAAAElFTkSuQmCC) *Highlighted: The location of the Radio button.* Users can now toggle the audio stream by clicking the **Radio button** located in the [Settings toolbar](/getting-started/ui-tour.md#the-settings-toolbar). Within the [Settings window](/getting-started/settings.md#audio-settings), users can adjust the music volume independently of the other types of audio that might play in-world. --- ### Broadcast messages [YouTube video player](https://www.youtube.com/embed/RE-o6MegYT4?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) #### Overview[​](#overview "Direct link to Overview") ![](data:image/png;base64,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) *Highlighted: The location of the Broadcast messages button.* The **Broadcast messages button** (highlighted above) gives [Moderators](/running-your-event/moderator-tools.md#accessing-the-moderator-controls) the ability to send text messages to all users currently gathered within a Region, or to individual users. Moderators can flag their messages for reply, allowing users to respond with a minimum of effort. Moderators can also create countdown timers to assist with event management. ![](/assets/images/Broadcast_002-3a1516aceaea326f59d0249914a40c6c.png) After accessing the [moderator tools](/running-your-event/moderator-tools.md#accessing-the-moderator-controls), click the **Broadcast messages button** in the panel that appears on the right-hand side. This will open the Broadcast Message panel. A quick rundown of the UI will be helpful before we delve into the various messaging options. | | | | ----------------------- | ----------------------------------------------------------------------------------------- | | Button or UI component | Function | | Set Timer toggle | Allows you to activate or deactivate the countdown timer displayed on users' screens. | | Timer field | Allows you to enter the countdown timer start value (in hours and minutes). | | Select recipient menu | Allows you to select a message recipient (i.e., *Everyone* or a specific user). | | Optional templates menu | Allows you to select a pre-defined message template. | | Message field | Allows you to compose your own message. | | Message type menu | Allows you to choose whether users can respond to your message, and how they can respond. | | Send button | Sends the current message. | | Send and Close button | Sends the current message and closes the Broadcast Message panel. | | Close button | Closes the Broadcast Message panel. | #### Message types [](#message-types)[​](#message-types- "Direct link to message-types-") ##### Region broadcasts [](#region-broadcasts)[​](#region-broadcasts- "Direct link to region-broadcasts-") Region broadcasts are useful when it comes to managing event logistics. You can use them to keep everyone in your Region on task, announce schedule changes, or provide event transition cues. ![](/assets/images/Broadcast_003-97db5df4f65ea5eb991afed499ae64db.png) *Pictured: An example Region broadcast message.* Here's an example of a message intended for everyone within the Region. Notice how the options are set up: * The Select recipient drop-down menu is set to *Everyone*, so everyone in the Region will see the announcement * The Message type drop-down menu is set to *Message*, so the announcement will be displayed with no expectation of a reply Here's how the example message might appear to users located within the Region: ![](/assets/images/Broadcast_004-31367e3670997462e08df884ba5eb779.png) To send a Region broadcast message like the one above, follow these steps: 1. Navigate your avatar to the Region where you want to communicate with your users. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Broadcast messages button**. 4. In the **Broadcast Message panel** that appears, use the **Select recipient drop-down menu** to select *Everyone*. 5. Enter the **message** you want to send, or select a template using the **Optional templates drop-down menu**. 6. Set the **Message type drop-down menu** to *Message*. 7. Click the **Send** or **Send and Close button**. ##### Direct messages[​](#direct-messages "Direct link to Direct messages") ![](/assets/images/Broadcast_005-6a4e1bbcd58bed5ee089e2ff93c8fea8.png) *Pictured: An example direct broadcast message.* You can also send direct messages to individual users located in a region. To do so, follow these steps. 1. Navigate your avatar to the Region where you want to communicate with your users. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Broadcast messages button**. 4. In the **Broadcast Message panel** that appears, use the **Select recipient drop-down menu** to select your intended *recipient*. You can use the **search field** to search for a specific name. 5. Enter the **message** you want to send, or select a template using the **Optional templates drop-down menu**. 6. Set the **Message type drop-down menu** to *Message*. 7. Click the **Send** or **Send and Close button**. ##### Yes-or-no messages[​](#yes-or-no-messages "Direct link to Yes-or-no messages") In certain cases, you may want to gather feedback from users in the form of a yes-or-no response. You can broadcast an open question to everyone gathered within your Region, or limit your question to a particular user. ![](/assets/images/Broadcast_006-4877ea97657bb52f1f404d6cb69ac618.png) *Pictured: An example direct yes-or-no broadcast message.* Here's an example of how you might approach a specific user. Notice that: * The Select recipient menu is set to *a specific user* * The Message type menu is set to *Yes or No Response* Here's how the example message might appear to the intended user: ![](/assets/images/Broadcast_007-30bb32386bb1fd3cfd8273411fccd97b.png) You can see that in addition to being able to close the message, the user can answer *Yes* or *No* by clicking the relevant buttons. ![](/assets/images/Broadcast_008-729c880c1c2b4165604d3d259b62073e.png) In our hypothetical example, the user has responded by answering that *yes*, she can hear other attendees speaking. Above is the return message a Moderator might receive. From here, the Moderator can reply again through the message pop-up by clicking the **Reply button**. Alternatively, the Moderator may close the message by clicking the **Close button**, and approach the user directly through text or voice chat. To send a yes-or-no message, follow these steps: 1. Navigate your avatar to the Region where you want to communicate with your users. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Broadcast messages button**. 4. In the **Broadcast Message panel** that appears, enter the following information: 1. Use the **Select recipient drop-down menu** to select *Everyone* or your intended *recipient*. You can use the **search field** to search for a specific name. 2. Enter the **message** you want to send, or select a template using the **Optional templates drop-down menu**. 3. Set the **Message type drop-down menu** to *Yes or No Response*. 5. Click the **Send** or **Send and Close button**. ##### Input messages[​](#input-messages "Direct link to Input messages") Input messages allow Moderators to solicit detailed responses and feedback from users. These messages can be broadcast to an entire Region, or targeted at a single person. ![](/assets/images/Broadcast_009-6a6c10622a6c59e3a5f4106ce4375b50.png) *Pictured: An example input response message.* In the example image above, the Moderator is sending a message to everyone. Notice that: * The Select recipient menu is set to *Everyone* * The Message type drop-down menu is set to *Input Response* Here's how the example message might appear to users located within the Region: ![](/assets/images/Broadcast_010-19bd3dd5bf27f072a603075a6b0023e2.png) You can see that a user has received this message and has entered her thoughts in the **response field**. She can now click **Send** to reply to the Moderator, or dismiss the announcement pop-up by clicking **Close**. ![](/assets/images/Broadcast_011-b8510f76cbcf4241f30f554cac75fb04.png) Here's an example of how the user's response may appear to a Moderator. The Moderator can now respond to the user by clicking **Reply**, or **Close** the conversation. To send an input message, follow these steps: 1. Navigate your avatar to the Region where you want to communicate with your users. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Broadcast messages button**. 4. In the **Broadcast Message panel** that appears, enter the following information: 1. Use the **Select recipient drop-down menu** to select *Everyone* or your intended *recipient*. You can use the **search field** to search for a specific name. 2. Enter the **message** you want to send, or select a template using the **Optional templates drop-down menu**. 3. Set the **Message type drop-down menu** to *Input Response*. 5. Click the **Send** or **Send and Close button**. #### Countdown timers[​](#countdown-timers "Direct link to Countdown timers") You can also use the Broadcast Message panel to create countdown timers that will appear on users' screens. Timers can be added to any message type, and users can see one individual timer and one global timer. ![](/assets/images/Broadcast_012-75fe3d346eea57d92d33a83fda0d903c.png) *Pictured: An example broadcast message with an associated timer.* In the example image above, the Moderator is sending a message to everyone. Notice that: * The **Set Timer toggle** is switched *On* * A number value has been entered into the minutes field ![](/assets/images/Broadcast_013-3e5aca30b6963396dc1bf300b59178aa.png) Here's an example of how timers may appear to an individual user. This user has received one private timer ("Timer") and one global timer ("Event Timer"). By attaching private timers to [direct messages](/running-your-event/moderator-tools/broadcast-messages.md#direct-messages), you can issue individual cues to help speakers and educators transition between events. To attach a timer to any type of broadcast message, follow these steps: 1. Navigate your avatar to the Region where you want to communicate with your users. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Broadcast messages button**. 4. In the **Broadcast Message panel** that appears, switch the **Set Timer toggle** to *On*. Enter the timer length in **hours** and **minutes**. 5. Complete your message as normal. 6. Click the **Send** or **Send and Close button**. When you issue a new event or private timer, it will override any previous timers. --- ### Crowd management [YouTube video player](https://www.youtube.com/embed/ODDfMepQNXU?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) #### Overview[​](#overview "Direct link to Overview") ![](data:image/png;base64,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) *Highlighted: The location of the Crowd management button.* The **Crowd Management button** (highlighted above) gives [Moderators](/running-your-event/moderator-tools.md#accessing-the-moderator-controls) the ability to teleport one or more users between different areas in the same Region. Moderators can also control user access to voice chat on a zone-by-zone basis. ![](/assets/images/Crowd_002-0393eaf8da5250f361762b7432f012f3.png) After accessing the [moderator tools](/running-your-event/moderator-tools.md#accessing-the-moderator-controls), click the **Crowd Management button** in the panel that appears on the right-hand side. This will open the Crowd Management panel. A quick rundown of the UI will be helpful before we discuss specific use cases. | | | | ------------------------- | --------------------------------------------------------------------------------------------------------------- | | Button or UI component | Function | | Auditorium button | All users in the Region will be invited to teleport to the Auditorium. | | Breakout button | All users in the Region will be teleported to a breakout area. | | Quiet is On/Off button | Mutes or unmutes audience voice chat within the current voice zone. | | Audience is On/Off button | Controls whether audience members have access to presentation tools in the current voice zone. | | Admin is On/Off button | Controls whether Administrative staff members can override mute settings in the current voice zone. | | Attendees button | Opens the attendee selection menu. | | Places button | Opens the places selection menu. | | Action/Teleport button | Completes your teleportation command, sending everyone (or a single individual) to the location of your choice. | #### Teleporting users [](#teleporting-users)[​](#teleporting-users- "Direct link to teleporting-users-") Breakroom's moderator tools offer both broad and granular options for Regional crowd management. ##### The Auditorium button [](#the-auditorium-button)[​](#the-auditorium-button- "Direct link to the-auditorium-button-") ![](/assets/images/Crowd_003-4b7e700e8aa4539afbe8c0f48a08380b.png) *Pictured: The moderator tools > Crowd Management panel, and the Auditorium teleport invitation.* Clicking the **Crowd Management > Auditorium button** will invite every user in the Region to gather in that Region's designated [Auditorium space](/getting-started/using-the-conference-system.md#the-general-navigation-panel). Users will then have the option to accept or decline the invitation. ##### The Breakout button[​](#the-breakout-button "Direct link to The Breakout button") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAAA4CAYAAABHaJJlAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBDgMhCLzzij5BGFblOW53m/QHfX5R2aY2nUQYAQeEztfzQbcOYSXdSs2Wc3KoqUlzUtNEG5aTDjuw3yPHa5xwPRIPwT3mteaov+L8EZiuOdu+hGp04H1NmIZ+/RGKRugTiZMjhCyEIDPBIdDmt1K2WpavnWlFnYe6sWOUJraY5ueuxbd3bN4HIicYyS3mUiDoRwnNSXHLKF7IUOcCG5Eck/hC/u3pAr0BvKZaAzyqYBsAAAGEaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBiG36ZKRSoidhBxyFCd7OAP4lhasQgWSluhVQeTS/+gSUOS4uIouBYc/FmsOrg46+rgKgiCPyDODk6KLlLid0mhRYx3HPfw3ve+3H0HCM0qU82eKKBqlpFOxMRcflUMvCKAIZpTgMRMPZlZzMJzfN3Dx/e7CM/yrvtzDCgFkwE+kTjKdMMi3iCe27R0zvvEIVaWFOJz4kmDLkj8yHXZ5TfOJYcFnhkysuk4cYhYLHWx3MWsbKjEs8RhRdUoX8i5rHDe4qxW66x9T/7CYEFbyXCd1hgSWEISKYiQUUcFVViI0K6RYiJN5zEP/6jjT5FLJlcFjBwLqEGF5PjB/+B3b83izLSbFIwBvS+2/TEOBHaBVsO2v49tu3UC+J+BK63jrzWB+U/SGx0tfAQMbgMX1x1N3gMud4CRJ10yJEfy0xKKReD9jL4pDwzfAv1rbt/a5zh9ALLUq+Ub4OAQmChR9rrHu/u6+/ZvTbt/P57ycrhBunIWAAANdmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo2NmVhZTYzOS0wMjljLTQwMDgtOWU5ZC1hMzFkM2Y5YWRkYmQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YzIwYmY2Y2QtZWI1ZS00NTVjLThhNGQtZGU5YTcyZmVkMDMzIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OTRkMDE1MjEtYzUwMi00NmM2LTk3NTMtZGFmOTA0ZjllNjg0IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MjEyNDA5NTgwNTA4NTgiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDc6MTdUMTQ6Mjk6MTYtMDQ6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA3OjE3VDE0OjI5OjE2LTA0OjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWQ1MjY2NjktYzg2Yi00MDI5LWE4NDMtNTE1ZTJjMGE0YWQ4IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA3LTE3VDE0OjI5OjE4Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PjG8FGsAAAAGYktHRAD+AGcAXVYFpa8AAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAHdElNRQfoBxESHRJ/MbXvAAAP9klEQVR42u2ceXBcR53HP6/fMfNmRjOSLMmyTh+y4xNHjo+EkEowiXHYDVCVXVKQ3dTC1u5yFhSQSgiwy9YuhBThKEKWUOwJoSCQZSGEOBtswgYDduIcdoic2I4sxbol6xjN+Y7u/WMcyfLYI8mnYr9v1VRJ81r9Wt2f/vXv9+t+T9t45Y2KQIEuEQmlAt4DXRqSUiIAAugDXQqwAwXgA+gDXQqwTwE+gD7QxQ47gHFiAaUU99/3paCnAr3h9eGPfqY4aA26JdClJONsVCJcL+jJQOfePTGN8w98fF878R89B3kZjECgC6eQIHnLOpJrF58b4I3xDLVfeDTo6EBzQ3lJ/Ht7iLOH/i/8KW5ZZGbeyEwKhfuGA9gDzVnN/8KjhHuPnj0LX/WV7QV35sGPoS+oBB9kKo13pBd3fyeycwDZPYrqGEUlHRAayNNPcYrL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) Clicking the **Crowd Management > Breakout button** will teleport every user in the Region to a [breakout area](/getting-started/using-the-conference-system.md#the-breakroom-rooms-panel). Users will be randomly distributed between the Region's active breakout areas, and will not be presented with the option to decline the teleportation order. #### Custom teleport options [](#custom-teleport-options)[​](#custom-teleport-options- "Direct link to custom-teleport-options-") Using the **Crowd Management** panel, you can teleport groups or individuals between areas in your Region. Users will not be presented with the option to decline your custom teleportation orders, and will be moved automatically to the area you specify. Executing a custom teleport is a multi-stage process consisting of selecting attendees, selecting a destination, and then executing the teleport command. To get started, follow these steps. ##### **Selecting attendees**[​](#selecting-attendees "Direct link to selecting-attendees") 1. Navigate your avatar to the Region where you want to move your users. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Crowd Management button**. 4. Click the **Attendees button**. In the **Select User to Teleport panel** that appears, select either: 1. Everyone 2. A single named user ![](/assets/images/Crowd_005-afc43f411c9de0719f194bbeb8371dd1.png) *Pictured: The moderator tools > Crowd Management panel, and the Select User to Teleport panel.* Before we move on, it's important to note that the Select User to Teleport panel provides a number of search and sort functions to help you navigate long attendee lists. Here is a brief overview of the UI. | | | | ------------------------- | -------------------------------------------------------------- | | Button or UI component | Function | | User search field | Allows you to search for a specific user. | | AZ↑ Ascending button | Sorts the user menu in alphabetical order. | | ZA↓ Descending button | Sorts the user menu in reverse alphabetical order. | | Nearest proximity button | Sorts the user menu by users closest to the Moderator. | | Farthest proximity button | Sorts the user menu by users farthest away from the Moderator. | ##### Selecting a destination[​](#selecting-a-destination "Direct link to Selecting a destination") ![](/assets/images/Crowd_006-6a0e292d9aab00625f37ab53f0b1722d.png) *Pictured: The moderator tools > Crowd Management panel, and the Select Teleport Location panel.* After you select *who* you want to teleport, you'll need to select *where* you want to send them. To continue building your custom teleport command, follow these steps. 6. Click the **Places button**. 7. In the **Select Teleport Location panel** that appears, click on your teleport destination. ##### Multi-zone landmarks[​](#multi-zone-landmarks "Direct link to Multi-zone landmarks") ![](/assets/images/Crowd_Control_Update_001-b313a14707fbec04e57d92f6165fc7ce.png) *Highlighted: Multi-zone landmark options in the Crowd Management panel.* Teleport targets labeled *multiple locations* can be employed to teleport a crowd of users, with that crowd then being broken up and distributed randomly between the associated landmarks. In the highlighted example above, choosing either **Breakout** or **Picnic Meeting Point** will randomly distribute the chosen users between all points labeled *Breakout* or *Picnic Meeting Point*. These points can be [breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md), [voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md), or [Breakroom Landmark objects](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-landmark.md). ##### Finalizing your custom teleport command[​](#finalizing-your-custom-teleport-command "Direct link to Finalizing your custom teleport command") After you've selected the users you want to move and their destination, you can finalize your custom teleport command by clicking the **Teleport button**. If you are teleporting everyone in the Region, click the **"Yes, I mean everyone" button** in the dialog box that appears. #### Controlling access to voice chat and media sharing[​](#controlling-access-to-voice-chat-and-media-sharing "Direct link to Controlling access to voice chat and media sharing") ![](/assets/images/Crowd_007-e15e9e8e9c632d2b6bb83c29d16a5a4d.png) Using the Crowd Management panel, Moderators can permit or restrict access to voice chat, webcam streaming, and screen sharing on a zone-by-zone basis. In detail, these zone settings are: * **Quiet Mode**: When turned on, Quiet Mode will mute every user who is not currently seated on a [presenter seat](/getting-started/using-the-conference-system.md#presenter-seats). In voice zone types that do not include presenter seats, turning on Quiet Mode will mute *all* users. * **Audience Mode**: When turned on, Audience Mode grants users access to *all enabled* communication options in that voice zone (e.g., voice chat, webcam, and screen share). Audience Mode overrides Quiet Mode, if Quiet Mode is also turned on. * **Admin Mode**: When turned on, Admin Mode permits [Moderators ](/running-your-event/moderator-tools.md#accessing-the-moderator-controls)to access *all enabled* communication options in that voice zone (e.g., voice chat, webcam, and screen share). Admin Mode overrides Quiet Mode. To customize a voice zone's communication settings, follow the steps below. 1. Navigate your avatar to the appropriate Region. 2. Position your avatar inside the voice zone that you want to customize. 3. Click the **Moderator tools/Key button** located on the right side of the screen. 4. Click the **Crowd Management button**. In the **Crowd Management panel** that appears, locate the **Zone Settings section**. 5. Click the relevant buttons to customize the voice zone. 1. If a button says **Quiet/Audience/Admin is On**, then that communication setting is currently *enabled*. Click the button again to disable it. 2. If the button says **Quiet/Audience/Admin is Off**, then that communication setting is currently *disabled*. Click the button again to enable it. 6. Repeat this process for every voice zone you want to customize. ##### Muting and banning users [](#muting-and-banning-users)[​](#muting-and-banning-users- "Direct link to muting-and-banning-users-") For more information about [muting and banning](/building-new-worlds/region-settings.md#muting-and-banning-region-visitors) users on a Region-wide level, please see our [Building New Worlds section](/building-new-worlds.md). --- ### Hidden UI toggle [YouTube video player](https://www.youtube.com/embed/RBKehGq2f84?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) #### Overview[​](#overview "Direct link to Overview") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAAJECAIAAAAUl9TQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAB7qSURBVHhe7Z0L1BxFlcenZ3ryJZG8JBjBSIwEH0uiCLuIAkdEFBB3syyg8spiBI28RCFECSq7J8SFBGEhgahBhQUWJAh4Fh+gwC5k8bGgGERETCDICUggT0KSnpne2101Pd0zd3qq63GrCfU7fb7vVk/3VPW/696q7q6a9vbb/4iKI0s1DENuOmJarVYV/jldEkAR+BuJAjhdAKYIwEUBXuO6JIoAHVGA16wuaUWAjCjAa1CXLkWAblGA15QuvYoA3t+993BuZln242Xc2nE5+vCjuZUFqSkOJwqCEwXBiYLgREFwoiA4URCcKAjUoniexy1hJHZRhEwUfmBd1xBhe32arpWpXYjUIRMlpUXqzHvp9W0yKzPVBNnYBDZiSqELThtXpy7QIjhREJwoCE4UBCcKghMFQb8oxE2oiew0iwI9LaJeZxsTOWoWxUJPy0CmLqYgOFEQnCgIpRClPmNBffo8WKp/foavUkI18loWhWlR2bCNJWtfvJavUUI18tp5bJo57A/sEXzxOG7DR8fMrwSd57vBHRdwywD9HpuSilI/dn5lu+gBd9UXE+oYEQV8V7CmZo5wj3HcyBJ843RuZUnvKyiNYMGMPGCX9N0/r8OXPkjUEcWgQuc+/uJl3l2P84TYoZr2IDNDMYq0fY3Tj4G/yYHBAUfHvD1gyTTVR/7IP42BXdjCkkKoNcq0gXb6vOTYqs+sqZ1xDbMBtj4RAmheMbM1aTeeMEO5Bu3AwYMi6fPfWzVqZ30nvZISG4G2TXLMTAW2pNdLo1gwJVE8Bd9NJACYCmkt0p9KoFIwQNF9FE9Jp46gSQWUCkYaU3KOVpMWetAjish5SXuHIVTrbRvCzttdD3qLf86qg7g6RquPqQtCz5N/BJ4vDYE3mRLlVU25Om8lx4mC4ERBcKIgOFEQnCgIThQEJwqCEwXBkChq90gLYCQjQ6Loul4diJGMnPsgOFEQ7IqC33WIV5I5IIJdUfCZPPFKslCNYE2UgVOb6Oc+JVgTZeAvKlj8yQUXaBGcKAhOFAQnCgK1KOj00nwkdlGEWpTu6aXo8WZXojNSjWLbfdDjtdYWcwyLYqjiG/Ynw6K0z7mWuND5EsNVich9tMQFsuBiO6aUEicKghMFwYmCoF8U4k6Giez0i2K4D9GNieyc+yBoFUXqBmLtvl/Xz7xi2AkXwwIGJPkHhdB679LamDf/qmXeTzszXXoJD3tH47Ro4oc5zI95E4541SdX16fPy1cEgA1gM9iYpweiL+TqE0Ws/vqX3FA75zqeEAA2hl14Ih99DkQaaP0rbvaWr+IJYWAX2JEnSKATxXtxvffzP/FEQWBH2J0nzEMnij9zEbekUNy9EESieK9s5ZYCWr5EBCVRxEObf9Zibikg/iWKMVdJlFC8y/TXV7ihgvCXFCgYhpr78Me9+hpDDcSFUXsOrSWmmLhSlUZDYYgCrRa84TVuGUYtpvD/g2meP51bCjS++DFuDUKxtiiJUhWOJq33TuOWAuJfIl4wFCVRWkVOSXjkXtySIvzQntwSoFDBelESpdDpaHzmKG5J0TjrE9wSQLE51BNoBc+L9FxJwR0VQ0mCHlHEz0x0eGOGeEKEMUPiUipWkAQ9ohSiMe9Ebg2isfT04LrZPEGINlHEq65/ZudnU3A+uhfUDljCXfBfb0LR5TuAhXu06Tna4q5hgrLMS04UaZ34XruK5OBmsCNYCLTlR78oxGPqTWSnXxTiMfUmsnPug+BEQXCiIBgSJRX8tAfCzBcaCeqGREkFP+2BMPOFRoK6cx8EJwoClSiY7+fEA/wjIwEEgUoU5vvZCJATD7o/wnY3B637SJ9qqjrCcDEFwYmC4ERBcKIgOFEQnCgIJRElaXJp294+lESUpFtG1T/LxbkPghMFwYmCYFYUQxHCdOAxK4qhtsR0E+XcB8GIKGQPCQ1lpF8Ur+KRPSSEjBTfRYKiX5SQtgNmIjsXUxCcKAhOFAQnCoL68C4I/oVDXe/7WpLxb5TDBM0N79KgCJCsDG6fywwA3ZIAXe4j01mAioDUhWx/rKAuevosukQRrS9e0GBGIodWH9HTZyEPtC/0fbFr9bE/c8s21KKEu+3CjMQvEqP1N3swwzpKoih6MMgxOGSMH8GNIigWTEkUOQ9Gg0iyskum4JpzuFUExdBCHlNiQIJ0oE3L1FxwEjO61lOiYWw+1FU9QV8HhQpjpvMW9ynKowjAC6N288nyfJ80vc4SbVmvBsvO52nd9KspSqLA+RC/xza4oWmTVifZq1B8ESyYEfdRVKT59eOaFyLFQjeGleKyKt4OpXCf9MHkn/DeLWs/WV69+l62BgiP3rsxQ3Ry/0CMuI8g4mc4TSJf1+6F/Cgfc7cOyoda0wNoE0XNizXQKYDyAxYLTXJ5oHAfi2/k0Zu1TlEsvpFHb9Y7YqBVRp8o1lynjb4C6BOlRM2PKs59EJwoCE4UBCOikIUXQxkZEYWsITKUkXMfBCcKApEo+LVJzgUL9hHZtRWRKPi1Sc4FC/YR2bWVLfcRPOdEVaMLW6IInnOiqtGFC7QIThQEJwqCRVEGBlE7URawKMrAIGonygIlcJ9oHkY8FyMxbFMCUaJ5GPFcjMSwDako0sdLLBSpKNKeQexSJXCf8mFYFEPXtYYvlw2LYui61vDlsnMfBCcKgglRiNsK/dmZEIW4V6E/O+c+CDZHMlWfeKo2+3qeyNL4zhnhzmN5whilGwhYnz6vnyKAP3OR3JhKLdgRRfCAbeliQZTa3Q9yi7HHuCCexcKWSj1TJG/zFm4RoipKWLxFbH74fckA4UiIb5zObEbX9AT/631drB8SRepCVRRPtkWM5Lj1yzyRJbitMzW58uhfuSGMdJES7MQUjt/nvYJV4u5fN1ZF6UPtrv/lFvjCoW/jFiGKohg5pdXF93ALOixnfpxbxVAqWOlqSqYZfs+u3KBFURSd1x3+FTd3dUyCCz/NrcIoFawUNcW/8vsgR+YN7e+flDTb9NgXJZLjZ0/wREyw7EvBHD472QpKomi/aG8s+WzcqfV5WhbFgimJor3tCXflPw+hiGLBFN3Hci+rPzabZO0OpAulgrnpcgi6Wp+S+JGeYugSRb66sk4KW/gqeVgxVKXRJQqURLIo6U5K9ZcruKWEaqTTJ4qOR5nVR57kllX0iaKD5kkf5ZZVStH6VP/0dGXr9ta0Au/j10Kpf+ugteckekVyKJf7lAQnCoITBUGzKFTTlDJoz1SzKFTTlDJoz9SI+5ANmzaUkRFRyIZNG8qILtAqnlPKYEUgCj8cfk4lTm28S2o/4/oQiBIdTmf2rMQRJbvyL5HQtRhE7sNmz0ofDdtxx5yCK13vpXeUg1SUHKAOEFUDAcoiCtQF4uqQQ1lEKRVOFASrouQ4jFVfsipKTmi1GnWd+yCQiKLRF0jcikSUji9IH1N7RxK3InMfdlTSx8R2JKknhKJoOcUk9cS8KIbOrdkqY1oUQ+fWbJUhc59XE04UBAOiED/7MZCdAVGIn/0YyK5E7sNGeHlrXuBpe5RFlGTAmz/rmzoGvylhWRRWO3pVQFeSYVOU3sPumrkBG1T/uIonCFEVxdDT3ODm2cyonXcDfa1RFaVlqHM5fIgbbfw5S7g1CPUCqdcUsyQO5T2+lhkDUS+S5UBbTpwoCE4UBCcKghMFgVQU1uPgy1eX8rXtJoY3NBNHBbdbm3zLsFdTHnmOGzFJ0xss/jxrVGFNspIYJVEKdZOSXinBoSr235REKdRNSn4tBdTJ6DKszw+GKKDYfyN0n9SvpXR0OfRtwS34T8tYhDSmpCsI0yWQ/CUQs1AH2i5duFUyqEUB5HRpnf4hbplHWRSpmCauS/Jp8yPvYwYByqLItn5Cumzdxg1aLLhPQr4usKb+iQXMTm9JgP3ZpvnuA5hTpLyzTeGYcw6buI4wdNcUCDEK3cnqo0/W5t4ERjEtZDOlqilqHezW1Cn5FQdHsVffg333KSFOFAQnCoIJUXS7+AD0Z2dCFMVbPEXRn51zHwQnCoJ5UbS7vPmQZV4U7S5vPmQ590GwJIqgCxA37m0siZJygdS89Ght5k3R5j0Fxb77tOelgxaRHGTT1HNwMQXBiYLgREFwoiAQitJ/uoVX8Vjbkzcql3ByCI0o8fH0b1bCSghbwJL3G0udRso4NKK0D1X6iDo79ldNH7QxRfqIKKTo4AItgmlRDIUAs5HFoChxlTdU781eCxgUxejZNPrlLqYgaBTFrJ8LoK0AGkWhbTYRtBVAlyjWqwlDTzF0iWK9mjD0FEOLKCWpJgwNhaEb3lV76PeVoMkTEtRrzX334rYm+g3aIRJl4MA2QfSO9rIpird2nf/pxcnxMIFEDi+zZatVP2p+sOxL6q9ZS7A5END7y/PcUqEaFdV7ZStLGYVClFcddKJEg4XjhaeFkd5RGjVRlLsF/GiDBk/rQq1gaqJouplcP+bfImla+nqAagVTEqXQb/k3rv9CcNvc4LbMK9bT1I+6KJamxdNtYBfYsXHt53laAMWXDCiJUuh0hKNeF71HPG5EcoB2t37sfJ5gwC5VLxw7iicFUKzAau5jhubXjuWWJehiin/a5f7CG/xLrudpjOa/HANdtdbUzKuy6gtugB3rn1rI0yJYjCmFbpV6z2727l/lLX+Kp7O0vnpUJMfe7+DpNA+sgh0rLxXptqndw7XsPuEBk1tzp4Mc2i/2VKATJTx679a5R8DC0zGN805o7jeNJ/rA9go//HaeNg+dKI0ZH2setC8sPC0M26txBl30tew+5URVFJEoz8Jn9aHHvBfXey+8xFZG9qAlvWXtnl+CHY7eia3MQ7ljTHSTadisy8I1L/OENFNeH1x6Grd1YPnOWzmxeZPpVYcTBUG3KIqXYnLozlSbKHz4uHLklyHONDN+XQ1tolgfPq6xAC6mIGgXZUcIKtpFofaiODvNeep3HzhrZLpARiZqppGYQuZChjJygRbBuCg9J1Pi7GZ2IaiGxkXpiS9sRaFDy3wHQcCy5T4EhyaPiykIJREl8SaCiDGYkoiSeFMp3Mq5D4ITBcGJgmBBlLBINC20sS4oReGH5xWJpqmN6dShEYUdT1oLwSNMb8Z2p5CGRpTesy1YWaR3VII4pkgfEoUWCRYCbflxoiA4URCcKAhOFAQnCoITBcGJgmB5JFO/WTwik+nUKd1IJj7Tpw/5n5rGjihdB9y4ZQ5UDVjA4KtibOlCLYr30obOoU55PdMiHFZnK8Bga+AjtgY29jYpD6ssiGpMgQu1QhfziSLRkcf0Vofej5I1IogXyVRMUVEEkmxN1zH3rk92FKFQkVDo3Me/5g5mJIqwJKO3LnTp4l99KzMIoBPF++EKbmUVSV7F108XhveTP3DLPEqiSNz56T3y9Kv4kE/7rMxH8ZaUkigFBmlu6czr8i+9kVvYAcOa9MpMZVm9hluDUBw9qug+opnXj+vMAPT+ZyUzcqoAk6ZLIP/Ma7g1GCVV1ESRHvW338QcRTRgcQ5h3i+l9ic6/3NPBgNcI+0dCf3WA95fX+RWLnIFS1AMtEInpN8RSuCfejW3crE5g12RrpCR0G89GUSBlhyLgVa1Q2COV637lBYKUTQGiOAHFG+cJqopLHZqUKem/93kvTj3QSjLFFzBvozepnpHmIKrV5Ec3GRtBF01pSS9OD3F0CVKSXpxeorhWh8EnaIoXrCroDdrnaIoXrCroDdr5z4IThQEJwqCEwWBXBSJVoK8TSMXpd1KDDzSzgbkbZo19xl4pNaadxdTUMoiCtQLi1Wji7KIAhGEPJ72xbkPgvGbTLUN60au+M3Q6pW1jev8DeshyT8QpjlmXGPM2ObocVvetU9z9Nhtu7+Vf6BMv5tMpkRhWoxe/nMJFQay7qPHbDrwEJ5QgE4UUGHcnbeOfPRhnjbGlqn7rDvyaKhHPF0cohvX429c+qaL5xIoAkAukNe4O/XfS9YmClQQMjnSjFp+z4QlC/Q6qR5RII6CIibChwhDq1dB7lAGnlZGQ0yB0kxYkvej9uD2W6a+Z8u0fRpjxkmEANB66JlVQ0+vrG1Yn18Tn591bqG2yVSgzVeExcLW2Nfr+mFHf+P6Uff/DFyGp3sopIuRQAvnsJ8iIMezcy5ae/wpUDU0/tRlY/TYdUceA98M389XZYHyqHuxkijj/3Mpt7KAFkwOntYNfDN8P/RWeDrLG3N9WQR5UaAthAjHEymgAvc7jXqB/hvkxRMpoKZAz4AnpJAUBTJGHbtoqFME8kJ1gXis4kSSokCflVspoD5TKsKAHMGVeCIFWkJBJEXpbRrBZbRcj0gAWfc6rEplkRFl1AOI40DTC3+t/FoQZMpy7wKuSLlVEBlRxv2ouwuz6YBDWFtT6KeFdAGZQu69lQWu0blVkMKdN7S3Bh2H/AbYP+1y79nNPFGccP/dG1+ewRN9AGeBzj5PtMkvmLbOW20jf29IApyifEUAb3PALSm8vwyODlCG3mLIeVBhUUb+rjvENseM5ZZt4AqLW23krhIlakr3Sds2qVgzzMbzJX/Dw7D3hEkB15zcatNbWhEKi+Jv6HafbW+eHAU7YWp3/yLzd+UL8WoNNMbwKd4JvaUVoXhN6Wn8Y08u0OhUF/0s/df704vhB6c0Lp0BS3ho5mV7Rel1ZLmuSmFR9BKeclDkQQdM9Rfc6i+8Ndx/ryh5ykH8Y0sUbpJ3P7/7XUyr51/Frf7UZyyobNjG4kgab+s2/xMLeKJN4+bZ4fAhnmCDsSeOChYLvdu0UPGIblwXpVcRAF1JiU1Rhs26jBlQg4LbMv2u5CMr2BSFv1ptZPyi+Wqm/dLw1jUFLLtPxJZGzpxbK5RAlPJhU5TWx/u+0jOcNIZbNrApSvOEzMtf03hPb6ifvYgnyLHsPr09lw6r1vtf/ia3abEfU6L2+I4LGteeBQsYzSWf5R9AfXnshfpXlwa3E00ISyhLoA3HjoYFjNauuzS+e2Zzcfte9CPP+RdeEywq8Kp+dUhF8dauE1kqrVZr4hv5PrDXb9fULxT/5RQNFL726R1dMPBeJMCufXhCgNbJ728edUim8zJtQjDvVG73ofeOJBQMiscTPWi79mn0XJ77Apfnzc8eGv7DVPHFe2lj9alnozA8bQL/ihXPc6M/Q890P7HsLa0IhWvK+BuXdj302XTAIeuOxB/rquOtXpP86lBeUxUz7s5lXc8tt0zdB31UxtBWU3qfAY58VPLxigjh7rs2vvW5cOaBrZkH8lX9qfXcZ9vyLpmn2oVF2TKt++YweHISZUxMIwwn7NyYfnBz+sE83QPLFMrQ+9yyOVrGfQqLgj5JSB7cWplGyDId/QDy6Evu2bZMk7zxgA9xq43iU351IPfeURD9BrAMREaUXg8CoLKkfEe/E/WBZzTuzh8wI430A38ZUcB90Kf8Ix59qF1IMieKMoI6MhKyztJbQnFkRAHQp/zQWg89rW3cpiBDq1ei44vREgoiKQpaWYAJSxbKPamUo9/YzGQUhBySogD9hvpBKUc9cA+B/4x49GFUkW27T1bsTMqLAjyHjTcDxv1o2S43LjXXHsE3g6tCFjydZe1xfbuwgiiJAjUFHYcHQNyFazPwdr3SMDngm3v7aQwoj4rjMFRHXAP9HDshHsAydtukt25782SJEoMQcM05csXDcD2RL3HRsZn9rn00iAIM1IUAidGqZh+bQmmenXMRRDiepgVqX5y7TI8eRY8oQBxfZkNbyNNUgG+K3OUqhDZRGPmzCfTC5Mi5XSKNnpiCAr2V3sGl6kClgCtSuP5Srx1mA20OEINrG9eP/N3D6lNwIWpo0SLBmigCxFfXbE6Qx0YnE11Pmm191Ag7P14eGUSK5EAoiuI9FrJbNKSiKNYAwgpUBvcpHQZFMXpqjX65QVGMBgGjX+7cB8GJgmBMFIIW1FgWxkQhaEGNZeHcB8GJglAiUfwvWBsj2oV9UbwNm6K/L23wVvLRJdaHpFsWpfrgb/0Z/w5GOHonvub/fs8Mi1gWpbX/3txqt6+1BT9kRvV3TzCDHtvuE2vhn3VlnIjZ2mxecoL38iu1r3yfryFHXRTlLtRuO3lPb0h/T2vKJP/4SytT38DThVEtkrooql2oxsJo3Hn9n+ZHf+MQ638zGoETXPQZ+CuFapHsuE/tvx9KJj6l51AyvJ8+3jr7IzxhAzuiND+wb3DTbDBAF/R9i80P7sctG6iJIlVPq088Ff0bMdS8KhpW7s+K5q+0Ttf6aFHNgdREKRLR6udcVWk2K9u212ZfH6WbreTV60B18T2NWCM9qIVaOvcJPa9214NJaetzv1X74f3BzZETMfzTvs2tLPUvLOYWFRSi1E+8xNsetE46pLrkvsrW9lyOP6xtnHB4ZfhQ71v0glvmwN/qLx6prnwmSq+MHipS9v0pRGlcOcs/9uLWu98eJVqRu3vPrY1s1u7UaunZYJXhtUrsVuHe76id9x9sHTFKogiGs3Dc6Mqwqr/gBrBr/3U//PXP/FZlwsj4w5hGkxugV5N/a9RUBy1mV1c8UZk2oXbvr6J5QwKoxVk1UTzh13oHt5zvPRBNxvGWxVM+trdah+wF/+EgI79It8ptUSLq1dp9v4b/tQu+35h5ePXyu4LrOjEoB/GCoai5j8IZqd7xm0iO+KcyvDUdUcJWWD95ISyR/c8HVi/7KVtfP+e61qy+Ezm6UasqijFFIfMtDfgT3BpFWe/5zPiM4HvnVt45IerX3bOCr4rFah4xeMpPGyVVKAItZ/wIbiS8YUTFj95V6j35HFuREMw5KfoXtzvhwVMimxA6URrfSDUxwJih4NvnMNNb+RIz0jSu/DQzvPueZAYZ6qKIhrRwzE7hQZ3hk+mQCa7BrRTRRLkbuWpA84qZ3BqE+uw0dVGKeC9vYXvo8x3h6zoe15q0G7cGoT47jTCmwDnc/Aq3siR9k5JAKkpl41ZuZAH38aqeN2pYuOfO4ZFR/8UupAMBa7fcHb57z3DiG8PhwypVofNRv+Db4UF7Nfd9Zzhe5/BhhumBgEKxrXnsh1tve0s4crigIkAw79TGYe8XVkQ1xDJ0iVKSoKCnGLQx5VWCEVH0VGIBDGVkRJSoEqtdpwrheYac1pj76HvVRF+MZeFiCoITBcGJguBEQaARRWNLRNHc04gSNxOKbQXf3XyjRuo+iueYoopwLMcUfqTJAccG4eHjWBal2ydig8JDcrEsSjlxoiA4URCcKAhOFAQnCoITBcGJgmBMFJLbkdzQjTFR3O3IHQwnCoITBcGJguBEQdAlivUbQww9xbD5Q1W1X62oXnQHT2RpzZ3e3G8aTxijXD9UVXv4D/Xp8/opAsBHsAFsxtO0WKgp0WjqdXycV/Pyk1uTJzI7obrqL7Wzv8cT44ZHY43NUJaaEg09jxVpLjoluOOCXkUAWBm96GdR/PuH67ZGu9BCWlPqJ15S2bQdjM5bNV7ZWv9k92+2BjedWxkxnNlckVHDguvPi1eIAOFW6ArAfk2p3f9QlyL+/Gt7FQFgJXzEbL7xpu3R7qKoXhPRiVJd+GP42/jOGSwJVcD7ZTTxK/z7qXDkyQJJWAkfJV7DdmG700AkSu32e5kR7hy9McT/1++yJKjQOOUfmc2AJKxkNtuM7QIkX2IaIlGq310OfxvXngV/vfWbvIeeBSP4wfnRZ3C0dz8I9QIWMNga9hFsBhuDwXZkX0KAoijFepDsVWn+56LZo9GMplqUe33WZdVF/IUrYEAysmpVNuWJbcx2LIJS11ZRFKmQFk9/YjOa/J8sr3S923XNy9HK9gZs4+IoxVoi9+mHdzUSJtCVlFgWpZyoiaJ+UXrAW7iRBl1ZCIuzTVUG99Z++zj8Dc47kSXTsJVsAzk8tXvaSqIUzvnlaBJU8/JPwd/q1/hlRNQr+ds3MRuMpJPCNmAbsx3FUZJE1X2EYbMH68dfCn9bk9/EZp4mfdbgK58CLaLlK7EEyUfjR0Qbt3dMT0E0CpEojXNPYIYX/wBEcA2fMQkHX31mDbMZkOyIFW/GdgGSLzEN3VWyf/lN3r3RZNrEQZKLZoTUZTHTKPzglMbZn2RrdGH/KhkOyYtfyd+pCNef17z4eGangZVdisCO2hXJQbWmwFEWimodRdr1JYdCG0tgqqYUjfMd34ErwFOj8IkCH5lWJAc7d/P9hTd493de4+vtVA93j+4PeKvXh5sDthKA5sZocC3X3Xw4VDj/4b68exIJ8dgLsCSKwEewAVlz04WmmgJeFHesPQ86k4W7Tt6L672Nm8EIR++U3FISp5NpuxiCGK4p7aJIKAKAEK3JE2GRUAToZFpEkRzsuE/J0SpKUl/4f+N0MtJURxhaRUnVYgJdIIuOFFrzM+U+cXG1nr5uDI40NBpTjFYXg1/uAi0CmShaKrtRf+xAJoqW2m7UHzvQiKLxDFNUFhpRBp5hONRkyYeislgItNhhwbpkyYBtbBwLomQqA9rbSK0cWHNMYEGUDOgFpNRVpUZsi1JKnCgIThQEJwqCEwXBiYLgREFwoiD0fcQhd19+xwCvKa9lRQBElNe4IkC3KE4RICOKU4TREcUpksBFcYqkiURximSoVP4f88Lq0dK0/4wAAAAASUVORK5CYII=) *Highlighted: The location of the UI toggle button.* Depending on the needs of a particular event, World Owners may elect to [disable certain portions](/creating-custom-experiences/ui-customization-options.md#enabling-or-disabling-ui-functions) of [Breakroom's UI](/getting-started/ui-tour.md), such as avatar customization or text chat. Moderators still have access to these disabled UI components, however, and can toggle them on or off by clicking the **UI Toggle button** located in the moderator tools (highlighted above). Being able to access hidden portions of the UI offers many benefits for event coordinators. For example, a World Owner may decide to turn off the Shop button for general users, preventing them from purchasing avatar components and other Inventory items. However, a Moderator may need to restore their personal Shop functionality in order to purchase decorative items or furniture for an event. --- ### Participation [YouTube video player](https://www.youtube.com/embed/JEQg0oH570w?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Participation_002-591d443608b3a2ec7a122721ca610955.png) *Pictured: An example of a customized participation form made available through Breakroom.* As an alternative to using Breakroom's built-in [question management](/running-your-event/moderator-tools/audience-questions.md) system, you can tie your own question tracking software, spreadsheets, forms, polls, or any other webpage to the [Question button](/getting-started/using-the-conference-system.md#submitting-questions) located in the [conference tools](/getting-started/using-the-conference-system.md). Doing so will provide users with a pop-up where they can interact with your content. #### Changing the participation URL[​](#changing-the-participation-url "Direct link to Changing the participation URL") ![](data:image/png;base64,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) *Highlighted: The location of the Participation button.* To enter a custom participation URL for your users to access, follow these steps. 1. Navigate your avatar to the Region you want to edit. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Participation button**. 4. A pop-up will appear. Paste your website address into the provided field, and click **Set URL**. ![](/assets/images/Participation_003-497fb779b679822dab0915f7461c076e.png) *Pictured: The Question button.* Users can now access your participation link by clicking the **Question button** located in the [conference system communication panel](/getting-started/using-the-conference-system.md#communicating-at-an-event). Users can **Close** or **Refresh** the in-world browser panel by clicking the relevant buttons. --- ### Presentation controls [YouTube video player](https://www.youtube.com/embed/x4Ar5mgCuZ4?list=PLMmBhuOTME3Ue8nZ3QwEOsXjM39UAR61p) #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Presentation_001-74c528e6bd721798599bf43c9f2314a2.png) *Pictured: A presenter on stage in the Breakroom Conference Region, with identifying signage.* In some Region template [presentation zones](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md), such as the 90-seat auditorium that comes standard with the Breakroom Conference and Desert Island [Region templates](/building-new-worlds/region-template-descriptions.md), you have the option of offering additional information in the form of static ***signs*** located on either side of the main stage. You can also create a playlist of ***videos*** that will be broadcast on a central screen. Both of these media types are controlled through the same interface, giving you the ability to effectively manage virtual presentations in real time. ![](/assets/images/Presentation_002-e4c4a5c71c1a3f2bdedf90e68808a4a0.png) *Pictured: An example of how the presentation control panel may appear.* Here you can see how the presentation control panel may appear to Moderators. In this example, there are two signs and three videos available. The media order can be changed to facilitate rapid deployment, and the option to turn off signs or videos entirely is also available. Signs are useful tools that you can use to: * Brand your event * Identify presenters or video content * Publish session information * Present static slides while a video plays * Assist with event transitions and offer scheduling reminders (e.g., "Break in ten minutes") #### Adding signs and videos[​](#adding-signs-and-videos "Direct link to Adding signs and videos") ![](data:image/png;base64,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) *Highlighted: The location of the Presentation controls button.* To add signs or videos to the presentation control panel, follow the steps below. 1. Navigate your avatar to the Region where you want to control or customize a presentation. 2. Click the **Moderator tools/Key button** located on the right side of the screen. 3. Click the **Presentation controls button** (highlighted above). ![](/assets/images/Presentation_004-7cfb09bb2123587b4630e9fa4ae57a01.png) 4. The **presentation control panel** will appear at the top of your screen. You can click the **Close button** at any time to close the panel. To proceed with a sign or video upload, click the **+ button** located on the relevant side. ![](/assets/images/Presentation_005-addf25a1541eb0de11e4675b0226f7bf.png) *Pictured: An example sign.* 5. If you are creating a sign, the **Create New Sign dialog box** will appear. Click the **Upload Image button** to select a new image from your computer, or click the **Image Library button** to select an image that you have [previously uploaded](/creating-custom-experiences/managing-your-media-library.md). 6. Enter a name for the sign in the **name field**, and click the **Save button.** You will see your image added to the presentation control panel in the form of a button. ![](/assets/images/Presentation_006-c62447e276166199a7d7426cf64f7a00.png) 7. If you are adding a video, the **Video information dialog box** will appear. Enter a **title** for your video and the **streaming URL** into the appropriate fields. When you are done, click the **Save button**. #### Managing and deploying signs and videos[​](#managing-and-deploying-signs-and-videos "Direct link to Managing and deploying signs and videos") ![](/assets/images/Presentation_002-e4c4a5c71c1a3f2bdedf90e68808a4a0.png) Once a sign or video has been [added](/running-your-event/moderator-tools/presentation-controls.md#adding-signs-and-videos) to the presentation control panel, it can be ordered in the list, activated, or deactivated using the available UI components. | | | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | | Button | Function | | X | Deletes the chosen sign or video from the presentation control panel. | | ⬇️ | Moves the chosen sign or video ***down*** one space in the list. | | ⬆️ | Moves the chosen sign or video ***up*** one space in the list. | | Sign or video name | Displays the chosen sign on the screens located to either side of the presentation area, or starts the chosen video on the central screen. | | No Sign button | Turns off any active signs and removes the display boards from the presentation area. | | No Video button | Stops the video playing on the central presentation screen. | --- ### Raised hands #### Overview[​](#overview "Direct link to Overview") ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAAJECAIAAAAUl9TQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAB56SURBVHhe7Z0L1BxFlcenZ3qSEAlJBEUgG8gSFJegrFkRBY4IKiDuybKAyiuLATTyEuURJajsnhAXEoSFBFAEhAWWRxDwrKuCPHYhi48NykNAxASCnIAEkpgQkvTM9N7uutPTM3Onp7set5pQv9Pn+27VdE9V/7vureqerm5vz70Orji6qYZhiKYjptVqVeGf0yUBFIG/kSiA0wUQigAoCvAW1yVRBOiIArxldUkrAnSJArwFdelRBOgVBXhL6dKvCOB98EMHodnNop8sQmvz5bCDDkOrG6KlOJwoBE4UAicKgROFwIlC4EQhcKIQcIvieR5auZHYRBE2UXDHes4hwnZ+mp7M1CZM6rCJktIideS9dH6brsyuZkKsbAIbMaXQCaeNs1MXaAmcKAROFAInCoEThcCJQqBfFOYu1ERxmkWBkRbTqLONiRI1i2JhpGWgUBdTCJwoBE4UglKIUp8+rz5tDizVP76AWUqoRl7LoggtKms2imTtq9dhjhKqkdfOz6Zdu/3RnYOvHok2fHT43ErQ+X03uOtctAww6GdTVlHqR8ytbMq7wz3txYQ6RkQB383ZUrv2cOfxaHQTfOdktLpJb5tTmpwVM/IDu6Tv/nEVvQxAoo0oBhU+9/EXLvLufhoT+XbVtAeZuRWjSN/XOPlw+JvsGOxwtM+bApFMU3309/hpDGwiFpHMhVqnzBtop81J9q36woraKVcLGxD5iRBA89IZrR23x4QZynXTDuw8KJI+/v1No3baNelMTmwE2jbJPgsVxJLOl0axYkqieAq+m0gACBXSWqQ/lUClYoCi+ygekk4bIZMKKFWMNaZk7K0mLfSgR5Q8xyXtHYZQbbdtGAdvdz/sLbxXNIf86hhtPqZOCD1P/ifwbGkYvMmUKG9qyjV4KzlOFAInCoEThcCJQuBEIXCiEDhRCJwoBIZEUbtGWgAjBRkSRdf56lCMFOTch8CJQmBXFPqqQ5zJ5oAEdkWhZ/LEmWyhmsCaKEOnNvHPfUqwJsrQJypYfOSCC7QEThQCJwqBE4WAWxRyemk2Epsowi1K7/RScn+7M8kZqUax7T7k/lrrixHDohhq+Ib9ybAo7WOuJS50vsRwU2JyHy1xgS242I4ppcSJQuBEIXCiEOgXhXmQYaI4/aIYHkP0YqI45z4EWkWRuoBYe+DX9VMvHXH0BbCAAUn8oBBar11au+fNv3yR97POTJd+wgN3bZwUTfwwh/l73nJHvOqzy+vT5mQrAsAKsBqsjOmh6Au5+kTJ1379C2+snXE9JnIAK8MmmMhGnwOxBlr/0lu8xcswkRvYBDbEBAt8onivrvbu/QMmCgIbwuaYMA+fKP6MBWhJobh5IZhE8d7YgJYCWr4kD0qi5A9t/mkL0VIg/5coxlwlUcL8Q6Y/v4GGCrm/pEDFKNTcB3/u1dcZaiCujNrv0FpiiokzVWk0VIYp0GrBG1VDyzBqMQX/D6d5zjS0FGh89dNoDUOxtSiJUs0dTVof2h0tBfJ/Sf6KkSiJ0ipySMJDdkNLivCAXdDKQaGK9aMkSqHD0fjCoWhJ0Tjts2jlQLE71BNocx4X6bmSOTdUDCUJekTJf2Si3Rs7EhN5GDsyv5SKDSRBjyiFaMw5Bq1hNL5/cnD9WZhgRJso+Zuuf2rnsSk0n9oNWgcs4TvopzeR6PIdwMI12vQc7fyuYYKyzEtOFGkd8yG7imTgZrATWAi05Ue/KMz31JsoTr8ozPfUmyjOuQ+BE4XAiUJgSJRU8NMeCLu+0EhQNyRKKvhpD4RdX2gkqDv3IXCiEHCJQvl+RjygPzISQAi4RBG+3x0BMuJB70fU5ubgdR/pQ83VRgQuphA4UQicKAROFAInCoEThaAkoiRdLm/fO4CSiJIMy7jGZ5k49yFwohA4UQjMimIoQpgOPGZFMdSXmO6inPsQGBGF7UdCQwXpF8WreGw/EkJBiu8iIdEvSsg7ADNRnIspBE4UAicKgROFQP32Lgj+hUNd//takvvfOG8TNHd7lwZFgCQzuHO2MAByTQZ0uY/MYAEaAtEWusdjBXXRM2bRJUre9uIFDWEkcmj1ET1jFvZA+8rAF7tWn/wjWrbhFiXc/h3CSPwiMVp/s7MwrKMkiqIHgxzDQ8Y2W6BRBMWKKYki58FkEEkye2QKrj4DrSIohhb2mBIDEqQDbVqm5rxjhdGTz4mGe/OhreoJ+jooVBkzg7d4TFEeRQCsjNrFJ8vzfdL0O0u0Zr0aLDoH07oZ1FKURIHjkf8a2/COpk1anWSrQvElZ8WMuI+iIs1vH9k8j6gWuTJk5pdV8XIoh/ukdyb7gPevWfvp4uoV94scIDxsj8b0vJP7h2LEfXKS/winSeTr2byQH2Vj7tJB+VDregBtoqh5sQY6FVD+gcVCl1weONzH4ht59BatUxSLb+TRW/TmGGiV0SeKNddpo68C+kQpUfejinMfAicKgROFwIgobOHFUEFGRGHriAwV5NyHwIlCwCQKfW6SccJCfcR2bsUkCn1uknHCQn3Edm5ly31yHnOmptGDLVFyHnOmptGDC7QEThQCJwqBRVGGBlE7URawKMrQIGonygIlcJ9oHkY8FyMxbFMCUaJ5GPFcjMSwDaso0vvLLBSrKNKewexSJXCf8mFYFEPntYZPlw2LYui81vDpsnMfAicKgQlRmPsK/cWZEIV5VKG/OOc+BDbvZKo+81ztrBsw0U3jmlPCrcdhwhiluxGwPm3OIEUAf8YCuXsqtWBHlJw7bEsXC6LU7nkYLcHO44N4FotYKvWuKnnr1qPFiKooYfEesfmJDyc3CEdCfOdkYQt6pif43x7oYoOQqFIPqqJ4sj1iJMftX8dEN8EdnanJlSf+jEZupKuUYCemIP6A9wpWmYd/vVgVZQC1u/8XLfCFj78bLUYURTFySKsL70MLBiynfgatYihVrHQtpasb/tvt0OBFURSd5x3+pbf0DEyC845HqzBKFStFS/EvuxXk6HpD+0d2TLptfuyLEsnx82cwERMs+lowC2cnW0FJFO0n7Y0rvxgPan1My6JYMSVRtPc94Xb4eAhFFCum6D6WR1mDsdkla3cgXShVzE2XI9DV+5TEj/RUQ5co8s1VDFLEglnyiGqoSqNLFKiJZFXSg5TqLx9HSwnVSKdPFB0/ZVYffRYtq+gTRQfNYz+FllVK0ftU//B8ZcOm1u4F3sevhVI/66C1y478imRQLvcpCU4UAicKgWZRuKYpdaG9UM2icE1T6kJ7oUbch+22aUMFGRGF7bZpQwXxBVrFY8oZrBhEwd3BYypxaONNUtsZ14dBlGh3OrNnJfYo2RS/RELXYjC5j5g9K703YsPNcwqudLuX3lAOVlEygDbA1AxyUBZRoC0wN4cMyiJKqeC4yDRy+dIRy58b/cQSf81qSNbWDHx0Pklz7PiNfzVp48S/bo4bt37KBzBXB4MuMhkUBbQY89B9o594BNOaAF3Wv+8DWtRhFQWEGP/j24u2iEJsnDhp7T4HKErDdDkShNjmpu/DYlQRYOTyZeYK0ikKNJAdLpit3V8yMFSiNlHG/3gRHDdM8ALlQumY0IGemAJ1GrO4c0tjP+unTIUosGniTo2x46E3wdwcgHeMfGEZGKMfeyS7Razde/9VhxyOiXwYDLQZisD+rzrkMOhQCwmRAeiS0R6L6mIq0EItBymy8qgTXpw1FzoIXYoA8G3L516+6lP0nkNNtMQXJVFEX4OJFKDCyzPPjPtLIyc0a/fZH76f1FpLf6QkCgxG0EoBdX1p5pkwAMW0GeD7oRRSF7JWhZAXBRpqf1sVipB11c6gssiKFUJelDEP3YtWipVHHt8c93ZMmAcUgciFiRSKjUVSFDgUMKbERBuIf5HX8P72A11bvy5RR758KSaKIyvKY0T7hPiHlhTiDi9vxSuYzg3ZwcG5KFrFkW8paLUhm3F+khve/Jnflbj5DUZDaLVRCSsyopDlyZ2witbRrwKZmQE4EVoppD1IRpTa6uhaURppRdBq0zNzA1ao/r43cpGA+/TXYcTy59AqiIwo/Udg/fuUrmv0E9xyljBqZ9+Ys9X0j4xGP7EErYJIiRKfoZll1Eg02vizrkRrAHC2iVYbcfVTAin36RtHky6thcShvKdXCmMQcP6NljIyovTT3yPy018H6ZMgPaJsZjhRCJwoBE4UAlZRxIgDl292rk6JLgY7mgljgjutTb4V2Gspj76ERkzS9QYLvyx+aoecJJMZPlGSUamtXc0PnyjJ01JAnS5dRgx4YIg9GN0n9bSUji4ff3dwG/1oGYuwxpR0AxG6BJJPAjELd6Dt0QWtksEtCiCnS+vkA9Ayj4wo6qde+XVJPm1+8sPCGIT6b2AJelqKX7xCuXTZsBGNHPRf5ZE+d5cRpTG296mOchf+snWBnPpn5wk7vWZ+pK/yyIiyfspUtNpIXyLu0SW9YG5uRfp/dZH+6VZGlP4Lf6OfeETapWGfM3Y7fxvp/42hOU7yOaUyopBHAF1a9tdBIU3z/M+lk3kVCXX+6gJIBtr+8vDnW7XbpltTJhfQIsGL7sBAu420IoCkKP2/kIL7qPwopwL5C6nKry6SooAH9Xd4cLhUftaWA0oc/1+9d6JtnDjJQksB+n++Bbb5j6s1DqKGAmVBiZhIsXYfpeGvvChwKPqPBtTyXVfO59FlUFlkxQohLwpANhZRV9N+BN8/SH2yVoVQEgXCCnkHBtR12yvnq9whkg1EdPh+UhGoj/ToPkFJFAAa6tq96Xt1IP5NPOckjV0SqADftsMFswfdSgs1UXQcAdsd19F8FDCK3mgMQsDZJpxbgb9k61uuO64FQ3UxioQigPGpLVAnxTu8pIFyJRTJQJsoAPjIi7PO1+LVOTFUok5RANEfwQJjSswyQ1KQel/Tj5HpcgKIi0Pno0gA7QLOvKSvlaQxHmgzAF1qq1dD9zHyhWXk4CID0RAaY8etnzJ108SdtGiRYFOU0mK899mccKIQMIoy+CFbXsUTD4DIesYS44PBeESJ92fw7I6wEsIasGQ9Ywk355CGR5T2rkrvUWfDwarpgzemSO8RhxQdXKAlMC2KoRBgNrIYFCVu8obavdkpeQZFMXo0jX65iykEGkUx6+c50FYBjaLwdpsE2iqgSxTrzUSgpxq6RLHeTAR6qqFFlJI0E4GGyvBdZKot+V0laGJCgnqtOXU3tDVh+cpb+h42FQrfz5OJTVG8lav84xcm+yMEyrN7XWu2WvVD5waLvqb+mrUEm5cjvT+9jJYK1aiq3hsbRMooHKK86eATRdwdKxFcpDeURk0U5WEB7m3QwLQu1CqmJoqmi8n1w/81kqalbwSoVjElUQo9y79xw1eCO2YHd3S9Yj1N/dDzY2lamG4Dm8CGjeu+jOkcKL5kQEmUQocjHPO26D3icSeSAfS79SPmYkIAm1S9cNwYTOZAsQGruY8Zmt86Ai1L8MUU/6RL/Pk3+hfegGmK5j8fDkO11pSuV2XV590IG9Y/Px/TebAYUwpdKvVeXOc9uMxbTM8Man3z0EiOPXbFdJqHlsGGldeKDNvUruFadp9w70mt2dNADu0neyrwiRIetkfrzINhwXRM4+yjm3vujokBiK3CT7wH0+bhE6Ux/dPNfafCgunciK0ap/BFX8vuU05URckT5UX4rC550nt1tffKayIzsoct6TVr9/0S7HCrLUVmFsoDY6aLTCNmXhyueB0T0kx+e3DRSWjrwN3zRuDueSuAE4VAtyiKp2Jy6C5Umyj4ljPlyC9DXGjnXW3KaBOF7S1ng9BYARdTCLSLsjkEFe2icHtRXJzmMvW7Dxw1Nl2gIBMt00hMYXMhQwW5QEtgXJS+gylxdLs2YWiGxkXpiy8io9CudX0HQ8Cy5T4MuyaPiykEJREl8SaGiDGckoiSeFMp3Mq5D4EThcCJQmBBlLBINC20si44RcHd84pE09TKfOrwiCL2J61Fzj1MryY255CGR5T+o52zsUhvqARzTJHeJQ4tEiwE2vLjRCFwohA4UQicKAROFAInCoEThcDynUyDZvHkmUynTunuZMKZPgPI/tQ0dkTp2eHGbbOgacACBmbF2NKFWxTvtTWdXZ38dqFFOKIuMsAQOfCRyIGVvbXKt1UWRDWmwIlaoZP5RJFoz2P6m0P/R0lOHvJXyVRMUVEEkiKnZ5/785MN81CoSiR87uNffZcwEkVEUtDfFnp08a+IX2vBAp8o3o8eR6tbkeRVfIN0EXg/fQot8yiJInHlp3/P06/iIz4dkJmN4iUpJVEK3KS5vjOvy7/oJrSoHYacdGZXY1m+Aq1hKN49qug+eQuvH9mZAej9D758IaMJCGl6BPJPJV67MQAlVdREkb7rb88JGYpowOIcwqwnpQ4mOv6zjwMDXCPtHQmD8gHvz6+ilYlcxRIUA22uAzJoDyXwT7wCrUxszmBXpCdkJAzKZ4Mp0LJjMdCqDgjM8aZ1n9LCIYrGABH8kOON00wtRcRODerUON5N7tyHoCxTcHOOZfR21ZvDFFy9imTgJmsT6GopJRnF6amGLlFKMorTUw3X+xDoFEXxhF0FvUXrFEXxhF0FvUU79yFwohA4UQicKATsokj0Eux9Grso7V5i6J52VmDv06y5z9A9tda9u5hCUhZRoF1YbBo9lEUUiCDs8XQgzn0InCgEThQCC6IUih1WAg2fKMnuFeplkpU51eETRbHH5eywXUwhMCmK0YNr8stNiRI9o6AdBjQ+6rLzVdF8f1NxxpQo6QcaaHzUZfqrCj0zoRAuphA4UQj0isI5mOhBZ9F6RTHZJQxBZ9HOfQg0i2LlaUHaC9UsirluMgPtheq4aQeO07Ba+Sdd4r24DhPFCfea2Pj6dExkk6MyCSZv2slRCW9dgJYU3p9WoTUUHY3GBVoCZVGKn9eI+/mSv+GB1HvCFFBvK8qi4MlIAWlq9/yi6+/SV+JsLUTVKHyU+tDlPgUOT3XBz9N/vT+8Gn5scuOi6bCEH+962V5xdEQUfaJIEp6wb+RBe0/x593uz7893Gu3KHnCvvixJZjuo61Pn1dZs1HEkTTeho3+Z+dhok3jlrPCUSMxIW7GnjAmWFjg3aY5MdIlq3tvvyIAmVkIxYopiaLowSNmXiwMaEHBHbOFLUg+kkOxYjZjCr5abXT8ovlq19HV8NY1BSwH2oj1jYw5t1YogSjlw6Yorc8MfKVnuONYtGygJopalG8e3fXy1zTe82vqpy/AhARqFVMTRXkA2T9y6bBstf/176JdFLWK2Y8pUX9817mN606DBYzmlV/ED+B4P/lK/ZvfD+5kmhCWUJZAG47bChYwWtu9o3Htqc2FJ4j8yqMv+eddHSzQP5zNgFUUb+WqPEul1WpNeBduA1v9dkX9vPxPTtEA67kPJnLQOu4jzUP37xq87L5tMOdEtDUx6NyHSZTq4t9Un34eE/loHfDB1k471M+9qvL4yyInKypLYVkUabzlK5KnDrGJUpZAO4hw4naN730pnLFPa8Y+mGUezaKYmEYYbrt1Y9p+zWn7YboP7YVqFsXKNELthZbdfaygU5RUM9bvRAPAgso9BRfrxuZEcUHRj8k6S9TtPhZCiv5CXUwhMCUKQ4sxV4QpURgirbkinPsQOFEInCgEThSCUoiShEyG8JyHUoiSdK5Whn79OPchcKIQlEEUOMVtB5PIsB9YyiAKnOK2g0lk2A8sjKIotgDGBsQoimILYGxALtASGBTF6KE1+uUGRTEaBIx+uXMfAicKgTFRGHpQY0UYE4WhBzVWhHMfAicKQYlE8b+icI+oVuyL4q1ZG/19bY23dLXIsX5LumVRqg//1p/+b2CEW22JOf/3O2FYxLIorb32QKvdv9bm/UgY1ceeEQY/tt0n1sI/7bI4EbOh2bzwaO/1N2rfuBVz2FEXRXkItf2W3vNr0t/Tmryjf9RFlSnvxHRhVKukLorqEKoxP7rvvP6Pc6O/cYj1v/tD+Buc/wX4K4Vqley4T+2/lyQTn9JzKAXez55unf5JTNjAjijNj04Nbj4LDNCFfN9i82N7omUDNVGk2mn1meeif1uMbF4e3Vbuz4zmr7RO3j/K1IWaA6mJUiSi1c+4vNJsVjZuqp11Q5RutpJXrwPVhfc1Yo30oBZq+dwn9Lza3Q8nta3P/l7tRw8Gt0ROJPBPugqtbupfWYgWFxyi1I+50NsUtI7dv3rlA5UN7bkcT61sHH1QZdTI/rfoBbfNgr/VXzxaXfpClF4aPTyFc+zPIUrjspn+ERe03v+eKNGK3N17aWVki36nVkvPBquMqlVitwr32LV29r+LPGaURMkZzsLxW1VGVP15N4Jd+88H4a9/6vcq246OP4xpNNEAvZr4rVFXHbSEXX38mcru29bu/1U0bygHanFWTZT8T8oMbjvHe2gZGN6i30TpTa3W/rvBf9jJyC/SvXJblIh6tfbAr+F/7dxbGzMOql5yd3B9JwZloPgITzX3UTgi1bt+E8kRPyrDW9ERJWyF9ePmwxLZ/7RP9eKfifz6Gde3Zg6cyNGLWlNRjCkKha9vwJ/g9ijKei93PYcq+MGZlfduG43r7nscs2Kxmgfnn/KjpApHoEW22QKNhHduUfGjd5V6z74kMhKCWcdG/+J+J9xvcmQzwidK4zupLgYYOzK46gxhektfE0aaxmXHC8N74FlhsKEuSt6QFo7dMtx3EiagLaRCJrgGWimiiXI3oWpA89IZaA1DfZqLuihFvBd72D4GfEf4to7HtXbcHq1hqE9zYYwpcAzXvYFWN8nYpCSwilL5ywY0ugH38aqeN2ZEuMvW4SHR+MUurPOSa7fdE75/l3DCu8JRIyrVXMejfu5V4b67Nae+N9xmPGbpw/S85FyxrXnEJ1rv3ikcPSqnIkAw58TGgR/JrYhqiBXoEqUkQUFPNXhjypsEI6LoacQ5MFSQEVGiRqx2npoLzzPktMbcR9+rJgZirAgXUwicKAROFAInCgGPKBp7Io7unkeUuJtQ7Ctwc/OdGqv7KB5jjiaCWI4puKfJDscG4+7TWBal1ydig8NDMrEsSjlxohA4UQicKAROFAInCoEThcCJQmBMFJbLkWjoxpgo7nLkZoYThcCJQuBEIXCiEOgSxfqFIYGeath8bn7tV49Xz78LE920Zk9r7rk7JoxRrufm1x55qj5tziBFAPgIVoDVMM2LhZYS3U29Cu/zal5yXGvSBGEnVJf9qXb6DzAxflR0r7EZytJSolvPY0WaC04I7jq3XxEAMqMX/SyI32azakO0CS+sLaV+zIWVtZvA6LxV440N9c9Ft+GnCW4+s7LFKGGjImNGBDecHWfkAcJtrjMA+y2l9uCSHkX8udf1KwJAJnwkbFx57aZo87yonhPxiVKd/xP427jmFJGEJuD9Mpr4Ff79FNjzZIEkZMJHideITcTmPDCJUrvzfmGEW4+Dv/6/XCuSoELjhH8QtgCSkClssZrYBEi+xDRMolSvXQx/G9edBn+91Wu9JS+CEfzwnOgz2Nt7HoZ2AQsYIkd8BKvBymCIDcWXMKAoSrERpHhVmv+laPZoNKOpFpVen3lxdcG90cdQmwX3QjKyalUx5UmsLDYsgtLQVlEUqZAWT38SM5r8ny6u9LzbdcXrUWZ7BbFycZRiLZP7DMK7gggTZCYnlkUpJ2qiqJ+U7r0TGmnIzEJYnG2qcnNv7bdPw9/g7GNEMo3IFCvI4ald01YSpXDJr0eToJqXfB7+Vr+FpxHRqOTvdhA2GMkgRawgVhYb5kdJElX3yY2YPVg/6iL425q0g5h5moxZg298HrSIlm/EEiQfbbNFtHJ7w/QURKMwidI482hhePEDIIKrccYk7Hz1hRXCFkCyI1a8mtgESL7ENHxnyf4lN3v3R5NpEwdJTpoJUqfFQqPwY5Mbp39O5OjC/lky7JIXv5K/0xBuOLt5wVHCTgOZPYrAhtoVyUC1pcBeFopqHUXa7SWDQitLYKqlFI3zHd+BM8ATo/BJAh+ZViQDO1fz/fk3eg9GTw4ReFvWw4nR9QFv+epwXSAyAehujAbXcl3Nh12F4x9OxeFJJMSTr8CSKAIfwQps3U0PmloKeFE8sPY8GEwWHjp5r672/rIOjHCrLZNLSvnpFNquRk4Mt5R2VSQUAUCI1qQJsEgoAnQKLaJIBnbcp+RoFSVpL/jfOJ2CNLURgVZRUq2YQRcooiOF1vJMuU9cXa2HrxeDdxoajSlGm4vBL3eBloBNFC2N3ag/dmATRUtrN+qPHXhE0XiEORoLjyhDjzDsarJkw9FYLARaarcgL1m6oFY2jgVRuhoDOdpIZQ5tOSawIEoX5Amk1FmlRmyLUkqcKAROFAInCoEThcCJQuBEIXCiEAz8iUPuuvzmAd1S3sqKAIQob3FFgF5RnCJAlyhOEUFHFKdIAoriFEkTieIU6aJS+X/RLrf4PNmzjQAAAABJRU5ErkJggg==) *Highlighted: The location of the Raised hands button.* The **Raised hands button** allows you to view a list of all attendees who currently have their [hands raised](/getting-started/using-the-conference-system.md#raise-hand-and-emoji-buttons) via the [conference tools](/getting-started/using-the-conference-system.md). You can also dismiss one or all raised hands in the Region. #### Viewing and dismissing raised hands[​](#viewing-and-dismissing-raised-hands "Direct link to Viewing and dismissing raised hands") ![](/assets/images/Hands_002-cbd5dbc8055dbd05612b35a93cccfa3d.png) To view a list of attendees who have their hands raised, click the **Raised hands button**. To dismiss an individual attendee's raised hand, click the **X button** beside their name. To dismiss all raised hands in a Region, click the **Dismiss All button**. --- ### Understanding the conference system #### Overview[​](#overview "Direct link to Overview") ![](/assets/images/Conference_Intro_001-d0be3a774683939b5bdf8b62716db36f.png) Breakroom's [conference system](/getting-started/using-the-conference-system.md) is comprehensive, and consists of: * [Voice chat](/getting-started/using-the-conference-system.md#voice-chat) * [Webcam streaming](/getting-started/using-the-conference-system.md#webcam-streaming) * [Screen sharing](/getting-started/using-the-conference-system.md#screen-share) * [Navigation tools](/getting-started/using-the-conference-system.md#navigating-an-event) * [Moderation tools](/running-your-event/moderator-tools.md) * [Scheduling tools](/exploring-breakroom/using-the-meetings-window.md) * [Interactive emotes and gestures](/getting-started/using-the-conference-system.md#raise-hand-and-emoji-buttons) * [A toolkit of media products](/creating-custom-experiences/exploring-the-breakroom-toolkit.md) * [No-code gamification](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-games.md) In this section, we'll explore the conference system core in greater depth. You'll get to know the bones of the product, and learn more about how you can build Regions that truly serve your needs. Whether you want to add additional [breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md) to a Region, remove [presenter seats](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md) from a stage, or integrate [educational content](/breakroom-for-training/installing-breakroom-for-training.md) into Breakroom, we'll walk you through every step. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). --- ### Voice chat and spatial audio #### Overview[​](#overview "Direct link to Overview") [Voice chat](/getting-started/using-the-conference-system.md#voice-chat) is a key conference system functionβ€”but at Breakroom, we empower you to build your World, your way. On this page we'll review instructions for disabling voice chat when needed, as well as discuss the spatial audio feature and how it works. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). #### Disabling voice chat[​](#disabling-voice-chat "Direct link to Disabling voice chat") There may be occasions where you want to disable voice chat on a Region-wide basis, or disable voice chat in an individual breakout area or voice zone. ##### Disabling voice chat for an entire Region [](#spatial-audio)[​](#disabling-voice-chat-for-an-entire-region- "Direct link to disabling-voice-chat-for-an-entire-region-") ![](/assets/images/Voice_Chat_001-1662d468212bb9eea66bb81a10221dc2.png) *Pictured: VOIP options available through the Region Information window.* To disable voice chat entirely for a Region, follow these steps. 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Click the **Region Information button** located above the mini map. 3. Click the **Edit button** in the Permissions panel. 4. Scroll down to the section titled **VOIP**. Check the box next to the **"VOIP is disabled in this Region" option**. 5. Scroll down and click the **Save button**. To restore voice chat to a muted Region, repeat the steps above and check the box next to the **"VOIP is enabled for everyone by default" option**. info Muting voice chat through the Region Information window will not remove the Microphone button from the conference system. However, the button will no longer work if clicked. ##### Disabling voice chat for a single voice zone[​](#disabling-voice-chat-for-a-single-voice-zone "Direct link to Disabling voice chat for a single voice zone") To disable all media sharing options in a voice zone (including voice chat, webcam, and screen sharing), follow the steps below. ![](/assets/images/Voice_Chat_002-f83b3de7a72ecaa28d2fd157e39cccea.png) *Pictured: The RoomFurniture component for a Breakroom Voice Zone object, with the Zone Type property highlighted.* 1. Log in to your Breakroom World and navigate your avatar to the Region you would like to edit. 2. Open the Region Editor by clicking the **Edit Region button** at the bottom of your screen. 3. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 4. In the Objects window, locate the **Breakroom Breakout Area** or **Breakroom Voice Zone object** you want to edit. (Tip: You can use the **search field** at the top of the window to search for a specific object.) Click on the object name to launch the **Inspector window**. 5. In the Inspector window, locate the **RoomFurniture component**. Expand this component by clicking the **> arrow** located to the left of its name. 6. In the **Zone Type field**, enter the word "silent." 7. Click the **Reset Zones button** to reset the conferencing system. 8. Click the **Save button** to store your changes. After you have closed the Region Editor, leave the voice zone and then return to it. You will see that most of the media buttons are gone, and that the Microphone button is grayed out to indicate that it is inaccessible. If you prefer, you can turn voice chat off while leaving other media sharing options available by editing the [Zone Voice property](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-voice) located under the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). However, if you have nested voice zones, users may still be able to hear and participate in voice chat from *surrounding* voice zones (including the Global voice zone). #### Spatial audio [](#spatial-audio)[​](#spatial-audio- "Direct link to spatial-audio-") ![](/assets/images/Using_Conference_System_015-00d0033974d2ad7d05646d6a726a4797.png) *Pictured: An example of a voice zone boundary indicator. This user will need to move inside the boundary indicator if she wants to be heard by others in the breakout room.* [Global voice zones](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md#voice-zone-types) have spatial audio set up by default. This means that a crowded virtual event will sound much like a similar event in "real life"**β€”**you'll be able to easily hear the people standing right next to you, while you may not be able to hear someone standing on the other side of the room. In a virtual world like Breakroom, this can initially confuse some users. If you're having trouble hearing someone in voice chat even though you can see their avatar, make sure that you're both standing in the same [voice zone](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md#voice-zones-in-action). (If someone is standing in an auditorium voice zone, for example, and someone else is standing just outside of it, they will not be able to hear each other.) If you're both in the same voice zone, try moving closer together. If you're still having trouble using voice chat, please consult our [troubleshooting tips](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md). If you want to edit the spatial distance for a specific breakout area or voice zone object, or turn off spatial audio altogether, please consult our [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-spatial) documentation. --- ### Voice zones, zone types, and conference permissions #### Overview[​](#overview "Direct link to Overview") Collaboration is the soul of Breakroomβ€”and that collaboration happens inside different types of *voice zones*. Voice zones are virtual objects that encompass the areas where audio and video sharing will take place. These objects are normally invisible to you and your users. ![](/assets/images/Conference_Intro_002-040b3cb44dcc35fde3ed6189876b0191.png) *Pictured: A voice zone set up around an info desk, currently visible through the Region Editor (the green cube).* Each [voice zone type](/running-your-event/understanding-the-conference-system/voice-zones-zone-types-and-conference-permissions.md#voice-zone-types) behaves differently, giving you the ability to structure online work, conferences, and presentations in a number of ways. By adding [breakout areas](/running-your-event/customizing-the-conference-system-components/adding-breakout-areas.md), creating [custom voice zones](/running-your-event/customizing-the-conference-system-components/creating-custom-voice-zones.md), and editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md) attached to Breakout Area and Voice Zone objects, you can streamline communication and remove potential pain points. This page will serve as a brief introduction to the different voice zone types and how they can be used. It is strongly recommended that you read and understand this information prior to customizing your first Breakroom Region. info The instructions provided in this section presume an advanced working knowledge of Breakroom. Please consult our documentation if you need help [installing](/creating-custom-experiences/using-the-region-editor.md) and [positioning](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md) virtual objects, or editing the [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). #### Voice zone types[​](#voice-zone-types "Direct link to Voice zone types") Currently, Breakroom offers five different voice zone types. * Presenter * Audience * Meeting * Voice * Silent **Voice chat**: Available to all users. **Webcam and screen share**: Restricted to *only* those users in the designated [presenter seats](/getting-started/using-the-conference-system.md#presenter-seats). Moderators can choose to [enable media sharing](/running-your-event/moderator-tools/crowd-management.md#controlling-access-to-voice-chat) permissions for the audience if they wish. **Voice chat, webcam and screen share**: Restricted to *only* those users in the designated [presenter seats](/getting-started/using-the-conference-system.md#presenter-seats). Moderators can choose to [enable media sharing](/running-your-event/moderator-tools/crowd-management.md#controlling-access-to-voice-chat) permissions for the audience if they wish. **Voice chat, webcam and screen share**: Available to all users. Everyone can chat and share media. **Voice chat**: Available to all users. **Webcam and screen share**: Disabled. No one can share media. **Voice chat, webcam and screen share**: Disabled. No one can voice chat or share media. *Voice* is the standard setting for the *Global voice zone,* which is an invisible voice zone that encompasses the whole of your Region. It may help to visualize this voice zone as the general environment of your Region, or as "anywhere another, specific voice zone is *not*." This topic will be explained in more detail below. Voice zones can also be nested within one another. Voice zone type information is stored in the [Zone Type property](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md#zone-type), under the voice zone object's [RoomFurniture component](/running-your-event/customizing-the-conference-system-components/the-roomfurniture-component.md). warning The media streaming system cannot accommodate more than 17 simultaneous webcam or screen share users at this time. #### Voice zones in action[​](#voice-zones-in-action "Direct link to Voice zones in action") To visually illustrate how multiple voice zones could be set up in a Region, let's take a closer look at one of the Breakroom [Region templates](/building-new-worlds/region-template-descriptions.md). ![](/assets/images/Voice_Zone_001-91f38b264d9201b2e96cadaf482d34f3.png) The image above is a flyover shot of the Breakroom Campus Large Region. You can see that it consists of several lobbies, meeting rooms, and an amphitheater, as well as trees and gardens. Everything you see here is contained inside the *Global voice zone*. ![](/assets/images/Voice_Zone_002-0ac87ae880bae8e3420a776c1ce0091e.png) Here's a top-down view of the same Region. Each of the highlighted areas above is a separate voice zone. Depending on each zone's type, these spaces offer different communication options. * The circular amphitheater is a *Presenter zone*. Someone can give a video presentation here, and audience members will not be able to interrupt by sharing their own video streams. In order to present, users will have to sit on a **presenter seat** (normally located at the front of the auditorium). The audience can interact via voice chat to ask questions or participate in activities. * The red, yellow, blue, and green offices are *Meeting zones*. Everyone can share video and speak on voice chat, just as they might expect to do in a physical conference room. * Everywhere else falls within the Global voice zone, which is a *Voice zone*. This means that users can voice chat with one another as they move between the offices, but they cannot share their webcams or screens. Only users with avatars currently located *inside* a particular voice zone can hear, share, and communicate with other users in that zone. This design makes it possible for different meetings or events to be held concurrently in the same Region without technical interference or audio competition. Likewise, when you are inside an isolated voice zone (such as an office), you will no longer hear voice chat taking place in the Global voice zone. When you approach the edge of a voice zone, a transparent blue *boundary indicator* will appear. This serves as a reminder that you are about to enter or leave a voice zone, or that you need to enter a voice zone in order to speak with users located on the other side. ![](/assets/images/Using_Conference_System_015-00d0033974d2ad7d05646d6a726a4797.png) *Pictured: An example of a voice zone boundary indicator. This user will need to move inside the boundary indicator if she wants to be heard by others in the breakout room.* #### Conference permissions[​](#conference-permissions "Direct link to Conference permissions") Among the voice zone types, Presenter and Audience zones are unique, as both make use of special *presenter seats*. By positioning their avatars in these seats, presenters can gain access to voice chat and media sharing functions within a particular voice zone, even if these functions are otherwise restricted. Users with access to the [Breakroom moderator tools](/running-your-event/moderator-tools.md) can also grant access to voice chat or media sharing functions as needed. For help [setting up or customizing Presenter and Audience zones](/running-your-event/customizing-the-conference-system-components/setting-up-presenter-and-audience-zones.md), as well as detailed information on using the moderator tools to [control audience access to media sharing functions](/running-your-event/moderator-tools/crowd-management.md#controlling-access-to-voice-chat-and-media-sharing), please see our [Running Your Event section](/running-your-event.md). --- ## Scripting ### Welcome to Scripting API **This documentation is in progress. Please visit** [**this page**](/scripting/support/report-an-issue.md) **to report any issues, missing information, corrections or suggestions you may have.** #### **Introduction**[​](#introduction "Direct link to introduction") Scripting in Sinespace uses the **Lua programming language**. Sinespace offers scripters **Unity components,** which are added to GameObjects, that will run the scripts(code) that we write inside them. These Unity components come within the **Sinespace Editor Pack** package, which needs to be installed in our Unity project before we begin scripting. Our core class is the [SScript](/scripting/client-scripting-api-reference/region/sscript.md) class, which is accessed by writing "Space". Example: `Space.Log('Hello World')` is equivalent to [SScript.Log('Hello world')](/scripting/client-scripting-api-reference/region/sscript.md#log). All of your functions/properties will be accessed starting with 'Space' which also navigates to other classes. There's very few exceptions that are accessed directly such as "Math" ([SMath](/scripting/server-scripting-api-reference/library/smath.md)) and "Color"([SColor](/scripting/client-scripting-api-reference/types/scolor.md)). Example: `Space.Network.SendNetworkMessage()` this starts with the [SScript](/scripting/client-scripting-api-reference/region/sscript.md) class and goes into the [SNetwork](/scripting/client-scripting-api-reference/network/snetwork.md) class. ##### Client Scripts vs Server Scripts[​](#client-scripts-vs-server-scripts "Direct link to Client Scripts vs Server Scripts") Client scripts run client-side, and Server scripts run server-side. Browsing the left panel of this documentation you will find that our API Reference is split into two different parts - Client Scripting and Server Scripting. ##### **Your first Client Script**[​](#your-first-client-script "Direct link to your-first-client-script") To begin creating your first Sinespace Client Script, make sure you have the Sinespace Editor Pack properly installed, and then: * Select your GameObject * Click **Add Component** * Search for and select **Scripting Runtime** * Enter your code in the **Script Contents** text box - for example `Space.Log('Hello World!')` * Press **Play Scene** (you should see your "Hello World!" in the Unity console window) ##### Your first Server Script[​](#your-first-server-script "Direct link to Your first Server Script") It's recommended that new scripters familiarize themselves with Client scripts first before jumping into Server scripts, or creating more complicated objects that require server scripts. Visit the [Server Scripts guide](/scripting/guides/server-scripts.md) to begin your first Server script. --- ### Changelog #### [πŸ“„οΈAPI Changelog](/scripting/changelog/api-changelog.md) [A list of changes to the Sinespace API](/scripting/changelog/api-changelog.md) --- ### API Changelog | Date | Change | Version | | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | | 20 December 2022 | SClickable.InvokeClick added
SGrid.ID added (white-label only) | 2022.1f16419 (Current Live Release) | | 26 August 2022 | [SScript.ComponentName](../client-scripting-api-reference/region/sscript#componentname) added
[SStateMachine.ComponentName](../client-scripting-api-reference/components/sstatemachine#componentname) added
[SScriptingRuntime.ComponentName](../client-scripting-api-reference/components/sscriptingruntime#componentname) added[SScriptingEvents.ComponentName](../client-scripting-api-reference/components/sscriptingevents#componentname) added
[SScriptingData.ComponentName](../client-scripting-api-reference/components/sscriptingdata#componentname) added | 15969 | | 26 August 2022 | [SNavMeshAgent.Warp](../client-scripting-api-reference/components/snavmeshagent#warp) added | 15967 | | 17 August 2022 | \*Network Messages can now be sent 20 times per second (up from 10) | 15912 | | 17 August 2022 | [SNetwork.SendNetworkMessageToUser ](../client-scripting-api-reference/network/snetwork#sendnetworkmessagetouser)added
[SNetwork.SubscribeToRegionPropertyUpdate](../client-scripting-api-reference/network/snetwork#subscribetoregionpropertyupdate) added | 15910 | | 11 August 2022 | [SAvatar.OnAvatarAttached](../client-scripting-api-reference/types/savatar#onavatarattached) added
[SAvatar.OnAvatarDetached](../client-scripting-api-reference/types/savatar#onavatardetached) added | 15867 | | 20 May 2022 | [SUI.OpenFeedbackWindow](../client-scripting-api-reference/client/sui#openfeedbackwindow) added (white-label)
[SUI.HideFeedbackWindow](../client-scripting-api-reference/client/sui#hidefeedbackwindow) added (white-label) | 15375 | | 18 May 2022 | [SRenderSettings.SetGlobalShaderVector](../client-scripting-api-reference/region/srendersettings#setglobalshadervector) Added an additional parameter to the function, which will count as the 4th component of a Vector4. (Incase we wanted to pass a Vector4 instead of Vector3). | 15369 | | 17 May 2022 | [SUIDropdown.SetValueByText](../client-scripting-api-reference/components/suidropdown#setvaluebytext) added | 15362 | | 29 Apr 2022 | [SDateTime](../client-scripting-api-reference/types/sdatetime) expanded with Year, Month, Day, Hour, Minute, Second, Millisecond properties | 15303 | | 27 Apr 2022 | [SGrid.ThemeColor1](../client-scripting-api-reference/region/sgrid#themecolor1) added
[SGrid.ThemeColor2](../client-scripting-api-reference/region/sgrid#themecolor2) added
[SGrid.ThemeColor3](../client-scripting-api-reference/region/sgrid#themecolor3) added
[SGrid.ThemeColor4](../client-scripting-api-reference/region/sgrid#themecolor4) added
[SGrid.TextColor1](../client-scripting-api-reference/region/sgrid#textcolor1) added
[SGrid.TextColor2](../client-scripting-api-reference/region/sgrid#textcolor2) added | 15300 | | 25 Mar 2022 | [SScene.Population](../client-scripting-api-reference/region/sscene#population) added | 15151 | | 8 Mar 2022 | [SDateTime](../client-scripting-api-reference/types/sdatetime) added | 15057 | | 20 Dec 2021 | [SAnimator.PlaybackTime](../client-scripting-api-reference/components/sanimator#playbacktime) added | 14426 | | 16 Dec 2021 | [SAvatar.DisplayName](../client-scripting-api-reference/types/savatar#displayname) added | 14405 | | 8 Dec 2021 | [SRoomFloor.Owner](../client-scripting-api-reference/components/sroomfloor#owner) added
[SFurniture.Floor](../client-scripting-api-reference/components/sfurniture#floor) added | 14331 | | 2 Dec 2021 | [SLineRenderer.SetPosition](../client-scripting-api-reference/components/slinerenderer#setposition)/[GetPosition](../client-scripting-api-reference/components/slinerenderer#getposition) are now 0-index | 14276 | | 24 Nov 2021 | [SGameObject.Moniker](../client-scripting-api-reference/types/sgameobject#moniker) added | 14193 | | 16 Nov 2021 | [SAvatar.PlayCustomAnimation](../client-scripting-api-reference/types/savatar#playcustomanimation) no longer blocks avatar from moving | 14144 | --- ### Client Scripting API #### [πŸ—ƒClient](/scripting/client-scripting-api-reference/client.md) [4 items](/scripting/client-scripting-api-reference/client.md) --- ### Client The client runtime surface β€” entry points for on-screen dialogues, player input, shared data, and the in-world UI that client scripts can drive. --- ### SDialogues #### Index[​](#index "Direct link to Index") | Function Name | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**ColorPicker**](sdialogues#colorpicker) (string title, string okbutton, Action< SColor > onChange, Action< SColor > onSelect, Action onCancel, SColor defaultColor) | | void [**YesNoInput** ](sdialogues#yesnoinput)(string title, string okbutton, string cancelButton, Action< bool > result) | | void [**TextInput** ](sdialogues#textinput)(string title, string okButton, Action< string > result) | | void [**OpenURL** ](sdialogues#openurl)(string url, bool newTab = true) | | void [**SendLocalChat** ](sdialogues#sendlocalchat)(string message, string from) | #### Functions[​](#functions "Direct link to Functions") ##### **ColorPicker**[​](#colorpicker "Direct link to colorpicker") *Opens a color picker dialogue.* void **ColorPicker**(string title, string okbutton, Action< SColor > onChange, Action< SColor > onSelect, Action onCancel, SColor defaultColor) | Parameter | Type | Description | | ------------ | ---------------------------- | -------------------------------------------------------------------------------------------------------- | | title | string | The title of the color picker window. Choose something brief and appropriate like 'Select a wall color'. | | okbutton | string | The title of the 'OK' button. Should indicate the action e.g. 'Adjust Wall'. | | onChange | Action\\\ or Closure | Any color change while the color picker is open will trigger onChange(SColor). | | onSelect | Action\\\ or Closure | Triggers onSelect(SColor) once the "ok" button is pressed. | | onCancel | Action\\\ or Closure | The title of the 'OK' button. Should indicate the action e.g. 'Adjust Wall'. | | defaultColor | SColor | The color to open the colour picker with. | * Lua ```lua --clicking the object will open a color picker that changes the object's color thisGameObject = Space.Host.ExecutingObject originalColor = thisGameObject.Renderer.Material.GetColor("_Color") OnChange = function(SColor) thisGameObject.Renderer.Material.SetColor("_Color",SColor) end OnSelect = function(SColor) thisGameObject.Renderer.Material.SetColor("_Color",SColor) end OnCancel = function() thisGameObject.Renderer.Material.SetColor("_Color",originalColor) end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### **YesNoInput**[​](#yesnoinput "Direct link to yesnoinput") *Opens a simple Yes/No dialogue**.*** void **YesNoInput**(string title, string okbutton, string cancelButton, Action< bool > result) | Parameter | Type | Description | | ------------ | --------------- | --------------------------------------------------------------------------------------------- | | title | string | The question to be asked of the user. Should be a simple statement, e.g. "Save room changes?" | | okbutton | string | The text on the OK button, should indicate the action, e.g. "Save Room" | | cancelButton | string | The text on the cancel button, should indicate the action, e.g. "Not now" | | result | Action\\\ | Will fire a callback event depending on the status of the users actions | * Lua ```lua hostObject = Space.Host.ExecutingObject local deltaPos = Vector.New(0,100,0) local teleportTo = hostObject.WorldPosition + deltaPos function teleportMeUp (b) if b then Space.Scene.PlayerAvatar.Teleport(teleportTo) end end function openDialogue () Space.Dialogues.YesNoInput ("Ready for a teleport?", "Yes", "No", teleportMeUp) end hostObject.SubscribeToEvents() hostObject.OnMouseDown(openDialogue) ``` ##### TextInput[​](#textinput "Direct link to TextInput") *Opens a text entry window with room for a single multi-line text field.* void **TextInput** ( string title, string okButton, Action< string > result) | Parameter | Type | Description | | --------- | ---------------- | ----------------------------------------------------------------------------------- | | title | string | The accompanying text. Should be something ala "Enter your username". | | okButton | string | The text displayed on the OK button, should be descriptive, e.g. "Change Username". | | result | Action< string > | Triggers result(string) once the "Ok" button is pressed. | * Lua ```lua hostObject = Space.Host.ExecutingObject printToLog = function (s) Space.Log(s) end function openDialogue () Space.Dialogues.TextInput ("Write anything.", "Done", printToLog) end hostObject.OnMouseDown(openDialogue) ``` ##### OpenURL[​](#openurl "Direct link to OpenURL") *Opens the specified URL in the in-app web browser, or the system web browser. In some environments the user may be prompted before this is opened.* void **OpenURL** ( string url, bool newTab = true ) | Parameter | Type | Description | | --------- | ------ | --------------------------------------- | | url | string | The web address to open. | | newTab | bool | Does the URL open in a new browser tab? | * Lua ```lua -- when the object is clicked, the "sine.space" website is opened hostObject = Space.Host.ExecutingObject function openTheWebsite () Space.Dialogues.OpenURL("http://sine.space/") end hostObject.OnMouseDown(openTheWebsite) ``` ##### SendLocalChat[​](#sendlocalchat "Direct link to SendLocalChat") *Sends a message into the 'Script' chat channel.* void **SendLocalChat** ( string message, string from ) | Parameter | Type | Description | | --------- | ------ | ------------------------------------- | | message | string | The message to appear in the channel. | | from | string | The 'from' username for the message. | * Lua ```lua hostObject = Space.Host.ExecutingObject function chatMessage () Space.Dialogues.SendLocalChat ("I've been clicked", "Clickable Object") end hostObject.OnMouseDown(chatMessage) ``` --- ### SInput #### Functions[​](#functions "Direct link to Functions") ##### **GetKeyDown**[​](#getkeydown "Direct link to getkeydown") bool **GetKeyDown** (string key) *Returns true if 'key' was pressed during this frame.* | Parameter | Type | Description | | --------- | ------ | -------------------------------------------------------------------------------------------- | | key | string | [Input key name](/scripting/client-scripting-api-reference/client/sinput.md#input-key-names) | * Lua ```lua thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetKeyDown("space") then Space.Log("Jump Key Down") end end thisGameObject.OnUpdate(OnUpdate) ``` ##### **GetKeyUp**[​](#getkeyup "Direct link to getkeyup") bool **GetKeyUp** (string key) *Returns true if 'key' is no longer pressed during this frame (but was in the last).* | Parameter | Type | Description | | --------- | ------ | -------------------------------------------------------------------------------------------- | | key | string | [Input key name](/scripting/client-scripting-api-reference/client/sinput.md#input-key-names) | * Lua ```lua thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetKeyUp("space") then Space.Log("Jump Key Released") end end thisGameObject.OnUpdate(OnUpdate) ``` ##### **GetKey**[​](#getkey "Direct link to getkey") bool **GetKey** (string key) *Returns true if 'key' is being held pressed.* | Parameter | Type | Description | | --------- | ---- | -------------------------------------------------------------------------------------------- | | key | bool | [Input key name](/scripting/client-scripting-api-reference/client/sinput.md#input-key-names) | * Lua ```lua thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetKey("space") then Space.Log("Jump Key Held") end end thisGameObject.OnUpdate(OnUpdate) ``` ##### GetMouseDown[​](#getmousedown "Direct link to GetMouseDown") bool **GetMouseDown** (int button) *Returns true if mouse 'button' was pressed during this frame.* | Parameter | Type | Description | | --------- | ---- | -------------------------------------------------------------------------------------------------------------------------- | | button | int | *button* values are 0 for the primary button (often the left button), 1 for secondary button, and 2 for the middle button. | * Lua ```lua if Space.Input.GetMouseDown(1) then Space.Log("Right Mouse button pressed in this frame") end ``` * Lua ```lua --this script will make this object jump to wherever you right click thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetMouseDown(1) then clickRay = Space.Camera.ScreenCoordinatesToRay(Space.Input.MousePosition) rayCastHit = Space.Physics.RayCastSingle(clickRay.Origin, clickRay.Direction, 50.0) thisGameObject.WorldPosition = rayCastHit.Position end end thisGameObject.OnUpdate(OnUpdate) ``` ##### GetMouseUp[​](#getmouseup "Direct link to GetMouseUp") bool **GetMouseUp** (int button) *Returns true if mouse 'button' is no longer pressed during this frame (but was in the last).* | Parameter | Type | Description | | --------- | ---- | -------------------------------------------------------------------------------------------------------------------------- | | button | int | *button* values are 0 for the primary button (often the left button), 1 for secondary button, and 2 for the middle button. | * Lua ```lua if Space.Input.GetMouseUp(1) then Space.Log("Right Mouse button was just unpressed") end ``` ##### GetMouseHold[​](#getmousehold "Direct link to GetMouseHold") bool **GetMouseHold** (int button) *Returns true if mouse 'button' is being held pressed.* | Parameter | Type | Description | | --------- | ---- | -------------------------------------------------------------------------------------------------------------------------- | | button | int | *button* values are 0 for the primary button (often the left button), 1 for secondary button, and 2 for the middle button. | * Lua ```lua if Space.Input.GetMouseHold(1) then Space.Log("Right Mouse button being held") end ``` * Lua ```lua --this script will make this object will follow your ovement while holding right click thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetMouseHold(1) then clickRay = Space.Camera.ScreenCoordinatesToRay(Space.Input.MousePosition) rayCastHit = Space.Physics.RayCastSingle(clickRay.Origin, clickRay.Direction, 50.0) thisGameObject.WorldPosition = rayCastHit.Position end end thisGameObject.OnUpdate(OnUpdate) ``` ##### Vibrate[​](#vibrate "Direct link to Vibrate") void **Vibrate** (float intensity, float duration, bool leftHand) *Vibrates the controller (or phone, or gamepad) if a rumble device is present.* | Parameter | Type | Description | | --------- | ----- | ------------------------------------------------------------------------------------------------ | | intensity | float | Intensity of the vibration from 0.0 to 1.0 | | duration | float | Duration of the vibration. Maximum 1.0 second. | | leftHand | bool | If true the vibration will be on the left hand and if false on the right hand (where applicable) | * Lua ```lua Space.Input.Vibrate(1,1,false) ``` #### Properties[​](#properties "Direct link to Properties") ##### **ScrollWheel**[​](#scrollwheel "Direct link to scrollwheel") float **ScrollWheel** `get` *Returns a non-0 value if the mouse wheel is being scrolled, value usually ranges from -1 to 1\*\*.\*\** * Lua ```lua scrollWheel = Space.Input.ScrollWheel ``` * Lua ```lua --Object will move up and down with scroll wheel movement thisGameObject = Space.Host.ExecutingObject OnUpdate = function() thisGameObject.WorldPosition = thisGameObject.WorldPosition + (thisGameObject.Up * Space.Input.ScrollWheel) end thisGameObject.OnUpdate(OnUpdate) ``` ##### MousePosition[​](#mouseposition "Direct link to MousePosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MousePosition** `get` *Returns the current position of the mouse in screen pixels. If on a touch screen device, this will also return the location of the first finger being pressed.* * Lua ```lua currentMousePos = Space.Input.MousePosition ``` * Lua ```lua --Object will follow your mouse movement while holding right click thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetMouseHold(1) then clickRay = Space.Camera.ScreenCoordinatesToRay(Space.Input.MousePosition) rayCastHit = Space.Physics.RayCastSingle(clickRay.Origin, clickRay.Direction, 50.0) thisGameObject.WorldPosition = rayCastHit.Position end end thisGameObject.OnUpdate(OnUpdate) ``` ##### MovementAxis[​](#movementaxis "Direct link to MovementAxis") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MovementAxis** `get` *Returns left/right (A/D) movement on X, forward/back (W/S) on Y, and up/down (E/C) on Z.* * Lua ```lua moveAxis = Space.Input.MovementAxis ``` * Lua ```lua --Object moves according to your AWSD presses thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.MovementAxis.Y > 0 then thisGameObject.WorldPosition = thisGameObject.WorldPosition + thisGameObject.Forward elseif Space.Input.MovementAxis.Y < 0 then thisGameObject.WorldPosition = thisGameObject.WorldPosition - thisGameObject.Forward end if Space.Input.MovementAxis.X > 0 then thisGameObject.WorldPosition = thisGameObject.WorldPosition + thisGameObject.Right elseif Space.Input.MovementAxis.X < 0 then thisGameObject.WorldPosition = thisGameObject.WorldPosition - thisGameObject.Right end end thisGameObject.OnUpdate(OnUpdate) ``` ##### TurnAxis[​](#turnaxis "Direct link to TurnAxis") [SVector](/scripting/client-scripting-api-reference/types/svector.md)? **TurnAxis** `get` Returns the Turn Axis (-1 to 1 on Vector's X value). * Lua ```lua turnAxis = Space.Input.TurnAxis ``` * Lua ```lua --makes this object color red if player is turning left --and color green if player is turning right --and blue if player is not turning thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.TurnAxis.X > 0 then thisGameObject.Renderer.Material.SetColor("_Color",Color.Red) elseif Space.Input.TurnAxis.X < 0 then thisGameObject.Renderer.Material.SetColor("_Color",Color.Green) elseif Space.Input.TurnAxis.X == 0 then thisGameObject.Renderer.Material.SetColor("_Color",Color.Blue) end end thisGameObject.OnUpdate(OnUpdate) ``` *** ##### MouseLook[​](#mouselook "Direct link to MouseLook") bool **MouseLook** `get` `set` Enable or disable Mouse Look feature. * Lua ```lua Space.Input.MouseLook = true ``` * Lua ```lua --the below script will put your player into MouseLook mode if you are near the object --and return you to normal mode if you are far from the object thisGameObject = Space.Host.ExecutingObject function OnUpdate() positionAvatar = Space.Scene.PlayerAvatar.GameObject.WorldPosition positionObject = thisGameObject.WorldPosition if positionAvatar.InRange(positionObject, 5.0) then if Space.Input.MouseLook == false then Space.Input.MouseLook = true end else if Space.Input.MouseLook == true then Space.Input.MouseLook = false end end end thisGameObject.OnUpdate(OnUpdate) ``` ##### MouseX[​](#mousex "Direct link to MouseX") float **MouseX** `get` *Returns a float representing the Mouse/Right Joystick horizontal movement. If the value is positive the movement is upwards. If the value is negative the movement is downwards. The value is derived by multiplying mouse delta with axis sensitivity. This is frame-rate independent; you do not need to be concerned about varying frame-rates when using this value.* * Lua ```lua MouseX = Space.Input.MouseX ``` * Lua ```lua --the below script will rotate this object along the Y axis --according to your mouse/right joystick horizontal movement thisGameObject = Space.Host.ExecutingObject function OnUpdate() currentY = thisGameObject.WorldRotation.EulerAngles.Y newY = currentY + Space.Input.MouseX thisGameObject.WorldRotation = Quaternion.Euler(0, newY, 0) end thisGameObject.OnUpdate(OnUpdate) ``` ##### MouseY[​](#mousey "Direct link to MouseY") float **MouseY** `get` *Returns a float representing the Mouse/Right Joystick vertical movement. If the value is positive the movement is to the right. If the value is negative the movement is to the left. The value is derived by multiplying mouse delta with axis sensitivity. This is frame-rate independent; you do not need to be concerned about varying frame-rates when using this value.* * Lua ```lua MouseY = Space.Input.MouseY ``` * Lua ```lua --the below script will rotate this object along the Y axis --according to your mouse/right joystick vertical movement thisGameObject = Space.Host.ExecutingObject function OnUpdate() currentX = thisGameObject.WorldRotation.EulerAngles.X newX = currentX + Space.Input.MouseY thisGameObject.WorldRotation = Quaternion.Euler(newX , 0, 0) end thisGameObject.OnUpdate(OnUpdate) ``` ##### ClickToWalk[​](#clicktowalk "Direct link to ClickToWalk") [SVector](/scripting/client-scripting-api-reference/types/svector.md)? **TurnAxis** `get` *Returns the Turn Axis (-1 to 1 on Vector's X value).* * Lua ```lua turnAxis = Space.Input.TurnAxis ``` * Lua ```lua --makes this object color red if player is turning left ``` ##### Fire[​](#fire "Direct link to Fire") bool **Fire** `get` *Return true if primary fire is pressed (Mouselook Mode).* * Lua ```lua fireIsPressed = Space.Input.Fire ``` * Lua ```lua --Create a GameObject from resource when Primary Fire button is pressed --[Add resource "bullet" as a resource in scripting runtime component] thisGameObject = Space.Host.ExecutingObject bullet = Space.GetResource("bullet") OnUpdate = function() if Space.Input.Fire then Space.Scene.CreateGameObject(bullet) end end thisGameObject.OnUpdate(OnUpdate) ``` ##### AltFire[​](#altfire "Direct link to AltFire") bool **AltFire** `get` *Return true if alternative fire is pressed (Mouselook Mode)* * Lua ```lua altFireIsPressed = Space.Input.AltFire ``` * Lua ```lua --Create a GameObject from resource when Alternate Fire button is pressed --[Add resource "bullet" as a resource in scripting runtime component] thisGameObject = Space.Host.ExecutingObject bullet = Space.GetResource("bullet") OnUpdate = function() if Space.Input.AltFire then Space.Scene.CreateGameObject(bullet) end end thisGameObject.OnUpdate(OnUpdate) ``` ##### CursorInUI[​](#cursorinui "Direct link to CursorInUI") bool **CursorInUI** `get` *Returns true if the cursor is over the Sinespace UI.* * Lua ```lua cursorInUI = Space.Input.CursorInUI ``` * Lua ```lua --this object is going to listen to your scroll wheel movement and move accordingly --UNLESS your cursor is on the sinespace UI --(Example: Scrolling chat won't also move the object) thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.CursorInUI == false then thisGameObject.WorldPosition = thisGameObject.WorldPosition + (thisGameObject.Up * Space.Input.ScrollWheel) end end thisGameObject.OnUpdate(OnUpdate) ``` ##### IsVRAvailable[​](#isvravailable "Direct link to IsVRAvailable") bool **IsVRAvailable** `get` *Returns true if VR is available.* * Lua ```lua isAvailable = Space.Input.IsVRAvailable ``` ##### IsVRActive[​](#isvractive "Direct link to IsVRActive") bool **IsVRActive** `get` *Returns true if VR is active.* * Lua ```lua turnAxis = Space.Input.TurnAxis ``` ##### **VRLeftControllerPosition**[​](#vrleftcontrollerposition "Direct link to vrleftcontrollerposition") [SVector](/scripting/client-scripting-api-reference/types/svector.md)? **VRLeftControllerPosition** `get` *Returns position of Left VR Controller.* * Lua ```lua posVRleft = Space.Input.VRLeftControllerPosition ``` ##### **VRRightControllerPosition**[​](#vrrightcontrollerposition "Direct link to vrrightcontrollerposition") [SVector](/scripting/client-scripting-api-reference/types/svector.md)? **VRRightControllerPosition** `get` *Returns position of Right VR Controller.* * Lua ```lua posVRright = Space.Input.VRRightControllerPosition ``` ##### **VRLeftControllerRotation**[​](#vrleftcontrollerrotation "Direct link to vrleftcontrollerrotation") [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md)? **VRLeftControllerRotation** `get` *Returns rotation of Left VR Controller.* * Lua ```lua rotVRleft = Space.Input.VRLeftControllerRotation ``` ##### **VRRightControllerRotation**[​](#vrrightcontrollerrotation "Direct link to vrrightcontrollerrotation") [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md)? **VRRightControllerRotation** `get` *Returns rotation of Right VR Controller.* * Lua ```lua rotVRright = Space.Input.VRRightControllerRotation ``` #### Input Key Names[​](#input-key-names "Direct link to Input Key Names") Key names follow these naming conventions: | **Key family** | **Naming convention** | | -------------- | ------------------------------------------------------------------------------------------------------------------- | | Letter keys | `a`, `b`, `c`… | | Number keys | `1`, `2`, `3`… | | Arrow keys | `up`, `down`, `left`, `right` | | Numpad keys | `[1]`, `[2]`, `[3]`, `[+]`, `[equals]`… | | Modifier keys | `right shift`, `left shift`, `right ctrl`, `left ctrl`, `right alt`, `left alt`, `right cmd`, `left cmd` | | Special keys | `backspace`, `tab`, `return`, `escape`, `space`, `delete`, `enter`, `insert`, `home`, `end`, `page up`, `page down` | | Function keys | `f1`, `f2`, `f3`… | Mouse buttons are named `mouse 0, mouse 1, mouse 2,` and so on. Joystick buttons follow these naming conventions: | **Button origin** | **Naming convention** | | ---------------------------------------- | -------------------------------------------------------------------- | | A specific button on any joystick | `joystick button 0`, `joystick button 1`, `joystick button 2`… | | A specific button on a specific joystick | `joystick 1 button 0`, `joystick 1 button 1`, `joystick 2 button 0`… | --- ### SShared #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**SetGlobal**](sshared#setglobal)(string ns, string key, DynValue value) | | void [**SetSuperGlobal**](sshared#setsuperglobal)(string ns, string key, DynValue value) | | DynValue [**GetGlobal**](sshared#getglobal)(string ns, string key) | | DynValue [**GetSuperGlobal**](sshared#getsuperglobal)(string ns, string key) | | void [**RegisterFunction**](sshared#registerfunction)(string ns, string func, Closure reference) | | void [**RegisterBroadcastFunction**](sshared#registerbroadcastfunction)(string ns, string func, Closure reference) | | void [**UnregisterBroadcastFunction**](sshared#unregisterbroadcastfunction)(string ns, string func, Closure reference)void [**UnregisterBroadcastFunction**](sshared#unregisterbroadcastfunction)(string ns, string func) | | void [**CallFunction**](sshared#callfunction)(string ns, string func, IEnumerable< DynValue > args) | | void [**CallBroadcastFunction**](sshared#callbroadcastfunction)(string ns, string func, IEnumerable< DynValue > args) | #### Functions[​](#functions "Direct link to Functions") ##### SetGlobal[​](#setglobal "Direct link to SetGlobal") void **SetGlobal**(string ns, string key, DynValue value) *Sets a global key to a value. The value can be any object type.* | Parameter | Type | Description | | --------- | -------- | ----------- | | ns | string | | | key | string | | | value | DynValue | | * Lua ```lua Space.Shared.SetGlobal("com.someNameHere.world", "version", "1.02"); ``` * Lua ```lua -- This one script placed on a multiple number of objects will track the number -- of clicks user has made using a Global Variable -- note: the GetGlobal/SetGlobal functions are client side thisObject = Space.Host.ExecutingObject namespace = "com.example.shared" key = "clicktracker" OnClick = function() local currentClicks = Space.Shared.GetGlobal(namespace, key) if currentClicks == nil then currentClicks = 1 else currentClicks = currentClicks + 1 end Space.Shared.SetGlobal(namespace, key, currentClicks) Space.Log("Total Clicks = " .. currentClicks) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### SetSuperGlobal[​](#setsuperglobal "Direct link to SetSuperGlobal") void **SetSuperGlobal**(string ns, string key, DynValue value) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Shared.SetSuperGlobal("com.someNameHere.world", "version", "1.02"); ``` * Lua ```lua example 2 ``` ##### GetGlobal[​](#getglobal "Direct link to GetGlobal") DynValue **GetGlobal**(string ns, string key) *Retrieves a previously set global variable, or returns nil.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua versionValue = Space.Shared.GetGlobal("com.someNameHere.world", "version") ``` * Lua ```lua -- This one script placed on a multiple number of objects will track the number -- of clicks user has made using a Global Variable -- note: the GetGlobal/SetGlobal functions are client side thisObject = Space.Host.ExecutingObject namespace = "com.example.shared" key = "clicktracker" OnClick = function() local currentClicks = Space.Shared.GetGlobal(namespace, key) if currentClicks == nil then currentClicks = 1 else currentClicks = currentClicks + 1 end Space.Shared.SetGlobal(namespace, key, currentClicks) Space.Log("Total Clicks = " .. currentClicks) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GetSuperGlobal[​](#getsuperglobal "Direct link to GetSuperGlobal") DynValue **GetSuperGlobal**(string ns, string key) *Retrieves a previously set super global variable, or returns nil.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua versionValue = Space.Shared.GetSuperGlobal("com.someNameHere.world", "version"); ``` * Lua ```lua --these two scripts are in two different regions but script B will know that you came from A --REGION A script username = Space.Scene.PlayerAvatar.Username region = Space.Scene.Name Space.Shared.SetSuperGlobal (username, "Last Location", region) --REGION B script username = Space.Scene.PlayerAvatar.Username region = Space.Shared.GetSuperGlobal (username, "Last Location") Space.Dialogues.SendLocalChat ("You have arrived from ".. region, "Last Location") ``` ##### RegisterFunction[​](#registerfunction "Direct link to RegisterFunction") void **RegisterFunction**(string ns, string func, Closure reference) *Makes func into a global function that can be accessed anywhere.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function someFunction(name) Space.Log("Hello " .. name); end Space.Shared.RegisterFunction("com.someNameHere.world", "func", someFunction); ``` * Lua ```lua --Script placed on object A will allow other objects to call one of it's registered functions when clicked --Script in Object A thisObject = Space.Host.ExecutingObject namespace = "com.example.shared" LogFunction = function(Parameter) Space.Log("I've been called with parameter: " .. Parameter) end Space.Shared.RegisterFunction(namespace, "Log", LogFunction) -- Script in Other Objects thisObject = Space.Host.ExecutingObject namespace = "com.example.shared" OnClick = function() Space.Shared.CallFunction(namespace, "Log", {"Example"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### RegisterBroadcastFunction[​](#registerbroadcastfunction "Direct link to RegisterBroadcastFunction") void **RegisterBroadcastFunction**(string ns, string func, Closure reference) *Makes func into a global function that can be accessed anywhere.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function someFunction(name) Space.Log("Hello " .. name); end Space.Shared.RegisterBroadcastFunction("com.someNameHere.world", "func", someFunction); ``` ##### UnregisterBroadcastFunction[​](#unregisterbroadcastfunction "Direct link to UnregisterBroadcastFunction") void **UnregisterBroadcastFunction**(string ns, string func, Closure reference)
void **UnregisterBroadcastFunction**(string ns, string func) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Script A: Receiver function someFunction(status) if status == "start" then Space.Log("Do receiver 1 procedures.") end end Space.Shared.RegisterBroadcastFunction("com.someNameHere.world", "func", someFunction); -- Script B: Another Receiver function someFunction(status) if status == "start" then Space.Log("Do receiver 2 procedures.") end end Space.Shared.RegisterBroadcastFunction("com.someNameHere.world", "func", someFunction); --Script C: Sender local ball = Space.Host.ExecutingObject; ball.SubscribeToEvents(); function onDown() local queue = Space.Shared.CallBroadcastFunction("com.someNameHere.world", "func", {"start"}); Space.Log("number in queue: " .. queue); Space.Shared.UnregisterBroadcastFunction("com.someNameHere.world", "func", someFunction); Space.Log("UnregisterBroadcastFunction"); end ball.OnMouseDown(onDown); ``` ##### CallFunction[​](#callfunction "Direct link to CallFunction") void **CallFunction**(string ns, string func, IEnumerable< DynValue > args) *Calls the registered function with the specified arguments.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Shared.CallFunction("com.someNameHere.world", "func",{"Smith"}); ``` * Lua ```lua --Script placed on object A will allow other objects to call one of it's registered functions when clicked --Script in Object A thisObject = Space.Host.ExecutingObject namespace = "com.example.shared" LogFunction = function(Parameter) Space.Log("I've been called with parameter: " .. Parameter) end Space.Shared.RegisterFunction(namespace, "Log", LogFunction) -- Script in Other Objects thisObject = Space.Host.ExecutingObject namespace = "com.example.shared" OnClick = function() Space.Shared.CallFunction(namespace, "Log", {"Example"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### CallBroadcastFunction[​](#callbroadcastfunction "Direct link to CallBroadcastFunction") void **CallBroadcastFunction**(string ns, string func, IEnumerable< DynValue > args) *Makes func into a global function that can be accessed anywhere.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function someFunction(name) Space.Log("Hello " .. name); end Space.Shared.RegisterBroadcastFunction("com.someNameHere.world", "func", someFunction); ``` --- ### SUI #### Functions[​](#functions "Direct link to Functions") ##### AddNotification[​](#addnotification "Direct link to AddNotification") void **AddNotification** (string title, string text) *Shows a notification* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.UI.AddNotification('Warning','This is a notification') ``` * Lua ```lua --This script will send a notification every time a new player joins region --including the users name function sendNotification(Av) Space.UI.AddNotification("New User","User joined: " .. Av.Username) end Space.Scene.OnPlayerJoin(sendNotification) ``` ##### OpenAppearanceEditor[​](#openappearanceeditor "Direct link to OpenAppearanceEditor") void **OpenAppearanceEditor**() *Opens the Appearance Editor (Outfit)* * Lua ```lua Space.UI.OpenAppearanceEditor() ``` * Lua ```lua --This script will make a button open the Appearance Editor --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') OnClick = function() Space.UI.OpenAppearanceEditor() end theButton.UIButton.OnClick(OnClick) ``` ##### ShowPathToLocation[​](#showpathtolocation "Direct link to ShowPathToLocation") void **ShowPathToLocation** (string reason, [SVector](/scripting/client-scripting-api-reference/types/svector.md) location) *Shows a path to given location* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.UI.ShowPathToLocation("A Reason", aLocation) ``` ##### ShowLocation[​](#showlocation "Direct link to ShowLocation") void **ShowLocation** (string reason, [SVector](/scripting/client-scripting-api-reference/types/svector.md) location) *Shows given location* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.UI.ShowLocation("the reason", aLocation) ``` ##### AddGlobalActionButton[​](#addglobalactionbutton "Direct link to AddGlobalActionButton") void **AddGlobalActionButton** (string button, string tooltip, Closure action) Adds a "Global Action Button" which is a custom button you add to the UI that calls an action of your choice then clears after being clicked | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.UI.AddGlobalActionButton("Button 1", "Stand Up", aFunction) ``` ##### ClearGlobalActionButton[​](#clearglobalactionbutton "Direct link to ClearGlobalActionButton") void **ClearGlobalActionButton** (string button) *Clears a previously added Global Action Button 'button'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.UI.ClearGlobalActionButton("The Button") ``` * Lua ```lua --This script will make this object make you dance when clicked --and also show a Global Action button to let you stop the dance (and clear that button) --[required: Add the dance animation to the Scripting Runtime's "Resources" section with name "dance"] thisObj = Space.Host.ExecutingObject danceAnim = Space.GetResource("dance") isDancing = false gbClick = function() Space.Scene.PlayerAvatar.StopCustomAnimation() Space.UI.ClearGlobalActionButton("Stop Dance") isDancing = false end OnClick = function() if not isDancing then Space.Scene.PlayerAvatar.PlayCustomAnimation(danceAnim) Space.UI.AddGlobalActionButton("Stop Dance","", gbClick) isDancing = true end end thisObj.AddClickable() thisObj.Clickable.OnClick(OnClick) ``` ##### OpenQuestsWindow[​](#openquestswindow "Direct link to OpenQuestsWindow") void **OpenQuestsWindow** () *Opens the Quests window. *(white-label grid only)** * Lua ```lua Space.UI.OpenQuestsWindow() ``` * Lua ```lua example --This script will make a button show/hide the Quests Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideQuestsWindow() isShown = false else Space.UI.OpenQuestsWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideQuestsWindow[​](#hidequestswindow "Direct link to HideQuestsWindow") void **HideQuestsWindow** () *Hides the Quests window. *(white-label grid only)** * Lua ```lua Space.UI.HideQuestsWindow() ``` * Lua ```lua --This script will make a button show/hide the Quests Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideQuestsWindow() isShown = false else Space.UI.OpenQuestsWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenSettingsWindow[​](#opensettingswindow "Direct link to OpenSettingsWindow") void **OpenSettingsWindow** () *Opens the Settings window. *(white-label grid only)** * Lua ```lua Space.UI.OpenSettingsWindow() ``` * Lua ```lua --This script will make a button show/hide the Settings Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideSettingsWindow() isShown = false else Space.UI.OpenSettingsWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideSettingsWindow[​](#hidesettingswindow "Direct link to HideSettingsWindow") void **HideSettingsWindow** () *Hides the Settings window. *(white-label grid only)** * Lua ```lua Space.UI.HideSettingsWindow() ``` * Lua ```lua --This script will make a button show/hide the Settings Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideSettingsWindow() isShown = false else Space.UI.OpenSettingsWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenFriendsWindow[​](#openfriendswindow "Direct link to OpenFriendsWindow") void **OpenFriendsWindow** () *Opens the Friends window. *(white-label grid only)** * Lua ```lua Space.UI.OpenFriendsWindow() ``` * Lua ```lua --This script will make a button show/hide the Friends Window--(example: tools for user to customize UI)--[You need to add a UI Button as a reference in the Scripting Runtime Component]theButton = Space.Host.GetReference('TheButton')local isShown = falseOnClick = function() if isShown then Space.UI.HideFriendsWindow() isShown = false else Space.UI.OpenFriendsWindow() isShown = true endendtheButton.UIButton.OnClick(OnClick) HideFriendsWindow ``` ##### HideFriendsWindow[​](#hidefriendswindow "Direct link to HideFriendsWindow") void **HideFriendsWindow** () *Hides the Friends window. *(white-label grid only)** * Lua ```lua Space.UI.HideFriendsWindow() ``` * Lua ```lua --This script will make a button show/hide the Friends Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideFriendsWindow() isShown = false else Space.UI.OpenFriendsWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenExploreWindow[​](#openexplorewindow "Direct link to OpenExploreWindow") void **OpenExploreWindow** () *Opens the Explore window. *(white-label grid only)** * Lua ```lua Space.UI.OpenExploreWindow() ``` * Lua ```lua --This script will make a button show/hide the Explore Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideExploreWindow() isShown = false else Space.UI.OpenExploreWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideExploreWindow[​](#hideexplorewindow "Direct link to HideExploreWindow") void **HideExploreWindow** () *Hides the Explore window (white-label grid only)* * Lua ```lua Space.UI.HideExploreWindow() ``` * Lua ```lua --This script will make a button show/hide the Explore Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideExploreWindow() isShown = false else Space.UI.OpenExploreWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenEventsWindow[​](#openeventswindow "Direct link to OpenEventsWindow") void **OpenEventsWindow** () *Opens the Events window (white-label grid only)* * Lua ```lua Space.UI.OpenEventsWindow() ``` * Lua ```lua --This script will make a button show/hide the Events Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideEventsWindow() isShown = false else Space.UI.OpenEventsWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideEventsWindow[​](#hideeventswindow "Direct link to HideEventsWindow") void **HideEventsWindow** () *Hides the Events window (white-label grid only)* * Lua ```lua Space.UI.HideEventsWindow() ``` * Lua ```lua --This script will make a button show/hide the Events Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideEventsWindow() isShown = false else Space.UI.OpenEventsWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenHomeWindow[​](#openhomewindow "Direct link to OpenHomeWindow") void **OpenHomeWindow** () *Opens the Home window (white-label grid only)* * Lua ```lua Space.UI.OpenHomeWindow() ``` * Lua ```lua --This script will make a button show/hide the Home Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideHomeWindow() isShown = false else Space.UI.OpenHomeWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideHomeWindow[​](#hidehomewindow "Direct link to HideHomeWindow") void **HideHomeWindow** () *Hides the Home window (white-label grid only)* * Lua ```lua Space.UI.HideHomeWindow() ``` * Lua ```lua --This script will make a button show/hide the Home Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideHomeWindow() isShown = false else Space.UI.OpenHomeWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenInventoryWindow[​](#openinventorywindow "Direct link to OpenInventoryWindow") void **OpenInventoryWindow** () *Opens the Inventory window (white-label grid only)* * Lua ```lua Space.UI.OpenInventoryWindow() ``` * Lua ```lua --This script will make a button show/hide the Inventory Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideInventoryWindow() isShown = false else Space.UI.OpenInventoryWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideInventoryWindow[​](#hideinventorywindow "Direct link to HideInventoryWindow") void **HideInventoryWindow** () *Hides the Inventory window (white-label grid only)* * Lua ```lua Space.UI.HideInventoryWindow() ``` * Lua ```lua --This script will make a button show/hide the Inventory Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideInventoryWindow() isShown = false else Space.UI.OpenInventoryWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenOutfitWindow[​](#openoutfitwindow "Direct link to OpenOutfitWindow") void **OpenOutfitWindow** () *Opens the Outfit window (white-label grid only)* * Lua ```lua Space.UI.OpenOutfitWindow() ``` * Lua ```lua --This script will make a button show/hide the Outfit Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideOutfitWindow() isShown = false else Space.UI.OpenOutfitWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideOutfitWindow[​](#hideoutfitwindow "Direct link to HideOutfitWindow") void **HideOutfitWindow** () *Hides the Outfit window (white-label grid only)* * Lua ```lua Space.UI.HideOutfitWindow() ``` * Lua ```lua --This script will make a button show/hide the Outfit Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideOutfitWindow() isShown = false else Space.UI.OpenOutfitWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenShopWindow[​](#openshopwindow "Direct link to OpenShopWindow") void **OpenShopWindow** () *Opens the Shop window (white-label grid only)* * Lua ```lua Space.UI.OpenShopWindow() ``` * Lua ```lua --This script will make a button show/hide the Shop Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideShopWindow() isShown = false else Space.UI.OpenShopWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideShopWindow[​](#hideshopwindow "Direct link to HideShopWindow") void **HideShopWindow** () *Hides the Shop window (white-label grid only)* * Lua ```lua Space.UI.HideShopWindow() ``` * Lua ```lua --This script will make a button show/hide the Shop Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideShopWindow() isShown = false else Space.UI.OpenShopWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenSnapshotWindow[​](#opensnapshotwindow "Direct link to OpenSnapshotWindow") void **OpenSnapshotWindow** () *Opens the Snapshot window (white-label grid only)* * Lua ```lua Space.UI.OpenSnapshotWindow() ``` * Lua ```lua --This script will make a button show/hide the Snapshot Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideSnapshotWindow() isShown = false else Space.UI.OpenSnapshotWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideSnapshotWindow[​](#hidesnapshotwindow "Direct link to HideSnapshotWindow") void **HideSnapshotWindow** () *Hides the Snapshot window (white-label grid only)* * Lua ```lua Space.UI.HideSnapshotWindow() ``` * Lua ```lua --This script will make a button show/hide the Snapshot Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideSnapshotWindow() isShown = false else Space.UI.OpenSnapshotWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenHelpWindow[​](#openhelpwindow "Direct link to OpenHelpWindow") void **OpenHelpWindow** () *Opens the Help window (white-label grid only)* * Lua ```lua Space.UI.OpenHelpWindow() ``` * Lua ```lua --This script will make a button show/hide the Help Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideHelpWindow() isShown = false else Space.UI.OpenHelpWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideHelpWindow[​](#hidehelpwindow "Direct link to HideHelpWindow") void **HideHelpWindow** () *Hides the Help window (white-label grid only)* * Lua ```lua Space.UI.HideHelpWindow() ``` * Lua ```lua --This script will make a button show/hide the Help Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideHelpWindow() isShown = false else Space.UI.OpenHelpWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenProfileWin[​](#openprofilewin "Direct link to OpenProfileWin") void **OpenProfileWin** () *Opens the Profile window (white-label grid only)* * Lua ```lua Space.UI.OpenProfileWin() ``` * Lua ```lua --This script will make a button show/hide the Profile Win --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideProfileWindow() isShown = false else Space.UI.OpenProfileWin() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideProfileWindow[​](#hideprofilewindow "Direct link to HideProfileWindow") void **HideProfileWindow**() *Hides the Profile window (white-label grid only)* * Lua ```lua Space.UI.HideProfileWindow() ``` * Lua ```lua --This script will make a button show/hide the Profile Win --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideProfileWindow() isShown = false else Space.UI.OpenProfileWin() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenUpgradeAccountWindow[​](#openupgradeaccountwindow "Direct link to OpenUpgradeAccountWindow") void **OpenUpgradeAccountWindow** () *Opens the Upgrade Account window (white-label grid only)* * Lua ```lua Space.UI.OpenUpgradeAccountWindow() ``` * Lua ```lua --This script will make a button show/hide the Upgrade Account Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideUpgradeAccountWindow() isShown = false else Space.UI.OpenUpgradeAccountWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideUpgradeAccountWindow[​](#hideupgradeaccountwindow "Direct link to HideUpgradeAccountWindow") void **HideUpgradeAccountWindow** () *Hides the Upgrade Account window (white-label grid only)* * Lua ```lua Space.UI.HideUpgradeAccountWindow() ``` * Lua ```lua --This script will make a button show/hide the Upgrade Account Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideUpgradeAccountWindow() isShown = false else Space.UI.OpenUpgradeAccountWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenRegionInfoWindow[​](#openregioninfowindow "Direct link to OpenRegionInfoWindow") void **OpenRegionInfoWindow** () *Opens the Region Info window (white-label grid only)* * Lua ```lua Space.UI.OpenRegionInfoWindow() ``` * Lua ```lua --This script will make a button show/hide the Region Info Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideRegionInfoWindow() isShown = false else Space.UI.OpenRegionInfoWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideRegionInfoWindow[​](#hideregioninfowindow "Direct link to HideRegionInfoWindow") void **HideRegionInfoWindow** () *Hides the Region Info window (white-label grid only)* * Lua ```lua Space.UI.HideRegionInfoWindow() ``` * Lua ```lua --This script will make a button show/hide the Region Info Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideRegionInfoWindow() isShown = false else Space.UI.OpenRegionInfoWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenExitWindow[​](#openexitwindow "Direct link to OpenExitWindow") void **OpenExitWindow** () *Opens the Exit window (white-label grid only)* * Lua ```lua Space.UI.OpenExitWindow() ``` * Lua ```lua --This script will make a button show/hide the Exit Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideExitWindow() isShown = false else Space.UI.OpenExitWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideExitWindow[​](#hideexitwindow "Direct link to HideExitWindow") void **HideExitWindow** () *Hides the Exit window (white-label grid only)* * Lua ```lua Space.UI.HideExitWindow() ``` * Lua ```lua --This script will make a button show/hide the Exit Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideExitWindow() isShown = false else Space.UI.OpenExitWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenMailWindow[​](#openmailwindow "Direct link to OpenMailWindow") void **OpenMailWindow** () *Opens the Mail window (white-label grid only)* * Lua ```lua Space.UI.OpenMailWindow() ``` * Lua ```lua --This script will make a button show/hide the Mail Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideMailWindow() isShown = false else Space.UI.OpenMailWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideMailWindow[​](#hidemailwindow "Direct link to HideMailWindow") void **HideMailWindow** () *Hides the Mail window (white-label grid only)* * Lua ```lua Space.UI.HideMailWindow() ``` * Lua ```lua --This script will make a button show/hide the Mail Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideMailWindow() isShown = false else Space.UI.OpenMailWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenFeedbackWindow[​](#openfeedbackwindow "Direct link to OpenFeedbackWindow") void **OpenFeedbackWindow** () *Shows the Feedback window (white-label grid only)* * Lua ```lua Space.UI.OpenFeedbackWindow() ``` * Lua ```lua --This script will make a button show/hide the Feedback Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideFeedbackWindow() isShown = false else Space.UI.OpenFeedbackWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideFeedbackWindow[​](#hidefeedbackwindow "Direct link to HideFeedbackWindow") void **HideFeedbackWindow** () *Hides the Feedback window (white-label grid only)* * Lua ```lua Space.UI.HideFeedbackWindow() ``` * Lua ```lua --This script will make a button show/hide the Mail Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideFeedbackWindow() isShown = false else Space.UI.OpenFeedbackWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenBuyGoldWindow[​](#openbuygoldwindow "Direct link to OpenBuyGoldWindow") void **OpenBuyGoldWindow** () *Opens the Buy Gold window (white-label grid only)* * Lua ```lua Space.UI.OpenBuyGoldWindow() ``` * Lua ```lua --This script will make a button show/hide the Buy Gold Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideBuyGoldWindow() isShown = false else Space.UI.OpenBuyGoldWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideBuyGoldWindow[​](#hidebuygoldwindow "Direct link to HideBuyGoldWindow") void **HideBuyGoldWindow** () *Hides the Buy Gold window (white-label grid only)* * Lua ```lua Space.UI.HideBuyGoldWindow() ``` * Lua ```lua --This script will make a button show/hide the Buy Gold Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideBuyGoldWindow() isShown = false else Space.UI.OpenBuyGoldWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenChatWindow[​](#openchatwindow "Direct link to OpenChatWindow") void **OpenChatWindow** () *Opens the Chat window (white-label grid only)* * Lua ```lua Space.UI.OpenChatWindow() ``` * Lua ```lua --This script will make a button show/hide the Chat Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideChatWindow() isShown = false else Space.UI.OpenChatWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideChatWindow[​](#hidechatwindow "Direct link to HideChatWindow") void **HideChatWindow** () *Hides the Chat window (white-label grid only)* * Lua ```lua Space.UI.HideChatWindow() ``` * Lua ```lua --This script will make a button show/hide the Chat Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = true OnClick = function() if isShown then Space.UI.HideChatWindow() isShown = false else Space.UI.OpenChatWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenRoomEditorWindow[​](#openroomeditorwindow "Direct link to OpenRoomEditorWindow") void **OpenRoomEditorWindow** () *Opens the Room Editor window (white-label grid only)* * Lua ```lua Space.UI.OpenRoomEditorWindow() ``` * Lua ```lua --This script will make a button show/hide the Room Editor Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideRoomEditorWindow() isShown = false else Space.UI.OpenRoomEditorWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### HideRoomEditorWindow[​](#hideroomeditorwindow "Direct link to HideRoomEditorWindow") void **HideRoomEditorWindow** () *Hides the Room Editor window (white-label grid only)* * Lua ```lua Space.UI.HideRoomEditorWindow() ``` * Lua ```lua --This script will make a button show/hide the Room Editor Window --(example: tools for user to customize UI) --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') local isShown = false OnClick = function() if isShown then Space.UI.HideRoomEditorWindow() isShown = false else Space.UI.OpenRoomEditorWindow() isShown = true end end theButton.UIButton.OnClick(OnClick) ``` ##### OpenDevicePicker[​](#opendevicepicker "Direct link to OpenDevicePicker") void **OpenDevicePicker** () *Opens the Device Picker* * Lua ```lua Space.UI.OpenDevicePicker() ``` * Lua ```lua --This script will make a button open the Device Picker --[You need to add a UI Button as a reference in the Scripting Runtime Component] theButton = Space.Host.GetReference('TheButton') OnClick = function() Space.UI.OpenDevicePicker() end theButton.UIButton.OnClick(OnClick) ``` ##### OpenDeviceTester[​](#opendevicetester "Direct link to OpenDeviceTester") void **OpenDeviceTester** () *Opens the Device Tester* * Lua ```lua Space.UI.OpenDeviceTester() ``` ##### Raycast[​](#raycast "Direct link to Raycast") SUIRaycastResult **Raycast** () *Shoots a UI Raycast and returns the result as SUIRayCastResult* * Lua ```lua RayCastResult = Space.UI.Raycast() ``` * Lua ```lua --This script will update a UIText element with the result of a UIRaycast whenever... --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.ToString() end end end thisObject.OnUpdate(OnUpdate) ``` #### Properties[​](#properties "Direct link to Properties") ##### ShowUI[​](#showui "Direct link to ShowUI") bool **ShowUI** `get` `set` *Show the User Interface* * Lua ```lua Space.UI.ShowUI = false ``` * Lua ```lua --This script will make a UI Toggle show/hide theUser Interface --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowUI= true else Space.UI.ShowUI= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowWorldUI[​](#showworldui "Direct link to ShowWorldUI") bool **ShowWorldUI** `get` `set` *Show the World User Interface.* * Lua ```lua Space.UI.ShowWorldUI = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the World UI --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowWorldUI= true else Space.UI.ShowWorldUI= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### MusicVolume[​](#musicvolume "Direct link to MusicVolume") int **MusicVolume** `get` `set` *Set/Get the Music volume (set: white-label grid only)* * Lua ```lua MusicVolume = Space.UI.MusicVolume ``` * Lua ```lua --This script will make moving a slider control the Music Volume --and also update a text field with the current Music Volume --(example: custom UI) --[You need to add the slider and text field as a reference] slider = Space.Host.GetReference("Slider").UISlider textField = Space.Host.GetReference("Text Field").UIText OnValueChanged = function() Space.UI.MusicVolume = slider.NormalizedValue * 100 textField.Text = Space.UI.MusicVolume end slider.OnValueChanged(OnValueChanged) ``` ##### MasterVolume[​](#mastervolume "Direct link to MasterVolume") int **MasterVolume** `get` `set` *Set/Get the Master volume (set: white-label grid only)* * Lua ```lua MasterVolume = Space.UI.MasterVolume ``` * Lua ```lua --This script will make moving a slider control the Master Volume --and also update a text field with the current Master Volume --(example: custom UI) --[You need to add the slider and text field as a reference] slider = Space.Host.GetReference("Slider").UISlider textField = Space.Host.GetReference("Text Field").UIText OnValueChanged = function() Space.UI.MasterVolume = slider.NormalizedValue * 100 textField.Text = Space.UI.MasterVolume end slider.OnValueChanged(OnValueChanged) ``` ##### SFXVolume[​](#sfxvolume "Direct link to SFXVolume") int **SFXVolume** `get` `set` *Set/Get the SFX volume (set: white-label grid only)* * Lua ```lua SFXVolume = Space.UI.SFXVolume ``` * Lua ```lua --This script will make moving a slider control the SFX Volume --and also update a text field with the current SFX Volume --(example: custom UI) --[You need to add the slider and text field as a reference] slider = Space.Host.GetReference("Slider").UISlider textField = Space.Host.GetReference("Text Field").UIText OnValueChanged = function() Space.UI.SFXVolume = slider.NormalizedValue * 100 textField.Text = Space.UI.SFXVolume end slider.OnValueChanged(OnValueChanged) ``` ##### UIVolume[​](#uivolume "Direct link to UIVolume") int **UIVolume** `get` `set` *Set/Get the UI volume (set: white-label grid only)* * Lua ```lua UIVolume = Space.UI.UIVolume ``` * Lua ```lua --This script will make moving a slider control the UI Volume --and also update a text field with the current UI Volume --[You need to add the slider and text field as a reference] slider = Space.Host.GetReference("Slider").UISlider textField = Space.Host.GetReference("Text Field").UIText OnValueChanged = function() Space.UI.UIVolume = slider.NormalizedValue * 100 textField.Text = Space.UI.UIVolume end slider.OnValueChanged(OnValueChanged) ``` ##### VOIPVolume[​](#voipvolume "Direct link to VOIPVolume") int **VOIPVolume** `get` `set` *Set/Get the VOIP volume (set: white-label grid only)* * Lua ```lua VOIPVolume = Space.UI.VOIPVolume ``` * Lua ```lua --This script will make moving a slider control the Voice Volume --and also update a text field with the current Voice Volume --[You need to add the slider and text field as a reference] slider = Space.Host.GetReference("Slider").UISlider textField = Space.Host.GetReference("Text Field").UIText OnValueChanged = function() Space.UI.VOIPVolume = slider.NormalizedValue * 100 textField.Text = Space.UI.VOIPVolume end slider.OnValueChanged(OnValueChanged) ``` ##### ShowFriendsButton[​](#showfriendsbutton "Direct link to ShowFriendsButton") bool **ShowFriendsButton** `get` `set` *Show the Friends button. *(white-label grid only)** * Lua ```lua Space.UI.ShowFriendsButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Friends Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowFriendsButton = true else Space.UI.ShowFriendsButton = false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowExploreButton[​](#showexplorebutton "Direct link to ShowExploreButton") bool **ShowExploreButton** `get` `set` *Show the Explore button. *(white-label grid only)** * Lua ```lua Space.UI.ShowExploreButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Explore Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowExploreButton = true else Space.UI.ShowExploreButton = false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowQuestsButton[​](#showquestsbutton "Direct link to ShowQuestsButton") bool **ShowQuestsButton** `get` `set` *Show the Quests button. *(white-label grid only)** * Lua ```lua Space.UI.ShowQuestsButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Quests button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowQuestsButton= true else Space.UI.ShowQuestsButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowInventoryButton[​](#showinventorybutton "Direct link to ShowInventoryButton") bool **ShowInventoryButton** `get` `set` *Show the Inventory button. *(white-label grid only)** * Lua ```lua Space.UI.ShowInventoryButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Inventory Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowInventoryButton= true else Space.UI.ShowInventoryButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowOutfitButton[​](#showoutfitbutton "Direct link to ShowOutfitButton") bool **ShowOutfitButton** `get` `set` *Set to true to show the Outfit button. *(white-label grid only)** * Lua ```lua Space.UI.ShowOutfitButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Outfit Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowOutfitButton= true else Space.UI.ShowOutfitButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowShopButton[​](#showshopbutton "Direct link to ShowShopButton") bool **ShowShopButton** `get` `set` *Show the Shop button. *(white-label grid only)** * Lua ```lua Space.UI.ShowShopButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Shop Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowShopButton= true else Space.UI.ShowShopButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowAuctionButton[​](#showauctionbutton "Direct link to ShowAuctionButton") bool **ShowAuctionButton** `get` `set` *Show the Auction button. *(white-label grid only)** * Lua ```lua Space.UI.ShowAuctionButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Auction Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowAuctionButton = true else Space.UI.ShowAuctionButton = false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowSnapshotButton[​](#showsnapshotbutton "Direct link to ShowSnapshotButton") bool **ShowSnapshotButton** `get` `set` *Show the Snapshot button.*(white-label grid only)\*\* * Lua ```lua Space.UI.ShowSnapshotButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Snapshot Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowSnapshotButton= true else Space.UI.ShowSnapshotButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowHelpButton[​](#showhelpbutton "Direct link to ShowHelpButton") bool **ShowHelpButton** `get` `set` *Show the Help button. *(white-label grid only)** * Lua ```lua Space.UI.ShowHelpButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Help Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowHelpButton= true else Space.UI.ShowHelpButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowCurrencyButton[​](#showcurrencybutton "Direct link to ShowCurrencyButton") bool **ShowCurrencyButton** `get` `set` *Show the Currency button. *(white-label grid only)** * Lua ```lua Space.UI.ShowCurrencyButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Currency Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowCurrencyButton= true else Space.UI.ShowCurrencyButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowGoldAndBuyButton[​](#showgoldandbuybutton "Direct link to ShowGoldAndBuyButton") bool **ShowGoldAndBuyButton** `get` `set` *Show the Gold and Buy button. *(white-label grid only)** * Lua ```lua Space.UI.ShowGoldAndBuyButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Gold and Buy button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowGoldAndBuyButton= true else Space.UI.ShowGoldAndBuyButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowChat[​](#showchat "Direct link to ShowChat") bool **ShowChat** `get` `set` *Show the Chat. *(white-label grid only)** * Lua ```lua Space.UI.ShowChat = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Chat --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowChat= true else Space.UI.ShowChat= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowMiniMap[​](#showminimap "Direct link to ShowMiniMap") bool **ShowMiniMap** `get` `set` *Set to true to show the Minimap. *(white-label grid only)** * Lua ```lua Space.UI.ShowMiniMap = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Minimap --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowMiniMap= true else Space.UI.ShowMiniMap= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowHotBar[​](#showhotbar "Direct link to ShowHotBar") bool **ShowHotBar** `get` `set` *Show the Hot Bar. *(white-label grid only)** * Lua ```lua Space.UI.ShowHotBar = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Hot Bar --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowHotBar= true else Space.UI.ShowHotBar= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowEventsButton[​](#showeventsbutton "Direct link to ShowEventsButton") bool **ShowEventsButton** `get` `set` *Show the Events button. *(white-label grid only)** * Lua ```lua Space.UI.ShowEventsButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Events button --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowEventsButton= true else Space.UI.ShowEventsButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowHomeButton[​](#showhomebutton "Direct link to ShowHomeButton") bool **ShowHomeButton** `get` `set` *Show the Home button. *(white-label grid only)** * Lua ```lua Space.UI.ShowHomeButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Home Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowHomeButton= true else Space.UI.ShowHomeButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowActivityPanel[​](#showactivitypanel "Direct link to ShowActivityPanel") bool **ShowActivityPanel** `get` `set` *Show the Activity Panel. *(white-label grid only)** * Lua ```lua Space.UI.ShowActivityPanel = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Activity Panel --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowActivityPanel= true else Space.UI.ShowActivityPanel= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowProfileImage[​](#showprofileimage "Direct link to ShowProfileImage") bool **ShowProfileImage** `get` `set` *Show the Profile Image. *(white-label grid only)** * Lua ```lua Space.UI.ShowProfileImage = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Profile Image --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowProfileImage= true else Space.UI.ShowProfileImage= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowRightButtonGroup[​](#showrightbuttongroup "Direct link to ShowRightButtonGroup") bool **ShowRightButtonGroup** `get` `set` *Show the Right Button Group. *(white-label grid only)** * Lua ```lua Space.UI.ShowRightButtonGroup = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Right Button Group --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowRightButtonGroup= true else Space.UI.ShowRightButtonGroup= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowRoomInfoOption[​](#showroominfooption "Direct link to ShowRoomInfoOption") bool **ShowRoomInfoOption** `get` `set` *Show the Room Info Option. *(white-label grid only)** * Lua ```lua Space.UI.ShowRoomInfoOption = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Room Info Option --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowRoomInfoOption= true else Space.UI.ShowRoomInfoOption= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowSearch[​](#showsearch "Direct link to ShowSearch") bool **ShowSearch** `get` `set` *Show the Search bar. *(white-label grid only)** * Lua ```lua Space.UI.ShowSearch = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Search Bar --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowSearch= true else Space.UI.ShowSearch= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowMailButton[​](#showmailbutton "Direct link to ShowMailButton") bool **ShowMailButton** `get` `set` *Show the Mail button. *(white-label grid only)** * Lua ```lua Space.UI.ShowMailButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Mail Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowMailButton = true else Space.UI.ShowMailButton = false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowNotificationButton[​](#shownotificationbutton "Direct link to ShowNotificationButton") bool **ShowNotificationButton** `get` `set` *Show the Notification button. *(white-label grid only)** * Lua ```lua Space.UI.ShowNotificationButton = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Notification Button --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowNotificationButton= true else Space.UI.ShowNotificationButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### ShowClock[​](#showclock "Direct link to ShowClock") bool **ShowClock** `get` `set` *Show the clock. *(white-label grid only)** * Lua ```lua Space.UI.ShowClock = false ``` * Lua ```lua --This script will make a UI Toggle show/hide the Clock --(example: tools for user to customize UI) --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowClock= true else Space.UI.ShowClock= false end end toggle.OnValueChanged(OnValueChanged) ``` --- ### Components Components are the behaviours attached to scene objects. This section covers the full set client scripts can read and control β€” rendering, physics, audio, animation, UI, and interaction components. --- ### SAnimation #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | SAnimationState [**GetState** ](sanimation#getstate)()SAnimationState [**GetState** ](sanimation#getstate)(string state) | | void [**Blend** ](/scripting/client-scripting-api-reference/components/sanimation.md#blend)(string animation, float targetWeight=1.0F, float fadeLength=0.3F) | | void [**CrossFade** ](/scripting/client-scripting-api-reference/components/sanimation.md#crossfade)(string animation, float fadeLength=0.3F) | | SAnimationState [**CrossFadeQueued** ](/scripting/client-scripting-api-reference/components/sanimation.md#crossfadequeued)(string animation, float fadeLength=0.3F, bool playNow=false) | | int [**GetClipCount** ](/scripting/client-scripting-api-reference/components/sanimation.md#getclipcount)() | | bool [**IsPlaying** ](/scripting/client-scripting-api-reference/components/sanimation.md#isplaying)(string animation) | | bool [**Play** ](sanimation#play)()bool [**Play** ](sanimation#play)(string animation) | | SAnimationState [**PlayQueued** ](/scripting/client-scripting-api-reference/components/sanimation.md#playqueued)(string animation, bool playNow=false) | | void [**Rewind** ](/scripting/client-scripting-api-reference/components/sanimation.md#rewind)(string animation) | | void [**Sample** ](/scripting/client-scripting-api-reference/components/sanimation.md#sample)() | | void [**Stop** ](sanimation#stop)()void [**Stop** ](sanimation#stop)(string animation) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------------ | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sanimation.md#enabled)`get` `set` | | IDictionary< string, SAnimationState > [**States** ](/scripting/client-scripting-api-reference/components/sanimation.md#states)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetState[​](#getstate "Direct link to GetState") [SAnimationState](/scripting/client-scripting-api-reference/types/sanimationstate.md) **GetState** ()
[SAnimationState](/scripting/client-scripting-api-reference/types/sanimationstate.md) **GetState** (string state) *Returns the SAnimationState for the default animation clip.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua State = Space.Host.ExecutingObject.Animation.GetState() State = Space.Host.ExecutingObject.Animation.GetState("statename") ``` ##### Blend[​](#blend "Direct link to Blend") void **Blend** (string animation, float targetWeight=1.0F, float fadeLength=0.3F) *Blends the animation named animation towards targetWeight over the next time seconds. Playback of other animations will not be affected.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animation.Blend("animationname",1.0,0.3) ``` ##### CrossFade[​](#crossfade "Direct link to CrossFade") void **CrossFade** (string animation, float fadeLength=0.3F) *Fades the animation with name animation in over a period of time seconds and fades other animations out.* *If mode is PlayMode.StopSameLayer, animations in the same layer as animation will be faded out while animation is faded in. if mode is PlayMode.StopAll, all animations will be faded out while animation is faded in.* *If the animation is not set to be looping it will be stopped and rewound after playing.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animation.CrossFade("animationname", 0.3) ``` ##### CrossFadeQueued[​](#crossfadequeued "Direct link to CrossFadeQueued") [SAnimationState](/scripting/client-scripting-api-reference/types/sanimationstate.md) **CrossFadeQueued** (string animation, float fadeLength=0.3F, bool playNow=false) *Returns a duplicated SAnimationState. This duplicate will self-destruct after it is finished playing. Referencing it after it has completed will result in an error.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua NewSAnimationState = Space.Host.ExecutingObject.Animation.CrossFadeQueued("animationname", 0.3, false) ``` ##### GetClipCount[​](#getclipcount "Direct link to GetClipCount") int **GetClipCount** () *Get the number of clips currently assigned to this animation.* * Lua ```lua NumberOfClips = Space.Host.ExecutingObject.Animation.GetClipCount() ``` ##### IsPlaying[​](#isplaying "Direct link to IsPlaying") bool **IsPlaying** (string animation) *Is the animation named name playing?* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua IsPlaying = Space.Host.ExecutingObject.Animation.IsPlaying("animationname") ``` ##### Play[​](#play "Direct link to Play") bool **Play** () bool **Play** (string animation) *Plays an animation without any blending.* *If no name is supplied then the default animation will be played. In cases where the animation can't be played (ie, there is no default animation or no animation with the specified name), the function will return false.* *The optional playMode lets you choose how this animation will affect others already playing.* *If the specified animation is already playing then other animations will be stopped but the animation will not rewind to the beginning.* *When the end of the animation is reached it will automatically be stopped and rewound to the start unless the PlayMode is set to Loop.* *Note that if you call Animation.Play on an object during a frame update where the object is also deactivated then the call will effectively be cancelled; the animation will not start playing when the object is later reactivated. However, if you make the call on a subsequent frame (ie, while the object is still inactive) then the animation will start playing after reactivation.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animation.Play() Space.Host.ExecutingObject.Animation.Play("animationname") ``` ##### PlayQueued[​](#playqueued "Direct link to PlayQueued") [SAnimationState](/scripting/client-scripting-api-reference/types/sanimationstate.md) **PlayQueued** (string animation, bool playNow=false) *Returns a duplicated SAnimationState. This duplicate will self-destruct after it is finished playing. Referencing it after it has completed will result in an error.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animation.PlayQueued("animationname","false") ``` ##### Rewind[​](#rewind "Direct link to Rewind") void **Rewind** (string animation) *Rewinds the animation named name.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animation.Rewind() ``` ##### Sample[​](#sample "Direct link to Sample") void **Sample** () *Samples animations at the current state.* *This is useful when you explicitly want to set up some animation state, and sample it once.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animation.Sample() ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** ()
void **Stop** (string animation) *Stops all playing animations that were started with this Animation.* *Stopping an animation also Rewinds it to the Start.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animation.Stop() Space.Host.ExecutingObject.Animation.Stop("animationname") ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` Whether this component is enabled or not. * Lua ```lua Space.Host.ExecutingObject.Animation.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Animation component thisGameObject = Space.Host.ExecutingObject animation = thisGameObject.Animation OnClick = function() animation.Enabled = not animation.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### States[​](#states "Direct link to States") IDictionary< string, [SAnimationState](/scripting/client-scripting-api-reference/types/sanimationstate.md) > **States** `get` *Returns a table of* [*SAnimationState*](/scripting/client-scripting-api-reference/types/sanimationstate.md) *names and references* * Lua ```lua States = Space.Host.ExecutingObject.Animation.States ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Animation.GameObject ``` --- ### SAnimator #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Rebind** ](/scripting/client-scripting-api-reference/components/sanimator.md#rebind)() | | void [**Stop** ](/scripting/client-scripting-api-reference/components/sanimator.md#stop)() | | void [**SetTime** ](/scripting/client-scripting-api-reference/components/sanimator.md#settime)(double time) | | double [**GetTime** ](/scripting/client-scripting-api-reference/components/sanimator.md#gettime)() | | double [**GetNormalizedTime** ](/scripting/client-scripting-api-reference/components/sanimator.md#getnormalizedtime)(int layer=0) | | double [**GetLength** ](/scripting/client-scripting-api-reference/components/sanimator.md#getlength)(int layer=0) | | bool [**GetLoop** ](/scripting/client-scripting-api-reference/components/sanimator.md#getloop)(int layer=0) | | float [**GetFloat** ](sanimator#getfloat)(string name)float [**GetFloat** ](sanimator#getfloat)(int id) | | bool [**GetBool** ](sanimator#getbool)(string name)bool [**GetBool** ](sanimator#getbool)(int id) | | int [**GetInteger** ](sanimator#getinteger)(string name)int [**GetInteger** ](sanimator#getinteger)(int id) | | void [**ResetTrigger** ](sanimator#resettrigger)(string name)void [**ResetTrigger** ](sanimator#resettrigger)(int id) | | bool [**IsParameterControlledByCurve** ](sanimator#isparametercontrolledbycurve)(string name)bool [**IsParameterControlledByCurve** ](sanimator#isparametercontrolledbycurve)(int id) | | string [**GetLayerName** ](/scripting/client-scripting-api-reference/components/sanimator.md#getlayername)(int layerIndex) | | int [**GetLayerIndex** ](/scripting/client-scripting-api-reference/components/sanimator.md#getlayerindex)(string layerName) | | float [**GetLayerWeight** ](/scripting/client-scripting-api-reference/components/sanimator.md#getlayerweight)(int layerIndex) | | void [**SetLayerWeight** ](/scripting/client-scripting-api-reference/components/sanimator.md#setlayerweight)(int layerIndex, float weight) | | bool [**IsInTransition** ](/scripting/client-scripting-api-reference/components/sanimator.md#isintransition)(int layerIndex) | | void [**CrossFadeInFixedTime** ](sanimator#crossfadeinfixedtime)(string stateName, float transitionDuration, int layer)void [**CrossFadeInFixedTime** ](sanimator#crossfadeinfixedtime)(string stateName, float transitionDuration)void [**CrossFadeInFixedTime** ](sanimator#crossfadeinfixedtime)(string stateName, float transitionDuration, int layer, float fixedTime) | | void [**CrossFade** ](sanimator#crossfade)(string stateName, float transitionDuration, int layer)void [**CrossFade** ](sanimator#crossfade)(string stateName, float transitionDuration)void [**CrossFade** ](sanimator#crossfade)(string stateName, float transitionDuration, int layer, float normalizedTime) | | void [**PlayInFixedTime** ](sanimator#playinfixedtime)(string stateName, int layer)void [**PlayInFixedTime** ](sanimator#playinfixedtime)(string stateName)void [**PlayInFixedTime** ](sanimator#playinfixedtime)(string stateName, int layer, float fixedTime) | | void [**Play** ](sanimator#play)(string stateName, int layer)void [**Play** ](sanimator#play)(string stateName)void [**Play** ](sanimator#play)(string stateName, int layer, float normalizedTime) | | void [**StartPlayback** ](/scripting/client-scripting-api-reference/components/sanimator.md#startplayback)() | | void [**StopPlayback** ](/scripting/client-scripting-api-reference/components/sanimator.md#stopplayback)() | | void [**StartRecording** ](/scripting/client-scripting-api-reference/components/sanimator.md#startrecording)() | | void [**StopRecording** ](/scripting/client-scripting-api-reference/components/sanimator.md#stoprecording)() | | void [**Update** ](/scripting/client-scripting-api-reference/components/sanimator.md#update)(float deltaTime) | | void [**SetTrigger** ](sanimator#settrigger)(string trigger)void [**SetTrigger** ](sanimator#settrigger)(int id) | | void [**SetFloat** ](sanimator#setfloat)(string name, float value, float dampTime, float deltaTime)void [**SetFloat** ](sanimator#setfloat)(int id, float value)void [**SetFloat** ](sanimator#setfloat)(int id, float value, float dampTime, float deltaTime)void [**SetFloat** ](sanimator#setfloat)(string name, float value) | | void [**SetBool** ](sanimator#setbool)(int id, bool value)void [**SetBool** ](sanimator#setbool)(string name, bool value) | | void [**SetInteger** ](sanimator#setinteger)(string name, int value)void [**SetInteger** ](sanimator#setinteger)(int id, int value) | | int [**StringToHash** ](/scripting/client-scripting-api-reference/components/sanimator.md#stringtohash)(string name) | | SAnimatorStateInfo [**GetCurrentAnimatorStateInfo** ](/scripting/client-scripting-api-reference/components/sanimator.md#getcurrentanimatorstateinfo)(int Layerindex) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------- | | SResource [**Controller** ](/scripting/client-scripting-api-reference/components/sanimator.md#controller)`get` `set` | | SResource [**Avatar** ](/scripting/client-scripting-api-reference/components/sanimator.md#avatar)`get` `set` | | bool [**ApplyRootMotion** ](/scripting/client-scripting-api-reference/components/sanimator.md#applyrootmotion)`get` `set` | | float [**PlaybackTime** ](/scripting/client-scripting-api-reference/components/sanimator.md#playbacktime)`get` `set` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sanimator.md#enabled)`get` `set` | | string\[] [**Parameters** ](/scripting/client-scripting-api-reference/components/sanimator.md#parameters)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Rebind[​](#rebind "Direct link to Rebind") void **Rebind** () *Rebind all the animated properties and mesh data with the Animator.* * Lua ```lua Space.Host.ExecutingObject.Animator.Rebind() ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** () *Stop the Animator.* * Lua ```lua Space.Host.ExecutingObject.Animator.Stop() ``` ##### SetTime[​](#settime "Direct link to SetTime") void **SetTime** (double time) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.SetTime(1.0) ``` ##### GetTime[​](#gettime "Direct link to GetTime") double **GetTime** () *Function Description* * Lua ```lua layerStateTime = Space.Host.ExecutingObject.Animator.GetTime(0) ``` ##### GetNormalizedTime[​](#getnormalizedtime "Direct link to GetNormalizedTime") double **GetNormalizedTime** (int layer=0) *Normalized time of the State. The integer part is the number of time a state has been looped. The fractional part is the % (0-1) of progress in the current loop.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua layerStateNormalizedTime = Space.Host.ExecutingObject.Animator.GetNormalizedTime(0) ``` ##### GetLength[​](#getlength "Direct link to GetLength") double **GetLength** (int layer=0) *Current duration of the state.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua layerStateLength = Space.Host.ExecutingObject.Animator.GetLength(1) ``` ##### GetLoop[​](#getloop "Direct link to GetLoop") bool **GetLoop** (int layer=0) *Is the state looping.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua layerStateLoop = Space.Host.ExecutingObject.Animator.GetLoop(0) ``` ##### GetFloat[​](#getfloat "Direct link to GetFloat") float **GetFloat** (string name)
float **GetFloat** (int id) *Returns the value of the given float parameter. name: The name of the parameter.* *id: The id of the parameter.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua getParam = Space.Host.ExecutingObject.Animator.GetFloat("paramName") -- or paramID = Space.Host.ExecutingObject.Animator.StringToHash("paramName") getParam = Space.Host.ExecutingObject.Animator.GetFloat(paramID) ``` * Lua ```lua --clicking the object will toggle it's Animator's "flySpeed" float parameter between 0.0 and 5.0 thisObject = Space.Host.ExecutingObject OnClick = function() if thisObject.Animator.GetFloat("flySpeed") == 0.0 then thisObject.Animator.SetFloat("flySpeed", 5.0) else thisObject.Animator.SetFloat("flySpeed", 0.0) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` * Lua ```lua --clicking the object will toggle it's Animator's "flySpeed" float parameter between 0.0 and 5.0 --this script uses parameter ID instead of string (StringToHash function gets the ID) thisObject = Space.Host.ExecutingObject paramID = thisObject.Animator.StringToHash("flySpeed") OnClick = function() if thisObject.Animator.GetFloat(paramID) == 0.0 then thisObject.Animator.SetFloat(paramID, 5.0) else thisObject.Animator.SetFloat(paramID, 0.0) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GetBool[​](#getbool "Direct link to GetBool") bool **GetBool** (string name)
bool **GetBool** (int id) *Returns the value of the given boolean parameter. name: The name of the parameter.* *id: The id of the parameter.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isFlying = Space.Host.ExecutingObject.Animator.GetBool("IsFlying") --or ID = Space.Host.ExecutingObject.Animator.StringToHash("isFlying") isFlying = Space.Host.ExecutingObject.Animator.GetBool(ID) ``` * Lua ```lua --clicking the object will toggle it's "isFlying" bool parameter between true and false thisObject = Space.Host.ExecutingObject OnClick = function() if thisObject.Animator.GetBool("isFlying") == true then thisObject.Animator.SetBool("isFlying", false) else thisObject.Animator.SetBool("isFlying", true) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` * Lua ```lua --clicking the object will toggle it's "isFlying" bool parameter between true and false --this script uses parameter ID instead of string (StringToHash function gets the ID) thisObject = Space.Host.ExecutingObject OnClick = function() parameterID = thisObject.Animator.StringToHash("isFlying") if thisObject.Animator.GetBool(parameterID) == true then thisObject.Animator.SetBool(parameterID, false) else thisObject.Animator.SetBool(parameterID, true) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GetInteger[​](#getinteger "Direct link to GetInteger") int **GetInteger** (string name) int **GetInteger** (int id) *Returns the value of the given integer parameter. name: The name of the parameter.* *id: The id of the parameter.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua getParam = Space.Host.ExecutingObject.Animator.GetInteger("paramName") --or paramID = Space.Host.ExecutingObject.Animator.StringToHash("paramName") getParam = Space.Host.ExecutingObject.Animator.GetInteger(paramID) ``` * Lua ```lua --clicking the object will toggle it's Animator's "jumpHeight" int parameter between 0 and 5 thisObject = Space.Host.ExecutingObject OnClick = function() if thisObject.Animator.GetInteger("jumpHeight") == 0 then thisObject.Animator.SetInteger("jumpHeight", 1) else thisObject.Animator.SetInteger("jumpHeight", 0) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` * Lua ```lua --clicking the object will toggle it's Animator's "jumpHeight" int parameter between 0 and 5 --this script uses parameter ID instead of string (StringToHash function gets the ID) thisObject = Space.Host.ExecutingObject paramID = thisObject.Animator.StringToHash("jumpHeight") OnClick = function() if thisObject.Animator.GetInteger(paramID ) == 0 then thisObject.Animator.SetInteger(paramID , 1) else thisObject.Animator.SetInteger(paramID , 0) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### ResetTrigger[​](#resettrigger "Direct link to ResetTrigger") void **ResetTrigger** (string name) void **ResetTrigger** (int id) *Resets the trigger parameter to false.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.ResetTrigger("parameterName") --or paramID = Space.Host.ExecutingObject.Animator.StringToHash("parameterName") Space.Host.ExecutingObject.Animator.ResetTrigger(paramID) ``` * Lua ```lua -- when object is clicked, "clickedTrigger" trigger parameter will be set and initial trigger cleared thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.Animator.ResetTrigger("initialTrigger") thisObject.Animator.SetTrigger("clickedTrigger") end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` * Lua ```lua -- when object is clicked, "clickedTrigger" trigger parameter will be set and initial trigger cleared thisObject = Space.Host.ExecutingObject initialID = thisObject.Animator.StringToHash("initialTrigger") clickedID = thisObject.Animator.StringToHash("clickedTrigger") OnClick = function() thisObject.Animator.ResetTrigger(initialID) thisObject.Animator.SetTrigger(clickedID) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### IsParameterControlledByCurve[​](#isparametercontrolledbycurve "Direct link to IsParameterControlledByCurve") bool **IsParameterControlledByCurve** (string name) bool **IsParameterControlledByCurve** (int id) *Returns true if a parameter is controlled by an additional curve on an animation.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua paramCurve = Space.Host.ExecutingObject.Animator.IsParameterControlledByCurve("parameterName") ``` ##### GetLayerName[​](#getlayername "Direct link to GetLayerName") string **GetLayerName** (int layerIndex) *Gets name of the layer.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua layerName = Space.Host.ExecutingObject.Animator.GetLayerName(1) ``` ##### GetLayerIndex[​](#getlayerindex "Direct link to GetLayerIndex") int **GetLayerIndex** (string layerName) *Gets the index of the layer with specified name.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua layerIndex = Space.Host.ExecutingObject.Animator.GetLayerIndex("Layer Name") ``` ##### GetLayerWeight[​](#getlayerweight "Direct link to GetLayerWeight") float **GetLayerWeight** (int layerIndex) *Gets the layer's current weight.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua layerIndex = Space.Host.ExecutingObject.Animator.GetLayerWeight("Layer Name") ``` ##### SetLayerWeight[​](#setlayerweight "Direct link to SetLayerWeight") void **SetLayerWeight** (int layerIndex, float weight) *Sets the weight of the layer at the given index.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.SetLayerWeight(0,2.0) ``` * Lua ```lua --clicking the object will toggle the Layer Weight of your second layer (index 1) between 0.0 and 1.0 thisObject = Space.Host.ExecutingObject OnClick = function() if thisObject.Animator.GetLayerWeight(1) == 0 then thisObject.Animator.SetLayerWeight(1, 1.0) else thisObject.Animator.SetLayerWeight(1, 0.0) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### IsInTransition[​](#isintransition "Direct link to IsInTransition") bool **IsInTransition** (int layerIndex) *Is the specified layer in a transition.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua layerTransition = Space.Host.ExecutingObject.Animator.IsInTransition(0) ``` ##### CrossFadeInFixedTime[​](#crossfadeinfixedtime "Direct link to CrossFadeInFixedTime") void **CrossFadeInFixedTime** (string stateName, float transitionDuration) void **CrossFadeInFixedTime** (string stateName, float transitionDuration, int layer) void **CrossFadeInFixedTime** (string stateName, float transitionDuration, int layer, float fixedTime) *Creates a dynamic transition between the current state and the destination state. The duration and offset in the target state are in fixed time. stateName: The name of the destination state. transitionDuration: The duration of the transition. Value is in seconds. layer: Layer index containing the destination state. If no layer is specified or layer is -1, the first state that is found with the given name or hash will be played. fixedTime: Start time of the current destination state. Value is in seconds. If no explicit fixedTime is specified or fixedTime value is float.NegativeInfinity, the state will either be played from the start if it's not already playing, or will continue playing from its current time and no transition will happen.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.CrossFadeInFixedTime("State Name", 15.0) Space.Host.ExecutingObject.Animator.CrossFadeInFixedTime("State Name", 15.0, 0) Space.Host.ExecutingObject.Animator.CrossFadeInFixedTime("State Name", 15.0, 0 , 0.0) ``` * Lua ```lua --clicking the object will make it's animator crossfade from current state to the middle of "Second State" (on the second layer) in 3 seconds thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.Animator.CrossFadeInFixedTime("Second State", 3.0, 1, 0.5) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### CrossFade[​](#crossfade "Direct link to CrossFade") void **CrossFade** (string stateName, float transitionDuration) void **CrossFade** (string stateName, float transitionDuration, int layer) void **CrossFade** (string stateName, float transitionDuration, int layer, float normalizedTime) *Creates a dynamic transition between the current state and the destination state. stateName: The name of the destination state. transitionDuration: The duration of the transition. Value is in source state normalized time. layer: Layer index containing the destination state. If no layer is specified or layer is -1, the first state that is found with the given name or hash will be played. normalizedTime: Start time of the current destination state. Value is in source state normalized time, should be between 0 and 1. If no explicit normalizedTime is specified or normalizedTime value is float.NegativeInfinity, the state will either be played from the start if it's not already playing, or will continue playing from its current time and no transition will happen.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | | | | | | | | | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.CrossFade("State Name", 3.0) Space.Host.ExecutingObject.Animator.CrossFade("State Name", 3.0, 0) Space.Host.ExecutingObject.Animator.CrossFade("State Name", 3.0, 0 , 0.0) ``` * Lua ```lua --clicking the object will make it's animator crossfade from current state to the middle of "Second State" (on the second layer) --Crossfade duration will be triple the length of Source state thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.Animator.CrossFade("Second State", 3.0, 1, 0.5) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### PlayInFixedTime[​](#playinfixedtime "Direct link to PlayInFixedTime") void **PlayInFixedTime** (string stateName, int layer) void **PlayInFixedTime** (string stateName) void **PlayInFixedTime** (string stateName, int layer, float fixedTime) *Plays a state. The offset in the target state is in fixed time. stateName: The name of the state to play. Layer index containing the destination state. If no layer is specified or layer is -1, the first state that is found with the given name or hash will be played.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.PlayInFixedTime("State Name") Space.Host.ExecutingObject.Animator.PlayInFixedTime("State Name", 0) Space.Host.ExecutingObject.Animator.PlayInFixedTime("State Name", 0, 0.0) ``` * Lua ```lua --clicking the object will make it's animator play the "Second State", on the second Layer, and starting half a second in thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.Animator.PlayInFixedTime("Second State",1,0.5) --add "Second State" to the second Layer in Animator Controller end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Play[​](#play "Direct link to Play") void **Play** (string stateName) void **Play** (string stateName, int layer) void **Play** (string stateName, int layer, float normalizedTime) *Plays a state.* | Parameter | Type | Description | | -------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | stateName | string | The name of the state to play. | | layer | int | Layer index containing the destination state. If no layer is specified or layer is -1, the first state that is found with the given name or hash will be played. | | normalizedTime | float | Start time of the current destination state. Value is in normalized time. If no explicit normalizedTime is specified or value is float.NegativeInfinity, the state will either be played from the start if it's not already playing, or will continue playing from its current time. | * Lua ```lua Space.Host.ExecutingObject.Animator.Play("Run") Space.Host.ExecutingObject.Animator.Play("Run", 0) Space.Host.ExecutingObject.Animator.Play("Run", 0, 0.5) ``` ##### StartPlayback[​](#startplayback "Direct link to StartPlayback") void **StartPlayback** () *Sets the animator in playback mode.* * Lua ```lua Space.Host.ExecutingObject.Animator.StartPlayback() ``` ##### StopPlayback[​](#stopplayback "Direct link to StopPlayback") void **StopPlayback** () *Stops the animator playback mode. When playback stops, the avatar resumes getting control from game logic.* * Lua ```lua Space.Host.ExecutingObject.Animator.StopPlayback() ``` ##### StartRecording[​](#startrecording "Direct link to StartRecording") void **StartRecording** () *Sets the animator in recording mode. The recording will continue until the user calls StopRecording. Maximum 10,000 frames. Note it is not possible to start playback until a call to StopRecording is made* * Lua ```lua Space.Host.ExecutingObject.Animator.StartRecording() ``` ##### StopRecording[​](#stoprecording "Direct link to StopRecording") void **StopRecording** () *Stops animator record mode.* * Lua ```lua Space.Host.ExecutingObject.Animator.StopRecording() ``` ##### Update[​](#update "Direct link to Update") void **Update** (float deltaTime) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.Update() ``` ##### SetTrigger[​](#settrigger "Direct link to SetTrigger") void **SetTrigger** (string trigger) void **SetTrigger** (int id) *Sets a trigger parameter to active. A trigger parameter is a bool parameter that gets reset to false when it has been used in a transition. For state machines with multiple layers, the trigger will only get reset once all layers have been evaluated, so that the layers can synchronize their transitions on the same parameter.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.SetTrigger("TheTriggerName") --or paramID = Space.Host.ExecutingObject.Animator.StringToHash("TheTriggerName") Space.Host.ExecutingObject.SetTrigger(paramID) ``` ##### SetFloat[​](#setfloat "Direct link to SetFloat") void **SetFloat** (string name, float value) void **SetFloat** (string name, float value, float dampTime, float deltaTime) void **SetFloat** (int id, float value) void **SetFloat** (int id, float value, float dampTime, float deltaTime) *Send float values to the Animator to affect transitions. dampTime: The damper total time. deltaTime: The delta time to give to the damper.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.SetFloat("parameterName", 2.2) --or Space.Host.ExecutingObject.Animator.SetFloat("parameterName", 2.2,2.0,Space.DeltaTime) --or paramID = Space.Host.ExecutingObject.Animator.StringToHash("parameterName") Space.Host.ExecutingObject.Animator.SetFloat(paramID, 2.2) --or paramID = Space.Host.ExecutingObject.Animator.StringToHash("parameterName") Space.Host.ExecutingObject.Animator.SetFloat(paramID, 2.2,2.0,Space.DeltaTime) ``` * Lua ```lua --clicking the object will make it's Animator damp transition it's "danceSpeed" property from 0.0 to 5.0 thisObject = Space.Host.ExecutingObject OnClick = function() Space.Host.StartCoroutine(function() while thisObject.Animator.GetFloat("danceSpeed") < 5.0 do thisObject.Animator.SetFloat("danceSpeed", 5.0, 1.0, Space.DeltaTime) coroutine.yield(0) end end) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### SetBool[​](#setbool "Direct link to SetBool") void **SetBool** (int id, bool value) void **SetBool** (string name, bool value) *Sets the value of a boolean parameter.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.SetBool("IsFlying", true) --or paramID = Space.Host.ExecutingObject.Animator.StringToHash("parameterName") Space.Host.ExecutingObject.Animator.SetFloat(paramID, 2.2) ``` * Lua ```lua --clicking the object will toggle it's "isFlying" bool parameter between true and false thisObject = Space.Host.ExecutingObject OnClick = function() if thisObject.Animator.GetBool("isFlying") == true then thisObject.Animator.SetBool("isFlying", false) else thisObject.Animator.SetBool("isFlying", true) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### SetInteger[​](#setinteger "Direct link to SetInteger") void **SetInteger** (string name, int value) void **SetInteger** (int id, int value) *Sets the value of the given integer parameter.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.SetInteger("iParam", 2) --or paramID = Space.Host.ExecutingObject.Animator.StringToHash("iParam") Space.Host.ExecutingObject.Animator.SetInteger(paramID, 2) ``` * Lua ```lua --clicking the object will toggle it's Animator's "jumpHeight" int parameter between 0 and 5 thisObject = Space.Host.ExecutingObject OnClick = function() if thisObject.Animator.GetInteger("jumpHeight") == 0 then thisObject.Animator.SetInteger("jumpHeight", 1) else thisObject.Animator.SetInteger("jumpHeight", 0) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### StringToHash[​](#stringtohash "Direct link to StringToHash") int **StringToHash** (string name) *Generates an parameter id from a string. Ids are used for optimized setters and getters on parameters.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua ID = Space.Host.ExecutingObject.Animator.StringToHash("isFlying") ``` * Lua ```lua --clicking the object will toggle it's "isFlying" bool parameter between true and false --this script uses parameter ID instead of string (StringToHash function gets the ID) thisObject = Space.Host.ExecutingObject OnClick = function() parameterID = thisObject.Animator.StringToHash("isFlying") if thisObject.Animator.GetBool(parameterID) == true then thisObject.Animator.SetBool(parameterID, false) else thisObject.Animator.SetBool(parameterID, true) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GetCurrentAnimatorStateInfo[​](#getcurrentanimatorstateinfo "Direct link to GetCurrentAnimatorStateInfo") [SAnimatorStateInfo](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md) **GetCurrentAnimatorStateInfo** (int Layerindex) *Returns an SAnimatorStateInfo with the information on the current state..* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) ``` #### Properties[​](#properties "Direct link to Properties") ##### Controller[​](#controller "Direct link to Controller") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Controller** `get` `set` *The Animator Controller resource of this Animator* * Lua ```lua Space.Host.ExecutingObject.Animator.Controller = Space.GetResource("newController") ``` ##### Avatar[​](#avatar "Direct link to Avatar") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Avatar** `get` `set` *Gets/Sets the current Avatar.* * Lua ```lua currentAvatar = thisObject.Animator.Avatar ``` * Lua ```lua -- when object is clicked, it's Animator's Avatar will be changed to an alternate one thisObject = Space.Host.ExecutingObject alternateAvatar = Space.GetResource("altavatar") -- add Avatar to Scripting Runtime resources section OnClick = function() thisObject.Animator.Avatar = alternateAvatar end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### ApplyRootMotion[​](#applyrootmotion "Direct link to ApplyRootMotion") bool **ApplyRootMotion** `get` `set` *Should root motion be applied?* *Root motion is the effect where an object's entire mesh moves away from its starting point but that motion is created by the animation itself rather than by changing the Transform position.* * Lua ```lua Space.Host.ExecutingObject.Animator.ApplyRootMotion = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Root Motion thisGameObject = Space.Host.ExecutingObject.Animator OnClick = function() animator.ApplyRootMotion = not animator.ApplyRootMotion end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### PlaybackTime[​](#playbacktime "Direct link to PlaybackTime") float **PlaybackTime** `get` `set` *Property Description* * Lua ```lua pace.Host.ExecutingObject.Animator.PlaybackTime = 0.5 ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the Animator component is enabled or not* * Lua ```lua Space.Host.ExecutingObject.Animator.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Animator component thisGameObject = Space.Host.ExecutingObject animator = thisGameObject.Animator OnClick = function() animator.Enabled = not animator.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Parameters[​](#parameters "Direct link to Parameters") string\[] **Parameters** `get` *The AnimatorControllerParameter list used by the animator.* * Lua ```lua parameters = Space.Host.ExecutingObject.Animator.Parameters for i=1,#parameters do Space.Log(parameters[i]) end --prints all parameters ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Animator.GameObject ``` --- ### SAudioReactiveAnimation #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/saudioreactiveanimation.md#enabled)`get` `set` | | [SAnimator](/scripting/client-scripting-api-reference/components/sanimator.md) [**Target** ](/scripting/client-scripting-api-reference/components/saudioreactiveanimation.md#target)`get` `set` | | string [**Parameter** ](/scripting/client-scripting-api-reference/components/saudioreactiveanimation.md#parameter)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Returns true if the Audio Reactive Animation Enabled.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveAnimation.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Audio Reactive Animation component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.AudioReactiveAnimation OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Target[​](#target "Direct link to Target") [SAnimator](/scripting/client-scripting-api-reference/components/sanimator.md) **Target** `get` `set` *The target Animator which the Audio Reactive Animation is affecting.* * Lua ```lua TargetAnimator = Space.Host.ExecutingObject.AudioReactiveAnimation.Target ``` * Lua ```lua --clicking this object toggles between two Audio Reactive Animation targets thisObject = Space.Host.ExecutingObject animator1 = Space.Host.GetReference("object1").Animator --add this reference to Scripting Runtime component animator2 = Space.Host.GetReference("object2").Animator --add this reference to Scripting Runtime component OnClick = function() if thisObject.AudioReactiveAnimation.Target == animator1 then thisObject.AudioReactiveAnimation.Target = animator2 else thisObject.AudioReactiveAnimation.Target = animator1 end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Parameter[​](#parameter "Direct link to Parameter") string **Parameter** `get` `set` *The Parameter value which the Audio Reactive Animation is affecting in the target Animator.* * Lua ```lua Space.Host.ExecutingObject.SAudioReactiveAnimation.Parameter = "param2" ``` * Lua ```lua --clicking this object toggles between two Audio Reactive Animation parameters thisObject = Space.Host.ExecutingObject parameter1 = "theParamName" parameter2 = "theParamName2" OnClick = function() if thisObject.AudioReactiveAnimation.Parameter == parameter1 then thisObject.AudioReactiveAnimation.Parameter = parameter2 else thisObject.AudioReactiveAnimation.Parameter = parameter1 end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.AudioReactiveAnimation.GameObject ``` --- ### SAudioReactiveBase #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#enabled)`get` `set` | | int [**BandMin** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#bandmin)`get` `set` | | int [**BandMax** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#bandmax)`get` `set` | | float [**BPMWindow** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#bpmwindow)`get` `set` | | float [**LimitIncrease** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#limitincrease)`get` `set` | | float [**LimitDecrease** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#limitdecrease)`get` `set` | | float [**MinValue** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#minvalue)`get` `set` | | float [**MaxValue** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#maxvalue)`get` `set` | | int [**Mode** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#mode)`get` `set` | | virtual float [**Power** ](/scripting/client-scripting-api-reference/components/saudioreactivebase.md#power)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the Audio Reactive component is enabled or not.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Audio Reactive Base component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.AudioReactive OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### BandMin[​](#bandmin "Direct link to BandMin") int **BandMin** `get` `set` *The Band Min property of an Audio Reactive component.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.BandMin= 1 ``` * Lua ```lua --the below script will make a slider change an Audio Reactive Component's Band Min property --[Add "theslider" and "theaudioreactive" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ar = Space.Host.GetReference("theaudioreactive").AudioReactive OVC = function() ar.BandMin = (slider.Value * 12.0) -- from 0 to 12 end slider.OnValueChanged(OVC) ``` ##### BandMax[​](#bandmax "Direct link to BandMax") int **BandMax** `get` `set` *The Band Max property of an Audio Reactive component.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.BandMax= 11 ``` * Lua ```lua --the below script will make a slider change an Audio Reactive Component's Band Max property --[Add "theslider" and "theaudioreactive" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ar = Space.Host.GetReference("theaudioreactive").AudioReactive OVC = function() ar.BandMax = (slider.Value * 12.0) -- from 0 to 12 end slider.OnValueChanged(OVC) ``` ##### BPMWindow[​](#bpmwindow "Direct link to BPMWindow") float **BPMWindow** `get` `set` *The BPM Window property of an Audio Reactive component.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.BPMWindow= 5 ``` * Lua ```lua --the below script will make a slider change an Audio Reactive Component's BPM Window property --[Add "theslider" and "theaudioreactive" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ar = Space.Host.GetReference("theaudioreactive").AudioReactive OVC = function() ar.BPMWindow = (slider.Value * 50) - 50 -- from -50 to 50 end slider.OnValueChanged(OVC) ``` ##### LimitIncrease[​](#limitincrease "Direct link to LimitIncrease") float **LimitIncrease** `get` `set` *The Limit Increase property of an Audio Reactive component.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.LimitIncrease= 1 ``` * Lua ```lua --the below script will make a slider change an Audio Reactive Component's Limit Increase property. --[Add "theslider" and "theaudioreactive" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ar = Space.Host.GetReference("theaudioreactive").AudioReactive OVC = function() ar.LimitIncrease= (slider.Value * 50) - 50 -- from -50 to 50 end slider.OnValueChanged(OVC) ``` ##### LimitDecrease[​](#limitdecrease "Direct link to LimitDecrease") float **LimitDecrease** `get` `set` *The Limit Decrease property of an Audio Reactive component.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.LimitDecrease= 3 ``` * Lua ```lua --the below script will make a slider change an Audio Reactive Component's Limit Decrease property. --[Add "theslider" and "theaudioreactive" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ar = Space.Host.GetReference("theaudioreactive").AudioReactive OVC = function() ar.LimitDecrease= (slider.Value * 50) - 50 -- from -50 to 50 end slider.OnValueChanged(OVC) ``` ##### MinValue[​](#minvalue "Direct link to MinValue") float **MinValue** `get` `set` *The Min Value property of an Audio Reactive component.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.MinValue= 1 ``` * Lua ```lua --the below script will make a slider change an Audio Reactive Component's Min Value property. --[Add "theslider" and "theaudioreactive" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ar = Space.Host.GetReference("theaudioreactive").AudioReactive OVC = function() ar.MinValue= (slider.Value * 50) - 50 -- from -50 to 50 end slider.OnValueChanged(OVC) ``` ##### MaxValue[​](#maxvalue "Direct link to MaxValue") float **MaxValue** `get` `set` *The Max Value property of an Audio Reactive component.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.MaxValue= 3 ``` * Lua ```lua --the below script will make a slider change an Audio Reactive Component's Max Value property. --[Add "theslider" and "theaudioreactive" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ar = Space.Host.GetReference("theaudioreactive").AudioReactive OVC = function() ar.MaxValue= (slider.Value * 50) - 50 -- from -50 to 50 end slider.OnValueChanged(OVC) ``` ##### Mode[​](#mode "Direct link to Mode") int **Mode** `get` `set` *The Mode property of an Audio Reactive component. Band is 0, and BMP is 1.* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.Mode= 1 ``` * Lua ```lua --clicking this object will toggle between it's two Audio Reactive Modes thisGameObject = Space.Host.ExecutingObject component = thisGameObject.AudioReactive OnClick = function() if component.Mode == 0 then component.Mode = 1 else component.Mode = 0 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Power[​](#power "Direct link to Power") float **Power** `get` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactive.Power = 1 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.AudioReactive.GameObject ``` --- ### SAudioReactiveLight #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------ | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#enabled)`get` `set` | | SLight [**Target** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#target)`get` `set` | | bool [**Range** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#range)`get` `set` | | float [**MinRange** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#minrange)`get` `set` | | float [**MaxRange** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#maxrange)`get` `set` | | bool [**AnimateColor** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#animatecolor)`get` `set` | | SColor [**MinColor** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#mincolor)`get` `set` | | SColor [**MaxColor** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#maxcolor)`get` `set` | | bool [**Intensity** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#intensity)`get` `set` | | float [**MinIntensity** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#minintensity)`get` `set` | | float [**MaxIntensity** ](/scripting/client-scripting-api-reference/components/saudioreactivelight.md#maxintensity)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Returns true if the Audio Reactive Light Enabled.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Audio Reactive Light component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.AudioReactiveLight OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Target[​](#target "Direct link to Target") SLight **Target** `get` `set` *Returns true if the light target Enabled.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.Target = false ``` * Lua ```lua --clicking the object will toggle between two different AudioReactiveLight targets --[Add "light1" and "light2" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject light1 = Space.Host.GetReference("light1").Light light2 = Space.Host.GetReference("light2").Light OnClick = function() if thisGameObject.AudioReactiveLight.Target == light1 then thisGameObject.AudioReactiveLight.Target = light2 else thisGameObject.AudioReactiveLight.Target = light1 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Range[​](#range "Direct link to Range") bool **Range** `get` `set` *Returns true if Range Enabled.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.Range = false ``` * Lua ```lua --the below script will make the object toggle it's AudioReactiveLight's Range property --[Add "arlight" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject arlight = Space.Host.GetReference("arlight").AudioReactiveLight OnClick = function() arlight.Range= not arlight.Range end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### MinRange[​](#minrange "Direct link to MinRange") float **MinRange** `get` `set` *Returns MinRange value of the Audio Reactive Light.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.MinRange = 0.5 ``` * Lua ```lua --the below script will make a slider set the Audio Reactive Light's MinRange --[Add "slider" and "arlight" references to the Scripting Runtime component] arlight = Space.Host.GetReference("arlight").AudioReactiveLight slider = Space.Host.GetReference("slider").UISlider OVC = function() arlight.MinRange = (slider.Value * 9) + 1 --(from 1 to 10) end slider.OnValueChanged(OVC) ``` ##### MaxRange[​](#maxrange "Direct link to MaxRange") float **MaxRange** `get` `set` *Returns MaxRange value of the Audio Reactive Light.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.MaxRange = 1 ``` * Lua ```lua --the below script will make a slider set the Audio Reactive Light's MaxRange --[Add "slider" and "arlight" references to the Scripting Runtime component] arlight = Space.Host.GetReference("arlight").AudioReactiveLight slider = Space.Host.GetReference("slider").UISlider OVC = function() arlight.MaxRange= (slider.Value * 10) + 10 --(from 10 to 20) end slider.OnValueChanged(OVC) ``` ##### AnimateColor[​](#animatecolor "Direct link to AnimateColor") bool **AnimateColor** `get` `set` *Returns true if AnimateColor Enabled.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.AnimateColor = false ``` * Lua ```lua --the below script will make the object Enable/Disable it's AudioReactiveLight's AnimateColor property --[Add "arlight" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject arlight = Space.Host.GetReference("arlight").AudioReactiveLight OnClick = function() arlight.AnimateColor = not arlight.AnimateColor end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### MinColor[​](#mincolor "Direct link to MinColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **MinColor** `get` `set` *Returns MinColor value of the Audio Reactive Light.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.MinColor = Color.Red ``` * Lua ```lua --clicking the object will open a color picker that changes AudioReactiveLight's MinColor --[Add "arlight" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject arlight = Space.Host.GetReference("arlight").AudioReactiveLight originalColor = nil OnChange = function(SColor) arlight.MinColor = SColor end OnSelect = function(SColor) arlight.MinColor = SColor end OnCancel = function() arlight.MinColor = originalColor end OnClick = function() originalColor = arlight.MinColor Space.Dialogues.ColorPicker("Pick a color","Ok", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### MaxColor[​](#maxcolor "Direct link to MaxColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **MaxColor** `get` `set` *Returns MaxColor value of the Audio Reactive Light.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.MaxColor = Color.Blue ``` * Lua ```lua --clicking the object will open a color picker that changes AudioReactiveLight's MaxColor --[Add "arlight" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject arlight = Space.Host.GetReference("arlight").AudioReactiveLight originalColor = nil OnChange = function(SColor) arlight.MaxColor= SColor end OnSelect = function(SColor) arlight.MaxColor= SColor end OnCancel = function() arlight.MaxColor= originalColor end OnClick = function() originalColor = arlight.MaxColor Space.Dialogues.ColorPicker("Pick a color","Ok", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Intensity[​](#intensity "Direct link to Intensity") bool **Intensity** `get` `set` *Returns true if Intensity Enabled.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.Intensity = false ``` * Lua ```lua --the below script will make the object Enable/Disable it's AudioReactiveLight's Intensity property --[Add "arlight" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject arlight = Space.Host.GetReference("arlight").AudioReactiveLight OnClick = function() arlight.Intensity = not arlight.Intensity end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### MinIntensity[​](#minintensity "Direct link to MinIntensity") float **MinIntensity** `get` `set` *Returns MinIntensity value of the Audio Reactive Light.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.MinIntensity = 0.2 ``` * Lua ```lua --the below script will make a slider set the Audio Reactive Light's MinIntensity --[Add "slider" and "arlight" references to the Scripting Runtime component] arlight = Space.Host.GetReference("arlight").AudioReactiveLight slider = Space.Host.GetReference("slider").UISlider OVC = function() arlight.MinIntensity= (slider.Value * 1) --(from 0 to 1) end slider.OnValueChanged(OVC) ``` ##### MaxIntensity[​](#maxintensity "Direct link to MaxIntensity") float **MaxIntensity** `get` `set` *Returns MaxIntensity value of the Audio Reactive Light.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveLight.MaxIntensity = 0.8 ``` * Lua ```lua --the below script will make a slider set the Audio Reactive Light's MaxIntensity --[Add "slider" and "arlight" references to the Scripting Runtime component] arlight = Space.Host.GetReference("arlight").AudioReactiveLight slider = Space.Host.GetReference("slider").UISlider OVC = function() arlight.MaxIntensity= (slider.Value * 2) + 1 --(from 1 to 3) end slider.OnValueChanged(OVC) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.AudioReactiveLight.GameObject ``` --- ### SAudioReactiveMaterial #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/saudioreactivematerial.md#enabled)`get` `set` | | SMaterial [**Target** ](/scripting/client-scripting-api-reference/components/saudioreactivematerial.md#target)`get` `set` | | SMaterial [**OriginalMaterial** ](/scripting/client-scripting-api-reference/components/saudioreactivematerial.md#originalmaterial)`get` `set` | | SMaterial [**TargetMaterial** ](/scripting/client-scripting-api-reference/components/saudioreactivematerial.md#targetmaterial)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Returns true if the Audio Reactive Material Enabled.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveMaterial.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Audio Reactive Material component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.AudioReactiveMaterial OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Target[​](#target "Direct link to Target") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **Target** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveMaterial.Target = AMaterial ``` ##### OriginalMaterial[​](#originalmaterial "Direct link to OriginalMaterial") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **OriginalMaterial** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveMaterial.OriginalMaterial = AMaterial ``` ##### TargetMaterial[​](#targetmaterial "Direct link to TargetMaterial") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **TargetMaterial** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveMaterial.TargetMaterial = AMaterial ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.AudioReactiveMaterial.GameObject ``` --- ### SAudioReactiveParticleSystem #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#enabled)`get` `set` | | SGameObject [**Target** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#target)`get` `set` | | bool [**Position** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#position)`get` `set` | | SVector [**MinPosition** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#minposition)`get` `set` | | SVector [**MaxPosition** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#maxposition)`get` `set` | | bool [**Rotation** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#rotation)`get` `set` | | SVector [**MinRotation** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#minrotation)`get` `set` | | SVector [**MaxRotation** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#maxrotation)`get` `set` | | bool [**Scale** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#scale)`get` `set` | | SVector [**MinScale** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#minscale)`get` `set` | | SVector [**MaxScale** ](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md#maxscale)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Audio Reactive Particle System component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.AudioReactiveParticleSystem OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Target[​](#target "Direct link to Target") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Target** `get` `set` *Property Description* * Lua ```lua targetGameObject = Space.Host.ExecutingObject.AudioReactiveParticleSystem.Target ``` ##### Position[​](#position "Direct link to Position") bool **Position** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.Position = true ``` ##### MinPosition[​](#minposition "Direct link to MinPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MinPosition** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.MinPosition = Vector.New(0,0,0) ``` ##### MaxPosition[​](#maxposition "Direct link to MaxPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MaxPosition** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.MaxPosition = Vector.New(10,10,10) ``` ##### Rotation[​](#rotation "Direct link to Rotation") bool **Rotation** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.Rotation = true ``` ##### MinRotation[​](#minrotation "Direct link to MinRotation") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MinRotation** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.MinRotation = Vector.New(0,0,0) ``` ##### MaxRotation[​](#maxrotation "Direct link to MaxRotation") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MaxRotation** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.MaxRotation = Vector.New(10,10,10) ``` ##### Scale[​](#scale "Direct link to Scale") bool **Scale** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.Scale = true ``` ##### MinScale[​](#minscale "Direct link to MinScale") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MinScale** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.MinScale = Vector.New(1,1,1) ``` ##### MaxScale[​](#maxscale "Direct link to MaxScale") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MaxScale** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveParticleSystem.MaxScale = Vector.New(1.2,1.2,1.2) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.AudioReactiveParticleSystem.GameObject ``` --- ### SAudioReactiveTransform #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#enabled)`get` `set` | | SGameObject [**Target** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#target)`get` `set` | | bool [**Position** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#position)`get` `set` | | SVector [**MinPosition** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#minposition)`get` `set` | | SVector [**MaxPosition** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#maxposition)`get` `set` | | bool [**Rotation** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#rotation)`get` `set` | | SVector [**MinRotation** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#minrotation)`get` `set` | | SVector [**MaxRotation** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#maxrotation)`get` `set` | | bool [**Scale** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#scale)`get` `set` | | SVector [**MinScale** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#minscale)`get` `set` | | SVector [**MaxScale** ](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md#maxscale)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the Audio Reactive Transform component is enabled or not.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.Enabled= false ``` * Lua ```lua --clicking this object will Enable/Disable it's Audio Reactive Transform component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.AudioReactiveTransform OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Target[​](#target "Direct link to Target") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Target** `get` `set` *The target GameObject which will be affected by the Audio Reactive Transform.* * Lua ```lua target = Space.Host.ExecutingObject.AudioReactiveTransform.Target ``` * Lua ```lua --clicking this object will toggle between two different Audio Reactive Transform targets thisObject = Space.Host.ExecutingObject target1 = Space.Host.GetReference("theTarget1") --add this reference to Scripting Runtime component target2 = Space.Host.GetReference("theTarget2") --add this reference to Scripting Runtime component function OnClickFunction() if thisObject.AudioReactiveTransform.Target == target1 then thisObject.AudioReactiveTransform.Target = target2 else thisObject.AudioReactiveTransform.Target = target1 end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Position[​](#position "Direct link to Position") bool **Position** `get` `set` *Whether or not the target's position will be affected by the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.Position = true ``` * Lua ```lua --clicking this object will toggle it's Audio Reactive Transform Position property thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.AudioReactiveTransform.Position = not thisObject.AudioReactiveTransform.Position end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### MinPosition[​](#minposition "Direct link to MinPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MinPosition** `get` `set` *Returns MinPosition value of the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.MinPosition = Vector.New(0,1,0) ``` ##### MaxPosition[​](#maxposition "Direct link to MaxPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MaxPosition** `get` `set` *Returns MaxPosition value of the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.MaxPosition = Vector.New(1,2,1) ``` ##### Rotation[​](#rotation "Direct link to Rotation") bool **Rotation** `get` `set` *Whether or not the target's rotation will be affected by the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.Rotation= true ``` * Lua ```lua --clicking this object will toggle it's Audio Reactive Transform Rotation property thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.AudioReactiveTransform.Rotation= not thisObject.AudioReactiveTransform.Rotation end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### MinRotation[​](#minrotation "Direct link to MinRotation") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MinRotation** `get` `set` *Returns MinRotation value of the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.MinRotation = Vector.New(0,30,0) ``` ##### MaxRotation[​](#maxrotation "Direct link to MaxRotation") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MaxRotation** `get` `set` *Returns MaxRotation value of the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.MinRotation = Vector.New(0,60,0) ``` ##### Scale[​](#scale "Direct link to Scale") bool **Scale** `get` `set` *Whether or not the target's scale will be affected by the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.Scale= true ``` * Lua ```lua --clicking this object will toggle it's Audio Reactive Transform Scale property thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.AudioReactiveTransform.Scale= not thisObject.AudioReactiveTransform.Scale end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### MinScale[​](#minscale "Direct link to MinScale") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MinScale** `get` `set` *Returns MinScale value of the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.MinScale = Vector.New(1,1,1) ``` ##### MaxScale[​](#maxscale "Direct link to MaxScale") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **MaxScale** `get` `set` *Returns MaxScale value of the Audio Reactive Transform.* * Lua ```lua Space.Host.ExecutingObject.AudioReactiveTransform.MaxScale = Vector.New(2,2,2) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.AudioReactiveTransform.GameObject ``` --- ### SAudioSource #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Play** ](/scripting/client-scripting-api-reference/components/saudiosource.md#play)() | | void [**Stop** ](/scripting/client-scripting-api-reference/components/saudiosource.md#stop)() | | void [**Pause** ](/scripting/client-scripting-api-reference/components/saudiosource.md#pause)() | | void [**UnPause** ](/scripting/client-scripting-api-reference/components/saudiosource.md#unpause)() | | void [**PlayOneShot** ](/scripting/client-scripting-api-reference/components/saudiosource.md#playoneshot)(SResource clip, float volume) | | void [**PlayClipAtPoint** ](/scripting/client-scripting-api-reference/components/saudiosource.md#playclipatpoint)(SResource clip, SVector position, float volume=1f) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/saudiosource.md#enabled)`get` `set` | | bool [**Loop** ](/scripting/client-scripting-api-reference/components/saudiosource.md#loop)`get` `set` | | float [**DopplerLevel** ](/scripting/client-scripting-api-reference/components/saudiosource.md#dopplerlevel)`get` `set` | | float [**Volume** ](/scripting/client-scripting-api-reference/components/saudiosource.md#volume)`get` `set` | | float [**Pitch** ](/scripting/client-scripting-api-reference/components/saudiosource.md#pitch)`get` `set` | | float [**Time** ](/scripting/client-scripting-api-reference/components/saudiosource.md#time)`get` `set` | | int [**TimeSamples** ](/scripting/client-scripting-api-reference/components/saudiosource.md#timesamples)`get` `set` | | float [**Length** ](/scripting/client-scripting-api-reference/components/saudiosource.md#length)`get` | | int [**Samples** ](/scripting/client-scripting-api-reference/components/saudiosource.md#samples)`get` | | bool [**IsPlaying** ](/scripting/client-scripting-api-reference/components/saudiosource.md#isplaying)`get` | | float [**PanStereo** ](/scripting/client-scripting-api-reference/components/saudiosource.md#panstereo)`get` `set` | | float [**SpatialBlend** ](/scripting/client-scripting-api-reference/components/saudiosource.md#spatialblend)`get` `set` | | bool [**Spatialize** ](/scripting/client-scripting-api-reference/components/saudiosource.md#spatialize)`get` `set` | | bool [**SpatializePostEffects** ](/scripting/client-scripting-api-reference/components/saudiosource.md#spatializeposteffects)`get` `set` | | float [**ReverbZoneMix** ](/scripting/client-scripting-api-reference/components/saudiosource.md#reverbzonemix)`get` `set` | | bool [**BypassEffects** ](/scripting/client-scripting-api-reference/components/saudiosource.md#bypasseffects)`get` `set` | | bool [**BypassListenerEffects** ](/scripting/client-scripting-api-reference/components/saudiosource.md#bypasslistenereffects)`get` `set` | | bool [**BypassReverbZones** ](/scripting/client-scripting-api-reference/components/saudiosource.md#bypassreverbzones)`get` `set` | | float [**Spread** ](/scripting/client-scripting-api-reference/components/saudiosource.md#spread)`get` `set` | | int [**Priority** ](/scripting/client-scripting-api-reference/components/saudiosource.md#priority)`get` `set` | | bool [**Mute** ](/scripting/client-scripting-api-reference/components/saudiosource.md#mute)`get` `set` | | float [**MinDistance** ](/scripting/client-scripting-api-reference/components/saudiosource.md#mindistance)`get` `set` | | float [**MaxDistance** ](/scripting/client-scripting-api-reference/components/saudiosource.md#maxdistance)`get` `set` | | SResource [**AudioClip** ](/scripting/client-scripting-api-reference/components/saudiosource.md#audioclip)`get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### Play[​](#play "Direct link to Play") void **Play** () *Starts playing the audio clip.* * Lua ```lua Space.Host.ExecutingObject.Audio.Play() ``` * Lua ```lua -- For example, we have a short chime that we want to play every time a new avatar joins the scene. hostObject = Space.Host.ExecutingObject function welcomeSound () hostObject.Audio.Play() end Space.Scene.OnPlayerJoin(welcomeSound) ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** () *Stops playing the audio clip.* * Lua ```lua Space.Host.ExecutingObject.Audio.Stop() ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function audioOnOff () if hostObject.Audio.IsPlaying then hostObject.Audio.Stop(); else hostObject.Audio.Play(); end Space.Log(hostObject.Audio.IsPlaying); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(audioOnOff); -- Now, we can make the sound play or stop playing just by clicking the object. ``` ##### Pause[​](#pause "Direct link to Pause") void **Pause** () *Pauses the audio clip.* * Lua ```lua Space.Host.ExecutingObject.Audio.Pause() ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function pauseOnOff () if hostObject.Audio.IsPlaying then hostObject.Audio.Pause(); else hostObject.Audio.UnPause(); end Space.Log(hostObject.Audio.IsPlaying); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(pauseOnOff); -- Now, every time an object is clicked, the sound clip is paused/unpaused ``` ##### UnPause[​](#unpause "Direct link to UnPause") void **UnPause** () *Pauses the audio clip.* * Lua ```lua Space.Host.ExecutingObject.Audio.UnPause() ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function pauseOnOff () if hostObject.Audio.IsPlaying then hostObject.Audio.Pause(); else hostObject.Audio.UnPause(); end Space.Log(hostObject.Audio.IsPlaying); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(pauseOnOff); -- Now, every time an object is clicked, the sound clip is paused/unpaused ``` ##### PlayOneShot[​](#playoneshot "Direct link to PlayOneShot") void **PlayOneShot** ([SResource](/scripting/client-scripting-api-reference/types/sresource.md) clip, float volume) *Plays the audio clip just ones at a desired volume.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Audio.PlayOneShot(AResource, 1.0) ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function playOnce () hostObject.Audio.PlayOneShot(Space.Resources[0],0.5); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(playOnce); -- Now, every time the object is clicked, a sound clip we have in Scripting Runtime Resources is played at half the volume. -- This happens regardless if the audio clip in the AudioClip property is playing or not. ``` ##### PlayClipAtPoint[​](#playclipatpoint "Direct link to PlayClipAtPoint") void **PlayClipAtPoint** ([SResource](/scripting/client-scripting-api-reference/types/sresource.md) clip,[ SVector](/scripting/client-scripting-api-reference/types/svector.md) position, float volume=1f) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Audio.PlayClipAtPoint(AResource, AVector) --or Space.Host.ExecutingObject.Audio.PlayClipAtPoint(AResource, AVector, 0.5) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is the Audio Source component enabled?* * Lua ```lua Space.Host.ExecutingObject.Audio.Enabled = false ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function audioOnOff () hostObject.Audio.Enabled = not hostObject.Audio.Enabled; Space.Log(hostObject.Audio.Enabled); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(audioOnOff); -- When the host object is clicked, the Audio Source component gets enabled, if it was disabled, -- or disabled, if it was enabled, and its new state is printed to the console. ``` ##### Loop[​](#loop "Direct link to Loop") bool **Loop** `get` `set` *Is looping of the sound clip enabled?* * Lua ```lua Space.Host.ExecutingObject.Audio.Loop = true ``` * Lua ```lua --the below script will make the object toggle it's Loop option OnClick --[Add "audio" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject audio = Space.Host.GetReference("audio").Audio OnClick = function() audio.Loop = not audio.Loop end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### DopplerLevel[​](#dopplerlevel "Direct link to DopplerLevel") float **DopplerLevel** `get` `set` *The Doppler level of the Audio Source. (See: Doppler Effect)* * Lua ```lua Space.Host.ExecutingObject.Audio.DopplerLevel = 0.5 ``` * Lua ```lua --the below script will make a slider change the Audio Source's Doppler Level --[Add "slider" and "audio" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.DopplerLevel = slider.Value * 5 --0 to 5 end slider.OnValueChanged(OVC) ``` ##### Volume[​](#volume "Direct link to Volume") float **Volume** `get` `set` *The Volume level of the Audio Source.* * Lua ```lua Space.Host.ExecutingObject.Audio.Volume = 0.5 ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; Space.Log(hostObject.Audio.Volume); -- 1 by default function audioVolumeDecr () if hostObject.Audio.Volume > 0 then hostObject.Audio.Volume = hostObject.Audio.Volume - 0.2; end Space.Log(hostObject.Audio.Volume); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(audioVolumeDecr); -- Now, every time we click this object, the Volume level is decreased by 0.2, until it reaches 0. ``` ##### Pitch[​](#pitch "Direct link to Pitch") float **Pitch** `get` `set` *The Pitch level for the Audio Source.* * Lua ```lua Space.Host.ExecutingObject.Audio.Pitch = 0.5 ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; Space.Log(hostObject.Audio.Pitch); -- 1 by default function audioPitchChange () if hostObject.Audio.Pitch < 3 then hostObject.Audio.Pitch = hostObject.Audio.Pitch + 0.5; end Space.Log(hostObject.Audio.Pitch); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(audioPitchChange); -- Now, every time we click this object, the Pitch level is increased by 0.5, until it reaches 3. ``` ##### Time[​](#time "Direct link to Time") float **Time** `get` `set` *Playback position in seconds.* * Lua ```lua Space.Host.ExecutingObject.Audio.Time = 10 ``` * Lua ```lua --the below script will make a slider set Audio Source's playback position (using seconds) --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.Time = slider.Value * audio.Length -- from 0 to Length of clip end slider.OnValueChanged(OVC) ``` ##### TimeSamples[​](#timesamples "Direct link to TimeSamples") int **TimeSamples** `get` `set` *Playback position in PCM samples.* * Lua ```lua Space.Host.ExecutingObject.Audio.TimeSamples = 5 ``` * Lua ```lua --the below script will make a slider set Audio Source's playback position (using PCM Samples) --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.TimeSamples = slider.Value * audio.Samples -- from 0 to number of samples end slider.OnValueChanged(OVC) ``` ##### Length[​](#length "Direct link to Length") float **Length** `get` *Return Audio Length.* * Lua ```lua AudioLength = Space.Host.ExecutingObject.Audio.Length ``` * Lua ```lua --the below script will make a slider set Audio Source's playback position (using seconds) --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.Time = slider.Value * audio.Length -- from 0 to Length of clip end slider.OnValueChanged(OVC) ``` ##### Samples[​](#samples "Direct link to Samples") int **Samples** `get` *Return Audio Samples.* * Lua ```lua numSamples = Space.Host.ExecutingObject.Audio.Samples ``` * Lua ```lua --the below script will make a slider set Audio Source's playback position (using PCM Samples) --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.TimeSamples = slider.Value * audio.Samples -- from 0 to number of samples end slider.OnValueChanged(OVC) ``` ##### IsPlaying[​](#isplaying "Direct link to IsPlaying") bool **IsPlaying** `get` *Is the sound clip playing right now?* * Lua ```lua numSamples = Space.Host.ExecutingObject.Audio.IsPlaying ``` * Lua ```lua --this script will play a looping sound only if someone is using the seat --and will stop the sound if someone is not --(Example: carnival game ) --[Object must contain a Seat component and AudioSource component] thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if thisGameObject.Seat.InUse then if not thisGameObject.Audio.IsPlaying then thisGameObject.Audio.Play() end else if thisGameObject.Audio.IsPlaying then thisGameObject.Audio.Stop() end end end thisGameObject.Audio.Loop = true thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` ##### PanStereo[​](#panstereo "Direct link to PanStereo") float **PanStereo** `get` `set` *Pans the sound to the left or right. Values range from -1 to 1: 0 is the middle, -1 is full left, 1 is full right.* * Lua ```lua Space.Host.ExecutingObject.Audio.PanStereo = -1 ``` * Lua ```lua --the below script will make a slider set the Stereo Pan --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.PanStereo = (slider.Value * 2) - 1 --(from -1 left to +1 right) end slider.OnValueChanged(OVC) ``` ##### SpatialBlend[​](#spatialblend "Direct link to SpatialBlend") float **SpatialBlend** `get` `set` *The level of impact 3D effects make on the AudioSource. 0 - no impact (full 2D sound), 1 - maximum impact (full 3D sound).* * Lua ```lua Space.Host.ExecutingObject.Audio.SpatialBlend = 1 ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function spBlendChange () if hostObject.Audio.SpatialBlend < 1 then hostObject.Audio.SpatialBlend = hostObject.Audio.SpatialBlend + 0.2; else hostObject.Audio.SpatialBlend = 0; end Space.Log(hostObject.Audio.SpatialBlend); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(spBlendChange); -- Spatial Blend is increased by 0.2 every time the object is clicked, until it reaches 1. -- Then with the next click, it resets back to 0. ``` ##### Spatialize[​](#spatialize "Direct link to Spatialize") bool **Spatialize** `get` `set` *Is spatialization enabled?* * Lua ```lua Space.Host.ExecutingObject.Audio.Spatialize = true ``` * Lua ```lua --the below script will make the object toggle it's Spatialize feature OnClick --[Add "audio" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject audio = Space.Host.GetReference("audio").Audio OnClick = function() audio.Spatialize = not audio.Spatialize end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### SpatializePostEffects[​](#spatializeposteffects "Direct link to SpatializePostEffects") bool **SpatializePostEffects** `get` `set` *Is spatialization enabled before or after other filters are in action?* * Lua ```lua Space.Host.ExecutingObject.Audio.SpatializePostEffects = true ``` * Lua ```lua --the below script will make the object toggle it's Spatialize Post Effects feature OnClick --[Add "audio" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject audio = Space.Host.GetReference("audio").Audio OnClick = function() audio.SpatializePostEffects = not audio.SpatializePostEffects end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### ReverbZoneMix[​](#reverbzonemix "Direct link to ReverbZoneMix") float **ReverbZoneMix** `get` `set` *The level at which the audio coming from this Audio Source will be mixed into the global reverb of the scene (accomplished with Reverb Zones).* * Lua ```lua Space.Host.ExecutingObject.Audio.ReverbZoneMix = true ``` * Lua ```lua exa--the below script will make a slider set the Reverb Zone Mix value --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.ReverbZoneMix = (slider.Value * 1.1) --(from 0.0 to 1.1) end slider.OnValueChanged(OVC) ``` ##### BypassEffects[​](#bypasseffects "Direct link to BypassEffects") bool **BypassEffects** `get` `set` *When true, none of global sound effects (reverbs, filters, etc.) are applied to the audio from this Audio Source.* * Lua ```lua Space.Host.ExecutingObject.Audio.BypassEffects = true ``` * Lua ```lua --the below script will make the object toggle it's Bypass Effects feature OnClick --[Add "audio" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject audio = Space.Host.GetReference("audio").Audio OnClick = function() audio.BypassEffects = not audio.BypassEffects end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### BypassListenerEffects[​](#bypasslistenereffects "Direct link to BypassListenerEffects") bool **BypassListenerEffects** `get` `set` *When true, whichever global effects are set on the Audio Listener will not be applied to the audio from this Audio Source.* * Lua ```lua Space.Host.ExecutingObject.Audio.BypassListenerEffects = true ``` * Lua ```lua --the below script will make the object toggle it's Bypass Listener Effects feature OnClick --[Add "audio" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject audio = Space.Host.GetReference("audio").Audio OnClick = function() audio.BypassListenerEffects = not audio.BypassListenerEffects end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### BypassReverbZones[​](#bypassreverbzones "Direct link to BypassReverbZones") bool **BypassReverbZones** `get` `set` *When true, the audio from this Audio Source is not mixed into the global reverb generated through Reverb Zones.* * Lua ```lua Space.Host.ExecutingObject.Audio.BypassReverbZones = true ``` * Lua ```lua --the below script will make the object toggle it's Bypass Reverb Zones feature OnClick --[Add "audio" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject audio = Space.Host.GetReference("audio").Audio OnClick = function() audio.BypassReverbZones = not audio.BypassReverbZones end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Spread[​](#spread "Direct link to Spread") float **Spread** `get` `set` *The angle of spread of the audio channels in the 3D space (only works for stereo and multichannel audio). 0 by default - all channels are concentrated at the same speaker location, making it "mono".* * Lua ```lua Space.Host.ExecutingObject.Audio.Spread = 10.0 ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function increaseSpread () if hostObject.Audio.Spread < 360 then hostObject.Audio.Spread = hostObject.Audio.Spread + 90; end Space.Log(hostObject.Audio.Spread); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(increaseSpread); -- Every time an object is clicked, the spread increases by 90 degrees - compare the sound at different angles of spread! ``` ##### Priority[​](#priority "Direct link to Priority") int **Priority** `get` `set` *The priority of this Audio Source: when there are more Audio Sources playing than channels available, Priority defines which channels will be discarded in favour of those with a higher priority. 0 is the highest priority, 255 - the lowest.* * Lua ```lua Space.Host.ExecutingObject.Audio.Priority = 50 ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function changePriority () if hostObject.Audio.Priority == 0 then hostObject.Audio.Priority = 255; else hostObject.Audio.Priority = 0; end Space.Log(hostObject.Audio.Priority); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(changePriority); -- Now the Audio Source alternates between the highest and the lowest priorities. -- This can be useful, for example, in a scene with an ambient sound set at Priority 128, where we have a speaker, which plays a certain looped audio nonstop. -- When we want to hear the audio, we change it to the highest priority, so it blocks the ambient sound. -- When we don't, we change it to the lowest, and the ambient sound dominates the scene again. ``` ##### Mute[​](#mute "Direct link to Mute") bool **Mute** `get` `set` *Is the audio muted? If True, the Volume is set to 0. If False, the Volume is restored to the original level.* * Lua ```lua Space.Host.ExecutingObject.Audio.Mute = true ``` * Lua ```lua hostObject = Space.Host.ExecutingObject; function muteOnOff () hostObject.Audio.Mute = not hostObject.Audio.Mute; Space.Log(hostObject.Audio.Mute); end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(muteOnOff); -- Now clicking the object works like the Mute button. ``` ##### MinDistance[​](#mindistance "Direct link to MinDistance") float **MinDistance** `get` `set` *At which distance from the Audio Source the sound will begin ceasing? The sound will be heard at its maximum volume within this distance. (Spatial Blend should not be equal to 0 for this property to take effect.)* * Lua ```lua Space.Host.ExecutingObject.Audio.MinDistance = 2.0 ``` * Lua ```lua --the below script will make a slider set the Minimum Distance --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.MinDistance = (slider.Value * 20) + 10 --(from 10 to 30) end slider.OnValueChanged(OVC) ``` ##### MaxDistance[​](#maxdistance "Direct link to MaxDistance") float **MaxDistance** `get` `set` *At which distance from the Audio Source the sound will no longer be heard? (Spatial Blend should not be equal to 0 for this property to take effect.)* * Lua ```lua Space.Host.ExecutingObject.Audio.MaxDistance = 10.0 ``` * Lua ```lua --the below script will make a slider set the Maximum Distance --[Add "slider" and "audio" references to the Scripting Runtime component] slider = Space.Host.GetReference("slider").UISlider audio = Space.Host.GetReference("audio").Audio OVC = function() audio.MaxDistance = (slider.Value * 40) + 60 --(from 60 to 100) end slider.OnValueChanged(OVC) ``` ##### AudioClip[​](#audioclip "Direct link to AudioClip") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **AudioClip** `get` `set` *The audio clip that is or will be played by this Audio Source.* * Lua ```lua Space.Host.ExecutingObject.Audio.AudioClip = AResource ``` * Lua ```lua -- In this example, there are 3 audio clips in Scripting Runtime Resources hostObject = Space.Host.ExecutingObject; local nextTrack = 0; function changeTrack () hostObject.Audio.AudioClip = Space.Resources[nextTrack]; hostObject.Audio.Play(); Space.Log(Space.Resources[nextTrack].Name); if nextTrack == 2 then -- replace 2 with n-1, where n is the amount of audio clips you have added to Resources nextTrack = 0; else nextTrack = nextTrack + 1; end end hostObject.SubscribeToEvents(); hostObject.OnMouseDown(changeTrack); -- Now, every time the object is clicked, the next audio clip is played. -- What's more, the list is looped (the index resets back to 0 when it gets to the end of the list)! ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Audio.GameObject ``` --- ### SBoxCollider #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------- | | SVector [**Center** ](/scripting/client-scripting-api-reference/components/sboxcollider.md#center)`get` `set` | | SVector [**Size** ](/scripting/client-scripting-api-reference/components/sboxcollider.md#size)`get` `set` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sboxcollider.md#enabled)`get` `set` | | bool [**IsTrigger** ](/scripting/client-scripting-api-reference/components/sboxcollider.md#istrigger)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Center[​](#center "Direct link to Center") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Center** `get` `set` *The position of the center of the Box Collider.* * Lua ```lua Center = Space.Host.ExecutingObject.BoxCollider.Center ``` * Lua ```lua --clicking this object moves it's Box Collider's center one unit upwards thisObject = Space.Host.ExecutingObject OnClick = function() center = thisObject.BoxCollider.Center thisObject.BoxCollider.Center = Vector.New(center.X,center.Y + 1, center.Z) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Size[​](#size "Direct link to Size") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Size** `get` `set` *The size of the box.* * Lua ```lua Size= Space.Host.ExecutingObject.BoxCollider.Size ``` * Lua ```lua --clicking this object increases it's Box Collider's size by one unit thisObject = Space.Host.ExecutingObject OnClick = function() size = thisObject.BoxCollider.Size thisObject.BoxCollider.Size = Vector.New(size.X + 1,size.Y + 1, size.Z + 1) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enabled Colliders will collide with other Colliders, disabled Colliders won't.* * Lua ```lua Space.Host.ExecutingObject.BoxCollider.Enabled = false ``` * Lua ```lua --clicking this object toggles it's Box Collider On/Off thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.BoxCollider.Enabled = not thisObject.BoxCollider.Enabled end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### IsTrigger[​](#istrigger "Direct link to IsTrigger") bool **IsTrigger** `get` `set` *Is the collider a trigger?* * Lua ```lua Space.Host.ExecutingObject.BoxCollider.Enabled = true ``` * Lua ```lua --clicking this object toggles it's Box Collider between being a Collider and Trigger Collider thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.BoxCollider.IsTrigger = not thisObject.BoxCollider.IsTrigger end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.BoxCollider.GameObject ``` --- ### SBrowserSurface #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**SetURL** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#seturl)(string url) | | void [**Back** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#back)() | | void [**Forward** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#forward)() | | void [**Reload** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#reload)() | | void [**RegisterFunction** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#registerfunction)(string name, Closure function) | | void [**CallFunction** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#callfunction)(string name, string argument) | | void [**OnURLChanged** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#onurlchanged)(Closure e) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------- | | bool [**Networked** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#networked)`get` `set` | | bool [**Muted** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#muted)`get` `set` | | bool [**CanGoBack** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#cangoback)`get` | | bool [**CanGoForward** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#cangoforward)`get` | | bool [**EnableInput** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#enableinput)`get` `set` | | float [**Zoom** ](/scripting/client-scripting-api-reference/components/sbrowsersurface.md#zoom)`get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### SetURL[​](#seturl "Direct link to SetURL") void **SetURL** (string url) *Sets the URL for the browser frame, and navigates to it.* | Parameter | Type | Description | | --------- | ------ | ------------------------------------------------------------------------- | | url | string | A standard URL recognized by Chromium, such as . | * Lua ```lua Space.Host.ExecutingObject.Browser.SetURL('https://www.youtube.com') ``` * Lua ```lua --the below scipt makes this object set Browser URL according to what's written in text field --(Example: Set URL button) --[Required: This object needs a Browser and InputField objects to be added as reference to references section in Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject webBrowser = Space.Host.GetReference("Browser") urlField = Space.Host.GetReference("URL Field") OnClick = function() webBrowser.Browser.SetURL(urlField.UIInputField.Text) end urlField.UIInputField.Text = "https://www.youtube.com" thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to set URL" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Back[​](#back "Direct link to Back") void **Back** () *Equivalent to hitting the 'back' button within the browser.* * Lua ```lua Space.Host.ExecutingObject.Browser.Back() ``` * Lua ```lua --the below scipt makes this object a clickable that navigates Back --(Example: Browser navigation ) --[Required: Browser surface object needs to be added as a reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject browser = Space.Host.GetReference("Browser Surface Object").Browser OnClick = function() browser.Back() end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Enable/Disable browser Input" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Forward[​](#forward "Direct link to Forward") void **Forward** () *Equivalent to hitting the 'forward' button within the browser.* * Lua ```lua Space.Host.ExecutingObject.Browser.Forward() ``` * Lua ```lua --the below scipt makes this object a clickable that navigates Forward --(Example: Browser navigation ) --[Required: Browser surface object needs to be added as a reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject browser = Space.Host.GetReference("Browser Surface Object").Browser OnClick = function() browser.Forward() end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Enable/Disable browser Input" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Reload[​](#reload "Direct link to Reload") void **Reload** () *Refreshes and reloads the current webpage.* * Lua ```lua Space.Host.ExecutingObject.Browser.Reload() ``` * Lua ```lua --the below scipt makes this object a clickable that reloads the page --(Example: Browser navigation ) --[Required: Browser surface object needs to be added as a reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject browser = Space.Host.GetReference("Browser Surface Object").Browser OnClick = function() browser.Reload() end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Enable/Disable browser Input" thisGameObject.Clickable.OnClick(OnClick) ``` ##### RegisterFunction[​](#registerfunction "Direct link to RegisterFunction") void **RegisterFunction** (string name, Closure function) *Allows a JavaScript function that exists in the browser to be called by our code.* | Parameter | Type | Description | | --------- | ------ | ----------------------------------------------------------------------------------------------------------------- | | name | string | The name of the JavaScript function we want to register. The function name should start with "**sinespace\_\_".** | * Lua ```lua Space.Host.ExecutingObject.Browser.RegisterFunction("sinespace__TestFunction", ) ``` ##### CallFunction[​](#callfunction "Direct link to CallFunction") void **CallFunction** (string name, string argument) *Calls a JS function in the browser with a single argument. The function name must begin with the characters "sinespace\_".* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Browser.CallFunction() ``` ##### OnURLChanged[​](#onurlchanged "Direct link to OnURLChanged") void **OnURLChanged** (Closure e) *Binds a function to be called whenever the URL of the Browser Surface changes* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Browser.OnURLChanged(aFunction) ``` * Lua ```lua --the below scipt makes this object clear the an InputField whenever URL changes --(Example: URL Bar) --[Required: This object needs a Browser and InputField objects to be added as reference to references section in Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject webBrowser = Space.Host.GetReference("Browser") urlField = Space.Host.GetReference("URL Field") OnURLChanged () urlField.UIInputField.Text = " " end webBrowser.Browser.OnURLChanged(OnURLChanged) ``` #### Properties[​](#properties "Direct link to Properties") ##### Networked[​](#networked "Direct link to Networked") bool **Networked** `get` `set` *Should changes to this browser be streamed to other clients within the area?.* * Lua ```lua Space.Host.ExecutingObject.Browser.Networked = true ``` * Lua ```lua --the below scipt makes this object toggle Networking on it's parent browser --(Example: browser controls) --[Required: This object needs its parent to have the browser component] thisGameObject = Space.Host.ExecutingObject OnClick = function() if thisGameObject.Parent.Browser.Networked then thisGameObject.Parent.Browser.Networked = false Space.Log("Browser will not be networked") else thisGameObject.Parent.Browser.Networked = true Space.Log("Browser will be networked") end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to toggle Networking on Browser" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Muted[​](#muted "Direct link to Muted") bool **Muted** `get` `set` *Whether this Browser Surface is muted or not.* * Lua ```lua Space.Host.ExecutingObject.Browser.Muted=true ``` * Lua ```lua --the below scipt makes this object a clickable that mutes/unmutes a browser surface --(Example: Browser Mute button ) --[Required: This object's parent needs to be an object with BrowserSurface component in it] thisGameObject = Space.Host.ExecutingObject OnClick = function() if thisGameObject.Parent.Browser.Muted then thisGameObject.Parent.Browser.Muted = false Space.Log("Browser unmuted") else thisGameObject.Parent.Browser.Muted = true Space.Log("Browser muted") end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Mute/Unmute Browser" thisGameObject.Clickable.OnClick(OnClick) ``` ##### CanGoBack[​](#cangoback "Direct link to CanGoBack") bool **CanGoBack** `get` *Returns whether this Browser Surface can navigate back* * Lua ```lua CanGoBack = Space.Host.ExecutingObject.Browser.CanGoBack ``` * Lua ```lua --the below scipt makes this Browser object show/hide it's Forward and Back --buttons according to wether the actions are possible or not --(Example: browser navigation ) --[Required: This object needs the forward and back objects added to the references section in scripting runtime] thisGameObject = Space.Host.ExecutingObject forwardButton = Space.Host.GetReference("Forward Button") backButton = Space.Host.GetReference("Back Button") OnUpdate = function() if thisGameObject.Browser.CanGoBack then backButton.Active = true else backButton.Active = false end if thisGameObject.Browser.CanGoForward then forwardButton.Active = true else forwardButton.Active = false end end thisGameObject.OnUpdate(OnUpdate) ``` ##### CanGoForward[​](#cangoforward "Direct link to CanGoForward") bool **CanGoForward** `get` *Returns whether this Browser Surface can navigate forward* * Lua ```lua CanGoForward = Space.Host.ExecutingObject.Browser.CanGoForward ``` * Lua ```lua --the below scipt makes this Browser object show/hide it's Forward and Back --buttons according to wether the actions are possible or not --(Example: browser navigation ) --[Required: This object needs the forward and back objects added to the references section in scripting runtime] thisGameObject = Space.Host.ExecutingObject forwardButton = Space.Host.GetReference("Forward Button") backButton = Space.Host.GetReference("Back Button") OnUpdate = function() if thisGameObject.Browser.CanGoBack then backButton.Active = true else backButton.Active = false end if thisGameObject.Browser.CanGoForward then forwardButton.Active = true else forwardButton.Active = false end end thisGameObject.OnUpdate(OnUpdate) ``` ##### EnableInput[​](#enableinput "Direct link to EnableInput") bool **EnableInput** `get` `set` *Whether this Browser Surface has Input enabled or not (interactable)* * Lua ```lua Space.Host.ExecutingObject.Browser.EnableInput = false ``` * Lua ```lua --the below scipt makes this object a clickable that toggle Enable Input a browser surface --(Example: Brower Enable Input toggle button ) --[Required: Browser surface object needs to be added as a reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject browser = Space.Host.GetReference("Browser Surface Object").Browser OnClick = function() if browser.EnableInput then browser.EnableInput = false Space.Log("Browser input disabled") else browser.EnableInput = true Space.Log("Browser input enabled") end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Enable/Disable browser Input" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Zoom[​](#zoom "Direct link to Zoom") float **Zoom** `get` `set` *Set the Zoom of the browser surface (Pixel Scaling). Positive values zoom in, negative values zoom out.* * Lua ```lua Space.Host.ExecutingObject.Browser.Zoom = 2 ``` * Lua ```lua --the below scipt make a slider control the zoom in of a browser surface --(Example: browser zoom controls) --[Required: This object needs a Browser and slider objects to be added as reference to references section in Scripting Runtime component] slider = Space.Host.GetReference("Slider").UISlider browser = Space.Host.GetReference("Browser") browser.Browser.SetURL("https://www.yahoo.com") OnValueChanged = function() browser.Browser.Zoom = slider.NormalizedValue * 5 end slider.OnValueChanged(OnValueChanged) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Browser.GameObject ``` --- ### SCamera #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------- | | void [**TakePhoto** ](/scripting/client-scripting-api-reference/components/scamera.md#takephoto)() | | SResource [**TakeSnapshot** ](/scripting/client-scripting-api-reference/components/scamera.md#takesnapshot)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------- | | bool [**HDR** ](/scripting/client-scripting-api-reference/components/scamera.md#hdr)`get` `set` | | int [**PixelWidth** ](/scripting/client-scripting-api-reference/components/scamera.md#pixelwidth)`get` | | int [**PixelHeight** ](/scripting/client-scripting-api-reference/components/scamera.md#pixelheight)`get` | | SVector [**Velocity** ](/scripting/client-scripting-api-reference/components/scamera.md#velocity)`get` | | bool [**UseOcclusionCulling** ](/scripting/client-scripting-api-reference/components/scamera.md#useocclusionculling)`get` `set` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/scamera.md#enabled)`get` `set` | | float [**FieldOfView** ](/scripting/client-scripting-api-reference/components/scamera.md#fieldofview)`get` `set` | | bool [**Orthographic** ](/scripting/client-scripting-api-reference/components/scamera.md#orthographic)`get` `set` | | float [**OrthographicSize** ](/scripting/client-scripting-api-reference/components/scamera.md#orthographicsize)`get` `set` | | float [**NearClip** ](/scripting/client-scripting-api-reference/components/scamera.md#nearclip)`get` `set` | | float [**FarClip** ](/scripting/client-scripting-api-reference/components/scamera.md#farclip)`get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### TakePhoto[​](#takephoto "Direct link to TakePhoto") void **TakePhoto** () *Triggers the Photo window in the UI, with the output of this camera. Perfect for photo booths.* * Lua ```lua Space.Host.ExecutingObject.Camera.TakePhoto() ``` ##### TakeSnapshot[​](#takesnapshot "Direct link to TakeSnapshot") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **TakeSnapshot** () *Captures a texture from the camera, and saves it in a SResource* * Lua ```lua Space.Host.ExecutingObject.Camera.TakeSnapshot() ``` #### Properties[​](#properties "Direct link to Properties") ##### HDR[​](#hdr "Direct link to HDR") bool **HDR** `get` `set` *Can this camera write HDR values? (i.e. values brighter than 1.0)* * Lua ```lua Space.Host.ExecutingObject.Camera.HDR = true ``` ##### PixelWidth[​](#pixelwidth "Direct link to PixelWidth") int **PixelWidth** `get` *The width of this Camera's texture, in pixels* * Lua ```lua cameraWidthPixels = Space.Host.ExecutingObject.Camera.PixelWidth ``` ##### PixelHeight[​](#pixelheight "Direct link to PixelHeight") int **PixelHeight** `get` *The height of this Camera's texture in pixels* * Lua ```lua cameraHeightPixels = Space.Host.ExecutingObject.Camera.PixelHeight ``` ##### Velocity[​](#velocity "Direct link to Velocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Velocity** `get` World space speed of this camera, typically used for motion blur. * Lua ```lua cameraVelocity = Space.Host.ExecutingObject.Camera.Velocity ``` ##### UseOcclusionCulling[​](#useocclusionculling "Direct link to UseOcclusionCulling") bool **UseOcclusionCulling** `get` `set` *Is Occlusion Culling enabled on this camera?* * Lua ```lua Space.Host.ExecutingObject.Camera.UseOcclusionCulling = true ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is this camera enabled?* * Lua ```lua Space.Host.ExecutingObject.Camera.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Camera component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.Camera OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### FieldOfView[​](#fieldofview "Direct link to FieldOfView") float **FieldOfView** `get` `set` *The field of view of the camera, in typical scenarios, Sinespace uses a value of 52; however Unity will default to 60.* * Lua ```lua Space.Host.ExecutingObject.Camera.FieldOfView = 70 ``` ##### Orthographic[​](#orthographic "Direct link to Orthographic") bool **Orthographic** `get` `set` *Does this camera render without perspective?* * Lua ```lua Space.Host.ExecutingObject.Camera.Orthographic = true ``` ##### OrthographicSize[​](#orthographicsize "Direct link to OrthographicSize") float **OrthographicSize** `get` `set` *The width of the camera when in Orthographic mode. Height will be adjusted based on aspect ratio of the Render Texture* * Lua ```lua Space.Host.ExecutingObject.Camera.OrthographicSize = 5.0 ``` ##### NearClip[​](#nearclip "Direct link to NearClip") float **NearClip** `get` `set` *How close can an object be to the camera plane before it is not rendered?* * Lua ```lua Space.Host.ExecutingObject.Camera.NearClip = 2.0 ``` ##### FarClip[​](#farclip "Direct link to FarClip") float **FarClip** `get` `set` *How far is an object from the camera plane before it is not rendered?* * Lua ```lua Space.Host.ExecutingObject.Camera.FarClip = 6.0 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Camera.GameObject ``` --- ### SCanvasGroup #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------------- | | float [**Alpha** ](/scripting/client-scripting-api-reference/components/scanvasgroup.md#alpha)`get` `set` | | bool [**BlocksRaycasts** ](/scripting/client-scripting-api-reference/components/scanvasgroup.md#blocksraycasts)`get` `set` | | bool [**IgnoreParentGroups** ](/scripting/client-scripting-api-reference/components/scanvasgroup.md#ignoreparentgroups)`get` `set` | | bool [**Interactable** ](/scripting/client-scripting-api-reference/components/scanvasgroup.md#interactable)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Alpha[​](#alpha "Direct link to Alpha") float **Alpha** `get` `set` S*et the alpha of the group.* * Lua ```lua Space.Host.CanvasGroup.Alpha = 1.0 ``` ##### BlocksRaycasts[​](#blocksraycasts "Direct link to BlocksRaycasts") bool **BlocksRaycasts** `get` `set` *Does this group block raycasting (allow collision)?* * Lua ```lua Space.Host.CanvasGroup.BlocksRaycasts = true ``` ##### IgnoreParentGroups[​](#ignoreparentgroups "Direct link to IgnoreParentGroups") bool **IgnoreParentGroups** `get` `set` *Should the group ignore parent groups?* * Lua ```lua Space.Host.CanvasGroup.IgnoreParentGroups = true ``` ##### Interactable[​](#interactable "Direct link to Interactable") bool **Interactable** `get` `set` *Is the group interactable (are the elements beneath the group enabled)?* * Lua ```lua Space.Host.CanvasGroup.Interactable = true ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.CanvasGroup.GameObject ``` --- ### SCapsuleCollider #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------- | | SVector [**Center** ](/scripting/client-scripting-api-reference/components/scapsulecollider.md#center)`get` `set` | | int [**Direction** ](/scripting/client-scripting-api-reference/components/scapsulecollider.md#direction)`get` `set` | | float [**Height** ](/scripting/client-scripting-api-reference/components/scapsulecollider.md#height)`get` `set` | | float [**Radius** ](/scripting/client-scripting-api-reference/components/scapsulecollider.md#radius)`get` `set` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/scapsulecollider.md#enabled)`get` `set` | | bool [**IsTrigger** ](/scripting/client-scripting-api-reference/components/scapsulecollider.md#istrigger)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Center[​](#center "Direct link to Center") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Center** `get` `set` *The center of the capsule, measured in the object's local space.* * Lua ```lua Center = Space.Host.ExecutingObject.CapsuleCollider.Center ``` * Lua ```lua --clicking this object moves it's Capsule Collider's center one unit upwards thisObject = Space.Host.ExecutingObject OnClick = function() center = thisObject.CapsuleCollider.Center thisObject.CapsuleCollider.Center = Vector.New(center.X,center.Y + 1, center.Z) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Direction[​](#direction "Direct link to Direction") int **Direction** `get` `set` *The direction of the capsule.* * Lua ```lua Direction = Space.Host.ExecutingObject.CapsuleCollider.Direction ``` * Lua ```lua --clicking this object increases it's Capsule Collider's direction by one unit thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.CapsuleCollider.Direction thisObject.CapsuleCollider.Direction = thisObject.CapsuleCollider.Direction + 1 end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Height[​](#height "Direct link to Height") float **Height** `get set` *The height of the capsule measured in the object's local space.* * Lua ```lua Space.Host.ExecutingObject.CapsuleCollider.Height = 5.0 ``` * Lua ```lua --clicking this object increases it's Capsule Collider's height by one unit thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.CapsuleCollider.Height thisObject.CapsuleCollider.Height= thisObject.CapsuleCollider.Height+ 1.0 end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Radius[​](#radius "Direct link to Radius") float **Radius** `get` `set` *The radius of the capsule.* * Lua ```lua Radius = Space.Host.ExecutingObject.CapsuleCollider.Radius ``` * Lua ```lua --clicking this object increments it's Capsule Collider's radius by one unit thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.CapsuleCollider.Radius = thisObject.CapsuleCollider.Radius + 1 end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enabled Colliders will collide with other Colliders, disabled Colliders won't.* * Lua ```lua Space.Host.ExecutingObject.CapsuleCollider.Enabled = false ``` * Lua ```lua --clicking this object toggles it's Capsule Collider On/Off thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.CapsuleCollider.Enabled = not thisObject.CapsuleCollider.Enabled end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### IsTrigger[​](#istrigger "Direct link to IsTrigger") bool **IsTrigger** `get` `set` *Is the collider a trigger?* * Lua ```lua Space.Host.ExecutingObject.CapsuleCollider.IsTrigger = false ``` * Lua ```lua --clicking this object toggles it's Capsule Collider between being a Collider vs Trigger Collider thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.CapsuleCollider.IsTrigger = not thisObject.CapsuleCollider.IsTrigger end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.CapsuleCollider.GameObject ``` --- ### SCharacterController #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | SVector [**ClosestPointOnBounds** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#closestpointonbounds)(SVector position) | | SVector [**ClosestPoint** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#closestpointonbounds)(SVector position) | | bool [**SimpleMove** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#simplemove)(SVector speed) | | int [**Move** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#move)(SVector motion) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------------------------ | | SVector [**Center** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#center)`get` `set` | | bool [**DetectCollisions** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#detectcollisions)`get` `set` | | bool [**EnableOverlapRecovery** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#enableoverlaprecovery)`get` `set` | | float [**Height** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#height)`get` `set` | | float [**MinMoveDistance** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#minmovedistance)`get` `set` | | float [**Radius** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#radius)`get` `set` | | float [**SkinWidth** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#skinwidth)`get` `set` | | float [**SlopeLimit** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#slopelimit)`get` `set` | | float [**StepOffset** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#stepoffset)`get` `set` | | SVector [**Velocity** ](/scripting/client-scripting-api-reference/components/scharactercontroller.md#velocity)`get` | #### Functions[​](#functions "Direct link to Functions") ##### ClosestPointOnBounds[​](#closestpointonbounds "Direct link to ClosestPointOnBounds") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **ClosestPointOnBounds** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) position) *The closest point to the bounding box of the attached collider. This can be used to calculate hit points when applying explosion damage.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua closestPoint = Space.Host.ExecutingObject.CharacterController.ClosestPointOnBounds(Vector.New(0,0,0)) ``` ##### ClosestPoint[​](#closestpoint "Direct link to ClosestPoint") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **ClosestPoint** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) position) *The point on the collider that is closest to the specified location.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua closestPoint = Space.Host.ExecutingObject.CharacterController.ClosestPoint = Vector.New(0,0,0) ``` ##### SimpleMove[​](#simplemove "Direct link to SimpleMove") bool **SimpleMove** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) speed) *Moves the character with speed. Velocity along the y-axis is ignored. Speed is in units/s. Gravity is automatically applied.* *Returns if the character is grounded.* *It is recommended that you make only one call to Move or SimpleMove per frame.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isGrounded = Space.Host.ExecutingObject.CharacterController.SimpleMove = Vector.New(100,0,0) ``` ##### Move[​](#move "Direct link to Move") int **Move** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) motion) *Supplies the movement of a* [*SGameObject*](/scripting/client-scripting-api-reference/types/sgameobject.md) *with an attached SCharacterController component.* *The SCharacterController.Move motion moves the* [*SGameObject*](/scripting/client-scripting-api-reference/types/sgameobject.md) *in the given direction. The given direction requires absolute movement delta values. A collision constrains the Move from taking place.* *Returns an int indicating the direction of a collision: None (0), Sides (1), Above (2), and Below (3). SCharacterController.Move does not use gravity.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua collisionDirection = Space.Host.ExecutingObject.CharacterController.Move = Vector.New(100,0,0) ``` #### Properties[​](#properties "Direct link to Properties") ##### Center[​](#center "Direct link to Center") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Center** `get` `set` *Returns Center Vector value of the Character Controller.* * Lua ```lua Space.Host.ExecutingObject.CharacterController.Center = Vector.New(0,0,0) ``` ##### DetectCollisions[​](#detectcollisions "Direct link to DetectCollisions") bool **DetectCollisions** `get` `set` *Determines whether other rigidbodies or character controllers collide with this character controller (by default this is always enabled).* *This method does not affect collisions detected during the character controller's movement but rather decides whether an incoming collider will be blocked by the controller's collider. For example, a box collider in the Scene will block the movement of the controller, but the box may still fall through the controller if detectCollisions is false. This property is useful to disable the character controller temporarily. For example, you might want to mount a character into a car and disable collision detection until it exits the car again.* * Lua ```lua Space.Host.CharacterController.DetectCollisions= false ``` * Lua ```lua --clicking this object will toggle a Character Controller's Detect Collisions property thisObject = Space.Host.ExecutingObject ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController --add Reference to Scripting Runtime function OnClickFunction() ccontroller.DetectCollisions = not ccontroller.DetectCollisions end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### EnableOverlapRecovery[​](#enableoverlaprecovery "Direct link to EnableOverlapRecovery") bool **EnableOverlapRecovery** `get` `set` *Enables or disables overlap recovery. Enables or disables overlap recovery. Used to depenetrate character controllers from static objects when an overlap is detected.* *Overlap recovery can be used to depenetrate character controllers (CCTs) from static objects when an overlap is detected. This can happen in three main cases:* *- when the CCT is directly spawned or teleported in another object* *- when the CCT algorithm fails due to limited FPU accuracy* *- when the "up vector" is modified, making the rotated CCT shape overlap surrounding objects* *When activated, the CCT module will automatically try to resolve the penetration, and move the CCT to a safe place where it does* *not overlap other objects anymore. This only concerns static objects, dynamic objects are ignored by overlap recovery.* *When overlap recovery is not activated, it is possible for the CCTs to go through static objects. By default, overlap recovery is enabled.* *Overlap recovery currently works with all geometries except heightfields.* * Lua ```lua Space.Host.CharacterController.EnableOverlapRecovery= false ``` * Lua ```lua --clicking this object will toggle a Character Controller's Enable Overlap Recovery property thisObject = Space.Host.ExecutingObject ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController --add Reference to Scripting Runtime function OnClickFunction() ccontroller.EnableOverlapRecovery = not ccontroller.EnableOverlapRecovery end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Height[​](#height "Direct link to Height") float **Height** `get` `set` *The height of the character's capsule.* * Lua ```lua Space.Host.ExecutingObject.CharacterController.Height = 4 ``` * Lua ```lua --the below script will make a slider change a Character Controller Height property --[Add "theslider" and "thecharactercontroller" to the Object References section in Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController OVC = function() ccontroller.Height = (slider.Value * 10.0) -- from 0.0 to 10.0 end slider.OnValueChanged(OVC) ``` ##### MinMoveDistance[​](#minmovedistance "Direct link to MinMoveDistance") float **MinMoveDistance** `get` `set` *Gets or sets the minimum move distance of the character controller.* * Lua ```lua Space.Host.ExecutingObject.CharacterController.MinMoveDistance = 3 ``` * Lua ```lua --this script will make a slider change a Character Controller Min Move Distance property --[Add "theslider" and "thecharactercontroller" to the Object References section in Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController OVC = function() ccontroller.MinMoveDistance= (slider.Value * 10.0) -- from 0.0 to 10.0 end slider.OnValueChanged(OVC) ``` ##### Radius[​](#radius "Direct link to Radius") float **Radius** `get` `set` *The radius of the character's capsule.* * Lua ```lua Space.Host.ExecutingObject.CharacterController.Radius = 5 ``` * Lua ```lua --this script will make a slider change a Character Controller Radius property --[Add "theslider" and "thecharactercontroller" to the Object References section in Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController OVC = function() ccontroller.Radius= (slider.Value * 10.0) -- from 0.0 to 10.0 end slider.OnValueChanged(OVC) ``` ##### SkinWidth[​](#skinwidth "Direct link to SkinWidth") float **SkinWidth** `get` `set` *The character's collision skin width.* * Lua ```lua Space.Host.ExecutingObject.CharacterController.SkinWidth = 4 ``` * Lua ```lua --this script will make a slider change a Character Controller SkinWidth property --[Add "theslider" and "thecharactercontroller" to the Object References section in Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController OVC = function() ccontroller.SkinWidth= (slider.Value * 10.0) -- from 0.0 to 10.0 end slider.OnValueChanged(OVC) ``` ##### SlopeLimit[​](#slopelimit "Direct link to SlopeLimit") float **SlopeLimit** `get` `set` *The character controllers slope limit in degrees.* * Lua ```lua Space.Host.ExecutingObject.CharacterController.SlopeLimit= 2 ``` * Lua ```lua --this script will make a slider change a Character Controller Slope Limit property --[Add "theslider" and "thecharactercontroller" to the Object References section in Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController OVC = function() ccontroller.SlopeLimit= (slider.Value * 180.0) -- from 0.0 to 180.0 end slider.OnValueChanged(OVC) ``` ##### StepOffset[​](#stepoffset "Direct link to StepOffset") float **StepOffset** `get` `set` *The character controllers step offset in meters.* * Lua ```lua Space.Host.ExecutingObject.CharacterController.StepOffset= 2 ``` * Lua ```lua --this script will make a slider change a Character Controller Step Offset property --[Add "theslider" and "thecharactercontroller" to the Object References section in Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider ccontroller = Space.Host.GetReference("thecharactercontroller").CharacterController OVC = function() ccontroller.StepOffset= (slider.Value * 10.0) -- from 0.0 to 10.0 end slider.OnValueChanged(OVC) ``` ##### Velocity[​](#velocity "Direct link to Velocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Velocity** `get` *The current relative velocity of the Character.* * Lua ```lua currentRelativeVelocity = Space.Host.ExecutingObject.CharacterController.Velocity ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.CharacterController.GameObject ``` --- ### SClickable #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**AddExtraAction** ](/scripting/client-scripting-api-reference/components/sclickable.md#addextraaction)(string name, string tooltip, Closure e) | | void [**ClearActions** ](/scripting/client-scripting-api-reference/components/sclickable.md#clearactions)() | | void [**OnClick** ](/scripting/client-scripting-api-reference/components/sclickable.md#onclick)(Closure e) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------ | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sclickable.md#enabled)`get` `set` | | string [**Tooltip** ](/scripting/client-scripting-api-reference/components/sclickable.md#tooltip)`get` `set` | | SGameObject **GameObject** `get` | #### Functions[​](#functions "Direct link to Functions") ##### AddExtraAction[​](#addextraaction "Direct link to AddExtraAction") void **AddExtraAction** (string name, string tooltip, Closure e) *Add a new action for the object to perform when clicked. Can be useful for providing miltuple choice of an action on click.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Clickable.AddExtraAction ("ButtonName", "Tooltip Text Here", AFunction) ``` ##### ClearActions[​](#clearactions "Direct link to ClearActions") void **ClearActions** () *Removes all actions from the clickable GameObject.* * Lua ```lua Space.Host.ExecutingObject.Clickable.ClearActions() ``` * Lua ```lua hostObject = Space.Host.ExecutingObject hostObject.AddClickable() function ClickMe () Space.Log("I was clicked!") end function ClickAndClear () Space.Log("No more actions!") hostObject.Clickable.ClearActions () end hostObject.Clickable.AddExtraAction ("LogButton", "Prints I was clicked! to the console", ClickMe) hostObject.Clickable.AddExtraAction ("ClearButton", "Clears all actions", ClickAndClear) -- Now, when the latter option is chosen, the script clears the Clickable component of all actions. ``` ##### OnClick[​](#onclick "Direct link to OnClick") void **OnClick** (Closure e) *When clicked, the GameObject performs the required action.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Clickable.OnClick(AFunction) ``` * Lua ```lua hostObject = Space.Host.ExecutingObject hostObject.AddClickable() deltaPos = Vector.New(0,0,1) function MakeMeMove () hostObject.WorldPosition = hostObject.WorldPosition + deltaPos end hostObject.Clickable.OnClick (MakeMeMove); -- Now, every time an object is clicked, it moves by 1 in the positive Z direction. ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enable or disable the clickable component from a GameObject.* * Lua ```lua Space.Host.ExecutingObject.Clickable.Enabled = false ``` * Lua ```lua --Clicking the object will disable the component, making it only clickable once thisGameObject = Space.Host.ExecutingObject OnClick = function() thisGameObject.Clickable.Enabled = false end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to activate" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Tooltip[​](#tooltip "Direct link to Tooltip") string **Tooltip** `get` `set` *A hint that pops up when the mouse is hovering over the GameObject.* * Lua ```lua Space.Host.ExecutingObject.Clickable.Tooltip = "test" ``` * Lua ```lua --Clicking the object will toggle between two different tooltips thisGameObject = Space.Host.ExecutingObject OnClick = function() if thisGameObject.Clickable.Tooltip == "Turn On" then thisGameObject.Clickable.Tooltip = "Turn Off" else thisGameObject.Clickable.Tooltip = "Turn On" end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Turn On" thisGameObject.Clickable.OnClick(OnClick) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") SGameObject **GameObject** `get` *Returns a reference to the GameObject of this component.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Clickable.GameObject ``` --- ### SCloth #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------------------ | | float [**BendingStiffness** ](/scripting/client-scripting-api-reference/components/scloth.md#bendingstiffness)`get` `set` | | float [**CollisionMassScale** ](/scripting/client-scripting-api-reference/components/scloth.md#collisionmassscale)`get` `set` | | bool [**EnableContinuousCollision** ](/scripting/client-scripting-api-reference/components/scloth.md#enablecontinuouscollision)`get` `set` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/scloth.md#enabled)`get` `set` | | SVector [**ExternalAcceleration** ](/scripting/client-scripting-api-reference/components/scloth.md#externalacceleration)`get` `set` | | float [**Friction** ](/scripting/client-scripting-api-reference/components/scloth.md#friction)`get` `set` | | SVector [**RandomAcceleration** ](/scripting/client-scripting-api-reference/components/scloth.md#randomacceleration)`get` `set` | | float [**StretchingStiffness** ](/scripting/client-scripting-api-reference/components/scloth.md#stretchingstiffness)`get` `set` | | bool [**UseGravity** ](/scripting/client-scripting-api-reference/components/scloth.md#usegravity)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/scloth.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### BendingStiffness[​](#bendingstiffness "Direct link to BendingStiffness") float **BendingStiffness** `get` `set` *Bending stiffness of cloth.* * Lua ```lua Space.Host.ExecutingObject.Cloth.BendingStiffness = 0.5 ``` ##### CollisionMassScale[​](#collisionmassscale "Direct link to CollisionMassScale") float **CollisionMassScale** `get` `set` *Increase the mass of colliding particles.* * Lua ```lua Space.Host.ExecutingObject.Cloth.CollisionMassScale = 0.5 ``` ##### EnableContinuousCollision[​](#enablecontinuouscollision "Direct link to EnableContinuousCollision") bool **EnableContinuousCollision** `get` `set` *Enable continuous collision to improve collision stability.* * Lua ```lua Space.Host.ExecutingObject.Cloth.EnableContinuousCollision = true ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enable or disable components.* * Lua ```lua Space.Host.ExecutingObject.Cloth.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Cloth component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.Cloth OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### ExternalAcceleration[​](#externalacceleration "Direct link to ExternalAcceleration") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **ExternalAcceleration** `get` `set` *A constant external acceleration applied to the cloth.* * Lua ```lua Space.Host.ExecutingObject.Cloth.ExternalAcceleration = Vector.New(2,4,5) ``` ##### Friction[​](#friction "Direct link to Friction") float **Friction** `get` `set` *Return the friction of the cloth when colliding with the character.* * Lua ```lua Space.Host.ExecutingObject.Cloth.Friction = 0.8 ``` ##### RandomAcceleration[​](#randomacceleration "Direct link to RandomAcceleration") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **RandomAcceleration** `get` `set` *A constant external acceleration applied to the cloth.* * Lua ```lua Space.Host.ExecutingObject.Cloth.RandomAcceleration = Vector.New(2,4,5) ``` ##### StretchingStiffness[​](#stretchingstiffness "Direct link to StretchingStiffness") float **StretchingStiffness** `get` `set` *Stretching stiffness of the cloth.* * Lua ```lua Space.Host.ExecutingObject.Cloth.StretchingStiffness = 0.6 ``` ##### UseGravity[​](#usegravity "Direct link to UseGravity") bool **UseGravity** `get` `set` *Stretching stiffness of the cloth.* * Lua ```lua Space.Host.ExecutingObject.Cloth.UseGravity = true ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Cloth.GameObject ``` --- ### SCollider #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/scollider.md#enabled)`get` `set` | | bool [**IsTrigger** ](/scripting/client-scripting-api-reference/components/scollider.md#istrigger)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/scollider.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enable or disable the collider.* * Lua ```lua Space.Host.ExecutingObject.Collider.Enabled= false ``` * Lua ```lua --clicking this object toggles it's Collider On/Off thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.Collider.Enabled = not thisObject.Collider.Enabled end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### IsTrigger[​](#istrigger "Direct link to IsTrigger") bool **IsTrigger** `get` `set` *Set Collider as a trigger.* * Lua ```lua Space.Host.ExecutingObject.Collider.IsTrigger = true ``` * Lua ```lua --clicking this object toggles it's collider between being a Collider vs Trigger Collider thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.Collider.IsTrigger = not thisObject.Collider.IsTrigger end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Collider.GameObject ``` --- ### SContentSizeFitter #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------- | | void [**SetLayoutHorizontal** ](/scripting/client-scripting-api-reference/components/scontentsizefitter.md#setlayouthorizontal)() | | void [**SetLayoutVertical** ](/scripting/client-scripting-api-reference/components/scontentsizefitter.md#setlayoutvertical)() | | void [**RefreshLayout** ](/scripting/client-scripting-api-reference/components/scontentsizefitter.md#refreshlayout)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------- | | bool [**Enable** ](/scripting/client-scripting-api-reference/components/scontentsizefitter.md#enable)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/scontentsizefitter.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### SetLayoutHorizontal[​](#setlayouthorizontal "Direct link to SetLayoutHorizontal") void **SetLayoutHorizontal** () *Function Description* * Lua ```lua Space.Host.ExecutingObject.ContentSizeFitter.SetLayoutHorizontal() ``` ##### SetLayoutVertical[​](#setlayoutvertical "Direct link to SetLayoutVertical") void **SetLayoutVertical** () *Function Description* * Lua ```lua Space.Host.ExecutingObject.ContentSizeFitter.SetLayoutVertical() ``` ##### RefreshLayout[​](#refreshlayout "Direct link to RefreshLayout") void **RefreshLayout** () *Function Description* * Lua ```lua Space.Host.ExecutingObject.ContentSizeFitter.RefreshLayout() ``` #### Properties[​](#properties "Direct link to Properties") ##### Enable[​](#enable "Direct link to Enable") bool **Enable** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.ContentSizeFitter.Enable = true ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.ContentSizeFitter.GameObject ``` --- ### SEmbeddedVideo #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------- | | void [**OnStateChange** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#onstatechange)(Closure e) | | void [**Play** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#play)() | | void [**Stop** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#stop)() | | void [**Pause** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#pause)() | | void [**Resume** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#resume)() | | void [**SynchorizeUrl** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#synchorizeurl)() | | void [**ClearRenderTexture** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#clearrendertexture)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------ | | SEmbeddedVideoState [**State** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#state)`get` | | string [**URL** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#url)`get` `set` | | SAudioSource [**AudioSource** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#audiosource)`get` `set` | | SResource [**OutputTexture** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#outputtexture)`get` | | SResource [**Texture** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#texture)`get` | | double [**Time** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#time)`get` `set` | | long [**Position** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#position)`get` | | string [**UniqueName** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#uniquename)`get` | | double [**VideoLength** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#videolength)`get` | | bool [**Loop** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#loop)`get` `set` | | int [**FrameCount** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#framecount)`get` | | bool [**IsPlaying** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#isplaying)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sembeddedvideo.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### OnStateChange[​](#onstatechange "Direct link to OnStateChange") void **OnStateChange** (Closure e) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function stateChangeFunction(EmbeddedVideo, oldState, newState) --what happens on state change end Space.Host.ExecutingObject.EmbeddedVideo.OnStageChange(stateChangeFunction) ``` * Lua ```lua --get embedded video component on your video player video = Space.Scene.Find("VidepPlayer").EmbeddedVideo function GetClosure() return function (a,b,c) log(a.URL..b..c) end end video.OnStateChange(GetClosure()) video.Pause() ``` ##### Play[​](#play "Direct link to Play") void **Play** () *If URL is set, plays the video* * Lua ```lua Space.Host.ExecutingObject.EmbeddedVideo.Play() ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** () *Stops the playback* * Lua ```lua Space.Host.ExecutingObject.EmbeddedVideo.Stop() ``` ##### Pause[​](#pause "Direct link to Pause") void **Pause** () *Pauses currently played video* * Lua ```lua Space.Host.ExecutingObject.EmbeddedVideo.Pause() ``` ##### Resume[​](#resume "Direct link to Resume") void **Resume** () *If the video is currently paused, it will resume playback* * Lua ```lua Space.Host.ExecutingObject.EmbeddedVideo.Resume() ``` ##### SynchorizeUrl[​](#synchorizeurl "Direct link to SynchorizeUrl") void **SynchorizeUrl** () *Synchorize current video* URL * Lua ```lua Space.Host.ExecutingObject.EmbeddedVideo.SynchorizeUrl() ``` ##### ClearRenderTexture[​](#clearrendertexture "Direct link to ClearRenderTexture") void **ClearRenderTexture** () *Clears the Render Texture* * Lua ```lua Space.Host.ExecutingObject.EmbeddedVideo.ClearRenderTexture() ``` #### Properties[​](#properties "Direct link to Properties") ##### State[​](#state "Direct link to State") [SEmbeddedVideoState](/scripting/client-scripting-api-reference/components/sembeddedvideo.md) **State** `get` *The state player is currently in. You can track state changes through StateChangeEvent.* * Lua ```lua CurrentVideoState = Space.Host.ExecutingObject.EmbeddedVideo.State ``` ##### URL[​](#url "Direct link to URL") string **URL** `get` `set` *Current URL set for this Player.* * Lua ```lua CurrentURL = Space.Host.ExecutingObject.EmbeddedVideo.URL ``` ##### AudioSource[​](#audiosource "Direct link to AudioSource") [SAudioSource](/scripting/client-scripting-api-reference/components/saudiosource.md) **AudioSource** `get` `set` *Current AudioSource* * Lua ```lua CurrentAudioSource = Space.Host.ExecutingObject.EmbeddedVideo.AudioSource ``` ##### OutputTexture[​](#outputtexture "Direct link to OutputTexture") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **OutputTexture** `get` *Property Description* * Lua ```lua OutputTexture = Space.Host.ExecutingObject.EmbeddedVideo.OutputTexture ``` ##### Texture[​](#texture "Direct link to Texture") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Texture** `get` *Texture which the player uses to display the video.* * Lua ```lua Texture = Space.Host.ExecutingObject.EmbeddedVideo.Texture ``` ##### Time[​](#time "Direct link to Time") double **Time** `get` `set` *Current player time. Can be set to move the 'playhead' to the specific position.* * Lua ```lua Time = Space.Host.ExecutingObject.EmbeddedVideo.Time ``` ##### Position[​](#position "Direct link to Position") long **Position** `get` *Current Video Frame Position* * Lua ```lua Position = Space.Host.ExecutingObject.EmbeddedVideo.Position ``` ##### UniqueName[​](#uniquename "Direct link to UniqueName") string **UniqueName** `get` *Property Description* * Lua ```lua UniqueName = Space.Host.ExecutingObject.EmbeddedVideo.UniqueName ``` ##### VideoLength[​](#videolength "Direct link to VideoLength") double **VideoLength** `get` *Get the length of the video* * Lua ```lua VideoLength = Space.Host.ExecutingObject.EmbeddedVideo.VideoLength ``` ##### Loop[​](#loop "Direct link to Loop") bool **Loop** `get` `set` *Whether video is set to loop or not* * Lua ```lua Space.Host.ExecutingObject.EmbeddedVideo.Loop = true ``` ##### FrameCount[​](#framecount "Direct link to FrameCount") int **FrameCount** `get` *Returns the frame count of the video* * Lua ```lua FrameCount = Space.Host.ExecutingObject.EmbeddedVideo.FrameCount ``` ##### IsPlaying[​](#isplaying "Direct link to IsPlaying") bool **IsPlaying** `get` *Returns whether the video is playing or not* * Lua ```lua IsPlaying = Space.Host.ExecutingObject.EmbeddedVideo.IsPlaying ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.EmbeddedVideo.GameObject ``` --- ### SEventCalendar #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------- | | void [**SwitchEventType** ](/scripting/client-scripting-api-reference/components/seventcalendar.md#switcheventtype)(int typeNumber) | | void [**ChangeRange** ](/scripting/client-scripting-api-reference/components/seventcalendar.md#changerange)(int range) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------- | | int [**Range** ](/scripting/client-scripting-api-reference/components/seventcalendar.md#range)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/seventcalendar.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### SwitchEventType[​](#switcheventtype "Direct link to SwitchEventType") void **SwitchEventType** (int typeNumber) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.EventCalendar.SwitchEventType(1) ``` ##### ChangeRange[​](#changerange "Direct link to ChangeRange") void **ChangeRange** (int range) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.EventCalendar.ChangeRange(3) ``` #### Properties[​](#properties "Direct link to Properties") ##### Range[​](#range "Direct link to Range") int **Range** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.EventCalendar.Range = 3 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.EventCalendar.GameObject ``` --- ### SFurniture #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------- | | void [**StoreCustomData** ](/scripting/client-scripting-api-reference/components/sfurniture.md#storecustomdata)(string key, string value) | | string [**GetCustomData** ](/scripting/client-scripting-api-reference/components/sfurniture.md#getcustomdata)(string key) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------- | | int [**InventoryItemID** ](/scripting/client-scripting-api-reference/components/sfurniture.md#inventoryitemid)`get` | | SRoomFloor [**Floor** ](/scripting/client-scripting-api-reference/components/sfurniture.md#floor)`get` | | SCollider [**MainCollider** ](/scripting/client-scripting-api-reference/components/sfurniture.md#maincollider)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sfurniture.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### StoreCustomData[​](#storecustomdata "Direct link to StoreCustomData") void **StoreCustomData** (string key, string value) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Furniture.StoreCustomData("AKey", "AValue") ``` ##### GetCustomData[​](#getcustomdata "Direct link to GetCustomData") string **GetCustomData** (string key) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua theValue = Space.Host.ExecutingObject.Furniture.GetCustomData("AKey") ``` #### Properties[​](#properties "Direct link to Properties") ##### InventoryItemID[​](#inventoryitemid "Direct link to InventoryItemID") int **InventoryItemID** `get` *Return the inventory ID of furniture.* * Lua ```lua inventoryID = Space.Host.ExecutingObject.Furniture.InventoryItemID ``` ##### Floor[​](#floor "Direct link to Floor") [SRoomFloor](/scripting/client-scripting-api-reference/components/sroomfloor.md) **Floor** `get` *Return an SRoomFloor component of the floor this furniture is placed on.* * Lua ```lua sRoomFloor = Space.Host.ExecutingObject.Furniture.Floor ``` ##### MainCollider[​](#maincollider "Direct link to MainCollider") [SCollider](/scripting/client-scripting-api-reference/components/scollider.md) **MainCollider** `get` *Property Description* * Lua ```lua collider = Space.Host.ExecutingObject.Furniture.MainCollider ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Furniture.GameObject ``` --- ### SGraphicRaycaster #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | -------------------------------------------------------------------------------------------------------------------- | | SUIRaycastResult [**Raycast** ](/scripting/client-scripting-api-reference/components/sgraphicraycaster.md#raycast)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------------- | | int [**SortOrderPriority** ](/scripting/client-scripting-api-reference/components/sgraphicraycaster.md#sortorderpriority)`get` | | int [**RenderOrderPriority** ](/scripting/client-scripting-api-reference/components/sgraphicraycaster.md#renderorderpriority)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sgraphicraycaster.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Raycast[​](#raycast "Direct link to Raycast") [SUIRaycastResult](/scripting/client-scripting-api-reference/types/suiraycastresult.md) **Raycast** () *Perform the raycast against the list of graphics associated with the Canvas and returns first UI raycast result.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua raycastResult = Space.Host.ExecutingObject.GraphicRaycaster.Raycast() ``` * Lua ```lua local trans = Space.Host.ExecutingObject local canvas = Space.Host.GetReference("Canvas") local gr = canvas.GraphicRaycaster function Update() local raycast = gr.Raycast() Space.Log(raycast.ToString()) end trans.OnUpdate(Update) ``` #### Properties[​](#properties "Direct link to Properties") ##### SortOrderPriority[​](#sortorderpriority "Direct link to SortOrderPriority") int **SortOrderPriority** `get` *Priority of the raycaster based upon render orderPriority of the raycaster based upon sort order.* * Lua ```lua Space.Host.ExecutingObject.GraphicRaycaster.SortOrderPriority= 1 ``` ##### RenderOrderPriority[​](#renderorderpriority "Direct link to RenderOrderPriority") int **RenderOrderPriority** `get` *Priority of the raycaster based upon render order.* * Lua ```lua Space.Host.ExecutingObject.GraphicRaycaster.RenderOrderPriority = 1 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.GraphicRaycaster.GameObject ``` --- ### SHingeJoint #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | SRigidbody [**ConnectedBody** ](/scripting/client-scripting-api-reference/components/shingejoint.md#connectedbody)`get` `set` | | SVector [**Axis** ](/scripting/client-scripting-api-reference/components/shingejoint.md#axis)`get` `set` | | SVector [**Anchor** ](/scripting/client-scripting-api-reference/components/shingejoint.md#anchor)`get` `set` | | SVector [**ConnectedAnchor** ](/scripting/client-scripting-api-reference/components/shingejoint.md#connectedanchor)`get` `set` | | bool [**AutoConfigureConnectedAnchor** ](/scripting/client-scripting-api-reference/components/shingejoint.md#autoconfigureconnectedanchor)`get` `set` | | float [**BreakForce** ](/scripting/client-scripting-api-reference/components/shingejoint.md#breakforce)`get` `set` | | float [**BreakTorque** ](/scripting/client-scripting-api-reference/components/shingejoint.md#breaktorque)`get` `set` | | bool [**EnableCollision** ](/scripting/client-scripting-api-reference/components/shingejoint.md#enablecollision)`get` `set` | | bool [**EnablePreprocessing** ](/scripting/client-scripting-api-reference/components/shingejoint.md#enablepreprocessing)`get` `set` | | SVector [**CurrentForce** ](/scripting/client-scripting-api-reference/components/shingejoint.md#currentforce)`get` | | SVector [**CurrentTorque** ](/scripting/client-scripting-api-reference/components/shingejoint.md#currenttorque)`get` | | float [**MassScale** ](/scripting/client-scripting-api-reference/components/shingejoint.md#massscale)`get` `set` | | float [**ConnectedMassScale** ](/scripting/client-scripting-api-reference/components/shingejoint.md#connectedmassscale)`get` `set` | | SJointMotor [**Motor** ](/scripting/client-scripting-api-reference/components/shingejoint.md#motor)`get` `set` | | SJointLimits [**Limits** ](/scripting/client-scripting-api-reference/components/shingejoint.md#limits)`get` `set` | | SJointSpring [**Spring** ](/scripting/client-scripting-api-reference/components/shingejoint.md#spring)`get` `set` | | bool [**UseMotor** ](/scripting/client-scripting-api-reference/components/shingejoint.md#usemotor)`get` `set` | | bool [**UseLimits** ](/scripting/client-scripting-api-reference/components/shingejoint.md#uselimits)`get` `set` | | bool [**UseSpring** ](/scripting/client-scripting-api-reference/components/shingejoint.md#usespring)`get` `set` | | float [**Velocity** ](/scripting/client-scripting-api-reference/components/shingejoint.md#velocity)`get` | | float [**Angle** ](/scripting/client-scripting-api-reference/components/shingejoint.md#angle)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/shingejoint.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### ConnectedBody[​](#connectedbody "Direct link to ConnectedBody") [SRigidbody](/scripting/client-scripting-api-reference/components/srigidbody.md) **ConnectedBody** `get` `set` *Set joint to a rigidbody. If not set, the joint connects to the world.* * Lua ```lua connectedRigidBody = Space.Host.ExecutingObject.HingeJoint.ConnectedBody ``` ##### Axis[​](#axis "Direct link to Axis") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Axis** `get` `set` *The direction of the axis around which the body swings. The direction is defined in local space.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.Axis = Vector.New(0,1,0) ``` ##### Anchor[​](#anchor "Direct link to Anchor") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Anchor** `get` `set` *The position of the axis around which the body swings. The position is defined in local space.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.Anchor = Vector.New(0, 0.5 , 0) ``` ##### ConnectedAnchor[​](#connectedanchor "Direct link to ConnectedAnchor") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **ConnectedAnchor** `get` `set` *Manual configuration of the connected anchor position.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.ConnectedAnchor = Vector.New(1,1,1) ``` ##### AutoConfigureConnectedAnchor[​](#autoconfigureconnectedanchor "Direct link to AutoConfigureConnectedAnchor") bool **AutoConfigureConnectedAnchor** `get` `set` *If this is enabled, then the Connected Anchor position will be calculated automatically to match the global position of the anchor property. This is the default behavior. If this is disabled, you can configure the position of the connected anchor manually.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.AutoConfigureConnectedAnchor = false ``` ##### BreakForce[​](#breakforce "Direct link to BreakForce") float **BreakForce** `get` `set` *Apply the force to break the joint.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.BreakForce = 20 ``` ##### BreakTorque[​](#breaktorque "Direct link to BreakTorque") float **BreakTorque** `get` `set` *Apply the torque to break the joint.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.BreakTorque = 1 ``` ##### EnableCollision[​](#enablecollision "Direct link to EnableCollision") bool **EnableCollision** `get` `set` *When checked, this enables collisions between bodies connected with a joint.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.EnableCollision = true ``` ##### EnablePreprocessing[​](#enablepreprocessing "Direct link to EnablePreprocessing") bool **EnablePreprocessing** `get` `set` *Disabling preprocessing helps to stabilize impossible-to-fulfil configurations.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.EnablePreprocessing = true ``` ##### CurrentForce[​](#currentforce "Direct link to CurrentForce") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **CurrentForce** `get` *The force applied by the solver to satisfy all constraints.* * Lua ```lua vectorForce = Space.Host.ExecutingObject.HingeJoint.CurrentForce ``` ##### CurrentTorque[​](#currenttorque "Direct link to CurrentTorque") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **CurrentTorque** `get` *The torque applied by the solver to satisfy all constraints.* * Lua ```lua vectorTorque = Space.Host.ExecutingObject.HingeJoint.CurrentTorque ``` ##### MassScale[​](#massscale "Direct link to MassScale") float **MassScale** `get` `set` *The scale to apply to the inverse mass and inertia tensor of the body* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.MassScale = 2 ``` ##### ConnectedMassScale[​](#connectedmassscale "Direct link to ConnectedMassScale") float **ConnectedMassScale** `get` `set` *The scale to apply to the inverse mass and inertia tensor of the connected body* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.ConnectedMassScale = 2 ``` ##### Motor[​](#motor "Direct link to Motor") [SJointMotor](/scripting/client-scripting-api-reference/types/sjointmotor.md) **Motor** `get` `set` *The motor makes the object spin around.* * Lua ```lua jointMotor = Space.Host.ExecutingObject.HingeJoint.Motor ``` ##### Limits[​](#limits "Direct link to Limits") [SJointLimits](/scripting/client-scripting-api-reference/types/sjointlimits.md) **Limits** `get` `set` *The motor makes the object spin around.* * Lua ```lua jointLimits = Space.Host.ExecutingObject.HingeJoint.Limits ``` ##### Spring[​](#spring "Direct link to Spring") [SJointSpring](/scripting/client-scripting-api-reference/types/sjointspring.md) **Spring** `get` `set` *The motor makes the object spin around.* * Lua ```lua jointSpring = Space.Host.ExecutingObject.HingeJoint.Spring ``` ##### UseMotor[​](#usemotor "Direct link to UseMotor") bool **UseMotor** `get` `set` *The motor makes the object spin around.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.UseMotor = true ``` ##### UseLimits[​](#uselimits "Direct link to UseLimits") bool **UseLimits** `get` `set` *If enabled, the angle of the hinge will be restricted within the Min & Max values.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.UseLimits = true ``` ##### UseSpring[​](#usespring "Direct link to UseSpring") bool **UseSpring** `get` `set` *Spring makes the Rigidbody reach for a specific angle compared to its connected body.* * Lua ```lua Space.Host.ExecutingObject.HingeJoint.UseSpring = true ``` ##### Velocity[​](#velocity "Direct link to Velocity") float **Velocity** `get` *The angular velocity of the joint in degrees per second.* * Lua ```lua floatVelocity = Space.Host.ExecutingObject.HingeJoint.Velocity ``` ##### Angle[​](#angle "Direct link to Angle") float **Angle** `get` *The current angle in degrees of the joint relative to its rest position.* * Lua ```lua floatAngle = Space.Host.ExecutingObject.HingeJoint.Angle ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.HingeJoint.GameObject ``` --- ### SLight #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/slight.md#enabled)`get` `set` | | float [**Range** ](/scripting/client-scripting-api-reference/components/slight.md#range)`get` `set` | | float [**SpotAngle** ](/scripting/client-scripting-api-reference/components/slight.md#spotangle)`get` `set` | | float [**Intensity** ](/scripting/client-scripting-api-reference/components/slight.md#intensity)`get` `set` | | SVector [**Color** ](/scripting/client-scripting-api-reference/components/slight.md#color)`get` `set` | | SLightType [**Type** ](/scripting/client-scripting-api-reference/components/slight.md#type)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/slight.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enable/Disable this light.* * Lua ```lua Space.Host.ExecutingObject.Light.Enabled = false ``` * Lua ```lua --the below script will make the object Enable/Disable it's Light component --[Add "light" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject light = Space.Host.GetReference("light").Light OnClick = function() light.Enabled = not light.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Range[​](#range "Direct link to Range") float **Range** `get` `set` *Get/Set the effective range of the light source.* * Lua ```lua Space.Host.ExecutingObject.Light.Range = 8.0 ``` * Lua ```lua --the below script will make a slider set the Light's range --[Add "slider" and "light" references to the Scripting Runtime component] light = Space.Host.GetReference("light").Light slider = Space.Host.GetReference("slider").UISlider OVC = function() light.Range = (slider.Value * 100) --(from 0 to 100) end slider.OnValueChanged(OVC) ``` ##### SpotAngle[​](#spotangle "Direct link to SpotAngle") float **SpotAngle** `get` `set` *The angle of the light's spotlight cone in degrees.* * Lua ```lua Space.Host.ExecutingObject.Light.SpotAngle = 50 ``` * Lua ```lua --the below script will make a slider set the Light's Spot Angle --[Add "slider" and "light" references to the Scripting Runtime component] light = Space.Host.GetReference("light").Light slider = Space.Host.GetReference("slider").UISlider light.Type = 2 --it has to be Spot type OVC = function() light.SpotAngle = (slider.Value * 178) + 1 --(from 1 to 179) end slider.OnValueChanged(OVC) ``` ##### Intensity[​](#intensity "Direct link to Intensity") float **Intensity** `get` `set` *Property Description* * Lua ```lua LightIntensity = Space.Host.ExecutingObject.Light.Intensity ``` * Lua ```lua --the below script will make a slider set the Light's Intensity --[Add "slider" and "light" references to the Scripting Runtime component] light = Space.Host.GetReference("light").Light slider = Space.Host.GetReference("slider").UISlider OVC = function() light.Intensity = (slider.Value * 8) --(from 0 to 8) end slider.OnValueChanged(OVC) ``` ##### Color[​](#color "Direct link to Color") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Color** `get` `set` Get/Set the color of the light. * Lua ```lua Space.Host.ExecutingObject.Light.Color = Color.Red ``` * Lua ```lua --clicking the object will open a color picker that changes Light's color ----[Add "light" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject light = Space.Host.GetReference("light").Light OnChange = function(SColor) light.Color = SColor end OnSelect = function(SColor) light.Color = SColor end OnCancel = function() end OnClick = function() Space.Dialogues.ColorPicker("Pick a color","Ok", OnChange, OnSelect, OnCancel, Color.Red) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Type[​](#type "Direct link to Type") int **Type** `get` `set` Get/Set the type of light this source is. 0 = Directional, 1 = Point, 2 = Spot, 3 = Area. * Lua ```lua Space.Host.ExecutingObject.Light.Type = 0 ``` * Lua ```lua --Clicking the object toggles between the 4 different light types --[Add "light" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject light = Space.Host.GetReference("light").Light OnClick = function() if light.Type == 3 then light.Type = 0 else light.Type = light.Type + 1 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Light.GameObject ``` --- ### SLineRenderer #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------- | | void [**SetPosition** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#setposition)(int index, SVector position) | | SVector [**GetPosition** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#getposition)(int index) | | void [**SetPositions** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#setpositions)(SVector\[] positions) | | SVector\[] [**GetPositions** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#getpositions)() | | void [**SetWidth** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#setwidth)(float start, float end) | | void [**SetColors** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#setcolors)(SColor start, SColor end) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#enabled)`get` `set` | | bool [**ReceiveShadows** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#receiveshadows)`get` `set` | | bool [**IsVisible** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#isvisible)`get` | | bool [**CastShadows** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#castshadows)`get` `set` | | bool [**MotionVectors** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#motionvectors)`get` `set` | | bool [**UseLightProbes** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#uselightprobes)`get` `set` | | float [**StartWidth** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#startwidth)`get` `set` | | float [**EndWidth** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#endwidth)`get` `set` | | float [**WidthMultiplier** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#widthmultiplier)`get` `set` | | SColor [**StartColor** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#startcolor)`get` `set` | | SColor [**EndColor** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#endcolor)`get` `set` | | int [**PositionCount** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#positioncount)`get` `set` | | bool [**UseWorldSpace** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#useworldspace)`get` `set` | | bool [**Loop** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#loop)`get` `set` | | int [**NumCornerVertices** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#numcornervertices)`get` `set` | | int [**NumCapVertices** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#numcapvertices)`get` `set` | | int [**TextureMode** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#texturemode)`get` `set` | | int [**Alignment** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#alignment)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/slinerenderer.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### SetPosition[​](#setposition "Direct link to SetPosition") void **SetPosition** (int index, [SVector](/scripting/client-scripting-api-reference/types/svector.md) position) *Set the position of a vertex in the line.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.LineRenderer.SetPosition(1,Vector.New(0,0,0)) ``` * Lua ```lua --this object will continuously render a line between two different game objects refObject1 = Space.Host.GetReference("object1") --Add in References section of Scripting Runtime Component refObject2 = Space.Host.GetReference("object2") --Add in References section of Scripting Runtime Component thisObject = Space.Host.ExecutingObject function OnUpdateFunction() thisObject.LineRenderer.PositionCount = 2 --this is necessary thisObject.LineRenderer.SetPosition(1,refObject1.WorldPosition) thisObject.LineRenderer.SetPosition(2,refObject2.WorldPosition) end thisObject.OnUpdate(OnUpdateFunction) ``` ##### GetPosition[​](#getposition "Direct link to GetPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GetPosition** (int index) *Get the position of a vertex in the line* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua vectorPosition = Space.Host.ExecutingObject.LineRenderer.GetPosition(1) ``` ##### SetPositions[​](#setpositions "Direct link to SetPositions") void **SetPositions** ([SVector](/scripting/client-scripting-api-reference/types/svector.md)\[] positions) *Set the positions of all vertices in the line.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.LineRenderer.SetPositions({Vector.New(0,0,0) , Vector.New(1,1,1)}) ``` * Lua ```lua --this object will continuously render a line between two different game objects refObject1 = Space.Host.GetReference("object1") --Add in References section of Scripting Runtime Component refObject2 = Space.Host.GetReference("object2") --Add in References section of Scripting Runtime Component thisObject = Space.Host.ExecutingObject function OnUpdateFunction() thisObject.LineRenderer.PositionCount = 2 --this is necessary thisObject.LineRenderer.SetPositions({refObject1.WorldPosition,refObject2.WorldPosition}) end thisObject.OnUpdate(OnUpdateFunction) ``` ##### GetPositions[​](#getpositions "Direct link to GetPositions") [SVector](/scripting/client-scripting-api-reference/types/svector.md)\[] **GetPositions** () *Get the positions of all vertices in the line.* * Lua ```lua tableVectorPositions = Space.Host.ExecutingObject.LineRenderer.GetPositions() ``` ##### SetWidth[​](#setwidth "Direct link to SetWidth") void **SetWidth** (float start, float end) *Set width at start and end* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.LineRenderer.SetWidth(5,7) ``` * Lua ```lua --the below script will make a slider set both the Line Renderer's Start Width and End Width thisGameObject = Space.Host.ExecutingObject refSlider = Space.Host.GetReference("Slider") --Add Reference to Scripting Runtime Component refLineRenderer = Space.Host.GetReference("LineRenderer") --Add Reference to Scripting Runtime Component OVC = function() local width = (refSlider.UISlider.Value * 5) -- from 0 to 5 refLineRenderer.LineRenderer.SetWidth(width,width) end refSlider.UISlider.OnValueChanged(OVC) ``` ##### SetColors[​](#setcolors "Direct link to SetColors") void **SetColors** ([SColor](/scripting/client-scripting-api-reference/types/scolor.md) start, [SColor](/scripting/client-scripting-api-reference/types/scolor.md) end) *Set color at start and end (Line shader necessary)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.LineRenderer.SetColors(Color.Red, Color.Blue) ``` * Lua ```lua --clicking the object will open a color picker that changes both Line Renderer's Start Color and End Color thisGameObject = Space.Host.ExecutingObject originalStartColor = thisGameObject.LineRenderer.StartColor originalEndColor = thisGameObject.LineRenderer.EndColor OnChange = function(SColor) thisGameObject.LineRenderer.SetColors(SColor,SColor) end OnSelect = function(SColor) thisGameObject.LineRenderer.SetColors(SColor,SColor) end OnCancel = function() thisGameObject.LineRenderer.SetColors(originalStartColor,originalEndColor) end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalStartColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Makes the renderer visible if enabled.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.Enabled = false ``` * Lua ```lua --clicking this object toggles it's LineRenderer component On/Off thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.LineRenderer.Enabled = not thisObject.LineRenderer.Enabled end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### ReceiveShadows[​](#receiveshadows "Direct link to ReceiveShadows") bool **ReceiveShadows** `get` `set` *Enable this option to make the line display any shadows that are cast upon it.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.ReceiveShadows = false ``` * Lua ```lua --clicking this object toggles it's Recieve Shadows options thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.LineRenderer.ReceiveShadows = not thisObject.LineRenderer.ReceiveShadows end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### IsVisible[​](#isvisible "Direct link to IsVisible") bool **IsVisible** `get` *To check if this renderer is visible.* * Lua ```lua isVisible = Space.Host.ExecutingObject.LineRenderer.IsVisible ``` ##### CastShadows[​](#castshadows "Direct link to CastShadows") bool **CastShadows** `get` `set` *Specify if and how the line casts shadows when a suitable Light shine on it.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.CastShadows = true ``` ##### MotionVectors[​](#motionvectors "Direct link to MotionVectors") bool **MotionVectors** `get` `set` *Specifies whether this renderer has a per-object motion vector pass. If set to true, this object will have a per-object motion vector pass rendered* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.MotionVectors = true ``` * Lua ```lua --clicking this object toggles it's Line Renderer's Motion Vectors (Per Object Motion or Force no motion) thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.LineRenderer.MotionVectors = not thisObject.LineRenderer.MotionVectors end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### UseLightProbes[​](#uselightprobes "Direct link to UseLightProbes") bool **UseLightProbes** `get` `set` *The light probe interpolation type.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.UseLightProbes = true ``` * Lua ```lua --clicking this object toggles it's Light Probe between Off and Blend Mode thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.LineRenderer.UseLightProbes = not thisObject.LineRenderer.UseLightProbes end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### StartWidth[​](#startwidth "Direct link to StartWidth") float **StartWidth** `get` `set` *Set the width at the start of the line.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.StartWidth = 1 ``` * Lua ```lua --the below script will make a slider change the Line Renderers start width thisGameObject = Space.Host.ExecutingObject refSlider = Space.Host.GetReference("Slider") --Add Reference to Scripting Runtime Component refLineRenderer = Space.Host.GetReference("LineRenderer") --Add Reference to Scripting Runtime Component refSlider.UISlider.Value = refLineRenderer.LineRenderer.StartWidth / 2 --initial position of slider OVC = function() refLineRenderer.LineRenderer.StartWidth = (refSlider.UISlider.Value * 2) -- from 0 to 2 end refSlider.UISlider.OnValueChanged(OVC) ``` ##### EndWidth[​](#endwidth "Direct link to EndWidth") float **EndWidth** `get` `set` *Set the width at the end of the line.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.EndWidth = 2 ``` * Lua ```lua --the below script will make a slider change the Line Renderer's End Width thisGameObject = Space.Host.ExecutingObject refSlider = Space.Host.GetReference("Slider") --Add Reference to Scripting Runtime Component refLineRenderer = Space.Host.GetReference("LineRenderer") --Add Reference to Scripting Runtime Component refSlider.UISlider.Value = refLineRenderer.LineRenderer.EndWidth / 2 --initial position of slider OVC = function() refLineRenderer.LineRenderer.EndWidth = (refSlider.UISlider.Value * 2) -- from 0 to 2 end refSlider.UISlider.OnValueChanged(OVC) ``` ##### WidthMultiplier[​](#widthmultiplier "Direct link to WidthMultiplier") float **WidthMultiplier** `get` `set` *Set an overall multiplier that is applied to the LineRenderer.widthCurve to get the final width of the line.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.WidthMultiplier = 1.2 ``` * Lua ```lua --the below script will make a slider change the Line Renderer's Width Multiplier thisGameObject = Space.Host.ExecutingObject refSlider = Space.Host.GetReference("Slider") --Add Reference to Scripting Runtime Component refLineRenderer = Space.Host.GetReference("LineRenderer") --Add Reference to Scripting Runtime Component refSlider.UISlider.Value = refLineRenderer.LineRenderer.WidthMultiplier / 5 --initial position of slider OVC = function() refLineRenderer.LineRenderer.WidthMultiplier = (refSlider.UISlider.Value * 5) -- from 0 to 5 end refSlider.UISlider.OnValueChanged(OVC) ``` ##### StartColor[​](#startcolor "Direct link to StartColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **StartColor** `get` `set` *Set the color at the start of the line.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.StartColor = Color.Red ``` * Lua ```lua --clicking the object will open a color picker that changes the Line Renderer's Start Color thisGameObject = Space.Host.ExecutingObject originalColor = thisGameObject.LineRenderer.StartColor OnChange = function(SColor) thisGameObject.LineRenderer.StartColor = SColor end OnSelect = function(SColor) thisGameObject.LineRenderer.StartColor = SColor end OnCancel = function() thisGameObject.LineRenderer.StartColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### EndColor[​](#endcolor "Direct link to EndColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **EndColor** `get` `set` *Set the color at the end of the line.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.EndColor = Color.Blue ``` * Lua ```lua --clicking the object will open a color picker that changes the Line Renderer's End Color thisGameObject = Space.Host.ExecutingObject originalColor = thisGameObject.LineRenderer.EndColor OnChange = function(SColor) thisGameObject.LineRenderer.EndColor = SColor end OnSelect = function(SColor) thisGameObject.LineRenderer.EndColor = SColor end OnCancel = function() thisGameObject.LineRenderer.EndColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### PositionCount[​](#positioncount "Direct link to PositionCount") int **PositionCount** `get` `set` *Set/get the number of vertices.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.PositionCount = 10 ``` * Lua ```lua --the below script will make a slider change the Line Renderer's Position Count thisGameObject = Space.Host.ExecutingObject refSlider = Space.Host.GetReference("Slider") --Add Reference to Scripting Runtime Component refLineRenderer = Space.Host.GetReference("LineRenderer") --Add Reference to Scripting Runtime Component refSlider.UISlider.Value = refLineRenderer.LineRenderer.PositionCount / 20 --initial position of slider OVC = function() refLineRenderer.LineRenderer.PositionCount = refSlider.UISlider.Value * 20 -- from 0 to 20 end refSlider.UISlider.OnValueChanged(OVC) ``` ##### UseWorldSpace[​](#useworldspace "Direct link to UseWorldSpace") bool **UseWorldSpace** `get` `set` *If enabled, the points are considered as world space coordinates. If disabled, they are local to the transform of the GameObject to which this component is attached.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.UseWorldSpace = true ``` * Lua ```lua --clicking this object toggles it's Use World Space option thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.LineRenderer.UseWorldSpace = not thisObject.LineRenderer.UseWorldSpace end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Loop[​](#loop "Direct link to Loop") bool **Loop** `get` `set` *Enable this to connect the first and last positions of the line, and form a closed loop.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.Loop = true ``` * Lua ```lua --clicking this object toggles it's Loop option thisObject = Space.Host.ExecutingObject function OnClickFunction() thisObject.LineRenderer.Loop = not thisObject.LineRenderer.Loop end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### NumCornerVertices[​](#numcornervertices "Direct link to NumCornerVertices") int **NumCornerVertices** `get` `set` *Set this to a value greater than 0, to get rounded corners between each segment of the line.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.NumCornerVertices = 2 ``` * Lua ```lua --the below script will make a slider change the Line Renderer's Corner Vertices thisGameObject = Space.Host.ExecutingObject refSlider = Space.Host.GetReference("Slider") --Add Reference to Scripting Runtime Component refLineRenderer = Space.Host.GetReference("LineRenderer") --Add Reference to Scripting Runtime Component refSlider.UISlider.Value = refLineRenderer.LineRenderer.NumCornerVertices / 10 --initial position of slider OVC = function() refLineRenderer.LineRenderer.NumCornerVertices = refSlider.UISlider.Value * 10 -- from 0 to 10 end refSlider.UISlider.OnValueChanged(OVC) ``` ##### NumCapVertices[​](#numcapvertices "Direct link to NumCapVertices") int **NumCapVertices** `get` `set` *Set this to a value greater than 0, to get rounded corners on each end of the line.* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.NumCapVertices = 2 ``` * Lua ```lua --the below script will make a slider change the Line Renderer's End Cap Vertices thisGameObject = Space.Host.ExecutingObject refSlider = Space.Host.GetReference("Slider") --Add Reference to Scripting Runtime Component refLineRenderer = Space.Host.GetReference("LineRenderer") --Add Reference to Scripting Runtime Component refSlider.UISlider.Value = refLineRenderer.LineRenderer.NumCapVertices / 20 --initial position of slider OVC = function() refLineRenderer.LineRenderer.NumCapVertices = refSlider.UISlider.Value * 20 -- from 0 to 10 end refSlider.UISlider.OnValueChanged(OVC) ``` ##### TextureMode[​](#texturemode "Direct link to TextureMode") int **TextureMode** `get` `set` *Control how the Texture is applied to the line. (0-3)* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.TextureMode = 2 ``` * Lua ```lua --clicking this object toggles between it's 4 Texture Modes thisObject = Space.Host.ExecutingObject function OnClickFunction() if thisObject.LineRenderer.TextureMode == 3 then thisObject.LineRenderer.TextureMode = 0 else thisObject.LineRenderer.TextureMode = thisObject.LineRenderer.TextureMode + 1 end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Alignment[​](#alignment "Direct link to Alignment") int **Alignment** `get` `set` *Set the direction that the line faces. (0 or 1)* * Lua ```lua Space.Host.ExecutingObject.LineRenderer.Alignment = 1 ``` * Lua ```lua --clicking this object toggles it's Alignment option between View (0) and Transform Z (1) thisObject = Space.Host.ExecutingObject function OnClickFunction() if thisObject.LineRenderer.Alignment == 0 then thisObject.LineRenderer.Alignment = 1 else thisObject.LineRenderer.Alignment = 0 end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.LineRenderer.GameObject ``` --- ### SMeshRenderer #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------------- | | bool [**IsVisible** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#isvisible)`get` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#enabled)`get` `set` | | SMaterial [**Material** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#material)`get` `set` | | SMaterial [**SharedMaterial** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#sharedmaterial)`get` `set` | | SMaterial\[] [**Materials** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#materials)`get` `set` | | SMaterial\[] [**SharedMaterials** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#sharedmaterials)`get` `set` | | SVector [**BoundsMax** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#boundsmax)`get` | | SVector [**BoundsMin** ](/scripting/client-scripting-api-reference/components/smeshrenderer.md#boundsmin)`get` | #### Properties[​](#properties "Direct link to Properties") ##### IsVisible[​](#isvisible "Direct link to IsVisible") bool **IsVisible** `get` *Returns true if the renderer is visible on any camera. Note that the object is considered visible when it needs to be rendered in the Scene. For example, it might not actually be visible by any camera but still need to be rendered for shadows. When running in the editor, the Scene view cameras will also cause this value to be true.* * Lua ```lua isVisible = Space.Host.ExecutingObject.MeshRenderer.IsVisible ``` * Lua ```lua --this object will move forward only if visible on a camera thisObject = Space.Host.ExecutingObject function OnUpdateFunction() if thisObject.MeshRenderer.IsVisible then thisObject.WorldPosition = thisObject.WorldPosition + (thisObject.Forward * Space.DeltaTime * 0.2) end end thisObject.OnUpdate(OnUpdateFunction) ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Makes the rendered 3D object visible if enabled.* * Lua ```lua Space.Host.ExecutingObject.MeshRenderer.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Mesh Renderer component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.MeshRenderer OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Material[​](#material "Direct link to Material") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **Material** `get` `set` *Returns the first instantiated Material assigned to the renderer.* *Modifying material will change the material for this object only.* *If the material is used by any other renderers, this will clone the shared material and start using it from now on.* * Lua ```lua Space.Host.ExecutingObject.MeshRenderer.Material.SetColor("_Color", 1.0, 0.5, 0.5, 1.0) ``` * Lua ```lua --clicking this object will toggle it's material's color between Red and Black color when clicked thisObject = Space.Host.ExecutingObject function OnClickFunction() if thisObject.MeshRenderer.Material.GetColor("_Color") == Color.Black then thisObject.MeshRenderer.Material.SetColor("_Color", Color.Red) else thisObject.MeshRenderer.Material.SetColor("_Color", Color.Black) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### SharedMaterial[​](#sharedmaterial "Direct link to SharedMaterial") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **SharedMaterial** `get` `set` *The shared material of this object.* *Modifying sharedMaterial will change the appearance of all objects using this material, and change material settings that are stored in the project too.* *It is not recommended to modify materials returned by sharedMaterial. If you want to modify the material of a renderer use material instead.* * Lua ```lua Space.Host.ExecutingObject.MeshRenderer.SharedMaterial.SetColor("_Color", 1.0, 0.5, 0.5, 1.0) ``` * Lua ```lua --clicking this object will toggle it's shared material's color between Red and Black color when clicked thisObject = Space.Host.ExecutingObject function OnClickFunction() if thisObject.MeshRenderer.SharedMaterial.GetColor("_Color") == Color.Black then thisObject.MeshRenderer.SharedMaterial.SetColor("_Color", Color.Red) else thisObject.MeshRenderer.SharedMaterial.SetColor("_Color", Color.Black) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Materials[​](#materials "Direct link to Materials") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md)\[] **Materials** `get` `set` *Returns all the instantiated materials of this object.* *This is an array of all materials used by the renderer. Unity supports a single object using multiple materials; in this case materials contains all the materials. sharedMaterial and material properties return the first used material if there is more than one.* *Modifying any material in materials will change the appearance of only that object.* *Note that like all arrays returned by Unity, this returns a copy of materials array. If you want to change some materials in it, get the value, change an entry and set materials back.* * Lua ```lua mats = Space.Host.ExecutingObject.MeshRenderer.Materials ``` ##### SharedMaterials[​](#sharedmaterials "Direct link to SharedMaterials") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md)\[] **SharedMaterials** `get` `set` *The shared material of this object.* *Modifying sharedMaterial will change the appearance of all objects using this material, and change material settings that are stored in the project too.* *It is not recommended to modify materials returned by sharedMaterial. If you want to modify the material of a renderer use material instead.* * Lua ```lua Space.Host.ExecutingObject.MeshRenderer.SharedMaterial.SetColor("_Color", 1.0, 0.5, 0.5, 1.0) ``` * Lua ```lua --clicking this object will toggle it's shared material's color between Red and Black color when clicked thisObject = Space.Host.ExecutingObject function OnClickFunction() if thisObject.MeshRenderer.SharedMaterial.GetColor("_Color") == Color.Black then thisObject.MeshRenderer.SharedMaterial.SetColor("_Color", Color.Red) else thisObject.MeshRenderer.SharedMaterial.SetColor("_Color", Color.Black) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### BoundsMax[​](#boundsmax "Direct link to BoundsMax") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **BoundsMax** `get` *Property Description* * Lua ```lua Space.Host.ExecutingObject.MeshRenderer.BoundsMax = Vector.New(1,1,1) ``` ##### BoundsMin[​](#boundsmin "Direct link to BoundsMin") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **BoundsMin** `get` *Property Description* * Lua ```lua Space.Host.ExecutingObject.MeshRenderer.BoundsMin = Vector.New(0,0,0) ``` --- ### SModularVehicle #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------- | | void [**ForceSetOwner** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#forcesetowner)(int newOwner, int vehicleId) | | void [**ForceActivate** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#forceactivate)() | | void [**ForceDeactivate** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#forcedeactivate)() | | void [**SuppressTimeout** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#suppresstimeout)() | | void [**OverrideOnClick** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#overrideonclick)(Closure onClick) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------------------- | | float [**VerticalInput** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#verticalinput)`get` `set` | | float [**HorizontalInput** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#horizontalinput)`get` `set` | | float [**StrafeInput** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#strafeinput)`get` `set` | | float [**DepthInput** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#depthinput)`get` `set` | | bool [**IgnoreUserInput** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#ignoreuserinput)`get` `set` | | SAvatar [**Driver** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#driver)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/smodularvehicle.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### ForceSetOwner[​](#forcesetowner "Direct link to ForceSetOwner") void **ForceSetOwner** (int newOwner, int vehicleId) *Force player of the id owned this vehicle, but only between this spawned vehicle. But it seems the new owner can’t drive on this vehicle.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | | | | | * Lua ```lua Space.Host.ExecutingObject.Vehicle.ForceSetOwner(AvatarID) ``` ##### ForceActivate[​](#forceactivate "Direct link to ForceActivate") void **ForceActivate** () *Force player drive on this vehicle* * Lua ```lua Space.Host.ExecutingObject.Vehicle.ForceActivate() ``` ##### ForceDeactivate[​](#forcedeactivate "Direct link to ForceDeactivate") void **ForceDeactivate** () *Force player out of the vehicle*. * Lua ```lua Space.Host.ExecutingObject.Vehicle.ForceDeactivate() ``` ##### SuppressTimeout[​](#suppresstimeout "Direct link to SuppressTimeout") void **SuppressTimeout** () *Disable the vehicle automatic respawn* * Lua ```lua Space.Host.ExecutingObject.Vehicle.SuppressTimeout() ``` ##### OverrideOnClick[​](#overrideonclick "Direct link to OverrideOnClick") void **OverrideOnClick** (Closure onClick) *Add onClick method to this vehicle,onClick have to be a closure.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Vehicle.OverrideOnClick(NewOnClickFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### VerticalInput[​](#verticalinput "Direct link to VerticalInput") float **VerticalInput** `get` `set` *Force vertical offset value, it would be added to vertical control and never set to zero.* * Lua ```lua Space.Host.ExecutingObject.Vehicle.VerticalInput = 0.5 ``` ##### HorizontalInput[​](#horizontalinput "Direct link to HorizontalInput") float **HorizontalInput** `get` `set` *Force horizontal offset value, it would be added to horizontal control and never set to zero.* * Lua ```lua Space.Host.ExecutingObject.Vehicle.HorizontalInput = 0.5 ``` ##### StrafeInput[​](#strafeinput "Direct link to StrafeInput") float **StrafeInput** `get` `set` *Force strafe offset value,it would be added to strafe control and never set to zero.* * Lua ```lua Space.Host.ExecutingObject.Vehicle.StrafeInput = 0.5 ``` ##### DepthInput[​](#depthinput "Direct link to DepthInput") float **DepthInput** `get` `set` *Force depth offset value, it would be added to depth control and never set to zero.* * Lua ```lua Space.Host.ExecutingObject.Vehicle.DepthInput = 0.5 ``` ##### IgnoreUserInput[​](#ignoreuserinput "Direct link to IgnoreUserInput") bool **IgnoreUserInput** `get` `set` *If this option is enabled, user input would be ignored until disable this.* * Lua ```lua Space.Host.ExecutingObject.Vehicle.IgnoreUserInput = true ``` ##### Driver[​](#driver "Direct link to Driver") [SAvatar](/scripting/client-scripting-api-reference/types/savatar.md) **Driver** `get` *Get the player avatar component.* * Lua ```lua DriverAvatar = Space.Host.ExecutingObject.Vehicle.Driver ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns the GameObject of this Vehicle component.* * Lua ```lua VehicleGameObject = Space.Host.ExecutingObject.Vehicle.GameObject ``` --- ### SNavMeshAgent #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------- | | float [**GetAreaCost** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#getareacost)(int areaIndex) | | void [**Move** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#move)(SVector movement) | | void [**Resume** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#resume)() | | void [**SetAreaCost** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#setareacost)(int areaIndex, float cost) | | void [**Stop** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#stop)() | | void [**SetDestination** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#setdestination)(SVector position) | | void [**Warp** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#wrap)(SVector position) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#enabled)`get` `set` | | float [**Accelleration** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#accelleration)`get` `set` | | float [**AngularSpeed** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#angularspeed)`get` `set` | | int [**AreaMask** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#areamask)`get` `set` | | bool [**AutoRepath** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#autorepath)`get` `set` | | bool [**AutoBraking** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#autobraking)`get` `set` | | bool [**AutoTraverseOffMeshLink** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#autotraverseoffmeshlink)`get` `set` | | int [**AvoidancePriority** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#avoidancepriority)`get` `set` | | float [**BaseOffset** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#baseoffset)`get` `set` | | SVector [**DesiredVelocity** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#desiredvelocity)`get` | | SVector [**Destination** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#destination)`get` `set` | | bool [**HasPath** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#haspath)`get` | | float [**Height** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#height)`get` `set` | | bool [**IsOnNavMesh** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#isonnavmesh)`get` | | bool [**IsOnOffMeshLink** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#isonoffmeshlink)`get` | | bool [**IsPathStale** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#ispathstale)`get` | | SVector [**NextPosition** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#nextposition)`get` `set` | | SVector [**PathEndPosition** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#pathendposition)`get` | | bool [**PathPending** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#pathpending)`get` | | float [**Radius** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#radius)`get` `set` | | float [**RemainingDistance** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#remainingdistance)`get` | | float [**Speed** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#speed)`get` `set` | | SVector [**SteeringTarget** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#steeringtarget)`get` | | float [**StoppingDistance** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#stoppingdistance)`get` `set` | | bool [**UpdatePosition** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#updateposition)`get` `set` | | bool [**UpdateRotation** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#updaterotation)`get` `set` | | SVector [**Velocity** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#velocity)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/snavmeshagent.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetAreaCost[​](#getareacost "Direct link to GetAreaCost") float **GetAreaCost** (int areaIndex) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua floatCost = Space.Host.ExecutingObject.NavMeshAgent.GetAreaCost(1) ``` ##### Move[​](#move "Direct link to Move") void **Move** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) movement) *Apply relative movement to current position.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Move(Vector.New(2,0,0)) ``` ##### Resume[​](#resume "Direct link to Resume") void **Resume** () *Resume the NavMesh agent.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Resume() ``` * Lua ```lua agentobject = Space.Scene.Find("Cube") agent = agentobject.NavMeshAgent if agent == nil then agent = Space.Scene.Find("Cube").AddNavMeshAgent() end counts = 0 --stop first, then resume. function StopAndResume() counts = counts +1 if counts > 10 then agent.Stop() end if counts > 50 then agent.Resume() end end agentobject.SubscribeToEvents() agentobject.OnUpdate(StopAndResume) agent.Destination = Space.Scene.Find("TargetTransform").WorldPosition --set destination. ``` ##### SetAreaCost[​](#setareacost "Direct link to SetAreaCost") void **SetAreaCost** (int areaIndex, float cost) *Sets the cost for traversing over areas of the area type.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.SetAreaCost(1, 10.0) ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** () *To stop the NavMesh agent.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Stop() ``` ##### SetDestination[​](#setdestination "Direct link to SetDestination") void **SetDestination** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) position) *Set or update the destination.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.SetDestination(Vector.New(10,0,0)) ``` ##### Warp[​](#warp "Direct link to Warp") void **Warp** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) position) *Warp to the position you want, also you can set agent's world position and vector to make this act as Move(SVector position).* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Warp(Vector.New(10,0,0)) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enable or disable this component.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Nav Mesh Agent component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.NavMeshAgent OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Accelleration[​](#accelleration "Direct link to Accelleration") float **Accelleration** `get` `set` *The maximum acceleration of an agent as it follows a path.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Accelleration = 60 ``` ##### AngularSpeed[​](#angularspeed "Direct link to AngularSpeed") float **AngularSpeed** `get` `set` *Maximum turning speed in while following a path.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.AngularSpeed = 60 ``` ##### AreaMask[​](#areamask "Direct link to AreaMask") int **AreaMask** `get` `set` *Specifies which NavMesh area is passable.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.AreaMask = 3 ``` ##### AutoRepath[​](#autorepath "Direct link to AutoRepath") bool **AutoRepath** `get` `set` *Set the agent attempt to acquire a new path if the existing path becomes invalid.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.AutoRepath = false ``` ##### AutoBraking[​](#autobraking "Direct link to AutoBraking") bool **AutoBraking** `get` `set` *Set the agent brake automatically to avoid overshooting the destination point.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.AutoBraking = false ``` ##### AutoTraverseOffMeshLink[​](#autotraverseoffmeshlink "Direct link to AutoTraverseOffMeshLink") bool **AutoTraverseOffMeshLink** `get` `set` *Set the agent move across OffMeshLinks automatically.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.AutoTraverseOffMeshLink = false ``` ##### AvoidancePriority[​](#avoidancepriority "Direct link to AvoidancePriority") int **AvoidancePriority** `get` `set` *The avoidance priority level.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.AvoidancePriority = 10 ``` ##### BaseOffset[​](#baseoffset "Direct link to BaseOffset") float **BaseOffset** `get` `set` *The relative vertical displacement of the GameObject.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.BaseOffset = 3 ``` ##### DesiredVelocity[​](#desiredvelocity "Direct link to DesiredVelocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **DesiredVelocity** `get` *The desired velocity of the agent including any potential contribution from avoidance.* * Lua ```lua vectorVelocity = Space.Host.ExecutingObject.NavMeshAgent.DesiredVelocity ``` ##### Destination[​](#destination "Direct link to Destination") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Destination** `get` `set` *The desired velocity of the agent including any potential contribution from avoidance.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Destination = Vector.New(10,0,0) ``` ##### HasPath[​](#haspath "Direct link to HasPath") bool **HasPath** `get` *Does the agent currently have a path?* * Lua ```lua hasPath = Space.Host.ExecutingObject.NavMeshAgent.HasPath ``` ##### Height[​](#height "Direct link to Height") float **Height** `get` `set` *The height of the agent for purposes of passing under obstacles, etc.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Height = 5 ``` ##### IsOnNavMesh[​](#isonnavmesh "Direct link to IsOnNavMesh") bool **IsOnNavMesh** `get` *Is the agent currently bound to the navmesh?* * Lua ```lua isOn = Space.Host.ExecutingObject.NavMeshAgent.IsOnNavMesh ``` ##### IsOnOffMeshLink[​](#isonoffmeshlink "Direct link to IsOnOffMeshLink") bool **IsOnOffMeshLink** `get` *Is the agent currently positioned on an OffMeshLink?* * Lua ```lua isOnOff = Space.Host.ExecutingObject.NavMeshAgent.IsOnOffMeshLink ``` ##### IsPathStale[​](#ispathstale "Direct link to IsPathStale") bool **IsPathStale** `get` *Is the current path stale?* * Lua ```lua isStale = Space.Host.ExecutingObject.NavMeshAgent.IsPathStale ``` ##### NextPosition[​](#nextposition "Direct link to NextPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **NextPosition** `get` `set` *Get or set the simulation position of the navmesh agent.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.NextPosition = Vector.New(10, 0, 0) ``` ##### PathEndPosition[​](#pathendposition "Direct link to PathEndPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **PathEndPosition** `get` *End positon of navigation.* * Lua ```lua vectorPathEndPos = Space.Host.ExecutingObject.NavMeshAgent.PathEndPosition ``` ##### PathPending[​](#pathpending "Direct link to PathPending") bool **PathPending** `get` *Is a path in the process of being computed but not yet ready?* * Lua ```lua isPending = Space.Host.ExecutingObject.NavMeshAgent.PathPending ``` ##### Radius[​](#radius "Direct link to Radius") float **Radius** `get` `set` *The avoidance radius for the agent.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Radius = 5 ``` ##### RemainingDistance[​](#remainingdistance "Direct link to RemainingDistance") float **RemainingDistance** `get` *The distance between the agent's position and the destination on the current path.* * Lua ```lua vectorDist = Space.Host.ExecutingObject.NavMeshAgent.RemainingDistance ``` ##### Speed[​](#speed "Direct link to Speed") float **Speed** `get` `set` *Maximum movement speed when following a path.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.Speed = 20 ``` ##### SteeringTarget[​](#steeringtarget "Direct link to SteeringTarget") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **SteeringTarget** `get` *Get the current steering target along the path.* * Lua ```lua vectorSteeringTarget = Space.Host.ExecutingObject.NavMeshAgent.SteeringTarget ``` ##### StoppingDistance[​](#stoppingdistance "Direct link to StoppingDistance") float **StoppingDistance** `get` `set` *Stop within this distance from the target position.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.StoppingDistance = 2 ``` ##### UpdatePosition[​](#updateposition "Direct link to UpdatePosition") bool **UpdatePosition** `get` `set` *Get or set whether the transform position is synchronized with the simulated agent position.* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.UpdatePosition = true ``` ##### UpdateRotation[​](#updaterotation "Direct link to UpdateRotation") bool **UpdateRotation** `get` `set` *Should the agent update the transform orientation?* * Lua ```lua Space.Host.ExecutingObject.NavMeshAgent.UpdateRotation = true ``` ##### Velocity[​](#velocity "Direct link to Velocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Velocity** `get` *access the current velocity of the NavMeshAgent component, or set a velocity to control the agent manually.* * Lua ```lua vectorVelocity = Space.Host.ExecutingObject.NavMeshAgent.Velocity ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.NavMeshAgent.GameObject ``` --- ### SNavMeshObstacle #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------------------- | | bool [**CarveOnlyStationary** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#carveonlystationary)`get` `set` | | bool [**Carving** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#carving)`get` `set` | | SVector [**Center** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#center)`get` `set` | | float [**Height** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#height)`get` `set` | | SVector [**Size** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#size)`get` `set` | | float [**Radius** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#radius)`get` `set` | | int [**Shape** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#shape)`get` `set` | | float [**MoveThreshold** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#movethreshold)`get` `set` | | float [**TimeToStationary** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#timetostationary)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### CarveOnlyStationary[​](#carveonlystationary "Direct link to CarveOnlyStationary") bool **CarveOnlyStationary** `get` `set` *When enabled, the obstacle is carved only when it is stationary. (Only can enabled after carve was ticked).* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.CarveOnlyStationary = true ``` ##### Carving[​](#carving "Direct link to Carving") bool **Carving** `get` `set` *When the Carve checkbox gets ticked, the Nav Mesh Obstacle creates a hole in the NavMesh.* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.Carving = true ``` ##### Center[​](#center "Direct link to Center") SVector **Center** `get` `set` *Center of the obstacle geometry relative to the transform position.* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.Center = Vector.New(0,0,0) ``` ##### Height[​](#height "Direct link to Height") float **Height** `get` `set` *Height of the capsule. (Property of Capsule shape).* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.Height = 40 ``` ##### Size[​](#size "Direct link to Size") SVector **Size** `get` `set` *Size of the box. (Property of Box shape).* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.Size = Vector.New(5,10,15) ``` ##### Radius[​](#radius "Direct link to Radius") float **Radius** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.Radius = 10 ``` ##### Shape[​](#shape "Direct link to Shape") int **Shape** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.Shape = 1 ``` ##### MoveThreshold[​](#movethreshold "Direct link to MoveThreshold") float **MoveThreshold** `get` `set` *Use this property to set the threshold distance for updating a moving carved hole. (Only can take effect after carve was ticked)* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.MoveThreshold = 5 ``` ##### TimeToStationary[​](#timetostationary "Direct link to TimeToStationary") float **TimeToStationary** `get` `set` *The time to wait until the obstacle is treated as stationary. (Only can take effect after carve was ticked).* * Lua ```lua Space.Host.ExecutingObject.NavMeshObstacle.TimeToStationary = 5.0 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.NavMeshObstacle.GameObject ``` --- ### SNetworking #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------------------- | | void [**SendEvent** ](/scripting/client-scripting-api-reference/components/snetworking.md#sendevent)(string eventName) | | void [**ReceiveEvent** ](/scripting/client-scripting-api-reference/components/snetworking.md#receiveevent)(string eventName) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/snetworking.md#enabled)`get` `set` | | bool [**Instanced** ](/scripting/client-scripting-api-reference/components/snetworking.md#instanced)`get` | | string [**NetworkName** ](/scripting/client-scripting-api-reference/components/snetworking.md#networkname)`get` `set` | | bool [**Ready** ](/scripting/client-scripting-api-reference/components/snetworking.md#ready)`get` | | int [**EventCount** ](/scripting/client-scripting-api-reference/components/snetworking.md#eventcount)`get` | | string\[] [**EventNames** ](/scripting/client-scripting-api-reference/components/snetworking.md#eventnames)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/snetworking.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### SendEvent[​](#sendevent "Direct link to SendEvent") void **SendEvent** (string eventName) *Send a networking event event that will be received by other components in the scene with the same network name.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Networking.SendEvent("Light On") ``` ##### ReceiveEvent[​](#receiveevent "Direct link to ReceiveEvent") void **ReceiveEvent** (string eventName) *Invoke an event on the networking component. Normally not necessary to do manually, as this happens automatically when receiving a matching event over the network, but may be useful to initialize a state.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Networking.ReceiveEvent("Light On") ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the simple networking component is Enabled or not* * Lua ```lua Space.Host.ExecutingObject.Networking.Enabled = true ``` ##### Instanced[​](#instanced "Direct link to Instanced") bool **Instanced** `get` *Returns whether this networking component is instanced or not.* * Lua ```lua isInstanced = Space.Host.ExecutingObject.Networking.Instanced ``` ##### NetworkName[​](#networkname "Direct link to NetworkName") string **NetworkName** `get` `set` *Returns or sets the name of the network. Network name must be at least 20 characters long without trailing or leading spaces.* * Lua ```lua Space.Host.ExecutingObject.Networking.NetworkName = "Example Network Name 1" ``` ##### Ready[​](#ready "Direct link to Ready") bool **Ready** `get` *Return whether the networking component is ready to send or not (is initialized).* * Lua ```lua isReady = Space.Host.ExecutingObject.Networking.Ready ``` ##### EventCount[​](#eventcount "Direct link to EventCount") int **EventCount** `get` *Return the number of events this component is waiting to receive.* * Lua ```lua count = Space.Host.ExecutingObject.Networking.EventCount ``` ##### EventNames[​](#eventnames "Direct link to EventNames") string\[] **EventNames** `get` *Return a list of names of events that this component will receive.* * Lua ```lua tableOfNames = Space.Host.ExecutingObject.Networking.EventNames ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Networking.GameObject ``` --- ### SParticleSystem #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Play** ](sparticlesystem#play)(bool withChildren)
void [**Play** ](sparticlesystem#play)() | | void [**Stop** ](sparticlesystem#stop)(bool withChildren)
void [**Stop** ](sparticlesystem#stop)() | | void [**Pause** ](sparticlesystem#pause)(bool withChildren)
void [**Pause** ](sparticlesystem#pause)() | | void [**Clear** ](sparticlesystem#clear)(bool withChildren)
void [**Clear** ](sparticlesystem#clear)() | | bool [**IsAlive** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#isalive)(bool withChildren) | | void [**Emit** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#emit)(int count) | | void [**Simulate** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#simulate)(float time) | | void [**SetTriggerParticles** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#settriggerparticles)(SParticleSystemTriggerEventType type, SParticle\[] sp) | | SParticle\[] [**GetTriggerParticles** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#gettriggerparticles)(SParticleSystemTriggerEventType type) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | Description | | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | float [**StartDelay** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#startdelay)`get` `set` | Start delay in seconds. Use this to delay when playback starts on the system. | | bool [**IsPlaying** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#isplaying)`get` | Determines whether the Particle System is playing. | | bool [**IsEmitting** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#isemitting)`get` | Determines whether the Particle System is emitting particles. A Particle System may stop emitting when its emission module has finished, it has been paused or if the system has been stopped. | | bool [**IsStopped** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#isstopped)`get` | Determines whether the Particle System is stopped. | | bool [**IsPaused** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#ispaused)`get` | Determines whether the Particle System is paused. | | bool [**Loop** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#loop)`get` `set` | Specifies whether the Particle System is looping. If you disable looping on a playing Particle System, it stops at the end of the current loop. | | bool [**PlayOnAwake** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#playonawake)`get` `set` | If set to true, the Particle System will automatically start playing on startup. Note that this setting is shared between all Particle Systems in the current particle effect. | | float [**Time** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#time)`get` `set` | Playback position in seconds. Use this to read current playback time or to seek to a new playback time. | | float [**Duration** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#duration)`get` | The duration of the Particle System in seconds. | | float [**PlaybackSpeed** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#playbackspeed)`get` `set` | The playback speed of the Particle System. 1 is normal playback speed. | | int [**ParticleCount** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#particlecount)`get` | The current number of particles. | | bool [**EnableEmission** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#enableemission)`get` `set` | When set to false, the Particle System will not emit particles. | | float [**EmissionRate** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#emissionrate)`get` `set` | The rate of particle emission. | | float [**EmissionRateOverTime** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#emissionrateovertime)`get` `set` | The rate at which the emitter spawns new particles over time. | | float [**EmissionRateOverDistance** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#emissionrateoverdistance)`get` `set` | The rate at which the emitter spawns new particles over distance. The emitter only spawns new particles when it moves. | | float [**StartSpeed** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#startspeed)`get` `set` | The initial speed of particles when the Particle System first spawns them. | | float [**StartSize** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#startsize)`get` `set` | The initial size of particles when the Particle System first spawns them. | | SColor [**StartColor** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#startcolor)`get` `set` | The initial color of particles when the Particle System first spawns them. | | float [**StartRotation** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#startrotation)`get` `set` | The initial rotation of particles when emitted. When using curves, this value acts as a scale on the curve. Note that the value should be given in radians. | | SVector [**StartRotation3D** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#startrotation3d)`get` `set` | The initial 3D rotation of particles when emitted. When using curves, this value acts as a scale on the curves. Note that the values are Euler angles and should be given in radians. | | float [**StartLifetime** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#startlifetime)`get` `set` | The total lifetime in seconds that particles will have when emitted. When using curves, this value acts as a scale on the curve. This value is set in the particle when it is created by the Particle System. | | float [**GravityModifier** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#gravitymodifier)`get` `set` | A scale that this Particle System applies to gravity. | | int [**MaxParticles** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#maxparticles)`get` `set` | The maximum number of particles to emit. | | uint [**RandomSeed** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#randomseed)`get` `set` | Override the random seed used for the Particle System emission. | | bool [**UseAutoRandomSeed** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#useautorandomseed)`get` `set` | Controls whether the Particle System uses an automatically-generated random number to seed the random number generator. If set to true, the Particle System will generate a new random seed each time it is played. If set to false, ParticleSystem.randomSeed will be used instead, allowing for a constant seed (useful if you want your particles to play in exactly the same way each time) or user-defined random value (for example, you may want to cycle through an array of seeds). | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sparticlesystem.md#gameobject)`get` | | #### Functions[​](#functions "Direct link to Functions") ##### Play[​](#play "Direct link to Play") void **Play** (bool withChildren)
void **Play** () *Sets the Particle Systems into play mode and enables emitting (if it has been disabled).* *If the Particle System has been paused, then this resumes playing from the previous time. If the Particle System has stopped, then the system starts from time 0, and, if it is relevant, the startDelay is applied. Parameter withChildren: Plays all child Particle Systems as well.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Play() --or Space.Host.ExecutingObject.ParticleSystem.Play(true) ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** (bool withChildren)
void **Stop** () *Stops playing the Particle System. Parameter withChildren: Plays all child Particle Systems as well.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Stop() --or Space.Host.ExecutingObject.ParticleSystem.Stop(true) ``` ##### Pause[​](#pause "Direct link to Pause") void **Pause** (bool withChildren)
void **Pause** () *Pauses the system so no new particles are emitted and the existing particles are not updated. Parameter: withChildren: Pauses all child Particle Systems as well.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Pause() --or Space.Host.ExecutingObject.ParticleSystem.Pause(true) ``` ##### Clear[​](#clear "Direct link to Clear") void **Clear** (bool withChildren)
void **Clear** () *Remove all particles in the Particle System.* *This method also removes the particles from any linked sub-emitters. Use the withChildren parameter to remove particles from child Particle Systems that are not sub-emitters of the system.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Clear() --or Space.Host.ExecutingObject.ParticleSystem.Clear(true) ``` ##### IsAlive[​](#isalive "Direct link to IsAlive") bool **IsAlive** (bool withChildren) *Returns True if the Particle System contains live particles or is still creating new particles. False if the Particle System has stopped emitting particles and all particles are dead. Parameter withChildren: checks all child Particle Systems as well.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isAlive = Space.Host.ExecutingObject.ParticleSystem.IsAlive() --or isAlive = Space.Host.ExecutingObject.ParticleSystem.IsAlive(true) ``` ##### Emit[​](#emit "Direct link to Emit") void **Emit** (int count) *Emit 'count' particles immediately.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Emit(100) ``` ##### Simulate[​](#simulate "Direct link to Simulate") void **Simulate** (float time) *Fast-forwards the Particle System by simulating particles over 'time' seconds, then pauses it.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Simulate(5.0) ``` ##### SetTriggerParticles[​](#settriggerparticles "Direct link to SetTriggerParticles") void **SetTriggerParticles** (int type, [SParticle](/scripting/client-scripting-api-reference/types/sparticle.md)\[] sp) *Write modified particles back to the Particle System, during a call to OnParticleTrigger. type - Type of trigger to return particles for. sp -- Particle array* | Parameter | Type | Description | | --------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | type | int | *Type of trigger to return particles for.*
*1 = Inside*
*2 = Outside*
*3 = Enter*
*4 = Exit* | | sp | [SParticle](/scripting/client-scripting-api-reference/types/sparticle.md)\[] | A table of SParticle | * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.SetTriggerParticles(0,ParticlesArray) ``` ##### GetTriggerParticles[​](#gettriggerparticles "Direct link to GetTriggerParticles") [SParticle](/scripting/client-scripting-api-reference/types/sparticle.md)\[] **GetTriggerParticles** (int type) *Get the particles that met the condition in the particle trigger module. his method is typically called from MonoBehaviour.OnParticleTrigger in response to a trigger callback.* | Parameter | Type | Description | | --------- | ---- | ---------------------------------------------------------------------------------------------------------------- | | type | int | *Type of trigger to return particles for.*
*1 = Inside*
*2 = Outside*
*3 = Enter*
*4 = Exit* | * Lua ```lua ParticlesArray = Space.Host.ExecutingObject.ParticleSystem.GetTriggerParticles(0) ``` #### Properties[​](#properties "Direct link to Properties") ##### StartDelay[​](#startdelay "Direct link to StartDelay") float **StartDelay** `get` `set` *Start delay in seconds. Use this to delay when playback starts on the system.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.StartDelay = 5 ``` ##### IsPlaying[​](#isplaying "Direct link to IsPlaying") bool **IsPlaying** `get` *Determines whether the Particle System is playing.* * Lua ```lua isPlaying = Space.Host.ExecutingObject.ParticleSystem.IsPlaying ``` ##### IsEmitting[​](#isemitting "Direct link to IsEmitting") bool **IsEmitting** `get` *Determines whether the Particle System is emitting particles. A Particle System may stop emitting when its emission module has finished, it has been paused or if the system has been stopped.* * Lua ```lua isEmitting = Space.Host.ExecutingObject.ParticleSystem.IsEmitting ``` ##### IsStopped[​](#isstopped "Direct link to IsStopped") bool **IsStopped** `get` *Determines whether the Particle System is stopped.* * Lua ```lua isStopped = Space.Host.ExecutingObject.ParticleSystem.IsStopped ``` ##### IsPaused[​](#ispaused "Direct link to IsPaused") bool **IsPaused** `get` *Determines whether the Particle System is paused.* * Lua ```lua isPaused = Space.Host.ExecutingObject.ParticleSystem.IsPaused ``` ##### Loop[​](#loop "Direct link to Loop") bool **Loop** `get` `set` *Specifies whether the Particle System is looping. If you disable looping on a playing Particle System, it stops at the end of the current loop.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Loop = true ``` ##### PlayOnAwake[​](#playonawake "Direct link to PlayOnAwake") bool **PlayOnAwake** `get` `set` *If set to true, the Particle System will automatically start playing on startup. Note that this setting is shared between all Particle Systems in the current particle effect.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.PlayOnAwake ``` ##### Time[​](#time "Direct link to Time") float **Time** `get` `set` *Playback position in seconds. Use this to read current playback time or to seek to a new playback time.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.Time = 5.0 ``` ##### Duration[​](#duration "Direct link to Duration") float **Duration** `get` *The duration of the Particle System in seconds.* * Lua ```lua duration = Space.Host.ExecutingObject.ParticleSystem.Duration ``` ##### PlaybackSpeed[​](#playbackspeed "Direct link to PlaybackSpeed") float **PlaybackSpeed** `get` `set` *The playback speed of the Particle System. 1 is normal playback speed.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.PlaybackSpeed = 1.5 ``` ##### ParticleCount[​](#particlecount "Direct link to ParticleCount") int **ParticleCount** `get` *The current number of particles.* * Lua ```lua count = Space.Host.ExecutingObject.ParticleSystem.ParticleCount ``` ##### EnableEmission[​](#enableemission "Direct link to EnableEmission") bool **EnableEmission** `get` `set` *When set to false, the Particle System will not emit particles.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.EnableEmission = true ``` ##### EmissionRate[​](#emissionrate "Direct link to EmissionRate") float **EmissionRate** `get` `set` *The rate of particle emission.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.EmissionRate = 10 ``` ##### EmissionRateOverTime[​](#emissionrateovertime "Direct link to EmissionRateOverTime") float **EmissionRateOverTime** `get` `set` *The rate at which the emitter spawns new particles over time.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.EmissionRateOverTime = 10 ``` ##### EmissionRateOverDistance[​](#emissionrateoverdistance "Direct link to EmissionRateOverDistance") float **EmissionRateOverDistance** `get` `set` *The rate at which the emitter spawns new particles over distance. The emitter only spawns new particles when it moves.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.EmissionRateOverDistance = 10 ``` ##### StartSpeed[​](#startspeed "Direct link to StartSpeed") float **StartSpeed** `get` `set` *The initial speed of particles when the Particle System first spawns them.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.StartSpeed = 10 ``` ##### StartSize[​](#startsize "Direct link to StartSize") float **StartSize** `get` `set` *The initial size of particles when the Particle System first spawns them.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.StartSize = 1.2 ``` ##### StartColor[​](#startcolor "Direct link to StartColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **StartColor** `get` `set` *The initial color of particles when the Particle System first spawns them.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.StartColor = Color.Red ``` ##### StartRotation[​](#startrotation "Direct link to StartRotation") float **StartRotation** `get` `set` *The initial rotation of particles when emitted. When using curves, this value acts as a scale on the curve. Note that the value should be given in radians.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.StartRotation = 20.5 ``` ##### StartRotation3D[​](#startrotation3d "Direct link to StartRotation3D") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **StartRotation3D** `get` `set` *The initial 3D rotation of particles when emitted. When using curves, this value acts as a scale on the curves. Note that the values are Euler angles and should be given in radians.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.StartRotation3D = Vector.New(0,20,20) ``` ##### StartLifetime[​](#startlifetime "Direct link to StartLifetime") float **StartLifetime** `get` `set` *The total lifetime in seconds that particles will have when emitted. When using curves, this value acts as a scale on the curve. This value is set in the particle when it is created by the Particle System.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.StartLifetime = 20 ``` ##### GravityModifier[​](#gravitymodifier "Direct link to GravityModifier") float **GravityModifier** `get` `set` *A scale that this Particle System applies to gravity.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.GravityModifier = 1.2 ``` ##### MaxParticles[​](#maxparticles "Direct link to MaxParticles") int **MaxParticles** `get` `set` *The maximum number of particles to emit.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.MaxParticles = 500 ``` ##### RandomSeed[​](#randomseed "Direct link to RandomSeed") uint **RandomSeed** `get` `set` *Override the random seed used for the Particle System emission.* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.RandomSeed = 23423423 ``` * Lua ```lua spawningparticles = Space.Scene.Find("Particles") --get particle object and get the particle system component on it. particles=spawningparticles.ParticleSystem --set random seed. particles.UseAutoRandomSeed = false particles.RandomSeed = 123456 ``` ##### UseAutoRandomSeed[​](#useautorandomseed "Direct link to UseAutoRandomSeed") bool **UseAutoRandomSeed** `get` `set` *Controls whether the Particle System uses an automatically-generated random number to seed the random number generator. If set to true, the Particle System will generate a new random seed each time it is played. If set to false, ParticleSystem.randomSeed will be used instead, allowing for a constant seed (useful if you want your particles to play in exactly the same way each time) or user-defined random value (for example, you may want to cycle through an array of seeds).* * Lua ```lua Space.Host.ExecutingObject.ParticleSystem.UseAutoRandomSeed = true ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.ParticleSystem.GameObject ``` --- ### SPlayableDirector #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------ | | void [**Play** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#play)() | | void [**Stop** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#stop)() | | void [**Pause** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#pause)() | | void [**Resume** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#resume)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------- | | int [**State** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#state)`get` | | double [**Time** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#time)`get` `set` | | double [**InitialTime** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#initialtime)`get` `set` | | double [**Duration** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#duration)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/splayabledirector.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Play[​](#play "Direct link to Play") void **Play** () *Instantiates a Playable using the provided PlayableAsset and starts playback.* * Lua ```lua Space.Host.ExecutingObject.Director.Play() ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** () *Stop playback of the current Playable and destroys the corresponding graph.* * Lua ```lua Space.Host.ExecutingObject.Director.Stop() ``` ##### Pause[​](#pause "Direct link to Pause") void **Pause** () *Pause playback of the currently running playable.* * Lua ```lua Space.Host.ExecutingObject.Director.Pause() ``` ##### Resume[​](#resume "Direct link to Resume") void **Resume** () *Resume playing a paused playable.* * Lua ```lua Space.Host.ExecutingObject.Director.Resume() ``` #### Properties[​](#properties "Direct link to Properties") ##### State[​](#state "Direct link to State") int **State** `get` *The current playing state of the component.* * Lua ```lua intState = Space.Host.ExecutingObject.Director.State ``` ##### Time[​](#time "Direct link to Time") double **Time** `get` `set` *The component's current time. This value is incremented according to the PlayableDirector.timeUpdateMode when it is playing. You can also change this value manually.* * Lua ```lua Space.Host.ExecutingObject.Director.Time = 10 ``` ##### InitialTime[​](#initialtime "Direct link to InitialTime") double **InitialTime** `get` `set` *The time at which the Playable should start when first played.* * Lua ```lua Space.Host.ExecutingObject.Director.Time = 2 ``` ##### Duration[​](#duration "Direct link to Duration") double **Duration** `get` *The duration of the Playable in seconds.* * Lua ```lua duration = Space.Host.ExecutingObject.Director.Duration ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Director.GameObject ``` --- ### SPostProcessVolume #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/spostprocessvolume.md#enabled)`get` `set` | | bool [**IsGlobal** ](/scripting/client-scripting-api-reference/components/spostprocessvolume.md#isglobal)`get` `set` | | float? [**BlendDistance** ](/scripting/client-scripting-api-reference/components/spostprocessvolume.md#blenddistance)`get` `set` | | float?? [**Weight** ](/scripting/client-scripting-api-reference/components/spostprocessvolume.md#weight)`get` `set` | | float [**Priority** ](/scripting/client-scripting-api-reference/components/spostprocessvolume.md#priority)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/spostprocessvolume.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enable or disable post effect volume.* * Lua ```lua Space.Host.ExecutingObject.PostProcessVolume.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Post Process Volume component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.PostProcessVolume OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### IsGlobal[​](#isglobal "Direct link to IsGlobal") bool **IsGlobal** `get` `set` *Should this volume be applied to the whole scene?* * Lua ```lua Space.Host.ExecutingObject.PostProcessVolume.IsGlobal = true ``` ##### BlendDistance[​](#blenddistance "Direct link to BlendDistance") float? **BlendDistance** `get` `set` *The outer distance to start blending from. A value of 0 means no blending and the volume overrides will be applied immediately upon entry.* * Lua ```lua Space.Host.ExecutingObject.PostProcessVolume.BlendDistance = 0 ``` ##### Weight[​](#weight "Direct link to Weight") float?? **Weight** `get` `set` *The total weight of this volume in the scene. 0 means it won't do anything, 1 means full effect.* * Lua ```lua Space.Host.ExecutingObject.PostProcessVolume.Weight = 1 ``` ##### Priority[​](#priority "Direct link to Priority") float **Priority** `get` `set` *The volume priority in the stack. Higher number means higher priority. Negative values are supported.* * Lua ```lua Space.Host.ExecutingObject.PostProcessVolume.Priority = 100 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.PostProcessVolume.GameObject ``` --- ### SRectTransform #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**SetParent** ](/scripting/client-scripting-api-reference/components/srecttransform.md#setparent)(SGameObject parent, bool worldPositionStays) | | void [**SetInsetAndSizeFromParentEdge** ](/scripting/client-scripting-api-reference/components/srecttransform.md#setinsetandsizefromparentedge)(int edge, float inset, float size) | | void [**SetSizeWithCurrentAnchors** ](/scripting/client-scripting-api-reference/components/srecttransform.md#setsizewithcurrentanchors)(bool vertical, float size) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------- | | SRect [**Rect** ](/scripting/client-scripting-api-reference/components/srecttransform.md#rect)`get` | | SVector [**anchorMin** ](/scripting/client-scripting-api-reference/components/srecttransform.md#anchormin)`get` `set` | | SVector [**anchorMax** ](/scripting/client-scripting-api-reference/components/srecttransform.md#anchormax)`get` `set` | | SVector [**anchoredPosition3D** ](/scripting/client-scripting-api-reference/components/srecttransform.md#anchoredposition3d)`get` `set` | | SVector [**anchoredPosition** ](/scripting/client-scripting-api-reference/components/srecttransform.md#anchoredposition)`get` `set` | | SVector [**sizeDelta** ](/scripting/client-scripting-api-reference/components/srecttransform.md#sizedelta)`get` `set` | | SVector [**pivot** ](/scripting/client-scripting-api-reference/components/srecttransform.md#pivot)`get` `set` | | SVector [**offsetMin** ](/scripting/client-scripting-api-reference/components/srecttransform.md#offsetmin)`get` `set` | | SVector [**offsetMax** ](/scripting/client-scripting-api-reference/components/srecttransform.md#offsetmax)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/srecttransform.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### SetParent[​](#setparent "Direct link to SetParent") void **SetParent** ([SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) parent, bool worldPositionStays) *Set the parent of the transform.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.RectTransform.SetParent(anotherGameObject) ``` ##### SetInsetAndSizeFromParentEdge[​](#setinsetandsizefromparentedge "Direct link to SetInsetAndSizeFromParentEdge") void **SetInsetAndSizeFromParentEdge** (int edge, float inset, float size) *Set the distance of this rectangle relative to a specified edge of the parent rectangle, while also setting its size.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.RectTransform.SetInsetAndSizeFromParentEdge(2, 3.0, 10.0) ``` ##### SetSizeWithCurrentAnchors[​](#setsizewithcurrentanchors "Direct link to SetSizeWithCurrentAnchors") void **SetSizeWithCurrentAnchors** (bool vertical, float size) *Makes the RectTransform calculated rect be a given size on the specified axis.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.RectTransform.SetSizeWithCurrentAnchors(true, 10.0) ``` #### Properties[​](#properties "Direct link to Properties") ##### Rect[​](#rect "Direct link to Rect") [SRect](/scripting/client-scripting-api-reference/types/srect.md) **Rect** `get` *Property Description* * Lua ```lua rect = Space.Host.ExecutingObject.RectTransform.Rect ``` ##### anchorMin[​](#anchormin "Direct link to anchorMin") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **anchorMin** `get` `set` *The normalized position in the parent RectTransform that the lower left corner is anchored to.* * Lua ```lua Space.Host.ExecutingObject.RectTransform.anchorMin= Vector.New(0.3,0.3,0) ``` ##### anchorMax[​](#anchormax "Direct link to anchorMax") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **anchorMax** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.RectTransform.anchorMax= Vector.New(0.7,0.6,0) ``` ##### anchoredPosition3D[​](#anchoredposition3d "Direct link to anchoredPosition3D") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **anchoredPosition3D** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.RectTransform.anchoredPosition3D= Vector.New(0.7,0.6,0) ``` ##### anchoredPosition[​](#anchoredposition "Direct link to anchoredPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **anchoredPosition** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.RectTransform.anchoredPosition= Vector.New(0.7,0.6,0) ``` ##### sizeDelta[​](#sizedelta "Direct link to sizeDelta") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **sizeDelta** `get` `set` *The size of this RectTransform relative to the distances between the anchors.* * Lua ```lua Space.Host.ExecutingObject.RectTransform.sizeDelta= Vector.New(90,90,0) ``` ##### pivot[​](#pivot "Direct link to pivot") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **pivot** `get` `set` *The normalized position in this RectTransform that it rotates around.* * Lua ```lua Space.Host.ExecutingObject.RectTransform.pivot= Vector.New(0.4,0.4,0) ``` ##### offsetMin[​](#offsetmin "Direct link to offsetMin") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **offsetMin** `get` `set` *The offset of the lower left corner of the rectangle relative to the lower left anchor.* * Lua ```lua Space.Host.ExecutingObject.RectTransform.offsetMin= Vector.New(-50,-50,0) ``` ##### offsetMax[​](#offsetmax "Direct link to offsetMax") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **offsetMax** `get` `set` *The offset of the upper right corner of the rectangle relative to the upper right anchor.* * Lua ```lua Space.Host.ExecutingObject.RectTransform.offsetMax= Vector.New(50,50,0) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.RectTransform.GameObject ``` --- ### SReflectionProbe #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------- | | void [**RenderProbe** ](/scripting/client-scripting-api-reference/components/sreflectionprobe.md#functionname)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------- | | SVector [**Center** ](/scripting/client-scripting-api-reference/components/sreflectionprobe.md#center)`get` `set` | | SVector [**Size** ](/scripting/client-scripting-api-reference/components/sreflectionprobe.md#size)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sreflectionprobe.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### RenderProbe[​](#renderprobe "Direct link to RenderProbe") void **RenderProbe** () *Refreshes the probe's cubemap.* * Lua ```lua Space.Host.ExecutingObject.ReflectionProbe.RenderProbe() ``` #### Properties[​](#properties "Direct link to Properties") ##### Center[​](#center "Direct link to Center") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Center** `get` `set` *The center of the box area in which reflections will be applied to the objects. Measured in the probe's local space.* * Lua ```lua vectorCenter = Space.Host.ExecutingObject.ReflectionProbe.Center ``` ##### Size[​](#size "Direct link to Size") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Size** `get` `set` *The size of the box area in which reflections will be applied to the objects. Measured in the probe's local space.* * Lua ```lua vectorSize = Space.Host.ExecutingObject.ReflectionProbe.Size ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.ReflectionProbe.GameObject ``` --- ### SRenderer #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------- | | bool [**IsVisible** ](/scripting/client-scripting-api-reference/components/srenderer.md#isvisible)`get` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/srenderer.md#enabled)`get` `set` | | SMaterial [**Material** ](/scripting/client-scripting-api-reference/components/srenderer.md#material)`get` `set` | | SMaterial [**SharedMaterial** ](/scripting/client-scripting-api-reference/components/srenderer.md#sharedmaterial)`get` `set` | | SMaterial\[] [**Materials** ](/scripting/client-scripting-api-reference/components/srenderer.md#materials)`get` `set` | | SMaterial\[] [**SharedMaterials** ](/scripting/client-scripting-api-reference/components/srenderer.md#sharedmaterials)`get` `set` | | SVector [**BoundsMax** ](/scripting/client-scripting-api-reference/components/srenderer.md#boundsmax)`get` | | SVector [**BoundsMin** ](/scripting/client-scripting-api-reference/components/srenderer.md#boundsmin)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/srenderer.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### IsVisible[​](#isvisible "Direct link to IsVisible") bool **IsVisible** `get` *Returns true if the renderer is visible on any camera. Note that the object is considered visible when it needs to be rendered in the Scene. For example, it might not actually be visible by any camera but still need to be rendered for shadows. When running in the editor, the Scene view cameras will also cause this value to be true.* * Lua ```lua isVisible = Space.Host.ExecutingObject.Renderer.IsVisible ``` * Lua ```lua --this object will move forward only if visible on a camera thisObject = Space.Host.ExecutingObject function OnUpdateFunction() if thisObject.Renderer.IsVisible then thisObject.WorldPosition = thisObject.WorldPosition + (thisObject.Forward * Space.DeltaTime * 0.2) end end thisObject.OnUpdate(OnUpdateFunction) ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Get/Set if the rendered object is visible.* * Lua ```lua Space.Host.ExecutingObject.Renderer.Enabled = false ``` * Lua ```lua --clicking this object will make it disappear/reappear thisGameObject = Space.Host.ExecutingObject OnClick = function() thisGameObject.Renderer.Enabled = not thisGameObject.Renderer.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Material[​](#material "Direct link to Material") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **Material** `get` `set` *Returns the first instantiated Material assigned to the renderer.* *Modifying material will change the material for this object only.* *If the material is used by any other renderers, this will clone the shared material and start using it from now on.* * Lua ```lua Space.Host.ExecutingObject.Renderer.Material.SetColor("_Color", 1.0, 0.5, 0.5, 1.0) ``` * Lua ```lua --clicking this object will toggle it's material's color between Red and Black color when clicked thisObject = Space.Host.ExecutingObject function OnClickFunction() if thisObject.Renderer.Material.GetColor("_Color") == Color.Black then thisObject.Renderer.Material.SetColor("_Color", Color.Red) else thisObject.Renderer.Material.SetColor("_Color", Color.Black) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### SharedMaterial[​](#sharedmaterial "Direct link to SharedMaterial") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **SharedMaterial** `get` `set` *The shared material of this object.* *Modifying sharedMaterial will change the appearance of all objects using this material, and change material settings that are stored in the project too.* *It is not recommended to modify materials returned by sharedMaterial. If you want to modify the material of a renderer use material instead.* * Lua ```lua Space.Host.ExecutingObject.Renderer.SharedMaterial.SetColor("_Color", 1.0, 0.5, 0.5, 1.0) ``` * Lua ```lua --clicking this object will toggle it's shared material's color between Red and Black color when clicked thisObject = Space.Host.ExecutingObject function OnClickFunction() if thisObject.Renderer.SharedMaterial.GetColor("_Color") == Color.Black then thisObject.Renderer.SharedMaterial.SetColor("_Color", Color.Red) else thisObject.Renderer.SharedMaterial.SetColor("_Color", Color.Black) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Materials[​](#materials "Direct link to Materials") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md)\[] **Materials** `get` `set` *Returns all the instantiated materials of this object.* *This is an array of all materials used by the renderer. Unity supports a single object using multiple materials; in this case materials contains all the materials. sharedMaterial and material properties return the first used material if there is more than one.* *Modifying any material in materials will change the appearance of only that object.* *Note that like all arrays returned by Unity, this returns a copy of materials array. If you want to change some materials in it, get the value, change an entry and set materials back.* * Lua ```lua mats = Space.Host.ExecutingObject.Renderer.Materials ``` ##### SharedMaterials[​](#sharedmaterials "Direct link to SharedMaterials") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md)\[] **SharedMaterials** `get` `set` *All the shared materials of this object.* *This is an array of all materials used by the renderer. Unity supports a single object using multiple materials; in this case sharedMaterials contains all the materials. sharedMaterial and material properties return the first used material if there is more than one.* *Modifying any material in sharedMaterials will change the appearance of all objects using this material, and change material settings that are stored in the project too.* *It is not recommended to modify materials returned by sharedMaterials. If you want to modify the material of a renderer use material instead.* *Note that like all arrays returned by Unity, this returns a copy of materials array. If you want to change some materials in it, get the value, change an entry and set materials back.* * Lua ```lua sharedMats = Space.Host.ExecutingObject.Renderer.SharedMaterials ``` ##### BoundsMax[​](#boundsmax "Direct link to BoundsMax") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **BoundsMax** `get` *Property Description* * Lua ```lua vectorBoundsMax = Space.Host.ExecutingObject.Renderer.BoundsMax ``` ##### BoundsMin[​](#boundsmin "Direct link to BoundsMin") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **BoundsMin** `get` *Property Description* * Lua ```lua vectorBoundsMin = Space.Host.ExecutingObject.Renderer.BoundsMin ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Renderer.GameObject ``` --- ### SRigidbody #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | void [**AddExplosionForce** ](/scripting/client-scripting-api-reference/components/srigidbody.md#addexplosionforce)(float explosionForce, SVector explosionPosition, float explosionRadius, float upwardsModifier) | | void [**AddForce** ](/scripting/client-scripting-api-reference/components/srigidbody.md#addforce)(SVector force) | | void [**AddForceAtPosition** ](/scripting/client-scripting-api-reference/components/srigidbody.md#addforceatposition)(SVector force, SVector position) | | void [**AddRelativeTorque** ](/scripting/client-scripting-api-reference/components/srigidbody.md#addrelativetorque)(SVector torque) | | void [**AddTorque** ](/scripting/client-scripting-api-reference/components/srigidbody.md#addtorque)(SVector torque) | | SVector [**ClosestPointOnBounds** ](/scripting/client-scripting-api-reference/components/srigidbody.md#closestpointonbounds)(SVector input) | | SVector [**GetPointVelocity** ](/scripting/client-scripting-api-reference/components/srigidbody.md#getpointvelocity)(SVector worldPoint) | | SVector [**GetRelativePointVelocity** ](/scripting/client-scripting-api-reference/components/srigidbody.md#getrelativepointvelocity)(SVector point) | | void [**MovePosition** ](/scripting/client-scripting-api-reference/components/srigidbody.md#moveposition)(SVector point) | | void [**MoveRotation** ](/scripting/client-scripting-api-reference/components/srigidbody.md#moverotation)(SQuaternion rotation) | | void [**ResetCenterOfMass** ](/scripting/client-scripting-api-reference/components/srigidbody.md#resetcenterofmass)() | | void [**ResetIntertiaTensor** ](/scripting/client-scripting-api-reference/components/srigidbody.md#resetintertiatensor)() | | void [**Sleep** ](/scripting/client-scripting-api-reference/components/srigidbody.md#sleep)() | | void [**WakeUp** ](/scripting/client-scripting-api-reference/components/srigidbody.md#wakeup)() | | SPhysicsHit\[] [**SweepTestAll** ](/scripting/client-scripting-api-reference/components/srigidbody.md#sweeptestall)(SVector direction, float distance) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------------- | | float [**AngularDrag** ](/scripting/client-scripting-api-reference/components/srigidbody.md#angulardrag)`get` `set` | | SVector [**AngularVelocity** ](/scripting/client-scripting-api-reference/components/srigidbody.md#angularvelocity)`get` `set` | | SVector [**CenterOfMass** ](/scripting/client-scripting-api-reference/components/srigidbody.md#centerofmass)`get` `set` | | float [**Drag** ](/scripting/client-scripting-api-reference/components/srigidbody.md#drag)`get` `set` | | bool [**FreezeRotation** ](/scripting/client-scripting-api-reference/components/srigidbody.md#freezerotation)`get` `set` | | bool [**Kinematic** ](/scripting/client-scripting-api-reference/components/srigidbody.md#kinematic)`get` `set` | | float [**Mass** ](/scripting/client-scripting-api-reference/components/srigidbody.md#mass)`get` `set` | | float [**MaxAngularVelocity** ](/scripting/client-scripting-api-reference/components/srigidbody.md#maxangularvelocity)`get` `set` | | float [**MaxDepenetrationVelocity** ](/scripting/client-scripting-api-reference/components/srigidbody.md#maxdepenetrationvelocity)`get` `set` | | bool [**UseGravity** ](/scripting/client-scripting-api-reference/components/srigidbody.md#usegravity)`get` `set` | | SVector [**Velocity** ](/scripting/client-scripting-api-reference/components/srigidbody.md#velocity)`get` `set` | | SVector [**WorldCenterOfMass** ](/scripting/client-scripting-api-reference/components/srigidbody.md#worldcenterofmass)`get` | | bool [**Sleeping** ](/scripting/client-scripting-api-reference/components/srigidbody.md#sleeping)`get` | | float [**Density** ](/scripting/client-scripting-api-reference/components/srigidbody.md#density)`set` | | SVector [**InertiaTensor** ](/scripting/client-scripting-api-reference/components/srigidbody.md#inertiatensor)`get` `set` | | SQuaternion [**InertiaTensorRotation** ](/scripting/client-scripting-api-reference/components/srigidbody.md#inertiatensorrotation)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/srigidbody.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### AddExplosionForce[​](#addexplosionforce "Direct link to AddExplosionForce") void **AddExplosionForce** (float explosionForce, [SVector](/scripting/client-scripting-api-reference/types/svector.md) explosionPosition, float explosionRadius, float upwardsModifier) *Applies a force to a rigidbody that simulates explosion effects. Other rigidbodies will be affected by the explosion within its radius - the closer they are to the explosionPosition, the stronger the force will be exerted on them.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.AddExplosionForce (300, Vector.New(0,0,0), 10, 20) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; obj.Rigidbody.AddExplosionForce (300, obj.WorldPosition, 10, 20) -- The explosion will occur at the location of the ExecutingObject. -- Place other rigidbodies around it to observe the effect! ``` ##### AddForce[​](#addforce "Direct link to AddForce") void **AddForce** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) force) *Adds a force to the Rigidbody that is continuously exerted on it in the given direction.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.AddForce(Vector.New(0,1,0)) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; obj.Rigidbody.AddForce (Vector.New(0,100,0)); -- Now the rigidbody is under a continuous force directed upwards (Y direction) ``` ##### AddForceAtPosition[​](#addforceatposition "Direct link to AddForceAtPosition") void **AddForceAtPosition** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) force,[ SVector](/scripting/client-scripting-api-reference/types/svector.md) position) *Adds a force to the Rigidbody at a given position (should be within the range of the rigidbody for a realistic result). Thus, both a torque and force are applied to the object.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.AddForceAtPosition(Vector.New(1,1,1), Vector.New(0,1,0)) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; local applyForceHere = Vector.New(obj.WorldPosition.x-0.5,obj.WorldPosition.y-0.5,obj.WorldPosition.z-0.5) -- This vector is equivalent to one of the lower corners of a 1x1x1 cube. obj.Rigidbody.AddForceAtPosition (Vector.New(0,40,0), applyForceHere); -- The object is experiencing an effect similar to being tipped upwards at the aforementioned corner. ``` ##### AddRelativeTorque[​](#addrelativetorque "Direct link to AddRelativeTorque") void **AddRelativeTorque** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) torque) *Adds a torque to the rigidbody relative to the local coordinate system.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.AddRelativeTorque(Vector.New(0,1,0)) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; obj.Rigidbody.AddRelativeTorque (Vector.New(0,100,0)); -- Now the object spins about its own Y axis ``` ##### AddTorque[​](#addtorque "Direct link to AddTorque") void **AddTorque** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) torque) *Adds a torque to the rigidbody relative to the global coordinate system.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.AddTorque(Vector.New(0,1,0)) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; obj.Rigidbody.AddTorque (Vector.New(0,100,0)); -- Now the object spins about the global Y axis ``` ##### ClosestPointOnBounds[​](#closestpointonbounds "Direct link to ClosestPointOnBounds") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **ClosestPointOnBounds** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) input) *Returns the closest point on the bounding box of the attached colliders.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.ClosestPointOnBounds(Vector.New(1,1,1)) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; Space.Log(obj.Rigidbody.ClosestPointOnBounds (Vector.Zero)); -- prints [x,y,z] to the console, where x,y,z are coordinates of the rigidbody's point that is the closest to the global origin ``` ##### GetPointVelocity[​](#getpointvelocity "Direct link to GetPointVelocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GetPointVelocity** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) worldPoint) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.GetPointVelocity(Vector.New(0,1,0)) ``` ##### GetRelativePointVelocity[​](#getrelativepointvelocity "Direct link to GetRelativePointVelocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GetRelativePointVelocity** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) point) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.GetRelativePointVelocity(Vector.New(1,1,1)) ``` ##### MovePosition[​](#moveposition "Direct link to MovePosition") void **MovePosition** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) point) *Moves the rigidbody to position.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.MovePosition(Vector.New(1,1,1)) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; local moveHere = Vector.New(obj.WorldPosition.x+10,obj.WorldPosition.y,obj.WorldPosition.z); obj.Rigidbody.MovePosition (moveHere); -- The object has been moved by 10 units in the positive X direction ``` ##### MoveRotation[​](#moverotation "Direct link to MoveRotation") void **MoveRotation** ([SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) rotation) *Rotates the rigidbody to rotation.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.MoveRotation(Quaternion.New(0,1,0,0)) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; local setRotationTo = Quaternion.Euler(60,0,0) obj.Rigidbody.MoveRotation (setRotationTo); -- The object's rotation has been set to 60 degrees in the positive X direction and 0 in Y and Z ``` ##### ResetCenterOfMass[​](#resetcenterofmass "Direct link to ResetCenterOfMass") void **ResetCenterOfMass** () *Reset the center of mass of the rigidbody.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.ResetCenterOfMass() ``` * Lua ```lua local obj = Space.Host.ExecutingObject; obj.Rigidbody.CenterOfMass = Vector.New(1,1,1); Space.Log(obj.Rigidbody.CenterOfMass); -- prints "[1,1,1]" to the console obj.Rigidbody.ResetCenterOfMass(); Space.Log(obj.Rigidbody.CenterOfMass); -- prints "[0,0,0]" to the console ``` ##### ResetIntertiaTensor[​](#resetintertiatensor "Direct link to ResetIntertiaTensor") void **ResetIntertiaTensor** () *Reset the inertia tensor value and rotation.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.ResetIntertiaTensor() ``` * Lua ```lua solid = Space.Scene.Find("Solid") --get rigidbody of inertia frame. rigid = solid.Rigidbody if rigid == nil then rigid = solid.AddRigidbody() end rigid.ResetIntertiaTensor() --to reset inertia tensor if intertia tensor is set ``` ##### Sleep[​](#sleep "Direct link to Sleep") void **Sleep** () *Forces a rigidbody to sleep.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.Sleep() ``` ##### WakeUp[​](#wakeup "Direct link to WakeUp") void **WakeUp** () *Forces a rigidbody to wake up.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.WakeUp() ``` ##### SweepTestAll[​](#sweeptestall "Direct link to SweepTestAll") [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md)\[] **SweepTestAll** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) direction, float distance) *Like Rigidbody.SweepTest, but returns all hits.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Rigidbody.SweepTestAll(Vector.New(1,0,0) , 20) ``` * Lua ```lua solid = Space.Scene.Find("Solid") --get rigidbody of inertia frame. rigid = solid.Rigidbody if rigid == nil then rigid = solid.AddRigidbody() end hits = rigid.SweepTestAll(solid.Forward , 20) --sweep forward 20 meters, and return all hits. if hits~=nil and #hits-1 > 0 then for i = 1,#hits-1 do Space.Log(hits[i].Object.Name) end end --output all hit gameobject. ``` #### Properties[​](#properties "Direct link to Properties") ##### AngularDrag[​](#angulardrag "Direct link to AngularDrag") float **AngularDrag** `get` `set` *The angular drag of the object.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.AngularDrag = 0.20 ``` ##### AngularVelocity[​](#angularvelocity "Direct link to AngularVelocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **AngularVelocity** `get` `set` *The angular velocity vector of the rigidbody (in radians per second).* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.AngularVelocity = Vector.New(0,1,0) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; -- Set a new angular velocity vector obj.Rigidbody.AngularVelocity = Vector.New(0,Space.Math.Pi,0); -- Now the object is rotating about the Y axis at a speed of 180 degrees per second -- (or 30 revolutions per minute) -- Get the current angular velocity vector Space.Log(obj.Rigidbody.AngularVelocity); -- prints "[0, 3.141593, 0]" to the console ``` ##### CenterOfMass[​](#centerofmass "Direct link to CenterOfMass") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **CenterOfMass** `get` `set` *The center of mass relative to the local origin.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.CenterOfMass = Vector.New(1,0,0) ``` ##### Drag[​](#drag "Direct link to Drag") float **Drag** `get` `set` *The drag of the object.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.Drag = 5 ``` ##### FreezeRotation[​](#freezerotation "Direct link to FreezeRotation") bool **FreezeRotation** `get` `set` *Controls whether physics will have any impact on the rotation of the object.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.FreezeRotation = true ``` ##### Kinematic[​](#kinematic "Direct link to Kinematic") bool **Kinematic** `get` `set` *Controls whether physics will have any impact on the object.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.Kinematic = true ``` ##### Mass[​](#mass "Direct link to Mass") float **Mass** `get` `set` *The mass of the rigidbody.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.Mass = 0.1 ``` ##### MaxAngularVelocity[​](#maxangularvelocity "Direct link to MaxAngularVelocity") float **MaxAngularVelocity** `get` `set` *The maximum angular velocity of the rigidbody (7 by default). Can be useful to prevent an object from spinning uncontrollably fast.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.MaxAngularVelocity = 1 ``` ##### MaxDepenetrationVelocity[​](#maxdepenetrationvelocity "Direct link to MaxDepenetrationVelocity") float **MaxDepenetrationVelocity** `get` `set` *The maximum depenetration velocity of the rigidbody (1.00000003318135E+32 by default). Can be useful to make colliding objects bounce away in a smoother fashion.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.MaxDepenetrationVelocity = 1 ``` ##### UseGravity[​](#usegravity "Direct link to UseGravity") bool **UseGravity** `get` `set` *Controls whether gravity affects the rigidbody.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.UseGravity = true ``` * Lua ```lua local obj = Space.Host.ExecutingObject; -- Set UseGravity to False (it is set to True by default) obj.Rigidbody.UseGravity = false; -- Now gravity does not affect the rigidbody. -- Get the UseGravity value (find out if UseGravity is in action) Space.Log(obj.Rigidbody.UseGravity); -- prints "False" to the console ``` ##### Velocity[​](#velocity "Direct link to Velocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Velocity** `get` `set` *The velocity vector of the rigidbody. (in units per second).* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.Velocity = Vector.New(0,1,0) ``` * Lua ```lua local obj = Space.Host.ExecutingObject; -- Set a new velocity vector obj.Rigidbody.Velocity = Vector.New(0, 0, 1); -- Now the object is moving in the positive Z direction at a speed of 1 unit per second -- Get the current velocity vector Space.Log(obj.Rigidbody.Velocity); -- prints "[0, 0, 1]" to the console ``` ##### WorldCenterOfMass[​](#worldcenterofmass "Direct link to WorldCenterOfMass") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **WorldCenterOfMass** `get` *The center of mass of the rigidbody relative to the global origin (Read Only).* * Lua \`\`\` WorldCenter = Space.Host.ExecutingObject.Rigidbody.WorldCenterOfMass \`\`\` * Lua ```lua local obj = Space.Host.ExecutingObject; -- Get the current center of mass Space.Log(obj.Rigidbody.WorldCenterOfMass); -- prints "[x, y, z]" to the console, where x,y,z are global coordinates of the center of mass. If CenterOfMass == [0,0,0], then x,y,z are equal to the global coordinates of the object. ``` ##### Sleeping[​](#sleeping "Direct link to Sleeping") bool **Sleeping** `get` *Is the rigidbody sleeping?* * Lua ```lua isSleeping = Space.Host.ExecutingObject.Rigidbody.Sleeping ``` * Lua ```lua local obj = Space.Host.ExecutingObject; obj.Rigidbody.Sleep(); Space.Log(obj.Rigidbody.Sleeping); -- prints "True" to the console obj.Rigidbody.WakeUp(); Space.Log(obj.Rigidbody.Sleeping); -- prints "False" to the console ``` ##### Density[​](#density "Direct link to Density") float **Density** `set` *The density of the object (1 by default). Changing this value will affect the mass of the object (the volume will remain unchanged).* * Lua ```lua density = Space.Host.ExecutingObject.Rigidbody.Density ``` * Lua ```lua local obj = Space.Host.ExecutingObject; Space.Log(obj.Rigidbody.Mass); -- prints "1" to the console obj.LocalScale = Vector.New(2,2,2); obj.Rigidbody.Density = 0.5; Space.Log(obj.Rigidbody.Mass); -- prints "4" to the console - the density is 2 times lower, and the object is 8 times bigger, therefore it's 4 times heavier. ``` ##### InertiaTensor[​](#inertiatensor "Direct link to InertiaTensor") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **InertiaTensor** `get` `set` *The diagonal inertia tensor of mass relative to the center of mass. It is defined in x,y,z axis. It is calculate by physics automatically,and if you set value to it, it would override the value.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.IntertiaTensor = Vector.New(0,0,0) ``` * Lua ```lua solid = Space.Scene.Find("Solid") --get rigidbody of inertia frame. rigid = solid.Rigidbody if rigid == nil then rigid = solid.AddRigidbody() end rigid.InertiaTensor = Vector.New(10,100,1) rigid.AddTorque(Vector.New(100,100,100)) --set inertia tensor to 10,100,1, and add torque 100 to all axis,and rotate velocity x:y:z would be 10:1:100. ``` ##### InertiaTensorRotation[​](#inertiatensorrotation "Direct link to InertiaTensorRotation") [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) **InertiaTensorRotation** `get` `set` *The rotation of the inertia tensor.* * Lua ```lua Space.Host.ExecutingObject.Rigidbody.InertiaTensorRotation = Quaternion.New(0,0,0,0) ``` * Lua ```lua solid = Space.Scene.Find("Solid") --get rigidbody of inertia frame. rigid = solid.Rigidbody if rigid == nil then rigid = solid.AddRigidbody() end rigid.InertiaTensor = Vector.New(10,100,1) rigid.InertiaTensorRotation = Quaternion.Euler(0,90,0) rigid.AddTorque(Vector.New(100,100,100)) --set inertia tensor manually and rotate this inertia tensor by 90 degrees in y axis. ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Rigidbody.GameObject ``` --- ### SRoomFloor #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------ | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sroomfloor.md#enabled)`get` `set` | | string [**Name** ](/scripting/client-scripting-api-reference/components/sroomfloor.md#name)`get` | | string [**Description** ](/scripting/client-scripting-api-reference/components/sroomfloor.md#description)`get` | | bool [**IsDefaultFloor** ](/scripting/client-scripting-api-reference/components/sroomfloor.md#isdefaultfloor)`get` | | SGameObject\[] [**Furniture** ](/scripting/client-scripting-api-reference/components/sroomfloor.md#furniture)`get` | | int [**Owner** ](/scripting/client-scripting-api-reference/components/sroomfloor.md#owner)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sroomfloor.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Status of enable or disable room floor component* * Lua ```lua Space.Host.ExecutingObject.Floor.Enabled = false ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *Name of this floor* * Lua ```lua Space.Host.ExecutingObject.Floor.Name ``` ##### Description[​](#description "Direct link to Description") string **Description** `get` *Description of this floor.* * Lua ```lua floorDescription = Space.Host.ExecutingObject.Floor.Description ``` ##### IsDefaultFloor[​](#isdefaultfloor "Direct link to IsDefaultFloor") bool **IsDefaultFloor** `get` *Is this default floor?* * Lua ```lua isDefault = Space.Host.ExecutingObject.Floor.IsDefaultFloor ``` ##### Furniture[​](#furniture "Direct link to Furniture") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md)\[] **Furniture** `get` *Get all furniture game objects* * Lua ```lua furnitureInFloor = Space.Host.ExecutingObject.Floor.Furniture ``` ##### Owner[​](#owner "Direct link to Owner") int **Owner** `get` *Return the ID of the user account that owns this room floor, if any.* * Lua ```lua ownerID = Space.Host.ExecutingObject.Floor.Owner ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Floor.GameObject ``` --- ### SSceneBackgroundMusic #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Play** ](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md#play)() | | void [**PlayMP3Stream** ](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md#playmp3stream)(string url) | | void [**PlayVorbisStream** ](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md#playvorbisstream)(string url) | | void [**Stop** ](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md#stop)() | | void [**OnTrackChange** ](sscenebackgroundmusic#ontrackchange)(Closure o)
void [**OnTrackChange** ](sscenebackgroundmusic#ontrackchange)(Action< STrackInfo > trackInfoCallback) | | void [**OnUpcomingTrackChange** ](sscenebackgroundmusic#onupcomingtrackchange)(Closure o)
void [**OnUpcomingTrackChange** ](sscenebackgroundmusic#onupcomingtrackchange)(Action< STrackInfo > trackInfoCallback) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md#enabled)`get` `set` | | string [**URL** ](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md#url)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Play[​](#play "Direct link to Play") void **Play** () *Plays the radio stream* * Lua ```lua Space.Host.ExecutingObject.Radio.Play() ``` * Lua ```lua --this script will let us click a radio to make it start playing --(Example: clicking a light switch toggle's a parent light bulb's intensity) --[Requires a "Shoutcast Streaming" component on the parent of this object] thisGameObject = Space.Host.ExecutingObject IsPlaying = false StartPlaying = function() thisGameObject.Radio.Play() IsPlaying = true end StopPlaying = function() thisGameObject.Radio.Stop() IsPlaying = false end OnClick = function() if IsPlaying then StopPlaying() else StartPlaying() end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip="Toggle Play/Stop" thisGameObject.Clickable.OnClick(OnClick) ``` ##### PlayMP3Stream[​](#playmp3stream "Direct link to PlayMP3Stream") void **PlayMP3Stream** (string url) *Sets the given MP3 stream url as current stream* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Radio.PlayMP3Stream("http://stream.example.org:1234/") ``` ##### PlayVorbisStream[​](#playvorbisstream "Direct link to PlayVorbisStream") void **PlayVorbisStream** (string url) *Sets the given Vorbis stream url as current stream* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Radio.PlayVorbisStream("http://stream.example.org:1234/") ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** () *Stops playing the radio stream* * Lua ```lua Space.Host.ExecutingObject.Radio.Stop() ``` * Lua ```lua --this script will let us click a radio to make it start playing --(Example: clicking a light switch toggle's a parent light bulb's intensity) --[Requires a "Shoutcast Streaming" component on the parent of this object] thisGameObject = Space.Host.ExecutingObject IsPlaying = false StartPlaying = function() thisGameObject.Radio.Play() IsPlaying = true end StopPlaying = function() thisGameObject.Radio.Stop() IsPlaying = false end OnClick = function() if IsPlaying then StopPlaying() else StartPlaying() end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip="Toggle Play/Stop" thisGameObject.Clickable.OnClick(OnClick) ``` ##### OnTrackChange[​](#ontrackchange "Direct link to OnTrackChange") void **OnTrackChange** (Closure o)
void **OnTrackChange** (Action<[ STrackInfo](/scripting/client-scripting-api-reference/types/strackinfo.md) > trackInfoCallback) *Function will be called when track changes.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua otc = function(trackInfo) end Space.Host.ExecutingObject.Radio.OnTrackChange(otc) ``` * Lua ```lua --this script will update a UIText object with the track title on track change --[this GameObject needs a "Shoutcast Streaming"/"SceneBackgroundMusic" component] thisObj = Space.Host.ExecutingObject text = Space.Host.GetReference("Text") -- set in Scripting Runtime references otc = function(trackInfo) text.UIText.Text = "Track: " .. trackInfo.Title .. " by " .. trackInfo.Artist end thisObj.Radio.OnTrackChange(otc) ``` ##### OnUpcomingTrackChange[​](#onupcomingtrackchange "Direct link to OnUpcomingTrackChange") void **OnUpcomingTrackChange** (Closure o)
void **OnUpcomingTrackChange** (Action< [STrackInfo](/scripting/client-scripting-api-reference/types/strackinfo.md) > trackInfoCallback) *Function will be called when there's an upcoming track change* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua otc = function(trackInfo) end Space.Host.ExecutingObject.Radio.OnUpcomingTrackChange(otc) ``` * Lua ```lua --this script will update a UIText object with the track title on upcoming track change --[this GameObject needs a "Shoutcast Streaming"/"SceneBackgroundMusic" component] thisObj = Space.Host.ExecutingObject text = Space.Host.GetReference("Text") -- set in Scripting Runtime references outc = function(upcomingTrackInfo) text.UIText.Text = "Track: " .. upcomingTrackInfo.Title .. " by " .. upcomingTrackInfo.Artist end thisObj.Radio.OnUpcomingTrackChange(outc) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is this component Enabled?* * Lua ```lua Space.Host.ExecutingObject.Radio.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Scene Background Music component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.Radio OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### URL[​](#url "Direct link to URL") string **URL** `get` *URL of the current stream* * Lua ```lua streamURL = Space.Host.ExecutingObject.Radio.URL ``` * Lua ```lua --this script will update a UIText object with the current stream URL --[this GameObject needs a "Shoutcast Streaming"/"SceneBackgroundMusic" component] thisObj = Space.Host.ExecutingObject text = Space.Host.GetReference("Text") -- set in Scripting Runtime references OnUpdate = function() text.UIText.Text = thisObj.Radio.URL end thisObj.OnUpdate(OnUpdate) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Floor.GameObject ``` --- ### SScriptingData #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | object [**GetVariable** ](/scripting/client-scripting-api-reference/components/sscriptingdata.md#getvariable)(string name) | | void [**SetVariable** ](/scripting/client-scripting-api-reference/components/sscriptingdata.md#setvariable)(string name, DynValue property, bool persistent=false) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sscriptingdata.md#enabled)`get` `set` | | string\[] [**Variables** ](/scripting/client-scripting-api-reference/components/sscriptingdata.md#variables)`get` | | string [**ComponentName**](/scripting/client-scripting-api-reference/components/sscriptingdata.md#componentname) `get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sscriptingdata.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetVariable[​](#getvariable "Direct link to GetVariable") object **GetVariable** (string name) *Return the object of the variable.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Data.GetVariable("variableName") ``` ##### SetVariable[​](#setvariable "Direct link to SetVariable") void **SetVariable** (string name, DynValue property, bool persistent=false) *Set properties to variable.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.SetVariable("variableName",5,true) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is the ScriptingData component Enabled?* * Lua ```lua Space.Host.ExecutingObject.Data.Enabled = false ``` * Lua ```lua --clicking this object will Enable/Disable it's Scripting Data component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.Data OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Variables[​](#variables "Direct link to Variables") string\[] **Variables** `get` *Property Description* * Lua ```lua variableNames = Space.Host.ExecutingObject.Data.Variables ``` ##### ComponentName[​](#componentname "Direct link to ComponentName") string **ComponentName** `get` *The name of this component.* * Lua ```lua componentName = Space.Host.ExecutingObject.Data.ComponentName ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Data.GameObject ``` --- ### SScriptingEvents #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | -------------------------------------------------------------------------------------------------------------------------- | | void [**InvokeEvent** ](/scripting/client-scripting-api-reference/components/sscriptingevents.md#invokeevent)(string name) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------ | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sscriptingevents.md#enabled)`get` `set` | | string\[] [**Events** ](/scripting/client-scripting-api-reference/components/sscriptingevents.md#events)`get` | | string [**ComponentName**](/scripting/client-scripting-api-reference/components/sscriptingevents.md#componentname) `get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sscriptingevents.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### InvokeEvent[​](#invokeevent "Direct link to InvokeEvent") void **InvokeEvent** (string name) *Invoke the event with its name* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Events.InvokeEvent("EventName") ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the scriptingEvents component is enabled or not* * Lua ```lua Space.Host.ExecutingObject.Events.Enabled = true ``` ##### Events[​](#events "Direct link to Events") string\[] **Events** `get` *Returns a list of events* * Lua ```lua eventNames = Space.Host.ExecutingObject.Events.Events ``` ##### ComponentName[​](#componentname "Direct link to ComponentName") string **ComponentName** `get` *The name of this component.* * Lua ```lua componentName = Space.Host.ExecutingObject.Events.ComponentName ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Events.GameObject ``` --- ### SScriptingResources #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------------------------- | | SResource [**GetResource** ](/scripting/client-scripting-api-reference/components/sscriptingresources.md#getresource)(string name) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sscriptingresources.md#enabled)`get` `set` | | SResource\[] [**Resources** ](/scripting/client-scripting-api-reference/components/sscriptingresources.md#resources)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sscriptingresources.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetResource[​](#getresource "Direct link to GetResource") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **GetResource** (string name) *Returns the SResource with the specified name, or else returns nil if not found.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua resource = Space.Host.ExecutingObject.Resources.GetResource("ResourceName") ``` * Lua ```lua local thisObject=Space.Host.ExecutingObject local thisObjectResource=thisObject.Resources.GetResource("Test") if thisObjectResource == nil then Space.Log("That resource was not found.") else Space.Log("That resource exists and can be used.") end ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Return whether the ScriptingResources component is Enabled or not* * Lua ```lua Space.Host.ExecutingObject.Resources.Enabled = true ``` ##### Resources[​](#resources "Direct link to Resources") SResource\[] **Resources** `get` *Returns an array of all resources contained within this component.* * Lua ```lua arrayOfResources = Space.Host.ExecutingObject.Resources.Resources ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Resources.GameObject ``` --- ### SScriptingRuntime #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | SResource [**GetResource** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#getresource)(string name) | | void [**CallScriptFunction** ](sscriptingruntime#callscriptfunction)(string name, params DynValue\[] arguments)
void [**CallScriptFunction** ](sscriptingruntime#callscriptfunction)(string name) | | void [**Reset** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#reset)() | | object [**GetPublicVariable** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#getpublicvariable)(string name) | | void [**SetPublicVariable** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#setpublicvariable)(string name, DynValue property, bool persistent=false) | | void [**InvokeEvent** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#invokeevent)(string name) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------- | | SResource\[] [**Resources** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#resources)`get` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#enabled)`get` `set` | | string [**ComponentName**](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#componentname) `get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sscriptingruntime.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetResource[​](#getresource "Direct link to GetResource") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **GetResource** (string name) *Get the resource by its name and return it.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua resource = Space.Host.ExecutingObject.Script.GetResource("resource name") ``` ##### CallScriptFunction[​](#callscriptfunction "Direct link to CallScriptFunction") void **CallScriptFunction** (string name, params DynValue\[] arguments)
void **CallScriptFunction** (string name) *Call registered script function with specified arguments.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua resource = Space.Host.ExecutingObject.Script.CallScriptFunction("FunctionName") --or resource = Space.Host.ExecutingObject.Script.CallScriptFunction("FunctionName", tableWithArguments) ``` ##### Reset[​](#reset "Direct link to Reset") void **Reset** () *Reset event members to their initial values.* * Lua ```lua Space.Host.ExecutingObject.Script.Reset() ``` ##### GetPublicVariable[​](#getpublicvariable "Direct link to GetPublicVariable") object **GetPublicVariable** (string name) *Gets the public variable by its name and return it.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua publicVariable = Space.Host.ExecutingObject.Script.GetPublicVariable("variableName") ``` ##### SetPublicVariable[​](#setpublicvariable "Direct link to SetPublicVariable") void **SetPublicVariable** (string name, DynValue property, bool persistent=false) *Set the property to public variable with name "name".* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Script.SetPublicVariable("VariableName",5,true) ``` ##### InvokeEvent[​](#invokeevent "Direct link to InvokeEvent") void **InvokeEvent** (string name) *Invokes the event with the name "name".* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Script.InvokeEvent("EventName") ``` #### Properties[​](#properties "Direct link to Properties") ##### Resources[​](#resources "Direct link to Resources") [SResource](/scripting/client-scripting-api-reference/types/sresource.md)\[] **Resources** `get` *Return a list of resource.* * Lua ```lua tableResources = Space.Host.ExecutingObject.Script.Resources ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the scripting runtime component is Enabled.* * Lua ```lua Space.Host.ExecutingObject.Script.Enabled = true ``` ##### ComponentName[​](#componentname "Direct link to ComponentName") string **ComponentName** `get` *The name of this component.* * Lua ```lua componentName = Space.Host.ExecutingObject.Script.ComponentName ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Script.GameObject ``` --- ### SSeat #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------- | | void [**SitPlayer** ](/scripting/client-scripting-api-reference/components/sseat.md#sitplayer)() | | void [**UnseatPlayer** ](/scripting/client-scripting-api-reference/components/sseat.md#unseatplayer)() | | void [**OnStandUp** ](/scripting/client-scripting-api-reference/components/sseat.md#onstandup)(Closure e) | | void [**OnSit** ](/scripting/client-scripting-api-reference/components/sseat.md#onsit)(Closure e) | | void [**OnPlayerStandUp** ](/scripting/client-scripting-api-reference/components/sseat.md#onplayerstandup)(Closure e) | | void [**OnPlayerSit** ](/scripting/client-scripting-api-reference/components/sseat.md#onplayersit)(Closure e) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------ | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sseat.md#enabled)`get` `set` | | bool [**InUse** ](/scripting/client-scripting-api-reference/components/sseat.md#inuse)`get` | | long [**PlayerSeated** ](/scripting/client-scripting-api-reference/components/sseat.md#playerseated)`get` | | bool [**UseSlotID** ](/scripting/client-scripting-api-reference/components/sseat.md#useslotid)`get` `set` | | string [**SlotID** ](/scripting/client-scripting-api-reference/components/sseat.md#slotid)`get` `set` | | SCollider [**ClickableCollider** ](/scripting/client-scripting-api-reference/components/sseat.md#clickablecollider)`get` `set` | | SResource [**Animation** ](/scripting/client-scripting-api-reference/components/sseat.md#animation)`get` `set` | | SResource [**AnimationMale** ](/scripting/client-scripting-api-reference/components/sseat.md#animationmale)`get` `set` | | SResource [**AnimationFemale** ](/scripting/client-scripting-api-reference/components/sseat.md#animationfemale)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sseat.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### SitPlayer[​](#sitplayer "Direct link to SitPlayer") void **SitPlayer** () *Make a player sit.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Seat.SitPlayer() ``` ##### UnseatPlayer[​](#unseatplayer "Direct link to UnseatPlayer") void **UnseatPlayer** () *Make a player unseat.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Seat.UnseatPlayer() ``` ##### OnStandUp[​](#onstandup "Direct link to OnStandUp") void **OnStandUp** (Closure e) *Binds a function to the Seat's On Stand Up event* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua e = function() Space.Log("On Stand Up event") end Space.Host.ExecutingObject.Seat.OnStandUp(e) ``` ##### OnSit[​](#onsit "Direct link to OnSit") void **OnSit** (Closure e) *Binds a function to the Seat's On Sit event* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua e = function() Space.Log("On Sit event") end Space.Host.ExecutingObject.Seat.OnSit(e) ``` ##### OnPlayerStandUp[​](#onplayerstandup "Direct link to OnPlayerStandUp") void **OnPlayerStandUp** (Closure e) *Binds a function to the Seat's On Player Stand Up event which is fired only on the Player's client* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua e = function() Space.Log("On Player Stand Up") end Space.Host.ExecutingObject.Seat.OnPlayerStandUp(e) ``` * Lua ```lua --the below script will teleport the player above the seat after standing up --so that they do not go back to original position, but rather be standing next to the seat --(Example: if the seat moves - such as in a vehicle- and we want to stand up next to it) --[Requires Seat Component in the GameObject running this script] thisGameObject = Space.Host.ExecutingObject OnPlayerStandUp = function() seatPosition = thisGameObject.WorldPosition teleportPosition = Vector.New(seatPosition.X, seatPosition.Y + 1, seatPosition.Z) Space.Scene.PlayerAvatar.Teleport(teleportPosition) end thisGameObject.Seat.OnPlayerStandUp(OnPlayerStandUp) ``` ##### OnPlayerSit[​](#onplayersit "Direct link to OnPlayerSit") void **OnPlayerSit** (Closure e) *Binds a function to the Seat's On Player Sit event which is fired only on the Player's client* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua e = function() Space.Log("On Player Sit event") end Space.Host.ExecutingObject.Seat.OnPlayerSit(e) ``` * Lua ```lua --the below script will check if the player sitting is the owner of the seat --if they are not, we will remove them from the seat --(Example: if the seat is a vehicle which the owner wants no one else to use) --[Requires Seat Component in the GameObject running this script] -- thisGameObject = Space.Host.ExecutingObject OnPlayerSit = function() if Space.Scene.PlayerAvatar.ID ~= thisGameObject.Owner then thisGameObject.Seat.UnseatPlayer() Space.Log("You do not have permission to sit in this vehicle") end end thisGameObject.Seat.OnPlayerSit(OnPlayerSit) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the seat component is enabled.* * Lua ```lua = seatIsEnabled = Space.Host.ExecutingObject.Seat.Enabled ``` * Lua ```lua --clicking this object will Enable/Disable it's Seat component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.Seat OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### InUse[​](#inuse "Direct link to InUse") bool **InUse** `get` *Return that whether the seat is in use.* * Lua ```lua seatIsInUse = Space.Host.ExecutingObject.Seat.InUse ``` * Lua ```lua --this script will play a looping sound only if someone is using the seat --and will stop the sound if someone is not --(Example: carnival game ) --[Object must contain a Seat component and AudioSource component] thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if thisGameObject.Seat.InUse then if not thisGameObject.Audio.IsPlaying then thisGameObject.Audio.Play() end else if thisGameObject.Audio.IsPlaying then thisGameObject.Audio.Stop() end end end thisGameObject.Audio.Loop = true thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` ##### PlayerSeated[​](#playerseated "Direct link to PlayerSeated") long **PlayerSeated** `get` *Return the ID of the seating player.* * Lua ```lua player = Space.Host.ExecutingObject.Seat.PlayerSeated ``` ##### UseSlotID[​](#useslotid "Direct link to UseSlotID") bool **UseSlotID** `get` `set` *Return true if uses SlotID* * Lua ```lua Space.Host.ExecutingObject.Seat.UseSlotID = false ``` ##### SlotID[​](#slotid "Direct link to SlotID") string **SlotID** `get` `set` *Return the slot ID of the seat.* * Lua ```lua seatSlotID = Space.Host.ExecutingObject.Seat.SlotID ``` ##### ClickableCollider[​](#clickablecollider "Direct link to ClickableCollider") [SCollider](/scripting/client-scripting-api-reference/components/scollider.md) **ClickableCollider** `get` `set` *Return the clickable collider.* * Lua ```lua seatClickableCollider = Space.Host.ExecutingObject.Seat.ClickableCollider ``` ##### Animation[​](#animation "Direct link to Animation") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Animation** `get` `set` *Return the animation clip.* * Lua ```lua Space.Host.ExecutingObject.Seat.Animation = Space.GetResource("ResourceName") ``` * Lua ```lua --the below script will toggle between two seat animations every 30 seconds --(Example: a couch where the player sitting periodically changes pose) --[Requires Seat Component in the GameObject running this script] --[Requires adding 2 animations as "Resources" at the bottom of the Scripting Runtime Component] thisGameObject = Space.Host.ExecutingObject anim1 = Space.GetResource("anim1") anim2 = Space.GetResource("anim2") thisGameObject.Seat.Animation = anim1 animIndex = 1 AnimationAlternate = function() while true do Space.Log(thisGameObject.Seat.Animation) if animIndex == 1 then thisGameObject.Seat.Animation = anim2 animIndex = 2 else thisGameObject.Seat.Animation = anim1 animIndex = 1 end -- next part unseats then seats the player to reflect animation change (its too fast to notice) -- we also make sure we are running this part on the specific player sitting (if any), not everyone else if thisGameObject.Seat.InUse then if thisGameObject.Seat.PlayerSeated == Space.Scene.PlayerAvatar.ID then thisGameObject.Seat.UnseatPlayer() thisGameObject.Seat.SitPlayer() end end Space.Log("yielding") coroutine.yield(5) end end Space.Host.StartCoroutine(AnimationAlternate) ``` ##### AnimationMale[​](#animationmale "Direct link to AnimationMale") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **AnimationMale** `get` `set` *No Description* * Lua ```lua Space.Host.ExecutingObject.Seat.AnimationMale = Space.GetResource("ResourceName") ``` ##### AnimationFemale[​](#animationfemale "Direct link to AnimationFemale") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **AnimationFemale** `get` `set` *No Description* * Lua ```lua Space.Host.ExecutingObject.Seat.AnimationFemale = Space.GetResource("ResourceName") ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Seat.GameObject ``` --- ### SSkinnedMeshRenderer #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | float [**GetBlendShapeWeight** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#getblendshapeweight)(int index) | | void [**SetBlendShapeWeight** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#setblendshapeweight)(int index, float value) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------------------------------- | | SResource [**Mesh** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#mesh)`get` `set` | | bool [**IsVisible** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#isvisible)`get` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#enabled)`get` `set` | | SMaterial [**Material** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#material)`get` `set` | | SMaterial [**SharedMaterial** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#sharedmaterial)`get` `set` | | SMaterial\[] [**Materials** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#materials)`get` `set` | | SMaterial\[] [**SharedMaterials** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#sharedmaterials)`get` `set` | | SVector [**BoundsMax** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#boundsmax)`get` | | SVector [**BoundsMin** ](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md#boundsmin)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetBlendShapeWeight[​](#getblendshapeweight "Direct link to GetBlendShapeWeight") float **GetBlendShapeWeight** (int index) *Return the value of BlendShapeWeight.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.GetBlendShapeWeight(0) ``` ##### SetBlendShapeWeight[​](#setblendshapeweight "Direct link to SetBlendShapeWeight") void **SetBlendShapeWeight** (int index, float value) *Set the value to the BlendShapeWeight.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.SetBlendShapeWeight(0) ``` #### Properties[​](#properties "Direct link to Properties") ##### Mesh[​](#mesh "Direct link to Mesh") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Mesh** `get` `set` *Return the mesh.* * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.Mesh = Space.GetResource("resourceName") ``` ##### IsVisible[​](#isvisible "Direct link to IsVisible") bool **IsVisible** `get` *Property Description* * Lua ```lua isVisible = Space.Host.ExecutingObject.SkinnedMeshRenderer.IsVisible ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *To check if the SkinnedMeshRenderer component is Enabled or not.* * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable an object's SkinnedMeshRenderer component --[Add "skinnedmeshrenderer" reference to scripting runtime component] thisGameObject = Space.Host.ExecutingObject skinnedmeshrenderer = Space.Host.GetReference("skinnedmeshrenderer").SkinnedMeshRenderer OnClick = function() skinnedmeshrenderer.Enabled = not skinnedmeshrenderer.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Material[​](#material "Direct link to Material") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **Material** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.Material = Space.GetResource("ResourceName").AsMaterial ``` ##### SharedMaterial[​](#sharedmaterial "Direct link to SharedMaterial") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **SharedMaterial** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.SharedMaterial = Space.GetResource("ResourceName").AsMaterial ``` ##### Materials[​](#materials "Direct link to Materials") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md)\[] **Materials** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.Materials = {Space.GetResource("1stResourceName").AsMaterial, Space.GetResource("2ndResourceName").AsMaterial} ``` ##### SharedMaterials[​](#sharedmaterials "Direct link to SharedMaterials") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md)\[] **SharedMaterials** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.SkinnedMeshRenderer.SharedMaterials = {Space.GetResource("1stResourceName").AsMaterial, Space.GetResource("2ndResourceName").AsMaterial} ``` ##### BoundsMax[​](#boundsmax "Direct link to BoundsMax") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **BoundsMax** `get` *Property Description* * Lua ```lua vectorBoundsMax = Space.Host.ExecutingObject.SkinnedMeshRenderer.BoundsMax ``` ##### BoundsMin[​](#boundsmin "Direct link to BoundsMin") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **BoundsMin** `get` *Property Description* * Lua ```lua vectorBoundsMin = Space.Host.ExecutingObject.SkinnedMeshRenderer.BoundsMin ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.SkinnedMeshRenderer.GameObject ``` --- ### SSphereCollider #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------- | | SVector [**Center** ](/scripting/client-scripting-api-reference/components/sspherecollider.md#center)`get` `set` | | float [**Radius** ](/scripting/client-scripting-api-reference/components/sspherecollider.md#radius)`get` `set` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sspherecollider.md#enabled)`get` `set` | | bool [**IsTrigger** ](/scripting/client-scripting-api-reference/components/sspherecollider.md#istrigger)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sspherecollider.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Center[​](#center "Direct link to Center") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Center** `get` `set` *The center of the sphere in the object's local space.* * Lua ```lua Center = Space.Host.ExecutingObject.SphereCollider.Center ``` * Lua ```lua --clicking this object moves it's Sphere Collider's center one unit upwards thisObject = Space.Host.ExecutingObject OnClick = function() center = thisObject.SphereCollider.Center thisObject.SphereCollider.Center = Vector.New(center.X,center.Y + 1, center.Z) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Radius[​](#radius "Direct link to Radius") float **Radius** `get` `set` *The radius of the sphere measured in the object's local space.* * Lua ```lua Space.Host.ExecutingObject.SphereCollider.Radius = 2 ``` * Lua ```lua --clicking this object increments it's Sphere Collider's radius by one unit thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.SphereCollider.Radius = thisObject.SphereCollider.Radius + 1 end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Enabled Colliders will collide with other Colliders, disabled Colliders won't.* * Lua ```lua Space.Host.ExecutingObject.SphereCollider.Enabled = false ``` * Lua ```lua --clicking this object toggles it's Sphere Collider On/Off thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.SphereCollider.Enabled = not thisObject.SphereCollider.Enabled end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### IsTrigger[​](#istrigger "Direct link to IsTrigger") bool **IsTrigger** `get` `set` *Is the collider a trigger?* * Lua ```lua Space.Host.ExecutingObject.SphereCollider.Enabled = true ``` * Lua ```lua --clicking this object toggles it's Sphere Collider between being a Collider vs Trigger Collider thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.SphereCollider.IsTrigger = not thisObject.SphereCollider.IsTrigger end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.SphereCollider.GameObject ``` --- ### SStateMachine #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------- | | void [**NextState** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#nextstate)() | | void [**PrevState** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#prevstate)() | | void [**SetState** ](sstatemachine#setstate)(int state)
void [**SetState** ](sstatemachine#setstate)(string state) | | void [**BindToUI** ](sstatemachine#bindtoui)()
void [**BindToUI** ](sstatemachine#bindtoui)(SGameObject go) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#enabled)`get` `set` | | int [**StateCount** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#statecount)`get` | | string\[] [**StateNames** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#statenames)`get` | | int [**CurrentState** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#currentstate)`get` | | string [**CurrentStateName** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#currentstatename)`get` | | string [**ComponentName**](/scripting/client-scripting-api-reference/components/sstatemachine.md#componentname) `get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sstatemachine.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### NextState[​](#nextstate "Direct link to NextState") void **NextState** () *Enter the next state* * Lua ```lua Space.Host.ExecutingObject.StateMachine.NextState() ``` ##### PrevState[​](#prevstate "Direct link to PrevState") void **PrevState** () * Lua ```lua Space.Host.ExecutingObject.StateMachine.PrevState() ``` ##### SetState[​](#setstate "Direct link to SetState") void **SetState** (int state)
void **SetState** (string state) *Enters the state of being set that its order is "state"* | Parameter | Type | Description | | --------- | ------ | ------------------------------------------------------------ | | state | int | The index of the state. First state is 1. | | state | string | The name of the state as set in the State Machine component. | * Lua ```lua Space.Host.ExecutingObject.StateMachine.SetState(2) --or Space.Host.ExecutingObject.StateMachine.SetState('A State Name') ``` ##### BindToUI[​](#bindtoui "Direct link to BindToUI") void **BindToUI** ()
void **BindToUI** ([SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) go) *The state machine will bind itself to all Toggles, Buttons, Dropdowns and Sliders on the SGameObject it is in or on a specified SGameObject.* *Binding to Button : Clicking button will call NextState()*
*Binding to Toggle: Toggle On sets State to 1, Toggle Off sets state to 2*
*Binding to Dropdown: Selecting will set State to that selection's caption text*
*Binding to Slider: Moving slider changes State to slider value* | Parameter | Type | Description | | --------- | ----------- | ------------------------------------------------------------- | | go | SGameObject | A specific SGameObject which this State Machine will bind to. | * Lua ```lua Space.Host.ExecutingObject.StateMachine.BindToUI() ----or Space.Host.ExecutingObject.StateMachine.BindToUI(Space.Host.GetReference("a reference")) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the simple state machine component is Enabled or not* * Lua ```lua Space.Host.ExecutingObject.StateMachine.Enabled = false ``` ##### StateCount[​](#statecount "Direct link to StateCount") int **StateCount** `get` *Total number of States.* * Lua ```lua numberOfStates = Space.Host.ExecutingObject.StateMachine.StateCount ``` ##### StateNames[​](#statenames "Direct link to StateNames") string\[] **StateNames** `get` *A list of the names of all States.* * Lua ```lua tableStateNames = Space.Host.ExecutingObject.StateMachine.StateNames ``` ##### CurrentState[​](#currentstate "Direct link to CurrentState") int **CurrentState** `get` *The index number of the current state.* * Lua ```lua currentState = Space.Host.ExecutingObject.StateMachine.CurrentState ``` ##### CurrentStateName[​](#currentstatename "Direct link to CurrentStateName") string **CurrentStateName** `get` *The name of the current state, or null if no state.* * Lua ```lua currentStateName = Space.Host.ExecutingObject.StateMachine.CurrentStateName ``` ##### ComponentName[​](#componentname "Direct link to ComponentName") string **ComponentName** `get` *The name of this component.* * Lua ```lua componentName = Space.Host.ExecutingObject.StateMachine.ComponentName ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *The GameObject this component is attached to. A component is always attached to a GameObject.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.StateMachine.GameObject ``` --- ### STerrain #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | Description | | -------------------------------------------------------------------- | ------------------------------------------------------------- | | float [**GetHeight** ](sterrain#getheight)(float x, float y) | Get an interpolated height at a point x,y. | | float [**GetSteepness** ](sterrain#getsteepness)(float x, float y) | Get the gradient of the terrain at point (x,y). | | float\[,] [**GetHeights** ](sterrain#getheights)() | Get an array of heightmap samples. | | void [**SetHeights** ](sterrain#setheights)(float\[,] data) | Set the resolution of the detail map. | | void [**SetHeight** ](sterrain#setheight)(int x, int y, float value) | Set value to height of \[x,y] | | SVector [**GetNormal** ](sterrain#getnormal)(float x, float y) | Get an interpolated normal at a given location. | | SVector [**GetSlope** ](sterrain#getslope)(float x, float y) | Get a normalized and interpolated normal at a given location. | | SVector [**GetContour** ](sterrain#getcontour)(float x, float y) | Get a contour of interpolated normal at a given location. | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/sterrain.md#enabled)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/sterrain.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetHeight[​](#getheight "Direct link to GetHeight") float **GetHeight** (float x, float y) *Get an interpolated height at a point x,y.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua floatHeight = Space.Host.ExecutingObject.Terrain.GetHeight(1,1) ``` ##### GetSteepness[​](#getsteepness "Direct link to GetSteepness") float **GetSteepness** (float x, float y) *Get the gradient of the terrain at point (x,y).* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua floatSteepness = Space.Host.ExecutingObject.Terrain.GetSteepness(1,1) ``` ##### GetHeights[​](#getheights "Direct link to GetHeights") float\[,] **GetHeights** () *Returns a two dimensional array of heightmap samples. The samples are represented as float values ranging from 0 to 1. The array has the dimensions \[height,width] and is indexed as \[y,x].* * Lua ```lua tableHeights = Space.Host.ExecutingObject.Terrain.GetHeights() ``` ##### SetHeights[​](#setheights "Direct link to SetHeights") void **SetHeights** (float\[,] data) *Sets heightmap data using a two dimensional array of heightmap samples. The samples are represented as float values ranging from 0 to 1. The heights array is indexed as \[y,x].* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableHeights = Space.Host.ExecutingObject.Terrain.SetHeights({{1,2},{1,2}}) ``` ##### SetHeight[​](#setheight "Direct link to SetHeight") void **SetHeight** (int x, int y, float value) *Set value to height of \[x,y]* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Terrain.SetHeight(1,1,0.11) ``` ##### GetNormal[​](#getnormal "Direct link to GetNormal") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GetNormal** (float x, float y) *Get an interpolated normal at a given location.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua vectorNormal = Space.Host.ExecutingObject.Terrain.GetNormal(1,1) ``` ##### GetSlope[​](#getslope "Direct link to GetSlope") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GetSlope** (float x, float y) *Get a normalized and interpolated normal at a given location.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua vectorSlope = Space.Host.ExecutingObject.Terrain.GetSlope(1,1) ``` ##### GetContour[​](#getcontour "Direct link to GetContour") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GetContour** (float x, float y) *Get a contour of interpolated normal at a given location.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua vectorContour = Space.Host.ExecutingObject.Terrain.GetContour(1,1) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is the Terrain component enabled?* * Lua ```lua Space.Host.ExecutingObject.Terrain.Enabled = false ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *The GameObject that this Terrain component is added to.* * Lua ```lua theGameObject = Space.Host.ExecutingObject.Terrain.GameObject ``` --- ### STrailRenderer #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------- | | void [**Clear** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#clear)() | | SVector [**GetPosition** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#getposition)(int index) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#enabled)`get` `set` | | bool [**ReceiveShadows** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#receiveshadows)`get` `set` | | bool [**IsVisible** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#isvisible)`get` | | bool [**CastShadows** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#castshadows)`get` `set` | | bool [**MotionVectors** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#motionvectors)`get` `set` | | bool [**UseLightProbes** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#uselightprobes)`get` `set` | | float [**Time** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#time)`get` `set` | | float [**StartWidth** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#startwidth)`get` `set` | | float [**EndWidth** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#endwidth)`get` `set` | | float [**WidthMultiplier** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#widthmultiplier)`get` `set` | | SColor [**StartColor** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#startcolor)`get` `set` | | SColor [**EndColor** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#endcolor)`get` `set` | | bool [**Autodestruct** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#autodestruct)`get` `set` | | int [**NumCornerVertices** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#numcornervertices)`get` `set` | | int [**NumCapVertices** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#numcapvertices)`get` `set` | | float [**MinVertexDistance** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#minvertexdistance)`get` `set` | | int [**TextureMode** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#texturemode)`get` `set` | | int [**Alignment** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#alignment)`get` `set` | | int [**PositionCount** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#positioncount)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/strailrenderer.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Clear[​](#clear "Direct link to Clear") void **Clear** () *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.Clear() ``` ##### GetPosition[​](#getposition "Direct link to GetPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GetPosition** (int index) *Get the position of a vertex in the trail.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua vectorPos = Space.Host.ExecutingObject.TrailRenderer.GetPosition(0) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether this TrailRenderer component is Enabled.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.Enabled = true ``` * Lua ```lua --Clicking the object Enables/Disables the Trail Renderer component on this object --[Add "trailrenderer" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OnClick = function() trailrenderer.Enabled = not trailrenderer.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### ReceiveShadows[​](#receiveshadows "Direct link to ReceiveShadows") bool **ReceiveShadows** `get` `set` *Does this object receive shadows?* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.ReceiveShadows = true ``` * Lua ```lua --Make a UIToggle disable/enable the Receive Shadows feature of a Trail Renderer --[Add "toggle" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer toggle.IsOn = trailrenderer.ReceiveShadows --make toggle start at correct state OVC = function() if toggle.IsOn then trailrenderer.ReceiveShadows = true else trailrenderer.ReceiveShadows = false end end toggle.OnValueChanged(OVC) ``` ##### IsVisible[​](#isvisible "Direct link to IsVisible") bool **IsVisible** `get` *Is this renderer visible in any camera?* * Lua ```lua Space.Log(Space.Host.ExecutingObject.TrailRenderer.IsVisible) ``` ##### CastShadows[​](#castshadows "Direct link to CastShadows") bool **CastShadows** `get` `set` *Does the trail cast a shadow when a shadow-casting Light shines on it?* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.CastShadows = true ``` * Lua ```lua --Make a UIToggle disable/enable the Cast Shadows feature of a Trail Renderer --[Add "toggle" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer toggle.IsOn = trailrenderer.CastShadows --make toggle start at correct state OVC = function() if toggle.IsOn then trailrenderer.CastShadows = true else trailrenderer.CastShadows = false end end toggle.OnValueChanged(OVC) ``` ##### MotionVectors[​](#motionvectors "Direct link to MotionVectors") bool **MotionVectors** `get` `set` *Set whether to use motion vectors to track this Renderer’s per-pixel, screen-space motion from one frame to the next. You can use this information to apply post-processing effects such as motion blur.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.MotionVectors = true ``` * Lua ```lua --Make a UIToggle disable/enable the Motion Vectors feature of a Trail Renderer --[Add "toggle" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer toggle.IsOn = trailrenderer.MotionVectors --make toggle start at correct state OVC = function() if toggle.IsOn then trailrenderer.MotionVectors = true else trailrenderer.MotionVectors = false end end toggle.OnValueChanged(OVC) ``` ##### UseLightProbes[​](#uselightprobes "Direct link to UseLightProbes") bool **UseLightProbes** `get` `set` *Enable Light Probes on the trail.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.UseLightProbes = true ``` * Lua ```lua --Make a UIToggle disable/enable the Light Probes feature of a Trail Renderer --[Add "toggle" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer toggle.IsOn = trailrenderer.UseLightProbes --make toggle start at correct state OVC = function() if toggle.IsOn then trailrenderer.UseLightProbes = true else trailrenderer.UseLightProbes = false end end toggle.OnValueChanged(OVC) ``` ##### Time[​](#time "Direct link to Time") float **Time** `get` `set` *How long does the trail take to fade out. (seconds)* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.Time = 10 ``` * Lua ```lua --Make a slider change the Trail Renderer's Time --[Add "slider" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OVC = function() trailrenderer.Time = slider.Value * 10 --0 to 10 end slider.OnValueChanged(OVC) ``` ##### StartWidth[​](#startwidth "Direct link to StartWidth") float **StartWidth** `get` `set` *The width of the trail at the spawning point. A width of 1 corresponds to 1 unit in the game world.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.StartWidth = 1.1 ``` * Lua ```lua --Make a slider change the Trail Renderer's Start Width --[Add "slider" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OVC = function() trailrenderer.StartWidth = slider.Value * 10 --0 to 10 end slider.OnValueChanged(OVC) ``` ##### EndWidth[​](#endwidth "Direct link to EndWidth") float **EndWidth** `get` `set` *The width of the trail at the end of the trail. A width of 1 corresponds to 1 unit in the game world.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.EndWidth = 0.1 ``` * Lua ```lua --Make a slider change the Trail Renderer's End Width --[Add "slider" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OVC = function() trailrenderer.EndWidth = slider.Value * 10 --0 to 10 end slider.OnValueChanged(OVC) ``` ##### WidthMultiplier[​](#widthmultiplier "Direct link to WidthMultiplier") float **WidthMultiplier** `get` `set` *Set an overall multiplier that is applied to the TrailRenderer.widthCurve to get the final width of the trail.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.WidthMultiplier = 2 ``` * Lua ```lua --Make a slider change the Trail Renderer's Width Multiplier --[Add "slider" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OVC = function() trailrenderer.WidthMultiplier = slider.Value * 10 --0 to 10 end slider.OnValueChanged(OVC) ``` ##### StartColor[​](#startcolor "Direct link to StartColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **StartColor** `get` `set` *Set the color at the start of the trail.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.StartColor = Color.Black ``` * Lua ```lua --makes UIButton open a color picker to change TrailRenderer's Start Color --[Add "button" and "trailrenderer" references to the Scripting Runtime component] button = Space.Host.GetReference("button").UIButton trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer originalColor = trailrenderer.StartColor OnChange = function(SColor) trailrenderer.StartColor = SColor end OnSelect = function(SColor) trailrenderer.StartColor = SColor end OnCancel = function() trailrenderer.StartColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end button.OnClick(OnClick) ``` ##### EndColor[​](#endcolor "Direct link to EndColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **EndColor** `get` `set` *Set the color at the end of the trail.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.EndColor = Color.Red ``` * Lua ```lua --makes UIButton open a color picker to change TrailRenderer's End Color --[Add "button" and "trailrenderer" references to the Scripting Runtime component] button = Space.Host.GetReference("button").UIButton trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer originalColor = trailrenderer.EndColor OnChange = function(SColor) trailrenderer.EndColor = SColor end OnSelect = function(SColor) trailrenderer.EndColor = SColor end OnCancel = function() trailrenderer.EndColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end button.OnClick(OnClick) ``` ##### Autodestruct[​](#autodestruct "Direct link to Autodestruct") bool **Autodestruct** `get` `set` *Does the GameObject of this Trail Renderer auto destruct?* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.Autodestruct = true ``` * Lua ```lua --Make a UIToggle disable/enable the Autodestruct feature of a Trail Renderer --[Add "toggle" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer toggle.IsOn = trailrenderer.Autodestruct --make toggle start at correct state OVC = function() if toggle.IsOn then trailrenderer.Autodestruct = true else trailrenderer.Autodestruct = false end end toggle.OnValueChanged(OVC) ``` ##### NumCornerVertices[​](#numcornervertices "Direct link to NumCornerVertices") int **NumCornerVertices** `get` `set` *Set this to a value greater than 0, to get rounded corners between each segment of the trail.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.NumCornerVertices = 2 ``` * Lua ```lua --Make a slider change the Trail Renderer's Number of Corner Vertices --[Add "slider" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OVC = function() trailrenderer.NumCornerVertices = slider.Value * 90 --0 to 90 end slider.OnValueChanged(OVC) ``` ##### NumCapVertices[​](#numcapvertices "Direct link to NumCapVertices") int **NumCapVertices** `get` `set` *Set this to a value greater than 0, to get rounded corners on each end of the trail.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.NumCapVertices = 3 ``` * Lua ```lua --Make a slider change the Trail Renderer's Number of End Cap Vertices --[Add "slider" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OVC = function() trailrenderer.NumCapVertices = slider.Value * 90 --0 to 90 end slider.OnValueChanged(OVC) ``` ##### MinVertexDistance[​](#minvertexdistance "Direct link to MinVertexDistance") float **MinVertexDistance** `get` `set` *Set the minimum distance the trail can travel before a new vertex is added to it. Smaller values with give smoother trails, consisting of more vertices, but costing more performance.* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.MinVertexDistance = 1 ``` * Lua ```lua --Make a slider change the Trail Renderer's Number of Mininum Vertex Distance --[Add "slider" and "trailrenderer" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OVC = function() trailrenderer.MinVertexDistance = slider.Value * 10 --0 to 10 end slider.OnValueChanged(OVC) ``` ##### TextureMode[​](#texturemode "Direct link to TextureMode") int **TextureMode** `get` `set` *Choose whether the U coordinate of the trail texture is tiled or stretched. 0 Stretch, 1 Tile, 2 Distribute Per Segment, 3 Repeat Per Segment* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.TextureMode = 2 ``` * Lua ```lua --Clicking the object toggles between TrailRenderer's 4 different Texture Modes --[Add "trailrenderer" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OnClick = function() if trailrenderer.TextureMode == 3 then trailrenderer.TextureMode = 0 else trailrenderer.TextureMode = trailrenderer.TextureMode + 1 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Alignment[​](#alignment "Direct link to Alignment") int **Alignment** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.TrailRenderer.Alignment = 1 ``` * Lua ```lua --Clicking the object toggles between TrailRenderer's View or Transform Z alignment --[Add "trailrenderer" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject trailrenderer = Space.Host.GetReference("trailrenderer").TrailRenderer OnClick = function() if trailrenderer.Alignment == 0 then trailrenderer.Alignment = 1 else trailrenderer.Alignment = 0 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### PositionCount[​](#positioncount "Direct link to PositionCount") int **PositionCount** `get` *Get the number of line segments in the trail.* * Lua ```lua numLineSegments = Space.Host.ExecutingObject.TrailRenderer.PositionCount ``` ##### GameObject[​](#gameobject "Direct link to GameObject") SGameObject **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.TrailRenderer.GameObject ``` --- ### SUIButton #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------- | | void [**OnClick** ](/scripting/client-scripting-api-reference/components/suibutton.md#onclick)(Closure callback) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/suibutton.md#enabled)`get` `set` | | bool [**Interactable** ](/scripting/client-scripting-api-reference/components/suibutton.md#interactable)`get` `set` | | SColor [**NormalColor** ](/scripting/client-scripting-api-reference/components/suibutton.md#normalcolor)`get` `set` | | SColor [**HighlightedColor** ](/scripting/client-scripting-api-reference/components/suibutton.md#highlightedcolor)`get` `set` | | SColor [**PressedColor** ](/scripting/client-scripting-api-reference/components/suibutton.md#pressedcolor)`get` `set` | | SColor [**DisabledColor** ](/scripting/client-scripting-api-reference/components/suibutton.md#disabledcolor)`get` `set` | | float [**ColorMultiplier** ](/scripting/client-scripting-api-reference/components/suibutton.md#colormultiplier)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suibutton.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### OnClick[​](#onclick "Direct link to OnClick") void **OnClick** (Closure callback) *Invoke when a user clicks the button and releases it.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function OnClickFunction() -- end Space.Host.ExecutingObject.UIButton.OnClick(OnClickFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the button component is Enabled.* * Lua ```lua Space.Host.ExecutingObject.UIButton.Enabled = true ``` * Lua ```lua --clicking this object will toggle Enable/Disable an object's Button component thisGameObject = Space.Host.ExecutingObject button = Space.Host.GetReference("button").UIButton --make sure to add this reference to the Scripting Runtime component OnClick = function() button.Enabled = not button.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Interactable[​](#interactable "Direct link to Interactable") bool **Interactable** `get` `set` *Enable Interactable if you want this button to accept input.* * Lua ```lua Space.Host.ExecutingObject.UIButton.Interactable = true ``` * Lua ```lua --clicking this object will toggle Interactable status on an object's Button component thisGameObject = Space.Host.ExecutingObject button = Space.Host.GetReference("button").UIButton --make sure to add this reference to the Scripting Runtime component OnClick = function() button.Interactable= not button.Interactable end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### NormalColor[​](#normalcolor "Direct link to NormalColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **NormalColor** `get` `set` *The normal color of the control.* * Lua ```lua Space.Host.ExecutingObject.UIButton.NormalColor = Color.Red ``` ##### HighlightedColor[​](#highlightedcolor "Direct link to HighlightedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **HighlightedColor** `get` `set` *The color of the control when it is highlighted.* * Lua ```lua Space.Host.ExecutingObject.UIButton.NormalColor = Color.Red ``` ##### PressedColor[​](#pressedcolor "Direct link to PressedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **PressedColor** `get` `set` *The color of the control when it is pressed.* * Lua ```lua Space.Host.ExecutingObject.UIButton.PressedColor = Color.Red ``` ##### DisabledColor[​](#disabledcolor "Direct link to DisabledColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **DisabledColor** `get` `set` *The color of the control when it is disabled.* * Lua ```lua Space.Host.ExecutingObject.UIButton.PressedColor = Color.Red ``` ##### ColorMultiplier[​](#colormultiplier "Direct link to ColorMultiplier") float **ColorMultiplier** `get` `set` *This multiplies the tint color for each transition by its value. With this you can create colors greater than 1 to brighten the colors on graphic elements whose base color is less than white.* * Lua ```lua Space.Host.ExecutingObject.UIButton.ColorMultiplier = Color.Red ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIButton.GameObject = Color.Red ``` --- ### SUICanvas #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------------------------- | | bool [**IsRootCanvas** ](/scripting/client-scripting-api-reference/components/suicanvas.md#isrootcanvas)`get` | | float [**ScaleFactor** ](/scripting/client-scripting-api-reference/components/suicanvas.md#scalefactor)`get` `set` | | float [**ReferencePixelsPerUnit** ](/scripting/client-scripting-api-reference/components/suicanvas.md#referencepixelsperunit)`get` `set` | | bool [**PixelPerfect** ](/scripting/client-scripting-api-reference/components/suicanvas.md#pixelperfect)`get` `set` | | float [**PlaneDistance** ](/scripting/client-scripting-api-reference/components/suicanvas.md#planedistance)`get` `set` | | int [**SortingOrder** ](/scripting/client-scripting-api-reference/components/suicanvas.md#sortingorder)`get` `set` | | int [**TargetDisplay** ](/scripting/client-scripting-api-reference/components/suicanvas.md#targetdisplay)`get` `set` | | float [**NormalizedSortingGridSize** ](/scripting/client-scripting-api-reference/components/suicanvas.md#normalizedsortinggridsize)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suicanvas.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### IsRootCanvas[​](#isrootcanvas "Direct link to IsRootCanvas") bool **IsRootCanvas** `get` *The avoidance radius for the agent.* * Lua ```lua IsRootCanvas = Space.Host.ExecutingObject.UICanvas.IsRootCanvas ``` ##### ScaleFactor[​](#scalefactor "Direct link to ScaleFactor") float **ScaleFactor** `get` `set` *Scales all UI elements in the Canvas by this factor.* * Lua ```lua Space.Host.ExecutingObject.UICanvas.ScaleFactor = 2.0 ``` ##### ReferencePixelsPerUnit[​](#referencepixelsperunit "Direct link to ReferencePixelsPerUnit") float **ReferencePixelsPerUnit** `get` `set` *If a sprite has this "Pixels Per Unit" setting, then one pixel in the sprite will cover one unit in the UI.* * Lua ```lua Space.Host.ExecutingObject.UICanvas.ReferencePixelsPerUnit = 50.0 ``` ##### PixelPerfect[​](#pixelperfect "Direct link to PixelPerfect") bool **PixelPerfect** `get` `set` *Should the UI be rendered without antialiasing for precision?* * Lua ```lua Space.Host.ExecutingObject.UICanvas.PixelPerfect = true ``` ##### PlaneDistance[​](#planedistance "Direct link to PlaneDistance") float **PlaneDistance** `get` `set` *The distance at which the UI plane should be placed in front of the camera.* * Lua ```lua Space.Host.ExecutingObject.UICanvas.PlaneDistance = 2.0 ``` ##### SortingOrder[​](#sortingorder "Direct link to SortingOrder") int **SortingOrder** `get` `set` *Canvas' order within a sorting layer.* * Lua ```lua Space.Host.ExecutingObject.UICanvas.SortingOrder = 2.0 ``` ##### TargetDisplay[​](#targetdisplay "Direct link to TargetDisplay") int **TargetDisplay** `get` `set` *For Overlay mode, display index on which the UI canvas will appear.* * Lua ```lua Space.Host.ExecutingObject.UICanvas.TargetDisplay = 1 ``` ##### NormalizedSortingGridSize[​](#normalizedsortinggridsize "Direct link to NormalizedSortingGridSize") float **NormalizedSortingGridSize** `get` `set` *The normalized grid size that the canvas will split the renderable area into.* * Lua ```lua Space.Host.ExecutingObject.UICanvas.NormalizedSortingGridSize = 5.0 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UICanvas.GameObject ``` --- ### SUIDropdown #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**RefreshShownValue** ](/scripting/client-scripting-api-reference/components/suidropdown.md#refreshshownvalue)() | | void [**AddOptions** ](suidropdown#addoptions)(string\[] options)
void [**AddOptions** ](suidropdown#addoptions)(Table options)
void [**AddOptions** ](suidropdown#addoptions)(SResource\[] optionsSprites) | | void [**ClearOptions** ](/scripting/client-scripting-api-reference/components/suidropdown.md#clearoptions)() | | void [**Show** ](/scripting/client-scripting-api-reference/components/suidropdown.md#show)() | | void [**Hide** ](/scripting/client-scripting-api-reference/components/suidropdown.md#hide)() | | void [**OnValueChanged** ](/scripting/client-scripting-api-reference/components/suidropdown.md#onvaluechanged)(Closure callback) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------- | | bool [**Interactable** ](/scripting/client-scripting-api-reference/components/suidropdown.md#interactable)`get` `set` | | SGameObject [**Template** ](/scripting/client-scripting-api-reference/components/suidropdown.md#template)`get` `set` | | SUIText [**CaptionText** ](/scripting/client-scripting-api-reference/components/suidropdown.md#captiontext)`get` `set` | | SUIImage [**CaptionImage** ](/scripting/client-scripting-api-reference/components/suidropdown.md#captionimage)`get` `set` | | SUIText [**ItemText** ](/scripting/client-scripting-api-reference/components/suidropdown.md#itemtext)`get` `set` | | SUIImage [**ItemImage** ](/scripting/client-scripting-api-reference/components/suidropdown.md#itemimage)`get` `set` | | string\[] [**OptionsAsText** ](/scripting/client-scripting-api-reference/components/suidropdown.md#optionsastext)`get` | | SResource\[] [**OptionsAsSprites** ](/scripting/client-scripting-api-reference/components/suidropdown.md#optionsassprites)`get` | | int [**Value** ](/scripting/client-scripting-api-reference/components/suidropdown.md#value)`get` `set` | | SColor [**NormalColor** ](/scripting/client-scripting-api-reference/components/suidropdown.md#normalcolor)`get` `set` | | SColor [**HighlightedColor** ](/scripting/client-scripting-api-reference/components/suidropdown.md#highlightedcolor)`get` `set` | | SColor [**PressedColor** ](/scripting/client-scripting-api-reference/components/suidropdown.md#pressedcolor)`get` `set` | | SColor [**DisabledColor** ](/scripting/client-scripting-api-reference/components/suidropdown.md#disabledcolor)`get` `set` | | float [**ColorMultiplier** ](/scripting/client-scripting-api-reference/components/suidropdown.md#colormultiplier)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suidropdown.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### RefreshShownValue[​](#refreshshownvalue "Direct link to RefreshShownValue") void **RefreshShownValue** () *Refreshes the text and image (if available) of the currently selected option.If you have modified the list of options, you should call this method afterwards to ensure that the visual state of the dropdown corresponds to the updated options.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.UIDropdown.RefreshShownValue() ``` ##### AddOptions[​](#addoptions "Direct link to AddOptions") void **AddOptions** (string\[] options)
void **AddOptions** (Table options)
void **AddOptions** ([SResource](/scripting/client-scripting-api-reference/types/sresource.md)\[] optionsSprites) *Add multiple options to the options of the Dropdown.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.UIDropdown.AddOptions({"option1","option2","option3"}) ``` ##### ClearOptions[​](#clearoptions "Direct link to ClearOptions") void **ClearOptions** () *Clear the list of options in the Dropdown.* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.ClearOptions() ``` ##### Show[​](#show "Direct link to Show") void **Show** () *Show the dropdown list.* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.Show() ``` ##### Hide[​](#hide "Direct link to Hide") void **Hide** () *Hide the dropdown list.* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.Hide() ``` ##### OnValueChanged[​](#onvaluechanged "Direct link to OnValueChanged") void **OnValueChanged** (Closure callback) *Bind a function to handle the event that is invoked when when a user has clicked one of the options in the dropdown list.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function AFunction() -- end Space.Host.ExecutingObject.UIDropdown.OnValueChanged(AFunction) ``` ##### SetValueByText[​](#setvaluebytext "Direct link to SetValueByText") bool **SetValueByText** (string text) *Attempts to set the dropdown to the first option in the dropdown list that matches the inputted text. Returns true if found, false if no matches found.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.UIDropdown.SetValueByText("Value Text") ``` * Lua ```lua --Populating a UIDropdown and making a selection using value's text dropDown=Space.Host.GetReference("DropDown").UIDropdown options = {"Room 1", "Room 2", "Room 3", "Room 4"} dropDown.AddOptions(options) dropDown.SetValueByText("Room 3") ``` #### Properties[​](#properties "Direct link to Properties") ##### Interactable[​](#interactable "Direct link to Interactable") bool **Interactable** `get` `set` *Is this UIDropdown interactable?* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.Interactable = true ``` * Lua ```lua --clicking this object will toggle a UIDropdown's interactable status thisGameObject = Space.Host.ExecutingObject dropdown = Space.Host.GetReference("dropdown").UIDropdown --make sure to add this reference to the Scripting Runtime component OnClick = function() dropdown.Interactable = not dropdown.Interactable end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Template[​](#template "Direct link to Template") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Template** `get` `set` *The Rect Transform of the template for the dropdown list.* * Lua ```lua aReferenceToAGameObject = Space.Host.GetReference("reference name") Space.Host.ExecutingObject.UIDropdown.Template = aReferenceToAGameObject ``` ##### CaptionText[​](#captiontext "Direct link to CaptionText") [SUIText](/scripting/client-scripting-api-reference/components/suitext.md) **CaptionText** `get` `set` *The Text component to hold the text of the currently selected option.* * Lua ```lua captionText = Space.Host.ExecutingObject.UIDropdown.CaptionText captionText.Text = "new caption" ``` ##### CaptionImage[​](#captionimage "Direct link to CaptionImage") [SUIImage](/scripting/client-scripting-api-reference/components/suiimage.md) **CaptionImage** `get` `set` *The Image component to hold the image of the currently selected option.* * Lua ```lua aReferenceToAGameObject = Space.Host.GetReference("reference name") Space.Host.ExecutingObject.UIDropdown.CaptionImage = aReferenceToAGameObject.UIImage ``` ##### ItemText[​](#itemtext "Direct link to ItemText") [SUIText](/scripting/client-scripting-api-reference/components/suitext.md) **ItemText** `get` `set` *The Text component to hold the text of the item.* * Lua ```lua aReferenceToAGameObject = Space.Host.GetReference("reference name") Space.Host.ExecutingObject.UIDropdown.CaptionImage = aReferenceToAGameObject.UIText ``` ##### ItemImage[​](#itemimage "Direct link to ItemImage") [SUIImage](/scripting/client-scripting-api-reference/components/suiimage.md) **ItemImage** `get` `set` *The Image component to hold the image of the item.* * Lua ```lua iaReferenceToAGameObject = Space.Host.GetReference("reference name") Space.Host.ExecutingObject.UIDropdown.CaptionImage = aReferenceToAGameObject.UIImage ``` ##### OptionsAsText[​](#optionsastext "Direct link to OptionsAsText") string\[] **OptionsAsText** `get` *The list of possible options. (Text)* * Lua ```lua optionsText = Space.Host.ExecutingObject.UIDropdown.OptionsAsText ``` ##### OptionsAsSprites[​](#optionsassprites "Direct link to OptionsAsSprites") [SResource](/scripting/client-scripting-api-reference/types/sresource.md)\[] **OptionsAsSprites** `get` *The list of possible options. (Sprites)* * Lua ```lua optionsSprites = Space.Host.ExecutingObject.UIDropdown.OptionsAsSprites ``` ##### Value[​](#value "Direct link to Value") int **Value** `get` `set` *The Value is the index number of the current selection in the Dropdown. 0 is the first option in the Dropdown, 1 is the second, and so on.* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.Value= 2 ``` ##### NormalColor[​](#normalcolor "Direct link to NormalColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **NormalColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.NormalColor = Color.Red ``` ##### HighlightedColor[​](#highlightedcolor "Direct link to HighlightedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **HighlightedColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.HighlightedColor = Color.Red ``` ##### PressedColor[​](#pressedcolor "Direct link to PressedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **PressedColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.PressedColor = Color.Red ``` ##### DisabledColor[​](#disabledcolor "Direct link to DisabledColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **DisabledColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.DisabledColor = Color.Red ``` ##### ColorMultiplier[​](#colormultiplier "Direct link to ColorMultiplier") float **ColorMultiplier** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.ColorMultiplier = Color.Red ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIDropdown.GameObject = Color.Red ``` --- ### SUIImage #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------------------- | | SColor [**Color** ](/scripting/client-scripting-api-reference/components/suiimage.md#color)`get` `set` | | SResource [**Sprite** ](/scripting/client-scripting-api-reference/components/suiimage.md#sprite)`get` `set` | | bool [**PreserveAspect** ](/scripting/client-scripting-api-reference/components/suiimage.md#preserveaspect)`get` `set` | | bool [**FillCenter** ](/scripting/client-scripting-api-reference/components/suiimage.md#fillcenter)`get` `set` | | float [**FillAmount** ](/scripting/client-scripting-api-reference/components/suiimage.md#fillamount)`get` `set` | | bool [**FillClockwise** ](/scripting/client-scripting-api-reference/components/suiimage.md#fillclockwise)`get` `set` | | int [**FillOrigin** ](/scripting/client-scripting-api-reference/components/suiimage.md#fillorigin)`get` `set` | | float [**AlphaHitTestMinimumThreshold** ](/scripting/client-scripting-api-reference/components/suiimage.md#alphahittestminimumthreshold)`get` `set` | | bool [**HasBorder** ](/scripting/client-scripting-api-reference/components/suiimage.md#hasborder)`get` | | float [**PixelsPerUnit** ](/scripting/client-scripting-api-reference/components/suiimage.md#pixelsperunit)`get` | | SMaterial [**Material** ](/scripting/client-scripting-api-reference/components/suiimage.md#material)`get` `set` | | float [**MinWidth** ](/scripting/client-scripting-api-reference/components/suiimage.md#minwidth)`get` | | float [**PreferredWidth** ](/scripting/client-scripting-api-reference/components/suiimage.md#preferredwidth)`get` | | float [**FlexibleWidth** ](/scripting/client-scripting-api-reference/components/suiimage.md#flexiblewidth)`get` | | float [**MinHeight** ](/scripting/client-scripting-api-reference/components/suiimage.md#minheight)`get` | | float [**PreferredHeight** ](/scripting/client-scripting-api-reference/components/suiimage.md#preferredheight)`get` | | float [**FlexibleHeight** ](/scripting/client-scripting-api-reference/components/suiimage.md#flexibleheight)`get` | | int [**LayoutPriority** ](/scripting/client-scripting-api-reference/components/suiimage.md#layoutpriority)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suiimage.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Color[​](#color "Direct link to Color") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Color** `get` `set` *Default Color of UIImage* * Lua ```lua Space.Host.ExecutingObject.UIImage.Color= Color.Red ``` ##### Sprite[​](#sprite "Direct link to Sprite") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Sprite** `get` `set` *The sprite that is used to render this image.* * Lua ```lua Space.Host.ExecutingObject.UIImage.Sprite = Space.GetResource("resource name") ``` ##### PreserveAspect[​](#preserveaspect "Direct link to PreserveAspect") bool **PreserveAspect** `get` `set` *Whether this image should preserve its Sprite aspect ratio.* * Lua ```lua Space.Host.ExecutingObject.UIImage.PreserveAspect = true ``` ##### FillCenter[​](#fillcenter "Direct link to FillCenter") bool **FillCenter** `get` `set` *Whether or not to render the center* * Lua ```lua Space.Host.ExecutingObject.UIImage.FillCenter = true ``` ##### FillAmount[​](#fillamount "Direct link to FillAmount") float **FillAmount** `get` `set` *Amount of the Image shown* * Lua ```lua Space.Host.ExecutingObject.UIImage.FillAmount = 0.5 ``` ##### FillClockwise[​](#fillclockwise "Direct link to FillClockwise") bool **FillClockwise** `get` `set` *Whether the Image should be filled clockwise (true) or counter-clockwise (false).* * Lua ```lua Space.Host.ExecutingObject.UIImage.FillClockwise = true ``` ##### FillOrigin[​](#fillorigin "Direct link to FillOrigin") int **FillOrigin** `get` `set` *Controls the origin point of the Fill process.* * Lua ```lua Space.Host.ExecutingObject.UIImage.FillOrigin = 0 ``` ##### AlphaHitTestMinimumThreshold[​](#alphahittestminimumthreshold "Direct link to AlphaHitTestMinimumThreshold") float **AlphaHitTestMinimumThreshold** `get` `set` *The alpha threshold specifies the minimum alpha a pixel must have for the event to considered a "hit" on the Image. Alpha values less than the threshold will cause raycast events to pass through the Image. An value of 1 would cause only fully opaque pixels to register raycast events on the Image. The alpha tested is retrieved from the image sprite only, while the alpha of the Image Graphic.color is disregarded.* *alphaHitTestMinimumThreshold defaults to 0; all raycast events inside the Image rectangle are considered a hit. In order for greater than 0 to values to work, the sprite used by the Image must have readable pixels. This can be achieved by enabling Read/Write enabled in the advanced Texture Import Settings for the sprite and disabling atlassing for the sprite.* * Lua ```lua Space.Host.ExecutingObject.UIImage.AlphaHitTestMinimumThreshold = 0 ``` ##### HasBorder[​](#hasborder "Direct link to HasBorder") bool **HasBorder** `get` *True if the sprite used has borders.* * Lua ```lua imgHasBorder = Space.Host.ExecutingObject.UIImage.HasBorder ``` ##### PixelsPerUnit[​](#pixelsperunit "Direct link to PixelsPerUnit") float **PixelsPerUnit** `get` *Provides information about how fonts are scale to the screen.* *For dynamic fonts, the value is equivalent to the scale factor of the canvas. For non-dynamic fonts, the value is calculated from the requested text size and the size from the font.* * Lua ```lua ppUnit = Space.Host.ExecutingObject.UIImage.PixelsPerUnit ``` ##### Material[​](#material "Direct link to Material") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **Material** `get` `set` *The specified Material used by this Image. The default Material is used instead if one wasn't specified.* * Lua ```lua Space.Host.ExecutingObject.UIImage.Material = Space.GetResource("resource name").AsMaterial ``` ##### MinWidth[​](#minwidth "Direct link to MinWidth") float **MinWidth** `get` *The minimum width this UIImage may be allocated. (Used by the Layout system).* * Lua ```lua minWidth = Space.Host.ExecutingObject.UIImage.MinWidth ``` ##### PreferredWidth[​](#preferredwidth "Direct link to PreferredWidth") float **PreferredWidth** `get` *The preferred width this UIImage should be allocated if there is sufficient space. (Used by the Layout system)* * Lua ```lua prefWidth = Space.Host.ExecutingObject.UIImage.PreferredWidth ``` ##### FlexibleWidth[​](#flexiblewidth "Direct link to FlexibleWidth") float **FlexibleWidth** `get` *The extra relative width this UIImage should be allocated if there is additional available space. (Used by the Layout system)* * Lua ```lua flexWidth = Space.Host.ExecutingObject.UIImage.FlexibleWidth ``` ##### MinHeight[​](#minheight "Direct link to MinHeight") float **MinHeight** `get` *The minimum height this UIImage may be allocated.(Used by the Layout system).* * Lua ```lua minHeight = Space.Host.ExecutingObject.UIImage.MinHeight ``` ##### PreferredHeight[​](#preferredheight "Direct link to PreferredHeight") float **PreferredHeight** `get` *The preferred height this UIImage should be allocated if there is sufficient space. (Used by the Layout system)* * Lua ```lua prefHeight = Space.Host.ExecutingObject.UIImage.PreferredHeight ``` ##### FlexibleHeight[​](#flexibleheight "Direct link to FlexibleHeight") float **FlexibleHeight** `get` *The extra relative height this UIImage should be allocated if there is additional available space. (Used by the Layout system)* * Lua ```lua flexHeight = Space.Host.ExecutingObject.UIImage.FlexibleHeight ``` ##### LayoutPriority[​](#layoutpriority "Direct link to LayoutPriority") int **LayoutPriority** `get` *The layout priority of this UIText component.(Used by the Layout system.)* * Lua ```lua layoutPrio = Space.Host.ExecutingObject.UIImage.LayoutPriority ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UIImage.GameObject ``` --- ### SUIInputField #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------------------------- | | void [**OnValueChanged** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#onvaluechanged)(Closure callback) | | void [**OnEndEdit** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#onendedit)(Closure callback) | | void [**ActivateInputField** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#activateinputfield)() | | void [**DeactivateInputField** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#deactivateinputfield)() | | void [**Select** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#select)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------------------------------- | | string [**Text** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#text)`get` `set` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#enabled)`get` `set` | | bool [**Interactable** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#interactable)`get` `set` | | bool [**IsFocused** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#isfocused)`get` | | float [**CaretBlinkRate** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#caretblinkrate)`get` `set` | | int [**CaretWidth** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#caretwidth)`get` `set` | | int [**CharacterLimit** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#characterlimit)`get` `set` | | bool [**ReadOnly** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#readonly)`get` `set` | | bool [**MultiLine** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#multiline)`get` | | char [**AsteriskChar** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#asteriskchar)`get` `set` | | int [**CaretPosition** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#caretposition)`get` `set` | | int [**SelectionAnchorPosition** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#selectionanchorposition)`get` `set` | | int [**SelectionFocusPosition** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#selectionfocusposition)`get` `set` | | float [**MinWidth** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#minwidth)`get` | | float [**PreferredWidth** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#preferredwidth)`get` | | float [**FlexibleWidth** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#flexiblewidth)`get` | | float [**MinHeight** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#minheight)`get` | | float [**PreferredHeight** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#preferredheight)`get` | | float [**FlexibleHeight** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#flexibleheight)`get` | | SColor [**NormalColor** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#normalcolor)`get` `set` | | SColor [**HighlightedColor** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#highlightedcolor)`get` `set` | | SColor [**PressedColor** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#pressedcolor)`get` `set` | | SColor [**DisabledColor** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#disabledcolor)`get` `set` | | float [**ColorMultiplier** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#colormultiplier)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suiinputfield.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### OnValueChanged[​](#onvaluechanged "Direct link to OnValueChanged") void **OnValueChanged** (Closure callback) *Given function will be called when text in Input Field has changed* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function OVC() -- end Space.Host.ExecutingObject.UIInputField.OnValueChanged(OVC) ``` * Lua ```lua --This script will make an input field update a text field --with character count in real-time every time a character is typed/removed --[Text field and Input fields need to be added as references (scripting runtime)] thisObject = Space.Host.ExecutingObject inputField = Space.Host.GetReference("The Input Field").UIInputField textField = Space.Host.GetReference("The Text Field").UIText OnValueChanged = function() textField.Text = "Count= " .. string.len(inputField.Text) end thisObject.UIInputField.OnValueChanged(OnValueChanged) ``` ##### OnEndEdit[​](#onendedit "Direct link to OnEndEdit") void **OnEndEdit** (Closure callback) *Given function will be called when editing has ended* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function OEE() -- end Space.Host.ExecutingObject.UIInputField.OnEndEdit(OEE) ``` * Lua ```lua --This script will make an input field update a text field --as soon as someone has finished typing in it --Text field and Input fields need to be added as references (scripting runtime) thisObject = Space.Host.ExecutingObject inputField = Space.Host.GetReference("The Input Field").UIInputField textField = Space.Host.GetReference("The Text Field").UIText OnEndEdit = function() textField.Text = inputField.Text end Space.Host.ExecutingObject.UIInputField.OnEndEdit(OnEndEdit) ``` ##### ActivateInputField[​](#activateinputfield "Direct link to ActivateInputField") void **ActivateInputField** () *Function Description* * Lua ```lua Space.Host.ExecutingObject.UIInputField.ActivateInputField() ``` ##### DeactivateInputField[​](#deactivateinputfield "Direct link to DeactivateInputField") void **DeactivateInputField** () *Function Description* * Lua ```lua Space.Host.ExecutingObject.UIInputField.DeactivateInputField() ``` ##### Select[​](#select "Direct link to Select") void **Select** () *Function Description* * Lua ```lua Space.Host.ExecutingObject.UIInputField.DeactivateInputField() ``` #### Properties[​](#properties "Direct link to Properties") ##### Text[​](#text "Direct link to Text") string **Text** `get` `set` *The current value of the input field.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.Text= "Hello" ``` * Lua ```lua --the below script makes this object set Browser URL according to what's written in text field --[Required: This object needs a Browser and InputField objects to be added as reference to references section in Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject webBrowser = Space.Host.GetReference("Browser") urlField = Space.Host.GetReference("URL Field") OnClick = function() webBrowser.Browser.SetURL = urlField.UIInputField.Text end urlField.UIInputField.Text = https://www.youtube.com thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to set URL" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether this Input Field component is Enabled* * Lua ```lua Space.Host.ExecutingObject.UIInputField.Enabled= true ``` * Lua ```lua --clicking this object will toggle a UIInputField's Enabled status thisGameObject = Space.Host.ExecutingObject inputfield = Space.Host.GetReference("inputfield").UIInputField --make sure to add this reference to the Scripting Runtime component OnClick = function() inputfield.Enabled = not inputfield.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Interactable[​](#interactable "Direct link to Interactable") bool **Interactable** `get` `set` *Is the Input Field interactable?* * Lua ```lua Space.Host.ExecutingObject.UIInputField.Interactable= true ``` * Lua ```lua --clicking this object will toggle a UIInputField's interactable status thisGameObject = Space.Host.ExecutingObject inputfield = Space.Host.GetReference("inputfield").UIInputField --make sure to add this reference to the Scripting Runtime component OnClick = function() inputfield.Interactable = not inputfield.Interactable end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### IsFocused[​](#isfocused "Direct link to IsFocused") bool **IsFocused** `get` *Does the InputField currently have focus and is able to process events.* * Lua ```lua hasFocus = Space.Host.ExecutingObject.UIInputField.IsFocused ``` ##### CaretBlinkRate[​](#caretblinkrate "Direct link to CaretBlinkRate") float **CaretBlinkRate** `get` `set` *The blinking rate of the input caret, defined as the number of times the blink cycle occurs per second.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.CaretBlinkRate= 3 ``` ##### CaretWidth[​](#caretwidth "Direct link to CaretWidth") int **CaretWidth** `get` `set` *The width of the caret in pixels.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.CaretWidth= 4 ``` ##### CharacterLimit[​](#characterlimit "Direct link to CharacterLimit") int **CharacterLimit** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIInputField.CharacterLimit= 8 ``` ##### ReadOnly[​](#readonly "Direct link to ReadOnly") bool **ReadOnly** `get` `set` *Property Description* * Lua ```lua Is the InputField read only? ``` * Lua ```lua --clicking this object will toggle a UIInputField's ReadOnly status thisGameObject = Space.Host.ExecutingObject inputfield = Space.Host.GetReference("inputfield").UIInputField --make sure to add this reference to the Scripting Runtime component OnClick = function() inputfield.ReadOnly = not inputfield.ReadOnly end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### MultiLine[​](#multiline "Direct link to MultiLine") bool **MultiLine** `get` *If the input field supports multiple lines.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.MultiLine = true ``` ##### AsteriskChar[​](#asteriskchar "Direct link to AsteriskChar") char **AsteriskChar** `get` `set` *The character used for password fields.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.AsteriskChar= "%" ``` ##### CaretPosition[​](#caretposition "Direct link to CaretPosition") int **CaretPosition** `get` `set` *Current InputField caret position (also selection tail).* * Lua ```lua Space.Host.ExecutingObject.UIInputField.CaretPosition= 3 ``` ##### SelectionAnchorPosition[​](#selectionanchorposition "Direct link to SelectionAnchorPosition") int **SelectionAnchorPosition** `get` `set` *The beginning point of the selection.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.SelectionAnchorPosition= 1 ``` ##### SelectionFocusPosition[​](#selectionfocusposition "Direct link to SelectionFocusPosition") int **SelectionFocusPosition** `get` `set` *The end point of the selection.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.SelectionFocusPosition= 4 ``` ##### MinWidth[​](#minwidth "Direct link to MinWidth") float **MinWidth** `get` *The minimum width this UIInputField may be allocated. (Used by the Layout system).* * Lua ```lua minWidth = Space.Host.ExecutingObject.UIInputField.MinWidth ``` ##### PreferredWidth[​](#preferredwidth "Direct link to PreferredWidth") float **PreferredWidth** `get` *The preferred width this UIInputField should be allocated if there is sufficient space. (Used by the Layout system)* * Lua ```lua prefWidth = Space.Host.ExecutingObject.UIInputField.PreferredWidth ``` ##### FlexibleWidth[​](#flexiblewidth "Direct link to FlexibleWidth") float **FlexibleWidth** `get` *The extra relative width this UIInputField should be allocated if there is additional available space. (Used by the Layout system)* * Lua ```lua flexWidth = Space.Host.ExecutingObject.UIInputField.FlexibleWidth ``` ##### MinHeight[​](#minheight "Direct link to MinHeight") float **MinHeight** `get` *The minimum height this UIInputField may be allocated.(Used by the Layout system).* * Lua ```lua minHeight = Space.Host.ExecutingObject.UIInputField.MinHeight ``` ##### PreferredHeight[​](#preferredheight "Direct link to PreferredHeight") float **PreferredHeight** `get` *The preferred height this UIInputField should be allocated if there is sufficient space. (Used by the Layout system)* * Lua ```lua prefHeight = Space.Host.ExecutingObject.UIInputField.PreferredHeight ``` ##### FlexibleHeight[​](#flexibleheight "Direct link to FlexibleHeight") float **FlexibleHeight** `get` *The extra relative height this UIInputField should be allocated if there is additional available space. (Used by the Layout system)* * Lua ```lua flexHeight = Space.Host.ExecutingObject.UIInputField.FlexibleHeight ``` ##### NormalColor[​](#normalcolor "Direct link to NormalColor") SColor **NormalColor** `get` `set` *The normal color.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.NormalColor = Color.Red ``` ##### HighlightedColor[​](#highlightedcolor "Direct link to HighlightedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **HighlightedColor** `get` `set` *The color of the control when it is highlighted.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.HighlightedColor = Color.Red ``` ##### PressedColor[​](#pressedcolor "Direct link to PressedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **PressedColor** `get` `set` *The color of the control when it is pressed.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.PressedColor = Color.Red ``` ##### DisabledColor[​](#disabledcolor "Direct link to DisabledColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **DisabledColor** `get` `set` *The color of the control when it is disabled.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.DisabledColor = Color.Red ``` ##### ColorMultiplier[​](#colormultiplier "Direct link to ColorMultiplier") float **ColorMultiplier** `get` `set` *This multiplies the tint color for each transition by its value.* * Lua ```lua Space.Host.ExecutingObject.UIInputField.ColorMultiplier = Color.Red ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua \`\`\` theGameObject = Space.Host.ExecutingObject.UIInputField.GameObject \`\`\` --- ### SUILayout #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/suilayout.md#enabled)`get` `set` | | int [**PaddingLeft** ](/scripting/client-scripting-api-reference/components/suilayout.md#paddingleft)`get` `set` | | int [**PaddingRight** ](/scripting/client-scripting-api-reference/components/suilayout.md#paddingright)`get` `set` | | int [**PaddingTop** ](/scripting/client-scripting-api-reference/components/suilayout.md#paddingtop)`get` `set` | | int [**PaddingBottom** ](/scripting/client-scripting-api-reference/components/suilayout.md#paddingbottom)`get` `set` | | string [**ChildAlignment** ](/scripting/client-scripting-api-reference/components/suilayout.md#childalignment)`get` `set` | | float [**Spacing** ](/scripting/client-scripting-api-reference/components/suilayout.md#spacing)`get` `set` | | bool [**ChildControlHeight** ](/scripting/client-scripting-api-reference/components/suilayout.md#childcontrolheight)`get` `set` | | bool [**ChildControlWidth** ](/scripting/client-scripting-api-reference/components/suilayout.md#childcontrolwidth)`get` `set` | | bool [**ChildForceExpandHeight** ](/scripting/client-scripting-api-reference/components/suilayout.md#childforceexpandheight)`get` `set` | | bool [**ChildForceExpandWidth** ](/scripting/client-scripting-api-reference/components/suilayout.md#childforceexpandwidth)`get` `set` | | SVector [**GridCellSize** ](/scripting/client-scripting-api-reference/components/suilayout.md#gridcellsize)`get` `set` | | SVector [**GridSpacing** ](/scripting/client-scripting-api-reference/components/suilayout.md#gridspacing)`get` `set` | | int [**GridConstraintCount** ](/scripting/client-scripting-api-reference/components/suilayout.md#gridconstraintcount)`get` `set` | | string [**GridConstraint** ](/scripting/client-scripting-api-reference/components/suilayout.md#gridconstraintcount)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suilayout.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is this UI layout component Enabled?* * Lua ```lua Space.Host.ExecutingObject.UILayout.Enabled = false ``` * Lua ```lua --clicking this object will toggle a Layout's Enabled status thisGameObject = Space.Host.ExecutingObject layout = Space.Host.GetReference("layout").UILayout --make sure to add this reference to the Scripting Runtime component OnClick = function() layout.Enabled= not layout.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### PaddingLeft[​](#paddingleft "Direct link to PaddingLeft") int **PaddingLeft** `get` `set` *Space reserved for the left edge of the padding during the layout phase.* * Lua ```lua Space.Host.ExecutingObject.UILayout.PaddingLeft= 2 ``` ##### PaddingRight[​](#paddingright "Direct link to PaddingRight") int **PaddingRight** `get` `set` *Space reserved for the right edge of the padding during the layout phase.* * Lua ```lua Space.Host.ExecutingObject.UILayout.PaddingRight= 2 ``` ##### PaddingTop[​](#paddingtop "Direct link to PaddingTop") int **PaddingTop** `get` `set` *Space reserved for the top edge of the padding during the layout phase.* * Lua ```lua Space.Host.ExecutingObject.UILayout.PaddingTop= 2 ``` ##### PaddingBottom[​](#paddingbottom "Direct link to PaddingBottom") int **PaddingBottom** `get` `set` *Space reserved for the bottom edge of the padding during the layout phase.* * Lua ```lua Space.Host.ExecutingObject.UILayout.PaddingBottom= 2 ``` ##### ChildAlignment[​](#childalignment "Direct link to ChildAlignment") string **ChildAlignment** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UILayout.ChildAlignment = "1" ``` ##### Spacing[​](#spacing "Direct link to Spacing") float **Spacing** `get` `set` *The spacing to use between layout elements in the layout group.* * Lua ```lua Space.Host.ExecutingObject.UILayout.Spacing= 2 ``` ##### ChildControlHeight[​](#childcontrolheight "Direct link to ChildControlHeight") bool **ChildControlHeight** `get` `set` *Returns true if the Layout Group controls the heights of its children. Returns false if children control their own heights.* *If set to false, the layout group will only affect the positions of the children while leaving the heights untouched. The heights of the children can be set via the respective RectTransforms in this case.* *If set to true, the heights of the children are automatically driven by the layout group according to their respective minimum, preferred, and flexible heights. This is useful if the heights of the children should change depending on how much space is available. In this case the height of each child cannot be set manually in the RectTransform, but the minimum, preferred and flexible height for each child can be controlled by adding a LayoutElement component to it.* * Lua ```lua Space.Host.ExecutingObject.UILayout.ChildControlHeight= true ``` ##### ChildControlWidth[​](#childcontrolwidth "Direct link to ChildControlWidth") bool **ChildControlWidth** `get` `set` *Returns true if the Layout Group controls the widths of its children. Returns false if children control their own widths.* *If set to false, the layout group will only affect the positions of the children while leaving the widths untouched. The widths of the children can be set via the respective RectTransforms in this case.* *If set to true, the widths of the children are automatically driven by the layout group according to their respective minimum, preferred, and flexible widths. This is useful if the widths of the children should change depending on how much space is available. In this case the width of each child cannot be set manually in the RectTransform, but the minimum, preferred and flexible width for each child can be controlled by adding a LayoutElement component to it.* * Lua ```lua Space.Host.ExecutingObject.UILayout.ChildControlWidth= false ``` ##### ChildForceExpandHeight[​](#childforceexpandheight "Direct link to ChildForceExpandHeight") bool **ChildForceExpandHeight** `get` `set` *Whether to force the children to expand to fill additional available vertical space.* * Lua ```lua Space.Host.ExecutingObject.UILayout.ChildForceExpandHeight= false ``` ##### ChildForceExpandWidth[​](#childforceexpandwidth "Direct link to ChildForceExpandWidth") bool **ChildForceExpandWidth** `get` `set` *Whether to force the children to expand to fill additional available horizontal space.* * Lua ```lua Space.Host.ExecutingObject.UILayout.ChildForceExpandWidth= false ``` ##### GridCellSize[​](#gridcellsize "Direct link to GridCellSize") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GridCellSize** `get` `set` *The size to use for each cell in the grid.* * Lua ```lua Space.Host.ExecutingObject.UILayout.GridCellSize= Vector.New(1,1,0) ``` ##### GridSpacing[​](#gridspacing "Direct link to GridSpacing") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **GridSpacing** `get` `set` *The spacing to use between layout elements in the grid.* * Lua ```lua Space.Host.ExecutingObject.UILayout.GridSpacing= Vector.New(1,1,0) ``` ##### GridConstraintCount[​](#gridconstraintcount "Direct link to GridConstraintCount") int **GridConstraintCount** `get` `set` *How many cells there should be along the constrained axis.* * Lua ```lua Space.Host.ExecutingObject.UILayout.GridConstraintCount= 2 ``` ##### GridConstraint[​](#gridconstraint "Direct link to GridConstraint") string **GridConstraint** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UILayout.GridConstraint = 1 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UILayout.GridConstraint ``` --- ### SUIRawImage #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------- | | bool [**RaycastTarget** ](/scripting/client-scripting-api-reference/components/suirawimage.md#raycasttarget)`get` `set` | | bool [**Maskable** ](/scripting/client-scripting-api-reference/components/suirawimage.md#maskable)`get` `set` | | SResource [**Texture** ](/scripting/client-scripting-api-reference/components/suirawimage.md#texture)`get` `set` | | SColor [**Color** ](/scripting/client-scripting-api-reference/components/suirawimage.md#color)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suirawimage.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### RaycastTarget[​](#raycasttarget "Direct link to RaycastTarget") bool **RaycastTarget** `get` `set` *Enable Raycast Target.* * Lua ```lua Space.Host.ExecutingObject.UIRawImage.RaycastTarget = true ``` ##### Maskable[​](#maskable "Direct link to Maskable") bool **Maskable** `get` `set` *To check if the graphic is maskable.* * Lua ```lua Space.Host.ExecutingObject.UIRawImage.Maskable = true ``` ##### Texture[​](#texture "Direct link to Texture") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Texture** `get` `set` *The RawImage's texture.* * Lua ```lua Space.Host.ExecutingObject.UIRawImage.Texture = Space.GetResource("Resource Name") ``` ##### Color[​](#color "Direct link to Color") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Color** `get` `set` *Base color of the Graphic.* * Lua ```lua Space.Host.ExecutingObject.UIRawImage.Color = Color.Red ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UIRawImage.GameObject ``` --- ### SUIScrollbar #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------- | | void [**OnValueChanged** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#onvaluechanged)(Closure callback) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | -------------------------------------------------------------------------------------------------------------------------------- | | float [**Size** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#size)`get` `set` | | float [**Value** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#value)`get` `set` | | int [**NumberOfSteps** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#numberofsteps)`get` `set` | | SColor [**NormalColor** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#normalcolor)`get` `set` | | SColor [**HighlightedColor** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#highlightedcolor)`get` `set` | | SColor [**PressedColor** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#pressedcolor)`get` `set` | | SColor [**DisabledColor** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#disabledcolor)`get` `set` | | float [**ColorMultiplier** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#colormultiplier)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suiscrollbar.md#gameobject)`get` | ##### OnValueChanged[​](#onvaluechanged "Direct link to OnValueChanged") void **OnValueChanged** (Closure callback) *Handling for when the scrollbar value is changed.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function OCV() -- end Space.Host.ExecutingObject.UIScrollbar.OnValueChanged(OCV) ``` #### Properties[​](#properties "Direct link to Properties") ##### Size[​](#size "Direct link to Size") float **Size** `get` `set` *The size of the scrollbar handle where 1 means it fills the entire scrollbar.* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.Size = 0.1 ``` ##### Value[​](#value "Direct link to Value") float **Value** `get` `set` *The current value of the scrollbar, between 0 and 1.* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.Value = 0.5 ``` ##### NumberOfSteps[​](#numberofsteps "Direct link to NumberOfSteps") int **NumberOfSteps** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.NumberOfSteps = 2 ``` ##### NormalColor[​](#normalcolor "Direct link to NormalColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **NormalColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.NormalColor = Color.Red ``` ##### HighlightedColor[​](#highlightedcolor "Direct link to HighlightedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **HighlightedColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.HighlightedColor = Color.Red ``` ##### PressedColor[​](#pressedcolor "Direct link to PressedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **PressedColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.PressedColor = Color.Red ``` ##### DisabledColor[​](#disabledcolor "Direct link to DisabledColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **DisabledColor** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.DisabledColor = Color.Red ``` ##### ColorMultiplier[​](#colormultiplier "Direct link to ColorMultiplier") float **ColorMultiplier** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.UIScrollbar.ColorMultiplier = Color.Red ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UIScrollbar.GameObject ``` --- ### SUISlider #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------ | | void [**OnValueChanged** ](/scripting/client-scripting-api-reference/components/suislider.md#onvaluechanged)(Closure callback) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/suislider.md#enabled)`get` `set` | | bool [**Interactable** ](/scripting/client-scripting-api-reference/components/suislider.md#interactable)`get` `set` | | int [**Direction** ](/scripting/client-scripting-api-reference/components/suislider.md#direction)`get` `set` | | float [**MinValue** ](/scripting/client-scripting-api-reference/components/suislider.md#minvalue)`get` `set` | | float [**MaxValue** ](/scripting/client-scripting-api-reference/components/suislider.md#maxvalue)`get` `set` | | bool [**WholeNumbers** ](/scripting/client-scripting-api-reference/components/suislider.md#wholenumbers)`get` `set` | | float [**Value** ](/scripting/client-scripting-api-reference/components/suislider.md#value)`get` `set` | | float [**NormalizedValue** ](/scripting/client-scripting-api-reference/components/suislider.md#normalizedvalue)`get` `set` | | SColor [**NormalColor** ](/scripting/client-scripting-api-reference/components/suislider.md#normalcolor)`get` `set` | | SColor [**HighlightedColor** ](/scripting/client-scripting-api-reference/components/suislider.md#highlightedcolor)`get` `set` | | SColor [**PressedColor** ](/scripting/client-scripting-api-reference/components/suislider.md#pressedcolor)`get` `set` | | SColor [**DisabledColor** ](/scripting/client-scripting-api-reference/components/suislider.md#disabledcolor)`get` `set` | | float [**ColorMultiplier** ](/scripting/client-scripting-api-reference/components/suislider.md#colormultiplier)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suislider.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### OnValueChanged[​](#onvaluechanged "Direct link to OnValueChanged") void **OnValueChanged** (Closure callback) *Callback executed when the value of the slider is changed.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function ValueChanged() -- end Space.Host.ExecutingObject.UISlider.OnValueChanged(ValueChanged) ``` * Lua ```lua --This script will make moving a slider control the Master Volume --and also update a text field with the current Master Volume --[You need to add the slider and text field as a reference] slider = Space.Host.GetReference("Slider").UISlider textField = Space.Host.GetReference("Text Field").UIText OnValueChanged = function() Space.UI.MasterVolume = slider.NormalizedValue * 100 textField.Text = Space.UI.MasterVolume end slider.OnValueChanged(OnValueChanged) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether this Slider component is Enabled or not* * Lua ```lua Space.Host.ExecutingObject.UISlider.Enabled = false ``` * Lua ```lua --clicking this object will toggle a Sliders's Enabled status thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --make sure to add this reference to the Scripting Runtime component OnClick = function() slider.Enabled = not slider.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Interactable[​](#interactable "Direct link to Interactable") bool **Interactable** `get` `set` *Use to enable or disable the ability to interact with the slider.* * Lua ```lua Space.Host.ExecutingObject.UISlider.Interactable = true ``` * Lua ```lua --clicking this object will toggle a Sliders's Interactable status thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --make sure to add this reference to the Scripting Runtime component OnClick = function() slider.Interactable = not slider.Interactable end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Direction[​](#direction "Direct link to Direction") int **Direction** `get` `set` *The direction of the slider (0 to 4). 0 Left To Right, 1 Right To Left, 2 Bottom To Top, 3 Top To Bottom* * Lua ```lua Space.Host.ExecutingObject.UISlider.Direction = 1 ``` ##### MinValue[​](#minvalue "Direct link to MinValue") float **MinValue** `get` `set` *The minimum allowed value of the slider.* * Lua ```lua Space.Host.ExecutingObject.UISlider.MinValue = 10 ``` ##### MaxValue[​](#maxvalue "Direct link to MaxValue") float **MaxValue** `get` `set` *The maximum allowed value of the slider.* * Lua ```lua Space.Host.ExecutingObject.UISlider.MaxValue = 20 ``` ##### WholeNumbers[​](#wholenumbers "Direct link to WholeNumbers") bool **WholeNumbers** `get` `set` *Should the value only be allowed to be whole numbers?* * Lua ```lua Space.Host.ExecutingObject.UISlider.WholeNumbers = true ``` * Lua ```lua --clicking this object will toggle a Sliders's Whole Numbers status thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --make sure to add this reference to the Scripting Runtime component OnClick = function() slider.WholeNumbers = not slider.WholeNumbers end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Value[​](#value "Direct link to Value") float **Value** `get` `set` *The current value of the slider.* * Lua ```lua Space.Host.ExecutingObject.UISlider.Value = 20 ``` ##### NormalizedValue[​](#normalizedvalue "Direct link to NormalizedValue") float **NormalizedValue** `get` `set` *The current value of the slider normalized into a value between 0 and 1.* * Lua ```lua Space.Host.ExecutingObject.UISlider.NormalizedValue = 0.5 ``` * Lua ```lua --This script will make moving a slider control the Master Volume --and also update a text field with the current Master Volume --(example: custom UI) --[You need to add the slider and text field as a reference] slider = Space.Host.GetReference("Slider").UISlider textField = Space.Host.GetReference("Text Field").UIText OnValueChanged = function() Space.UI.MasterVolume = slider.NormalizedValue * 100 textField.Text = Space.UI.MasterVolume end slider.OnValueChanged(OnValueChanged) ``` ##### NormalColor[​](#normalcolor "Direct link to NormalColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **NormalColor** `get` `set` *The normal color.* * Lua ```lua Space.Host.ExecutingObject.UISlider.NormalColor = Color.Red ``` ##### HighlightedColor[​](#highlightedcolor "Direct link to HighlightedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **HighlightedColor** `get` `set` *The color of the control when it is highlighted.* * Lua ```lua Space.Host.ExecutingObject.UISlider.HighlightedColor = Color.Red ``` ##### PressedColor[​](#pressedcolor "Direct link to PressedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **PressedColor** `get` `set` *The color of the control when it is pressed.* * Lua \`\`\` Space.Host.ExecutingObject.UISlider.PressedColor = Color.Red \`\`\` ##### DisabledColor[​](#disabledcolor "Direct link to DisabledColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **DisabledColor** `get` `set` *The color of the control when it is disabled.* * Lua ```lua lSpace.Host.ExecutingObject.UISlider.DisabledColor = Color.Red ``` ##### ColorMultiplier[​](#colormultiplier "Direct link to ColorMultiplier") float **ColorMultiplier** `get` `set` *This multiplies the tint color for each transition by its value.* * Lua ```lua Space.Host.ExecutingObject.UISlider.ColorMultiplier = 1.2 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UISlider.GameObject ``` --- ### SUIText #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------- | | bool [**SupportRichText** ](/scripting/client-scripting-api-reference/components/suitext.md#supportrichtext)`get` `set` | | bool [**ResizeTextForBestFit** ](/scripting/client-scripting-api-reference/components/suitext.md#resizetextforbestfit)`get` `set` | | int [**ResizeTextMinSize** ](/scripting/client-scripting-api-reference/components/suitext.md#resizetextminsize)`get` `set` | | int [**ResizeTextMaxSize** ](/scripting/client-scripting-api-reference/components/suitext.md#resizetextmaxsize)`get` `set` | | bool [**AlignByGeometry** ](/scripting/client-scripting-api-reference/components/suitext.md#alignbygeometry)`get` `set` | | int [**FontSize** ](/scripting/client-scripting-api-reference/components/suitext.md#fontsize)`get` `set` | | float [**LineSpacing** ](/scripting/client-scripting-api-reference/components/suitext.md#linespacing)`get` `set` | | float [**PixelsPerUnit** ](/scripting/client-scripting-api-reference/components/suitext.md#pixelsperunit)`get` | | float [**MinWidth** ](/scripting/client-scripting-api-reference/components/suitext.md#minwidth)`get` | | float [**PreferredWidth** ](/scripting/client-scripting-api-reference/components/suitext.md#preferredwidth)`get` | | float [**FlexibleWidth** ](/scripting/client-scripting-api-reference/components/suitext.md#flexiblewidth)`get` | | float [**MinHeight** ](/scripting/client-scripting-api-reference/components/suitext.md#minheight)`get` | | float [**PreferredHeight** ](/scripting/client-scripting-api-reference/components/suitext.md#preferredheight)`get` | | float [**FlexibleHeight** ](/scripting/client-scripting-api-reference/components/suitext.md#flexibleheight)`get` | | int [**LayoutPriority** ](/scripting/client-scripting-api-reference/components/suitext.md#layoutpriority)`get` | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/suitext.md#enabled)`get` `set` | | string [**Text** ](/scripting/client-scripting-api-reference/components/suitext.md#text)`get` `set` | | SColor [**Color** ](/scripting/client-scripting-api-reference/components/suitext.md#color)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suitext.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### SupportRichText[​](#supportrichtext "Direct link to SupportRichText") bool **SupportRichText** `get` `set` *Whether this Text will support rich text.* * Lua ```lua Space.Host.ExecutingObject.UIText.SupportRichText = true ``` * Lua ```lua --the below script will make a UIToggle disable/enable Rich Text support in the UIText --[Add "toggle" and "text" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle text = Space.Host.GetReference("text").UIText text.Text = " Bold Test " OVC = function() if toggle.IsOn then text.SupportRichText = true else text.SupportRichText = false end end toggle.OnValueChanged(OVC) ``` ##### ResizeTextForBestFit[​](#resizetextforbestfit "Direct link to ResizeTextForBestFit") bool **ResizeTextForBestFit** `get` `set` *Should the text be allowed to auto resized.* * Lua ```lua Space.Host.ExecutingObject.UIText.ResizeTextForBestFit = false ``` * Lua ```lua --the below script will make a UIToggle disable/enable the Best Fit feature in the UIText --[Add "toggle" and "text" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle text = Space.Host.GetReference("text").UIText text.Text = "A very long text a very long text a very long text a very long text" OVC = function() if toggle.IsOn then text.ResizeTextForBestFit = true else text.ResizeTextForBestFit = false end end toggle.OnValueChanged(OVC) ``` ##### ResizeTextMinSize[​](#resizetextminsize "Direct link to ResizeTextMinSize") int **ResizeTextMinSize** `get` `set` *The minimum size the text is allowed to be.* * Lua ```lua Space.Host.ExecutingObject.UIText.ResizeTextMinSize = 20 ``` * Lua ```lua --the below script will make a slider change the UIText's Best Fit Min Size --[Add "slider" and "text" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider text = Space.Host.GetReference("text").UIText text.Text = "Best Fit Min Size" text.ResizeTextForBestFit = true OVC = function() text.ResizeTextMinSize = (slider.Value * 20) + 10 -- from 10 to 30 end slider.OnValueChanged(OVC) ``` ##### ResizeTextMaxSize[​](#resizetextmaxsize "Direct link to ResizeTextMaxSize") int **ResizeTextMaxSize** `get` `set` *The maximum size the text is allowed to be.* * Lua ```lua Space.Host.ExecutingObject.UIText.ResizeTextMaxSize = 150 ``` * Lua ```lua --the below script will make a slider change the UIText's Best Fit Max Size --[Add "slider" and "text" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider text = Space.Host.GetReference("text").UIText text.Text = "Best Fit Max Size" text.ResizeTextForBestFit = true OVC = function() text.ResizeTextMaxSize = (slider.Value * 50) + 20 -- from 50 to 70 end slider.OnValueChanged(OVC) ``` ##### AlignByGeometry[​](#alignbygeometry "Direct link to AlignByGeometry") bool **AlignByGeometry** `get` `set` *Use the range of glyph geometry to perform horizontal alignment.* * Lua ```lua Space.Host.ExecutingObject.UIText.AlignByGeometry = true ``` * Lua ```lua --the below script will make a UIToggle disable/enable the Align By Geometry feature in the UIText --[Add "toggle" and "text" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle text = Space.Host.GetReference("text").UIText text.Text = "Align By Geometry" OVC = function() if toggle.IsOn then text.AlignByGeometry = true else text.AlignByGeometry = false end end toggle.OnValueChanged(OVC) ``` ##### FontSize[​](#fontsize "Direct link to FontSize") int **FontSize** `get` `set` *The size that the Font should render at.* * Lua ```lua Space.Host.ExecutingObject.UIText.FontSize = 54 ``` * Lua ```lua --the below script will make a slider change the UIText's Font Size --[Add "slider" and "text" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider text = Space.Host.GetReference("text").UIText text.Text = "Text Size Test" OVC = function() text.FontSize = (slider.Value * 40) + 10 -- from 10 to 50 end slider.OnValueChanged(OVC) ``` ##### LineSpacing[​](#linespacing "Direct link to LineSpacing") float **LineSpacing** `get` `set` *How much space will be in-between lines of text. This is a multiplier. The line spacing value set will be multiplied by the font's internal line spacing. A value of 1 will produce normal line spacing.* * Lua ```lua thisObject = Space.Host.ExecutingObject.UIText.LineSpacing = 2 ``` * Lua ```lua --the below script will make a slider change the UIText's Line Spacing --[Add "slider" and "text" references to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider text = Space.Host.GetReference("text").UIText text.Text = "Line Spacing Line Spacing Line Spacing Line Spacing Line Spacing" OVC = function() text.LineSpacing = (slider.Value * 2) -- from 0 to 2 end slider.OnValueChanged(OVC) ``` ##### PixelsPerUnit[​](#pixelsperunit "Direct link to PixelsPerUnit") float **PixelsPerUnit** `get` *Provides information about how fonts are scale to the screen.* *For dynamic fonts, the value is equivalent to the scale factor of the canvas. For non-dynamic fonts, the value is calculated from the requested text size and the size from the font.* * Lua ```lua thisObject = Space.Host.ExecutingObject --get a reference to our object thisObjectText = thisObject.UIText --get a reference to the UIText component in our object Space.Log(thisObjectText.PixelsPerUnit) --Prints the PixelsPerUnit value of this UIText component to the console ``` ##### MinWidth[​](#minwidth "Direct link to MinWidth") float **MinWidth** `get` *The minimum width this UIText may be allocated. (Used by the Layout system).* * Lua ```lua thisObject = Space.Host.ExecutingObject --get a reference to our object thisObjectText = thisObject.UIText --get a reference to the UIText component in our object Space.Log(thisObjectText.MinWidth) --Prints the MinWidth value of this UIText component to the console ``` ##### PreferredWidth[​](#preferredwidth "Direct link to PreferredWidth") float **PreferredWidth** `get` *The preferred width this UIText should be allocated if there is sufficient space. (Used by the Layout system)* * Lua ```lua pWidth = Space.Host.ExecutingObject.UIText.PreferredWidth ``` ##### FlexibleWidth[​](#flexiblewidth "Direct link to FlexibleWidth") float **FlexibleWidth** `get` *The extra relative width this UIText should be allocated if there is additional available space. (Used by the Layout system)* * Lua ```lua FlexibleWidth = Space.Host.ExecutingObject.UIText.FlexibleWidth ``` ##### MinHeight[​](#minheight "Direct link to MinHeight") float **MinHeight** `get` *The minimum height this UIText may be allocated.(Used by the Layout system).* * Lua ```lua minHeight = Space.Host.ExecutingObject.UIText.MinHeight ``` ##### PreferredHeight[​](#preferredheight "Direct link to PreferredHeight") float **PreferredHeight** `get` *The preferred height this UIText should be allocated if there is sufficient space. (Used by the Layout system)* * Lua ```lua pHeight = Space.Host.ExecutingObject.UIText.PreferredHeight ``` ##### FlexibleHeight[​](#flexibleheight "Direct link to FlexibleHeight") float **FlexibleHeight** `get` *The extra relative height this UIText should be allocated if there is additional available space. (Used by the Layout system.)* * Lua ```lua FlexibleHeight = Space.Host.ExecutingObject.UIText.FlexibleHeight ``` ##### LayoutPriority[​](#layoutpriority "Direct link to LayoutPriority") int **LayoutPriority** `get` *The layout priority of this UIText component.(Used by the Layout system.)* * Lua ```lua layoutPriority = Space.Host.ExecutingObject.UIText.LayoutPriority ``` ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the UIText component is Enabled or not will decide if it is visually updating or not.* * Lua ```lua Space.Host.ExecutingObject.UIText.Enabled = true ``` * Lua ```lua --this below script will make clicking this object disable/enable a UIText component thisGameObject = Space.Host.ExecutingObject text = Space.Host.GetReference("text").UIText OnClick = function() if text.Enabled then text.Enabled = false else text.Enabled = true end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "click to hide/show text" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Text[​](#text "Direct link to Text") string **Text** `get` `set` *The string value this Text displays.* * Lua ```lua Space.Host.ExecutingObject.UIText.Text = "Hello World!" ``` * Lua ```lua --the below script will make a UIText element with this script --constantly update itself to show the local time --(Example: UI Text element that shows local clock) --[This object needs to be a UI Text object. In Unity, Heirarchy -> Create -> UI -> Text] -- thisGameObject = Space.Host.ExecutingObject OnUpdate = function() thisGameObject.UIText.Text = Space.LocalTime end thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` ##### Color[​](#color "Direct link to Color") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Color** `get` `set` *Base color of the Graphic.* * Lua ```lua Space.Host.ExecutingObject.UIText.Color = Color.Red ``` * Lua ```lua --This script dynamically changes the text's color of a GameObject with UIText component. --For example in a text sign over your shop that you want to make more visually stand out --or perhaps text decoration during a celebration or a text element in your User Interface or HUD. thisObject = Space.Host.ExecutingObject --get a reference to our object thisObjectText = thisObject.UIText --get a reference to the SUIText component in our object colors = {Color.Red, Color.Black, Color.White, Color.Blue, Color.Green, Color.Yellow} --here we are holding 6 predefined colors in a Lua Table which we will go through function ColorChanger() while true do --infinite loop for i=1,#colors do --For Loop to cycle through all the table items thisObjectText.color = colors[i] --this will set the color based on which item in the table we are now at coroutine.yield(0.1) --this will pause for a tenth of a second before we change to the next color end end end Space.Host.StartCoroutine(ColorChanger) --this coroutine will now call our ColorChanger() function which is infinitely changing our text colors between a select range. ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UIText.Text ``` --- ### SUIToggle #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------ | | void [**OnValueChanged** ](/scripting/client-scripting-api-reference/components/suitoggle.md#onvaluechanged)(Closure callback) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/suitoggle.md#enabled)`get` `set` | | bool [**Interactable** ](/scripting/client-scripting-api-reference/components/suitoggle.md#interactable)`get` `set` | | bool [**IsOn** ](/scripting/client-scripting-api-reference/components/suitoggle.md#ison)`get` `set` | | SColor [**NormalColor** ](/scripting/client-scripting-api-reference/components/suitoggle.md#normalcolor)`get` `set` | | SColor [**HighlightedColor** ](/scripting/client-scripting-api-reference/components/suitoggle.md#highlightedcolor)`get` `set` | | SColor [**PressedColor** ](/scripting/client-scripting-api-reference/components/suitoggle.md#pressedcolor)`get` `set` | | SColor [**DisabledColor** ](/scripting/client-scripting-api-reference/components/suitoggle.md#disabledcolor)`get` `set` | | float [**ColorMultiplier** ](/scripting/client-scripting-api-reference/components/suitoggle.md#colormultiplier)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suitoggle.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### OnValueChanged[​](#onvaluechanged "Direct link to OnValueChanged") void **OnValueChanged** (Closure callback) *Binds a function to be triggered when value of the UIToggle changes.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function ovc() -- end Space.Host.ExecutingObject.UIToggle.OnValueChanged(ovc) ``` * Lua ```lua --This script will make a UI Toggle show/hide the Notification Button --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowNotificationButton= true else Space.UI.ShowNotificationButton= false end end toggle.OnValueChanged(OnValueChanged) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the UIToggle is Enabled* * Lua ```lua Space.Host.ExecutingObject.UIToggle.Enabled = true ``` * Lua ```lua --clicking this object will toggle a Toggles's Enabled status thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle --make sure to add this reference to the Scripting Runtime component OnClick = function() toggle.Enabled = not toggle.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Interactable[​](#interactable "Direct link to Interactable") bool **Interactable** `get` `set` *Whether the UIToggle is Interactable* * Lua ```lua Space.Host.ExecutingObject.UIToggle.Interactable = true ``` * Lua ```lua --clicking this object will toggle a Toggles's Interactable status thisGameObject = Space.Host.ExecutingObject toggle = Space.Host.GetReference("toggle").UIToggle --make sure to add this reference to the Scripting Runtime component OnClick = function() toggle.Interactable= not toggle.Interactable end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### IsOn[​](#ison "Direct link to IsOn") bool **IsOn** `get` `set` *Whether the UIToggle is toggled On* * Lua ```lua Space.Host.ExecutingObject.UIToggle.IsOn = true ``` * Lua ```lua --This script will make a UI Toggle show/hide the Notification Button --[You need to add an object with UI Toggle as a reference (scripting runtime)] toggle = Space.Host.GetReference("Toggle").UIToggle OnValueChanged = function() if toggle.IsOn then Space.UI.ShowNotificationButton= true else Space.UI.ShowNotificationButton= false end end toggle.OnValueChanged(OnValueChanged) ``` ##### NormalColor[​](#normalcolor "Direct link to NormalColor") SColor **NormalColor** `get` `set` *The normal color.* * Lua ```lua Space.Host.ExecutingObject.UIToggle.NormalColor = Color.Red ``` ##### HighlightedColor[​](#highlightedcolor "Direct link to HighlightedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **HighlightedColor** `get` `set` *The color of the control when it is highlighted.* * Lua ```lua Space.Host.ExecutingObject.UIToggle.HighlightedColor = Color.Red ``` ##### PressedColor[​](#pressedcolor "Direct link to PressedColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **PressedColor** `get` `set` *The color of the control when it is pressed.* * Lua ```lua Space.Host.ExecutingObject.UIToggle.PressedColor = Color.Red ``` ##### DisabledColor[​](#disabledcolor "Direct link to DisabledColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **DisabledColor** `get` `set` *The color of the control when it is disabled.* * Lua ```lua Space.Host.ExecutingObject.UIToggle.DisabledColor = Color.Red ``` ##### ColorMultiplier[​](#colormultiplier "Direct link to ColorMultiplier") float **ColorMultiplier** `get` `set` *This multiplies the tint color for each transition by its value.* * Lua ```lua Space.Host.ExecutingObject.UIToggle.ColorMultiplier = 1.2 ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UIToggle.GameObject ``` --- ### SUIToolTipHint #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/suitooltiphint.md#enabled)`get` `set` | | string [**Text** ](/scripting/client-scripting-api-reference/components/suitooltiphint.md#text)`get` `set` | | SResource [**Texture** ](/scripting/client-scripting-api-reference/components/suitooltiphint.md#texture)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/suitooltiphint.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Get or set whether the tool tip component is Enabled.* * Lua ```lua Space.Host.ExecutingObject.UIToolTipHint.Enabled = true ``` ##### Text[​](#text "Direct link to Text") string **Text** `get` `set` *Get or set the string value this tool tip displays.* * Lua ```lua Space.Host.ExecutingObject.UIToolTipHint.Text = "AToolTip" ``` ##### Texture[​](#texture "Direct link to Texture") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **Texture** `get` `set` *Get or set the tooltip's texture.* * Lua ```lua Space.Host.ExecutingObject.UIToolTipHint.Texture = Space.GetResource("ResourceName") ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.UIToolTipHint.GameObject ``` --- ### SVirtualCamera #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#enabled)`get` `set` | | float [**FieldOfView** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#fieldofview)`get` `set` | | float [**Dutch** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#dutch)`get` `set` | | float [**NearClip** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#nearclip)`get` `set` | | float [**FarClip** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#farclip)`get` `set` | | float [**OrthographicSize** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#orthographicsize)`get` `set` | | int [**Priority** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#priority)`get` `set` | | SGameObject [**Follow** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#follow)`get` `set` | | SGameObject [**LookAt** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#lookat)`get` `set` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/svirtualcamera.md#gameobject)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is this virtual camera enabled?* * Lua ```lua Space.Host.ExecutingObject.VirtualCamera.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Virtual Camera component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.VirtualCamera OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### FieldOfView[​](#fieldofview "Direct link to FieldOfView") float **FieldOfView** `get` `set` *Field of view of this virtual camera.* * Lua ```lua Space.Host.ExecutingObject.VirtualCamera.FieldOfView = 50.0 ``` ##### Dutch[​](#dutch "Direct link to Dutch") float **Dutch** `get` `set` *Dutch of view of this virtual camera. In degrees.* * Lua ```lua Space.Host.ExecutingObject.VirtualCamera.Dutch = 50.0 ``` ##### NearClip[​](#nearclip "Direct link to NearClip") float **NearClip** `get` `set` *The near clip plane of this virtual camera.* * Lua ```lua Space.Host.ExecutingObject.VirtualCamera.NearClip = 50.0 ``` ##### FarClip[​](#farclip "Direct link to FarClip") float **FarClip** `get` `set` *The far clip plane of this virtual camera.* * Lua ```lua Space.Host.ExecutingObject.VirtualCamera.FarClip = 50.0 ``` ##### OrthographicSize[​](#orthographicsize "Direct link to OrthographicSize") float **OrthographicSize** `get` `set` *The orthographic size of this virtual camera.* * Lua ```lua Space.Host.ExecutingObject.VirtualCamera.OrthographicSize = 10.0 ``` ##### Priority[​](#priority "Direct link to Priority") int **Priority** `get` `set` *The priority of this virtual camera. Higher priority cameras will be used over lower priority cameras when conflicted.* * Lua ```lua Space.Host.ExecutingObject.VirtualCamera.Priority = 500 ``` ##### Follow[​](#follow "Direct link to Follow") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Follow** `get` `set` *The object that this virtual camera should be following.* * Lua ```lua AReferenceToGameObject = Space.Host.GetReference("Reference Name") Space.Host.ExecutingObject.VirtualCamera.Follow = AReferenceToGameObject ``` ##### LookAt[​](#lookat "Direct link to LookAt") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **LookAt** `get` `set` *The object that this virtual camera should be looking at.* * Lua ```lua AReferenceToGameObject = Space.Host.GetReference("Reference Name") Space.Host.ExecutingObject.VirtualCamera.LookAt = AReferenceToGameObject ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.VirtualCamera.GameObject ``` --- ### SVoiceZone #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------ | | void [**SetOverrideVoice** ](/scripting/client-scripting-api-reference/components/svoicezone.md#setoverridevoice)(bool enabled) | | void [**ClearOverrideVoice** ](/scripting/client-scripting-api-reference/components/svoicezone.md#clearoverridevoice)() | | void [**SetOverrideVideo** ](/scripting/client-scripting-api-reference/components/svoicezone.md#setoverridevideo)(bool enabled) | | void [**ClearOverrideVideo** ](/scripting/client-scripting-api-reference/components/svoicezone.md#clearoverridevideo)() | | void [**AddAuthVoiceUser** ](/scripting/client-scripting-api-reference/components/svoicezone.md#addauthvoiceuser)(uint userID) | | void [**RemoveAuthVoiceUser** ](/scripting/client-scripting-api-reference/components/svoicezone.md#removeauthvoiceuser)(uint userID) | | void [**AddAuthVideoUser** ](/scripting/client-scripting-api-reference/components/svoicezone.md#addauthvideouser)(uint userID) | | void [**RemoveAuthVideoUser** ](/scripting/client-scripting-api-reference/components/svoicezone.md#removeauthvideouser)(uint userID) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/components/svoicezone.md#enabled)`get` `set` | | bool [**AllowVoice** ](/scripting/client-scripting-api-reference/components/svoicezone.md#allowvoice)`get` `set` | | bool [**AllowVideo** ](/scripting/client-scripting-api-reference/components/svoicezone.md#allowvideo)`get` `set` | | bool [**ConnectVoiceService** ](/scripting/client-scripting-api-reference/components/svoicezone.md#connectvoiceservice)`get` `set` | | bool [**ConnectVideoService** ](/scripting/client-scripting-api-reference/components/svoicezone.md#connectvideoservice)`get` `set` | | int [**Priority** ](/scripting/client-scripting-api-reference/components/svoicezone.md#priority)`get` | | string [**AreaName** ](/scripting/client-scripting-api-reference/components/svoicezone.md#areaname)`get` | | bool [**Spatialized** ](/scripting/client-scripting-api-reference/components/svoicezone.md#spatialized)`get` | | bool [**SpatialDropoff** ](/scripting/client-scripting-api-reference/components/svoicezone.md#spatialdropoff)`get` | | bool [**SpatialStereo** ](/scripting/client-scripting-api-reference/components/svoicezone.md#spatialstereo)`get` | | float [**SpatialDistance** ](/scripting/client-scripting-api-reference/components/svoicezone.md#spatialdistance)`get` | | bool [**Global** ](/scripting/client-scripting-api-reference/components/svoicezone.md#global)`get` | | uint\[] [**AuthVideoUsers** ](/scripting/client-scripting-api-reference/components/svoicezone.md#authvideousers)`get` | | uint\[] [**AuthVoiceUsers** ](/scripting/client-scripting-api-reference/components/svoicezone.md#authvoiceusers)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/components/svoicezone.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### SetOverrideVoice[​](#setoverridevoice "Direct link to SetOverrideVoice") void **SetOverrideVoice** (bool enabled) *Set voice to override the original voice.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.VoiceZone.SetOverrideVoice(true) ``` ##### ClearOverrideVoice[​](#clearoverridevoice "Direct link to ClearOverrideVoice") void **ClearOverrideVoice** () *Clear the overriding voice.* * Lua ```lua Space.Host.ExecutingObject.VoiceZone.ClearOverrideVoice() ``` ##### SetOverrideVideo[​](#setoverridevideo "Direct link to SetOverrideVideo") void **SetOverrideVideo** (bool enabled) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.VoiceZone.SetOverrideVideo(true) ``` ##### ClearOverrideVideo[​](#clearoverridevideo "Direct link to ClearOverrideVideo") void **ClearOverrideVideo** () *Function Description* * Lua ```lua Space.Host.ExecutingObject.VoiceZone.SetOverrideVideo(true) ``` ##### AddAuthVoiceUser[​](#addauthvoiceuser "Direct link to AddAuthVoiceUser") void **AddAuthVoiceUser** (uint userID) *Add a user to AuthVoiceUser by his ID.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.VoiceZone.AddAuthVoiceUser(000000000) ``` ##### RemoveAuthVoiceUser[​](#removeauthvoiceuser "Direct link to RemoveAuthVoiceUser") void **RemoveAuthVoiceUser** (uint userID) *Remove a user from AuthVoiceUser by his ID.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua lSpace.Host.ExecutingObject.VoiceZone.RemoveAuthVoiceUser(000000000) ``` ##### AddAuthVideoUser[​](#addauthvideouser "Direct link to AddAuthVideoUser") void **AddAuthVideoUser** (uint userID) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.VoiceZone.AddAuthVideoUser(000000000) ``` ##### RemoveAuthVideoUser[​](#removeauthvideouser "Direct link to RemoveAuthVideoUser") void **RemoveAuthVideoUser** (uint userID) *Remove a user from AuthVoiceUser by his ID.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.VoiceZone.RemoveAuthVideoUser(000000000) ``` #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Whether the Voice Zone component is Enabled* * Lua ```lua Space.Host.ExecutingObject.VoiceZone.Enabled = true ``` * Lua ```lua --clicking this object will Enable/Disable it's Voice Zone component thisGameObject = Space.Host.ExecutingObject component = thisGameObject.VoiceZone OnClick = function() component.Enabled = not component.Enabled end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### AllowVoice[​](#allowvoice "Direct link to AllowVoice") bool **AllowVoice** `get` `set` *Whether allows voice.* * Lua ```lua Space.Host.ExecutingObject.VoiceZone.AllowVoice = true ``` ##### AllowVideo[​](#allowvideo "Direct link to AllowVideo") bool **AllowVideo** `get` `set` *Whether allows video.* * Lua ```lua Space.Host.ExecutingObject.VoiceZone.AllowVideo = true ``` ##### ConnectVoiceService[​](#connectvoiceservice "Direct link to ConnectVoiceService") bool **ConnectVoiceService** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.VoiceZone.ConnectVoiceService = true ``` ##### ConnectVideoService[​](#connectvideoservice "Direct link to ConnectVideoService") bool **ConnectVideoService** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.VoiceZone.ConnectVideoService = true ``` ##### Priority[​](#priority "Direct link to Priority") int **Priority** `get` *The priority of the voice zone* * Lua ```lua priority = Space.Host.ExecutingObject.VoiceZone.Priority ``` ##### AreaName[​](#areaname "Direct link to AreaName") string **AreaName** `get` *The name of area.* * Lua ```lua priority = Space.Host.ExecutingObject.VoiceZone.AreaName ``` ##### Spatialized[​](#spatialized "Direct link to Spatialized") bool **Spatialized** `get` *Whether the voice zone is spatialized.* * Lua ```lua isSpatialized = Space.Host.ExecutingObject.VoiceZone.Spatialized ``` ##### SpatialDropoff[​](#spatialdropoff "Direct link to SpatialDropoff") bool **SpatialDropoff** `get` *Whether the voice zone is spatialized drop off.* * Lua ```lua spatialDropoff = Space.Host.ExecutingObject.VoiceZone.SpatialDropoff ``` ##### SpatialStereo[​](#spatialstereo "Direct link to SpatialStereo") bool **SpatialStereo** `get` *Whether the voice zone is spatial stereo.* * Lua ```lua spatialStereo = Space.Host.ExecutingObject.VoiceZone.SpatialStereo ``` ##### SpatialDistance[​](#spatialdistance "Direct link to SpatialDistance") float **SpatialDistance** `get` *The spatial distance of the voice zone.* * Lua ```lua floatDistance = Space.Host.ExecutingObject.VoiceZone.SpatialDistance ``` ##### Global[​](#global "Direct link to Global") bool **Global** `get` *Whether the voice zone is global.* * Lua ```lua isGlobal = Space.Host.ExecutingObject.VoiceZone.Global ``` ##### AuthVideoUsers[​](#authvideousers "Direct link to AuthVideoUsers") uint\[] **AuthVideoUsers** `get` *Return an array of auth video user.* * Lua ```lua tableAuthVideoUsers = Space.Host.ExecutingObject.VoiceZone.AuthVideoUsers ``` ##### AuthVoiceUsers[​](#authvoiceusers "Direct link to AuthVoiceUsers") uint\[] **AuthVoiceUsers** `get` *Property Description* * Lua ```lua tableAuthVideoUsers = Space.Host.ExecutingObject.VoiceZone.AuthVoiceUsers ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua theGameObject = Space.Host.ExecutingObject.VoiceZone.GameObject ``` --- ### Network Networking APIs for client scripts, covering chat, network messages between peers, web requests, and shared photo and video resources. --- ### SChat #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | -------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**OnChat** ](schat#onchat)(Closure callback)
void [**OnChat** ](schat#onchat)(Action< SChatMessage > trackInfoCallback) | | void [**JoinChat** ](/scripting/client-scripting-api-reference/network/schat.md#joinchat)(string name) | | string [**GetXMPPName** ](/scripting/client-scripting-api-reference/network/schat.md#getxmppname)(string name) | | void [**LeaveChat** ](/scripting/client-scripting-api-reference/network/schat.md#leavechat)(string name) | | SVoiceZone [**GetVoiceZone** ](/scripting/client-scripting-api-reference/network/schat.md#getvoicezone)(string channel) | | void [**JoinVoice** ](/scripting/client-scripting-api-reference/network/schat.md#joinvoice)(string channel, int priority=5, int spatial=0) | | void [**JoinGridVoice** ](/scripting/client-scripting-api-reference/network/schat.md#joingridvoice)(string channel, int priority=5, int spatial=0) | | void [**LeaveVoice** ](/scripting/client-scripting-api-reference/network/schat.md#leavevoice)(string channel) | #### Functions[​](#functions "Direct link to Functions") ##### OnChat[​](#onchat "Direct link to OnChat") void **OnChat** (Closure callback)
void **OnChat** (Action< [SChatMessage](/scripting/client-scripting-api-reference/types/schatmessage.md) > trackInfoCallback) *Bind a function to the OnChat event. This function will be called every time a new chat message is received on the local channel.* | Parameter | Type | Description | | --------- | -------------------------------- | --------------------------------------- | | callback | Closure or Action\ | Invoked when a chat message is received | * Lua ```lua Space.Network.Chat.OnChat(OnChatFunction) ``` * Lua ```lua --this script takes every new chat message and displays it in a UIText uiText = Space.Host.GetReference("text").UIText --Add this Text object as reference in Scripting Runtime OnChatFunction = function(SChatMessage) uiText.Text = SChatMessage.Sender ..": " .. SChatMessage.Message end Space.Network.Chat.OnChat(OnChatFunction) ``` ##### JoinChat[​](#joinchat "Direct link to JoinChat") void **JoinChat** (string name) *Join a chat channel.* | Parameter | Type | Description | | --------- | ------ | -------------------- | | name | string | Chat channel to join | * Lua ```lua Space.Network.Chat.JoinChat("Test room") ``` * Lua ```lua --this script will make the player join a chat when entering a trigger collider and leave it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.JoinChat("PrivateChatZone") end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.LeaveChat("PrivateChatZone") end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### GetXMPPName[​](#getxmppname "Direct link to GetXMPPName") string **GetXMPPName** (string name) *Get XMPP name.* | Parameter | Type | Description | | --------- | ------ | ------------------------ | | name | string | Human-readable chat name | * Lua ```lua Space.Network.Chat.GetXMPPName("Test room") ``` ##### LeaveChat[​](#leavechat "Direct link to LeaveChat") void **LeaveChat** (string name) *Leave a chat channel.* | Parameter | Type | Description | | --------- | ------ | --------------------- | | name | string | Chat channel to leave | * Lua ```lua Space.Network.Chat.LeaveChat("Test room") ``` * Lua ```lua --this script will make the player join a chat when entering a trigger collider and leave it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.JoinChat("PrivateChatZone") end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.LeaveChat("PrivateChatZone") end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### GetVoiceZone[​](#getvoicezone "Direct link to GetVoiceZone") SVoiceZone **GetVoiceZone** (string channel) *Get a reference to a voice zone component for the given channel.* | Parameter | Type | Description | | --------- | ------ | ------------------------- | | channel | string | Voice channel name/handle | * Lua ```lua voiceZone = Space.Network.Chat.GetVoiceZone("AChannel") ``` ##### JoinVoice[​](#joinvoice "Direct link to JoinVoice") void **JoinVoice** (string channel, int priority=5, int spatial=0) *Join a voice chat channel.* | Parameter | Type | Description | | --------- | ------ | ---------------------------------------------- | | channel | string | Voice channel name/handle | | priority | int | Optional. Priority, default 5 | | spatial | int | Optional. Spatialization flag (0/1), default 0 | * Lua ```lua Space.Network.Chat.JoinVoice("PrivateVoiceZone") ``` * Lua ```lua --this script will make the player join a voice channel when entering a trigger collider and leave it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.JoinVoice("PrivateVoiceZone") end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.LeaveVoice("PrivateVoiceZone") end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### JoinGridVoice[​](#joingridvoice "Direct link to JoinGridVoice") void **JoinGridVoice** (string channel, int priority=5, int spatial=0) *JoinGridVoice is the same as JoinVoice except with a grid wide parameter. (white-label only)* | Parameter | Type | Description | | --------- | ------ | ---------------------------------------------- | | channel | string | Voice channel name/handle (grid-wide) | | priority | int | Optional. Priority, default 5 | | spatial | int | Optional. Spatialization flag (0/1), default 0 | * Lua ```lua Space.Network.Chat.JoinGridVoice("PrivateGridVoiceZone") ``` * Lua ```lua --this script will make the player join a Grid voice channel when entering a trigger collider and leave it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.JoinGridVoice("PrivateGridVoiceZone") end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.LeaveVoice("PrivateGridVoiceZone") end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### LeaveVoice[​](#leavevoice "Direct link to LeaveVoice") void **LeaveVoice** (string channel) *Leave a voice chat channel* | Parameter | Type | Description | | --------- | ------ | ---------------------- | | channel | string | Voice channel to leave | * Lua ```lua Space.Network.Chat.LeaveVoice("PrivateVoiceZone") ``` * Lua ```lua --this script will make the player join a voice channel when entering a trigger collider and leave it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.JoinVoice("PrivateVoiceZone") end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then Space.Network.Chat.LeaveVoice("PrivateVoiceZone") end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` --- ### SNetwork #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**SendNetworkMessage** ](snetwork#sendnetworkmessage)(string key, Table message, bool serverOnly, bool loopback)
void [**SendNetworkMessage** ](snetwork#sendnetworkmessage)(string key, Table message, bool serverOnly)
void [**SendNetworkMessage** ](snetwork#sendnetworkmessage)(string key, Table message) | | void[ **SendNetworkMessageToUser**](/scripting/client-scripting-api-reference/network/snetwork.md#sendnetworkmessagetouser) (string key, Table message, uint userID) | | void [**SubscribeToRegionPropertyUpdate**](/scripting/client-scripting-api-reference/network/snetwork.md#subscribetoregionpropertyupdate) (string key, DynValue onRecieve) | | void [**SubscribeToNetwork** ](/scripting/client-scripting-api-reference/network/snetwork.md#subscribetonetwork)(string key, DynValue onRecieve) | | void [**SetRegionProperty** ](/scripting/client-scripting-api-reference/network/snetwork.md#setregionproperty)(string key, string value) | | string [**GetRegionProperty** ](/scripting/client-scripting-api-reference/network/snetwork.md#getregionproperty)(string key) | | void [**SetShardProperty** ](/scripting/client-scripting-api-reference/network/snetwork.md#setshardproperty)(string key, string value) | | string [**GetShardProperty** ](/scripting/client-scripting-api-reference/network/snetwork.md#getshardproperty)(string key) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | Description | | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | bool [**HasShardProperties** ](/scripting/client-scripting-api-reference/network/snetwork.md#hasshardproperties)`get` | Returns True upon successful connection to the Region/Shard properties' storage. Region/Shard property operations may not be ready when used during initialization and this function will help determine readiness. | #### Overview[​](#overview "Direct link to Overview") * Local network messages (region/shard scope) * Use SendNetworkMessage / SubscribeToNetwork with a string key. * Delivery is confined to the current region or shard and only to active subscribers of that key. * Payload is a Lua Table (dictionary) of network-serializable types. Messages are ephemeral and not stored. * Region/Shard properties (server-stored) * Use SetRegionProperty/GetRegionProperty for region-scoped semi-permanent storage (persists while the region is open). * Use SetShardProperty/GetShardProperty for shard-scoped storage (persists until the shard shuts down or all users leave). * Values are strings; operations may be rate-limited and may not be immediately available on join. Use HasShardProperties to detect readiness. #### Functions[​](#functions "Direct link to Functions") ##### SendNetworkMessage[​](#sendnetworkmessage "Direct link to SendNetworkMessage") void **SendNetworkMessage** (string key, Table message) void **SendNetworkMessage** (string key, Table message, bool serverOnly) void **SendNetworkMessage** (string key, Table message, bool serverOnly, bool loopback) *Sends a networked message to every client with a subscriber listening on 'key'. The message itself can be a table/dictionary of network-serializable types (string, float, int, byte, bool and arrays of those types). Requests may be rate limited.* | Parameter | Type | Description | | ---------- | ------ | -------------------------------------------------------------- | | key | string | Subscription key to route the message to listeners | | message | Table | Table/dictionary of serializable values | | serverOnly | bool | Optional. If true, send via server only | | loopback | bool | Optional. If true, also invoke local subscriber on this client | * Lua ```lua Space.Network.SendNetworkMessage('AKey', {first = "xyz", second= "abc"}) --or Space.Network.SendNetworkMessage('AKey', {first = "xyz", second= "abc"}, true) --or Space.Network.SendNetworkMessage('AKey', {first = "xyz", second= "abc"}, true, true) ``` * Lua ```lua image = "mrlee.jpg" server = "https://middleware.systems/" obj = Space.Host.GetReference("Gino") Space.Network.SubscribeToNetwork("smack", onSmack) function hithere() resrc = Space.WebServices.GetImage(server .. image) obj.Renderer.Material.SetTexture("_MainTex", resrc) Space.Network.SendNetworkMessage("smack",{'smack'}) end function update() resrc = Space.WebServices.GetImage(server .. image) obj.Renderer.Material.SetTexture("_MainTex", resrc) end function onSmack() update() end ``` ##### SendNetworkMessageToUser[​](#sendnetworkmessagetouser "Direct link to SendNetworkMessageToUser") void **SendNetworkMessageToUser** (string key, Table message, uint userID) *Sends a networked message to a specific user (userID) with a subscriber listening on 'key'.* | Parameter | Type | Description | | --------- | ------ | --------------------------------------- | | key | string | Subscription key | | message | Table | Table/dictionary of serializable values | | userID | uint | Target user ID | * Lua ```lua Space.Network.SendNetworkMessageToUser('AKey', {first = "xyz", second= "abc"}, 23123123) ``` ##### SubscribeToRegionPropertyUpdate[​](#subscribetoregionpropertyupdate "Direct link to SubscribeToRegionPropertyUpdate") void **SubscribeToRegionPropertyUpdate** (string key, DynValue onRecieve) *Subscribes to region property updates on 'key'.* | Parameter | Type | Description | | --------- | ---------------- | ---------------------------------------------------------------------------------------------------- | | key | string | Property key to subscribe to | | onRecieve | Callback Closure | onRecieve(NetworkPropertyUpdate) will be called on updates. NetworkPropertyUpdate = { Key, Message } | * Lua ```lua function onRecieve(NetworkPropertyUpdate) propertyKey = NetworkPropertyUpdate.Key propertyValue = NetworkPropertyUpdate.Message end Space.Network.SubscribeToRegionPropertyUpdate('A Key', onRecieve) ``` ##### SubscribeToNetwork[​](#subscribetonetwork "Direct link to SubscribeToNetwork") void **SubscribeToNetwork** (string key, Action< [SNetworkMessageLua ](#)> onRecieve)
void **SubscribeToNetwork** (string key, DynValue onRecieve) *Subscribes to network messages on 'key', will fire a SNetworkMessage whenever a matching message is received* | Parameter | Type | Description | | --------- | ---------------- | ---------------------------------------------------------------------------------- | | key | string | Subscription key to listen on | | onRecieve | Callback Closure | Callback receiving SNetworkMessageLua with fields Key (string) and Message (Table) | * Lua ```lua function OnRecieveFunction(SNetworkMessageLua) -- end Space.Network.SubscribeToNetwork("AKey", OnRecieveFunction) ``` * Lua ```lua local scriptedObject = Space.Host.ExecutingObject; local textValue = Space.Host.GetReference("Text"); scriptedObject.SubscribeToEvents(); -- This function gets used by other objects that are subscribed to the network gotAMessage = function(arguments) textValue.UIText.Text = "Got a message with the argument " .. arguments.Message["someArgument"]; end -- This function gets used by "this" object. Plus, it sends out a message to objects on the network. local updateTextUI = function() textValue.UIText.Text = "Got a message with the argument Hi there!"; Space.Network.SendNetworkMessage("helloworld", {someArgument = "Hi there!"}); end -- Subscribe to network. Note that "this" object doesn't execute gotAMessage. -- Only the other objects on the network do. Space.Network.SubscribeToNetwork("helloworld", gotAMessage); scriptedObject.OnMouseDown(updateTextUI); -- "Text" used with GetReference is a UItext canvas object used to display the test text inworld. After you add UI > Text to your scene, drag the text object to the Object References section in your script. ``` ##### SetRegionProperty[​](#setregionproperty "Direct link to SetRegionProperty") void **SetRegionProperty** (string key, string value) *Stores a key/value pair in the Regions semi-permanent memory. Will be erased when all players exit the region, but will persist as long as the region is open. Subject to rate limiting (10/second on the main grid and 20/second on white-label grids)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Network.SetRegionProperty("testKey", "Test Value") ``` * Lua ```lua --this script is a networked and persistent color changing of an object --note that we put the object's GlobalID in the key to make it specific to this object thisObject = Space.Host.ExecutingObject currentColor = nil OnClick = function() --this writes to the region properties if currentColor == Color.Blue then Space.Network.SetRegionProperty(thisObject.GlobalID .. "color", "red") else Space.Network.SetRegionProperty(thisObject.GlobalID .. "color", "blue") end end Sync = function() -- this gets from the region properties while true do local result = Space.Network.GetRegionProperty(thisObject.GlobalID .. "color") if result == "red" then currentColor = Color.Red else currentColor = Color.Blue end thisObject.Renderer.Material.SetColor("_Color", currentColor) coroutine.yield(0.1) --to make sure it doesn't run more than 12/second end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) Space.Host.StartCoroutine(Sync) ``` ##### GetRegionProperty[​](#getregionproperty "Direct link to GetRegionProperty") string **GetRegionProperty** (string key) *Retrieves the last set value for 'key' in this region. If you have just joined the region, this may not be populated immedietely.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua result = Space.Network.GetRegionProperty("testKey") ``` * Lua ```lua --this script is a networked and persistent color changing of an object --note that we put the object's GlobalID in the key to make it specific to this object thisObject = Space.Host.ExecutingObject currentColor = nil OnClick = function() --this writes to the region properties if currentColor == Color.Blue then Space.Network.SetRegionProperty(thisObject.GlobalID .. "color", "red") else Space.Network.SetRegionProperty(thisObject.GlobalID .. "color", "blue") end end Sync = function() -- this gets from the region properties while true do local result = Space.Network.GetRegionProperty(thisObject.GlobalID .. "color") if result == "red" then currentColor = Color.Red else currentColor = Color.Blue end thisObject.Renderer.Material.SetColor("_Color", currentColor) coroutine.yield(0.1) --to make sure it doesn't run more than 12/second end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) Space.Host.StartCoroutine(Sync) ``` ##### SetShardProperty[​](#setshardproperty "Direct link to SetShardProperty") void **SetShardProperty** (string key, string value) *Sets a property named 'key' of the Shard to 'value'. Will persist until the Shard is shut down or restarted. (Use SPersistence for longer term storage)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local scriptedObject = Space.Host.ExecutingObject; scriptedObject.SubscribeToEvents(); local testMsg = "Hello"; local updateTextUI = function() Space.Network.SetShardProperty("testKey", testMsg); end scriptedObject.OnMouseDown(updateTextUI); ``` ##### GetShardProperty[​](#getshardproperty "Direct link to GetShardProperty") string **GetShardProperty** (string key) *Gets a previously set key.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local scriptedObject = Space.Host.ExecutingObject; scriptedObject.SubscribeToEvents(); local textValue = Space.Host.GetReference("Text"); local retrieved; local updateTextUI = function() retrieved = Space.Network.GetShardProperty("testKey"); end -- this method is called every frame, once "retrieved" gets a value, it displays in text local onUpdateMethod = function() updateTextUI(); if retrieved ~= nil then textValue.UIText.Text = "Retrieved msg: " .. retrieved ; end end scriptedObject.OnUpdate(onUpdateMethod); ``` #### Properties[​](#properties "Direct link to Properties") ##### HasShardProperties[​](#hasshardproperties "Direct link to HasShardProperties") bool **HasShardProperties** `get` *Returns True upon successful connection to the Region/Shard properties' storage. Region/Shard property operations may not be ready when used during initialization and this function ill help determine readiness.* * Lua ```lua IsReady = Space.Network.HasShardProperties ``` * Lua ```lua --This script starts but launches a coroutine that waits for HasShardProperties before continuing DoWhatYouNeed = function(result) if property == nil or property == "" then Space.Log("connected but Shard doesn't exist") else Space.Log("connected and Shard exists. Result: " .. tostring(result)) end end InitCoroutine = function() while not Space.Network.HasShardProperties do coroutine.yield(0) end local property = Space.Network.GetRegionProperty("A Key") DoWhatYouNeed(property) end Space.Host.StartCoroutine(InitCoroutine) ``` --- ### SNetworkMessageLua #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------- | | string [**Key** ](/scripting/client-scripting-api-reference/network/snetworkmessagelua.md#key)`get` | | Table [**Message** ](/scripting/client-scripting-api-reference/network/snetworkmessagelua.md#message)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Key[​](#key "Direct link to Key") string **Key** `get` *The Key this message was sent with.* * Lua ```lua function OnReceiveFunction(receivedMessage) local theKey = receivedMessage.Key end Space.Network.SubscribeToNetwork("AKey", OnReceiveFunction) ``` ##### Message[​](#message "Direct link to Message") Table **Message** `get` *The contents of this message.* * Lua ```lua function OnReceiveFunction(receivedMessage) local tableMessage = receivedMessage.Message end Space.Network.SubscribeToNetwork("AKey", OnReceiveFunction) ``` --- ### SPhotos #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------ | | SResource [**GetUploadedTexture** ](/scripting/client-scripting-api-reference/network/sphotos.md#getuploadedtexture)() | | void [**GetSavedTexture** ](/scripting/client-scripting-api-reference/network/sphotos.md#getsavedtexture)(string path, Closure onComplete) | | Table [**GetInventoryTextures** ](/scripting/client-scripting-api-reference/network/sphotos.md#getinventorytextures)() | | void [**OpenUploadFileBrowser** ](/scripting/client-scripting-api-reference/network/sphotos.md#openuploadfilebrowser)() | | void [**OnUploadEnd** ](/scripting/client-scripting-api-reference/network/sphotos.md#onuploadend)(Closure c) | | void [**OnUploadStart** ](/scripting/client-scripting-api-reference/network/sphotos.md#onuploadstart)(Closure c) | #### Functions[​](#functions "Direct link to Functions") ##### GetUploadedTexture[​](#getuploadedtexture "Direct link to GetUploadedTexture") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **GetUploadedTexture** () *Function Description* * Lua ```lua resourceTexture = Space.Photos.GetUploadedTexture() ``` ##### GetSavedTexture[​](#getsavedtexture "Direct link to GetSavedTexture") void **GetSavedTexture** (string path, Closure onComplete) *Function Description* | Parameter | Type | Description | | ---------- | ------------------ | -------------------------------------------------------------------------------------------- | | path | string | | | onComplete | Closure (Callback) | Closure will be called once the saved texture has been retrieved.
onComplete(SResource) | * Lua ```lua function onComplete(SResource) resourceTexture = SResource end Space.Photos.GetSavedTexture('APath', onComplete) ``` ##### GetInventoryTextures[​](#getinventorytextures "Direct link to GetInventoryTextures") Table **GetInventoryTextures** () *Function Description* * Lua ```lua tableInventoryTexture = Space.Photos.GetInventoryTextures() ``` ##### OpenUploadFileBrowser[​](#openuploadfilebrowser "Direct link to OpenUploadFileBrowser") void **OpenUploadFileBrowser** () *Opens a window that let's you select a file you wish to upload. (white-label)* * Lua ```lua Space.Photos.OpenUploadFileBrowser() ``` * Lua ```lua --this script will open a file upload browser when clicked thisObject = Space.Host.ExecutingObject function OnClickFunction() Space.Photos.OpenUploadFileBrowser() end thisObject.AddClickable() thisObject.Clickable.Tooltip = "Click me to upload photo" thisObject.Clickable.OnClick(OnClickFunction) ``` ##### OnUploadEnd[​](#onuploadend "Direct link to OnUploadEnd") void **OnUploadEnd** (Closure c) **Binds the function c to be called when an upload operation ends.** | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function c() -- end Space.Photos.OnUploadEnd(c) ``` * Lua ```lua --this script will show a text on screen that says "Uploading..." when a photo upload is initiated --and will hide it when the upload has ended thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("textObject") --add a UIText object to References in Scripting Runtime textObject.UIText.Text = "Uploading..." function OnUploadStartFunction() textObject.Active = true end function OnUploadEndFunction() textObject.Active = false end Space.Photos.OnUploadStart(OnUploadStartFunction) Space.Photos.OnUploadEnd(OnUploadEndFunction) ``` ##### OnUploadStart[​](#onuploadstart "Direct link to OnUploadStart") void **OnUploadStart** (Closure c) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function c() -- end Space.Photos.OnUploadStart(c) ``` * Lua ```lua --this script will show a text on screen that says "Uploading..." when a photo upload is initiated --and will hide it when the upload has ended thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("textObject") --add a UIText object to References in Scripting Runtime textObject.UIText.Text = "Uploading..." function OnUploadStartFunction() textObject.Active = true end function OnUploadEndFunction() textObject.Active = false end Space.Photos.OnUploadStart(OnUploadStartFunction) Space.Photos.OnUploadEnd(OnUploadEndFunction) ``` --- ### SVideos #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------- | | Table [**GetInventoryVideos** ](/scripting/client-scripting-api-reference/network/svideos.md#getinventoryvideos)() | | void [**OpenUploadFileBrowser** ](/scripting/client-scripting-api-reference/network/svideos.md#openuploadfilebrowser)() | | void [**OnUploadEnd** ](/scripting/client-scripting-api-reference/network/svideos.md#onuploadend)(Closure c) | | void [**OnUploadStart** ](/scripting/client-scripting-api-reference/network/svideos.md#onuploadstart)(Closure c) | #### Functions[​](#functions "Direct link to Functions") ##### GetInventoryVideos[​](#getinventoryvideos "Direct link to GetInventoryVideos") Table **GetInventoryVideos** () *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableInventoryVideos = Space.Videos.GetInventoryVideos() ``` ##### OpenUploadFileBrowser[​](#openuploadfilebrowser "Direct link to OpenUploadFileBrowser") void **OpenUploadFileBrowser** () *Opens a window that let's you select a file you wish to upload. (white-label)* * Lua ```lua Space.Videos.OpenUploadFileBrowser() ``` * Lua ```lua --this script will open a video upload window when clicked thisObject = Space.Host.ExecutingObject function OnClickFunction() Space.Videos.OpenUploadFileBrowser() end thisObject.AddClickable() thisObject.Clickable.Tooltip = "Click me to upload video" thisObject.Clickable.OnClick(OnClickFunction) ``` ##### OnUploadEnd[​](#onuploadend "Direct link to OnUploadEnd") void **OnUploadEnd** (Closure c) *Binds the function c to be called when an upload operation ends.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function OnUploadEndFunction() -- end Space.Videos.OnUploadEnd(OnUploadEndFunction) ``` * Lua ```lua --this script will show a text on screen that says "Uploading..." when a video upload is initiated --and will hide it when the upload has ended thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("textObject") --add a UIText object to References in Scripting Runtime textObject.UIText.Text = "Uploading..." function OnUploadStartFunction() textObject.Active = true end function OnUploadEndFunction() textObject.Active = false end Space.Videos.OnUploadStart(OnUploadStartFunction) Space.Videos.OnUploadEnd(OnUploadEndFunction) ``` ##### OnUploadStart[​](#onuploadstart "Direct link to OnUploadStart") void **OnUploadStart** (Closure c) *Binds the function c to be called when an upload operation begins.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function OnUploadStartFunction() -- end Space.Videos.OnUploadStart(OnUploadStartFunction) ``` * Lua ```lua --this script will show a text on screen that says "Uploading..." when a video upload is initiated --and will hide it when the upload has ended thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("textObject") --add a UIText object to References in Scripting Runtime textObject.UIText.Text = "Uploading..." function OnUploadStartFunction() textObject.Active = true end function OnUploadEndFunction() textObject.Active = false end Space.Videos.OnUploadStart(OnUploadStartFunction) Space.Videos.OnUploadEnd(OnUploadEndFunction) ``` --- ### SWebService #### Set up your web service[​](#set-up-your-web-service "Direct link to Set up your web service") To setup your server for communication with space, in the root of your domain, on the port you are using, place a file named 'sinewave.space.scripting.txt' containing 'SPACE\_OK'. E.g. - if this file is not present, you will be unable to use scripting to communicate with the domain. *Note: you should use HTTPS for all API calls. You may also need to implement a CORS policy in your webserver headers.* #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Get**](/scripting/client-scripting-api-reference/network/swebservice.md#get) (string url, Closure onComplete, Table headers=null, float timeout=0) | | void [**Post** ](/scripting/client-scripting-api-reference/network/swebservice.md#post)(string url, string data, Closure onComplete, Table headers=null, float timeout=0) | | SResource [**GetImage** ](/scripting/client-scripting-api-reference/network/swebservice.md#getimage)(string url, Closure onComplete=null, Table header=null, float timeout=0) | #### Functions[​](#functions "Direct link to Functions") ##### Get[​](#get "Direct link to Get") void **Get** (string url, Closure onComplete, Table headers=null, float timeout=0) *Performs an HTTP\[S] GET and invokes the callback with an* [SWebResponse](/scripting/client-scripting-api-reference/types/swebresponse.md) *containing the result.* | Parameter | Type | Description | | ---------- | ---------------- | ------------------------------------------------------------------------------------------------------------ | | url | string | The absolute URL to request. Must pass the domain whitelist check. | | onComplete | Closure | Callback receiving a single [SWebResponse](/scripting/client-scripting-api-reference/types/swebresponse.md). | | headers | Table (optional) | Supported keys: `Content-Type`, `Bearer` (maps to `Authorization: Bearer `). | | timeout | float (optional) | Timeout in seconds. `0` disables timeout. | * Lua ```lua function OnResponseFunction(responseData) -- end Space.WebServices.Get('A URL', OnResponseFunction) ``` * Lua ```lua -- Example: Retrieve user-specific data from your integration endpoint -- Typically retrieved dynamically, e.g., from Space.Scene.CurrentUser local userID = "User123" -- Identifier for the integrated service or application local serviceID = "CRMApp" -- Build the request URL with query parameters local sentData = "http://www.yourdomain.net/getIntegrationData.php?id=" .. userID .. "&service=" .. serviceID -- Callback function to handle the API response local response = function(data) if data.Error == nil then -- Log the successful response Space.Log(data.Response) else -- Log any error returned by the API Space.Log(data.Error) end end -- Make a GET request to your integration API Space.WebServices.Get(sentData, response) -- You can parse the response to extract and use relevant integration data ``` Note: * This call automatically sends diagnostic headers: `X-Sinespace-Region-ID`, `X-Sinespace-Region-Name`, `X-Sinespace-Instance-ID`, `X-Sinespace-Script-Name`, `X-Sinespace-Runtime-Type`, `X-Sinespace-In-Editor`, and `X-Sinespace-Preview-Server`. * Domains must host `/sinewave.space.scripting.txt` with the content `SPACE_OK` at the root for requests to proceed (see setup above). ##### Post[​](#post "Direct link to Post") void **Post** (string url, string data, Closure onComplete, Table headers=null, float timeout=0) *Performs an HTTP\[S] POST and invokes the callback with an* [SWebResponse](/scripting/client-scripting-api-reference/types/swebresponse.md) *containing the result.* | Parameter | Type | Description | | ---------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | url | string | The absolute URL to POST to. Must pass the domain whitelist check. | | data | string | Request body. For JSON, provide a JSON string and set `Content-Type` accordingly. | | onComplete | Closure | Callback receiving a single [SWebResponse](/scripting/client-scripting-api-reference/types/swebresponse.md). | | headers | Table (optional) | Supported keys: `Content-Type` (defaults to `application/x-www-form-urlencoded`), `Bearer` (maps to `Authorization: Bearer `). | | timeout | float (optional) | Timeout in seconds. `0` disables timeout. | * Lua ```lua function OnResponseFunction(responseData) -- end local url = 'https://example.com/endpoint' local data = 'key=value' Space.WebServices.Post(url, data, OnResponseFunction) ``` * Lua ```lua -- Example: Send user-specific data to your integration endpoint via POST request -- User identifier, typically retrieved dynamically local userID = "User123" -- Identifier for the integrated service or product local serviceID = "CRMApp" -- Target URL for the integration API local url = "http://www.yourdomain.net/postIntegrationData.php" -- Construct the payload for the POST request local sentData = "id=" .. userID .. "&service=" .. serviceID -- Define a callback to handle the API response local response = function(data) if data.Error == nil then -- Log the successful response Space.Log(data.Response) else -- Log any error returned by the API Space.Log(data.Error) end end -- Set the appropriate content-type for the POST request local tableHeader = {["Content-Type"] = "text/plain"} -- Send a POST request to your integration API Space.WebServices.Post(url, sentData, response, tableHeader) ``` * Lua ```lua -- JSON POST with Bearer auth and timeout local url = "https://api.example.com/widgets" local body = '{"name":"My Widget","color":"blue"}' local headers = { ["Content-Type"] = "application/json", ["Bearer"] = "YOUR_ACCESS_TOKEN" } Space.WebServices.Post(url, body, function(data) if data.Error == nil then Space.Log("Created: " .. data.Response) else Space.Log("Error: " .. data.Error) end end, headers, 15) ``` Note: * For JSON: set `Content-Type = application/json` and send a JSON string body. * The target domain must pass the whitelist check (`/sinewave.space.scripting.txt` with `SPACE_OK`). * HTTPS is recommended; ensure the server sends appropriate CORS headers. ##### GetImage[​](#getimage "Direct link to GetImage") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **GetImage** (string url, Closure onComplete=null, Table header=null, float timeout=0) *Returns a valid* [*SResource*](/scripting/client-scripting-api-reference/types/sresource.md) *for a image on a remote domain that can be used via e.g.* [*SMaterial*](/scripting/client-scripting-api-reference/types/smaterial.md)*. While the image loads, it will be a white pixel that will be substituted with the real image once loaded.* | Parameter | Type | Description | | ---------- | ------------------ | ----------------------------------------------------------------------------------------------------------- | | url | string | The absolute image URL to load. | | onComplete | Closure (optional) | Callback receiving the resulting [SResource](/scripting/client-scripting-api-reference/types/sresource.md). | | header | Table (optional) | Accepted but not used for images; pass `nil`. Reserved for future use. | | timeout | float (optional) | Accepted but not used for images; pass `0`. Reserved for future use. | * Lua ```lua resourceImage = Space.WebServices.GetImage('An Image URL') ``` * Lua ```lua -- Example: Load and apply a remote image from your integration media server -- Image filename to retrieve from the media service local imageFileName = "user_banner_1024.jpg" -- Base URL of the content delivery server local mediaServerUrl = "https://cdn.acme-integrations.com/assets/" -- Reference to the 3D object where the image will be displayed local displayObject = Space.Host.GetReference("profileDisplay") -- Fetch the image from the server local imageResource = Space.WebServices.GetImage(mediaServerUrl .. imageFileName) -- Apply the image as a texture to the object's material displayObject.Renderer.Material.SetTexture("_MainTex", imageResource) ``` --- ### Player APIs for the local player β€” profile, inventory, in-world economy, group membership, and quest progress. --- ### SEconomy #### SEconomy[​](#seconomy-1 "Direct link to SEconomy") ##### API Keys[​](#api-keys "Direct link to API Keys") The SEconomy class gives us the ability to transfer silver or issue silver rewards from Sinespace's vault. Therefore, for the below methods to work, you will need to first set the AcessKey which is an API Key given by Sinespace. To request an API Key, [please submit a support ticket.](https://support.sine.space/support/home) Here's two API Keys which are pre-generated and available to the public: b9184836-9c73-486a-b058-a0a668b860f7 Maximum 5000 silver per 24 hours per user, AND allows up to 5000 to be deducted as well. Works only on Preview. 11f55b74-69ee-4dd3-8983-17c466912beb Maximum 500 silver per 24 hours per user. Works on Preview or Live. Note: The above two keys work with DeductSilver() and AddSilver(). You'll need an API Key which has your specific required function enabled. #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**DeductSilver** ](seconomy#deductsilver)(int amount, Action< bool > onFinished=null)
void [**DeductSilver** ](seconomy#deductsilver)(int amount, Closure onFinished=null) | | void [**AddSilver** ](seconomy#addsilver)(int amount, Action< bool > onFinished=null)
void [**AddSilver** ](seconomy#addsilver)(int amount, Closure onFinished=null) | | void [**TransferSilverFrom** ](seconomy#transfersilverfrom)(int amount, string reason, int to, Action< bool > onFinished=null)
void [**TransferSilverFrom** ](seconomy#transfersilverfrom)(int amount, string reason, int to, Closure onFinished=null) | | void [**IssueReward** ](seconomy#issuereward)(int id, Action< bool > onFinished=null)
void [**IssueReward** ](seconomy#issuereward)(int id, Closure onFinished=null) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | -------------------------- | | string **AccessKey** `set` | #### Functions[​](#functions "Direct link to Functions") ##### DeductSilver[​](#deductsilver "Direct link to DeductSilver") void **DeductSilver** (int amount, Action< bool > onFinished=null)
void **DeductSilver** (int amount, Closure onFinished=null) *Deducts amount of silver from player's silver balance. You can also bind a function which will be called when operation is finished (optional), which also returns a Boolean if the operation succeeded or not (for example, API Key limit reached). This method requires AccessKey to be set first.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function onFinished(success) -- end Space.Economy.DeductSilver(50, onFinished) --or Space.Economy.DeductSilver(50) ``` * Lua ```lua --the below script will deduct 50 silver from the person who clicks the object containing it --(Example: A ticket vendor that requires 50 silver to proceed) --[The AccessKey we are using below is for preview servers only] thisGameObject = Space.Host.ExecutingObject Space.Economy.AccessKey = "b9184836-9c73-486a-b058-a0a668b860f7" OnPaymentDone = function(success) if success then Space.Log("You have paid 50 silver. Please proceed.") else Space.Log("Failed. AccessKey limit may have been reached") end end OnClick = function() Space.Economy.DeductSilver(50, OnPaymentDone) end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Buy ticket (50 silver)" thisGameObject.Clickable.OnClick(OnClick) ``` ##### AddSilver[​](#addsilver "Direct link to AddSilver") void **AddSilver** (int amount, Action< bool > onFinished=null)
void **AddSilver** (int amount, Closure onFinished=null) *Adds amount of silver to player's silver balance. You can also bind a function which will be called when operation is finished (optional), which also returns a Boolean if the operation succeeded or not (for example, API Key limit reached). The source of the silver is Sinespace. This method requires AccessKey to be set first.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function onFinished(success) -- end Space.Economy.AddSilver(50, onFinished) --or Space.Economy.AddSilver(50) ``` * Lua ```lua --the below script will deduct 50 silver from the person who clicks the object containing it --(Example: A ticket vendor that requires 50 silver to proceed) --[The AccessKey we are using below is for preview servers only] thisGameObject = Space.Host.ExecutingObject Space.Economy.AccessKey = "b9184836-9c73-486a-b058-a0a668b860f7" OnPaymentDone = function(success) if success then Space.Log("You have paid 50 silver. Please proceed.") else Space.Log("Failed. AccessKey limit may have been reached") end end OnClick = function() Space.Economy.DeductSilver(50, OnPaymentDone) end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Buy ticket (50 silver)" thisGameObject.Clickable.OnClick(OnClick) ``` ##### TransferSilverFrom[​](#transfersilverfrom "Direct link to TransferSilverFrom") void **TransferSilverFrom** (int amount, string reason, int to, Action< bool > onFinished=null)
void **TransferSilverFrom** (int amount, string reason, int to, Closure onFinished=null) *Removes 'amount' of silver from player avatar's balance and sends it to 'to' avatar ID. You can also bind a function which will be called when operation is finished (optional), which also returns a Boolean if the operation succeeded or not (for example, API Key limit reached). This method requires AccessKey to be set first.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function onFinished(success) -- end Space.Economy.TransferSilverFrom(10, "A reason", 23239829,onFinished) --or Space.Economy.TransferSilverFrom(10, "A reason", 23239829) ``` * Lua ```lua --the below script will make the object a clickable that gives 10 silver to another avatar --(Example: Silver transfer) --[The AccessKey we are using below is for preview servers only. Please read the API Keys section above.] thisGameObject = Space.Host.ExecutingObject Space.Economy.AccessKey = "b9184836-9c73-486a-b058-a0a668b860f7" done = function(success) if success then Space.Log("10 Silver sent") else Space.Log("failed") end end OnClick = function() local avatars=Space.Scene.Avatars Space.Economy.TransferSilverFrom(10, "testing", avatars[1].ID, done) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### IssueReward[​](#issuereward "Direct link to IssueReward") void **IssueReward** (int id, Action< bool > onFinished=null)
void **IssueReward** (int id, Closure onFinished=null) *Issues reward 'id' to player Avatar. You can also bind a function which will be called when operation is finished (optional), which also returns a Boolean if the operation succeeded or not (for example, API Key limit reached). This method requires AccessKey to be set first. *(white-label grid only)** | Parameter | Type | Description | | ---------- | -------------- | ------------------------------------------------------------------------------------------------------------- | | id | int | The ID of the reward to player avatar. | | onFinished | Action< bool > | A function name that will be called with a boolean parameter that tells us if the operation succeeded or not. | * Lua ```lua function onFinished(success) --success parameter is optional here Space.Log(success) end Space.Economy.IssueReward(12345,onFinished) --or Space.Economy.IssueReward(12345) ``` #### Properties[​](#properties "Direct link to Properties") ##### AcessKey[​](#acesskey "Direct link to AcessKey") string **AccessKey** `set` *This API Key needs to be set before any of the SEconomy functions will work.* [*Read API Keys Section*](/scripting/client-scripting-api-reference/player/seconomy.md#api-keys) * Lua ```lua Space.Economy.AccessKey = "b9184836-9c73-486a-b058-a0a668b860f7" ``` --- ### SGroup #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------------------- | | bool [**IsMemberOf** ](/scripting/client-scripting-api-reference/player/sgroup.md#ismemberof)(int groupID) | | SGroupInfo [**GetGroupInfo** ](/scripting/client-scripting-api-reference/player/sgroup.md#getgroupinfo)(int groupID) | | void [**JoinGroup** ](/scripting/client-scripting-api-reference/player/sgroup.md#joingroup)(int groupID, bool force=false) | | void [**LeaveGroup** ](/scripting/client-scripting-api-reference/player/sgroup.md#leavegroup)(int groupID, bool force=false) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------------------------- | | SGroupInfo\[] [**Membership** ](/scripting/client-scripting-api-reference/player/sgroup.md#propertyname)`get` | #### Functions[​](#functions "Direct link to Functions") ##### IsMemberOf[​](#ismemberof "Direct link to IsMemberOf") bool **IsMemberOf** (int groupID) *Whether is a member of this group.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua IsMember = Space.Groups.IsMemberOf(675) ``` * Lua ```lua --Clicking this object will check if player is a member of group with ID 350 --and it will turn green if you are, or red turn if you are not thisObject = Space.Host.ExecutingObject OnClickFunction = function() if Space.Groups.IsMemberOf(350) then thisObject.Renderer.Material.SetColor("_Color", Color.Green) else thisObject.Renderer.Material.SetColor("_Color", Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### GetGroupInfo[​](#getgroupinfo "Direct link to GetGroupInfo") [SGroupInfo](/scripting/client-scripting-api-reference/types/sgroupinfo.md) **GetGroupInfo** (int groupID) *Get the group info by groupID.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua groupInfo = Space.Groups.GetGroupInfo(675) ``` * Lua ```lua --Clicking this object will turn green if your in group 350 is "Owner" --and red if your role is not "Owner" thisObject = Space.Host.ExecutingObject OnClickFunction = function() local groupInfo = Space.Groups.GetGroupInfo(350) if groupInfo.Role == "Owner" then thisObject.Renderer.Material.SetColor("_Color", Color.Green) else thisObject.Renderer.Material.SetColor("_Color", Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### JoinGroup[​](#joingroup "Direct link to JoinGroup") void **JoinGroup** (int groupID, bool force=false) *Shows player a prompt to join specified group. If force is true, the user will not be shown a prompt. (force parameter is white-label only)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Groups.JoinGroup(675) ``` * Lua ```lua --Clicking this object will check if player is in group 350 --and will prompt the player to leave if they are a member --and will prompt them to join if they are not a member thisObject = Space.Host.ExecutingObject OnClickFunction = function() if Space.Groups.IsMemberOf(350) then Space.Groups.LeaveGroup(350) else Space.Groups.JoinGroup(350) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### LeaveGroup[​](#leavegroup "Direct link to LeaveGroup") void **LeaveGroup** (int groupID, bool force=false) *Shows player a prompt to leave specified group. If force is true, the user will not be shown a prompt. (force parameter is white-label only)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Groups.LeaveGroup(675) ``` * Lua ```lua --Clicking this object will check if player is in group 350 --and will prompt the player to leave if they are a member --and will prompt them to join if they are not a member thisObject = Space.Host.ExecutingObject OnClickFunction = function() if Space.Groups.IsMemberOf(350) then Space.Groups.LeaveGroup(350) else Space.Groups.JoinGroup(350) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### Membership[​](#membership "Direct link to Membership") [SGroupInfo](/scripting/client-scripting-api-reference/types/sgroupinfo.md)\[] **Membership** `get` *Return an array with all the groups this player is a member of* * Lua ```lua groups = Space.Groups.Membership ``` * Lua ```lua --Clicking this object will turn green if you are in at least 1 group --and red if you are in no groups thisObject = Space.Host.ExecutingObject OnClickFunction = function() local groups = Space.Groups.Membership if #groups > 0 then thisObject.Renderer.Material.SetColor("_Color", Color.Green) else thisObject.Renderer.Material.SetColor("_Color", Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` --- ### SInventory #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Authorize** ](/scripting/client-scripting-api-reference/player/sinventory.md#authorize)(Closure onAuthorized=null, Closure onRejected=null) | | int [**CountCopiesOfItem** ](/scripting/client-scripting-api-reference/player/sinventory.md#countcopiesofitem)(int itemID) | | void [**AddToHotbar** ](/scripting/client-scripting-api-reference/player/sinventory.md#addtohotbar)(int index, int itemID) | | void [**RemoveFromHotbar** ](/scripting/client-scripting-api-reference/player/sinventory.md#removefromhotbar)(int index) | | void [**RequestRefresh** ](/scripting/client-scripting-api-reference/player/sinventory.md#requestrefresh)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------- | | bool [**Authorized** ](/scripting/client-scripting-api-reference/player/sinventory.md#authorized)`get` | | SInventoryItem\[] [**Items** ](/scripting/client-scripting-api-reference/player/sinventory.md#items)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Authorize[​](#authorize "Direct link to Authorize") void **Authorize** (Closure onAuthorized=null, Closure onRejected=null) *Requests access to inventory functions, must be called prior to attempting to access inventory. As soon as the player has accepted the request, the Authorized attribute will be 'true'.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Inventory.Authorize() --or Space.Inventory.Authorize(onAuth, onRej) ``` * Lua ```lua --this script shows you how to use this function to take authorization and immediately --take action based on the result all in a single prompt (a click in this case) function ifno() Space.Log("not authorized") end function ifyes() Space.Log("authorized") --your next steps go here end function click() Space.Inventory.Authorize(ifyes,ifno) end Space.Host.ExecutingObject.AddClickable() Space.Host.ExecutingObject.Clickable.OnClick(click) ``` ##### CountCopiesOfItem[​](#countcopiesofitem "Direct link to CountCopiesOfItem") int **CountCopiesOfItem** (int itemID) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua numOfCopies = Space.Inventory.CountCopiesOfItem(38384839) ``` ##### AddToHotbar[​](#addtohotbar "Direct link to AddToHotbar") void **AddToHotbar** (int index, int itemID) *Adds the first found instance of itemID to the players hotbar entry at slot 'index'.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Inventory.AddToHotbar(2, 23423523) ``` ##### RemoveFromHotbar[​](#removefromhotbar "Direct link to RemoveFromHotbar") void **RemoveFromHotbar** (int index) *Remove item at slot index from Hotbar* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Inventory.RemoveFromHotbar(2) ``` ##### RequestRefresh[​](#requestrefresh "Direct link to RequestRefresh") void **RequestRefresh** () *Forces a check for external changes to the users inventory, can only be called once every 60 seconds* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Inventory.RequestRefresh() ``` #### Properties[​](#properties "Direct link to Properties") ##### Authorized[​](#authorized "Direct link to Authorized") bool **Authorized** `get` *Returns true if player has accepted access authorization request to his inventory* * Lua ```lua isAuthorized = Space.Inventory.Authorized ``` ##### Items[​](#items "Direct link to Items") [SInventoryItem](/scripting/client-scripting-api-reference/types/sinventoryitem.md)\[] **Items** `get` *Returns the array of the users current inventory items* * Lua ```lua invItems = Space.Inventory.Items ``` --- ### SProfile #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Authorize** ](sprofile#authorize)(Closure onAuthorized=null, Closure onRejected=null)
void [**Authorize** ](sprofile#authorize)(Action onAuthorized=null, Action onRejected=null) | | void [**LoadProfile** ](sprofile#authorize-1)(Action< SUserProfile > onFinished)
void [**LoadProfile** ](sprofile#authorize-1)(Closure onFinished) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------ | | SUserProfile [**ActivePlayerProfile** ](/scripting/client-scripting-api-reference/player/sprofile.md#activeplayerprofile)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Authorize[​](#authorize "Direct link to Authorize") void **Authorize** (Closure onAuthorized=null, Closure onRejected=null)
void **Authorize** (Action onAuthorized=null, Action onRejected=null) *Requests access to profile functions, must be called prior to attempting to access profile. As soon as the player has accepted the request, the Authorized attribute will be 'true'.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Profile.Authorize() --or Space.Profile.Authorize(AnOnAuthorizeFunction) --or Space.Profile.Authorize(AnOnAuthorizeFunction, AnOnRejectedFuncton) ``` ##### LoadProfile[​](#loadprofile "Direct link to LoadProfile") void **LoadProfile** (Closure onFinished) *Load the profile of player* | Parameter | Type | Description | | ---------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------- | | onFinished | Callback Function | onFinished([SUserProfile](/scripting/client-scripting-api-reference/types/suserprofile.md)) is called once profile is loaded | * Lua ```lua function onFinished(SUserProfile) -- end Space.Profile.LoadProfile(onFinished) ``` #### Properties[​](#properties "Direct link to Properties") ##### ActivePlayerProfile[​](#activeplayerprofile "Direct link to ActivePlayerProfile") [SUserProfile](/scripting/client-scripting-api-reference/types/suserprofile.md) **ActivePlayerProfile** `get` *Property Description* * Lua ```text Space.Profile.ActivePlayerProfile ``` --- ### SQuests #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------- | | void [**StartQuest** ](/scripting/client-scripting-api-reference/player/squests.md#startquest)(int id) | | int [**GetQuestStep** ](/scripting/client-scripting-api-reference/player/squests.md#getqueststep)(int questID) | | void [**ResetQuest** ](/scripting/client-scripting-api-reference/player/squests.md#resetquest)(int id) | | void [**SetQuestStep** ](/scripting/client-scripting-api-reference/player/squests.md#setqueststep)(int questID, int step) | | void [**CompleteQuest** ](/scripting/client-scripting-api-reference/player/squests.md#completequest)(int questID) | | void [**AbortQuest** ](/scripting/client-scripting-api-reference/player/squests.md#abortquest)(int id) | | void [**AwardAchievement** ](/scripting/client-scripting-api-reference/player/squests.md#awardachievement)(int id) | | bool [**HasAchievement** ](/scripting/client-scripting-api-reference/player/squests.md#hasachievement)(int id) | #### Functions[​](#functions "Direct link to Functions") ##### StartQuest[​](#startquest "Direct link to StartQuest") void **StartQuest** (int id) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Quests.StartQuest(1001211) ``` ##### GetQuestStep[​](#getqueststep "Direct link to GetQuestStep") int **GetQuestStep** (int questID) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua currentStep = Space.Quests.GetQuestStep(1001211) ``` ##### ResetQuest[​](#resetquest "Direct link to ResetQuest") void **ResetQuest** (int id) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Quests.ResetQuest(1001211) ``` ##### SetQuestStep[​](#setqueststep "Direct link to SetQuestStep") void **SetQuestStep** (int questID, int step) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Quests.SetQuestStep(1001211, 5) ``` ##### CompleteQuest[​](#completequest "Direct link to CompleteQuest") void **CompleteQuest** (int questID) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Quests.CompleteQuest(1001211) ``` ##### AbortQuest[​](#abortquest "Direct link to AbortQuest") void **AbortQuest** (int id) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Quests.AbortQuest(1001211) ``` ##### AwardAchievement[​](#awardachievement "Direct link to AwardAchievement") void **AwardAchievement** (int id) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Quests.AwardAchievement(1001211) ``` ##### HasAchievement[​](#hasachievement "Direct link to HasAchievement") bool **HasAchievement** (int id) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua hasAchievement = Space.Quests.AwardAchievement(1001211) ``` --- ### Scene APIs for the region a script runs in β€” the scene itself, cameras, physics, rendering and post-processing, persistence, and grid-level settings. --- ### SCameraManager #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**LockCamera** ](/scripting/client-scripting-api-reference/region/scameramanager.md#lockcamera)(SGameObject owner) | | void [**ReleaseCamera** ](/scripting/client-scripting-api-reference/region/scameramanager.md#releasecamera)() | | void [**SetCameraPositionOrientation** ](/scripting/client-scripting-api-reference/region/scameramanager.md#setcamerapositionorientation)(SVector position, SQuaternion orientation) | | SRay [**ScreenCoordinatesToRay** ](/scripting/client-scripting-api-reference/region/scameramanager.md#screencoordinatestoray)(SVector screenCoordinates) | | SVector [**ScreenCoordinatesToWorld** ](/scripting/client-scripting-api-reference/region/scameramanager.md#screencoordinatestoworld)(SVector screenCoordinates) | | SVector [**WorldCoordinatesToScreen** ](/scripting/client-scripting-api-reference/region/scameramanager.md#worldcoordinatestoscreen)(SVector coordinates) | | void [**ShakeCamera** ](scameramanager#shakecamera)(float magnitude, float time)
void [**ShakeCamera** ](scameramanager#shakecamera)(float amplitude, float frequency, float time) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------------------------------------------ | | bool [**IsLocked** ](/scripting/client-scripting-api-reference/region/scameramanager.md#propertyname)`get` | | SGameObject [**MainCamera** ](/scripting/client-scripting-api-reference/region/scameramanager.md#propertyname-1)`get` | | SGameObject [**ActiveVirtualCamera** ](/scripting/client-scripting-api-reference/region/scameramanager.md#propertyname-2)`get` | #### Properties[​](#properties "Direct link to Properties") ##### IsLocked[​](#islocked "Direct link to IsLocked") bool **IsLocked** `get` Is the Camera locked? * Lua ```lua isCameraLocked = Space.Camera.IsLocked ``` ##### MainCamera[​](#maincamera "Direct link to MainCamera") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **MainCamera** `get` *Note, this property is generally read-only. It's position is driven by internal code.* * Lua ```lua mainCamera = Space.Camera.MainCamera ``` ##### ActiveVirtualCamera[​](#activevirtualcamera "Direct link to ActiveVirtualCamera") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **ActiveVirtualCamera** `get` *The currently active Cinemachine Virtual Camera game object.* * Lua ```lua currentCamera = Space.Camera.ActiveVirtualCamera ``` #### Functions[​](#functions "Direct link to Functions") ##### LockCamera[​](#lockcamera "Direct link to LockCamera") void **LockCamera** () *Calling this function stops the Camera from being controlled by the viewer, and allows us to control it until* [*ReleaseCamera()*](/scripting/client-scripting-api-reference/region/scameramanager.md#releasecamera) *is called.* * Lua ```lua Space.Camera.LockCamera() ``` ##### ReleaseCamera[​](#releasecamera "Direct link to ReleaseCamera") void **ReleaseCamera** () *Calling this function reverses the* [*LockCamera()*](/scripting/client-scripting-api-reference/region/scameramanager.md#lockcamera) *call and returns control of the Camera to the viewer.* * Lua ```lua Space.Camera.ReleaseCamera() ``` ##### SetCameraPositionOrientation[​](#setcamerapositionorientation "Direct link to SetCameraPositionOrientation") void **SetCameraPositionOrientation** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) position, [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) orientation) *Sets the Camera's position and rotation. This function requires* [*t*he camera to be locked.](/scripting/client-scripting-api-reference/region/scameramanager.md#lockcamera) | Parameter | Type | Description | | ----------- | ----------------------------------------------------------------------------- | -------------------------------------------- | | position | [SVector](/scripting/client-scripting-api-reference/types/svector.md) | The World Postion of the camera GameObject. | | orientation | [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) | The World Rotation of the camera GameObject. | * Lua ```lua Space.Camera.SetCameraPositionOrientation (Vector.New(0,0,0),Quaternion.Euler(-60,0,0)); ``` ##### ScreenCoordinatesToRay[​](#screencoordinatestoray "Direct link to ScreenCoordinatesToRay") [SRay ](/scripting/client-scripting-api-reference/types/sray.md)**ScreenCoordinatesToRay** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) screenCoordinates) *Returns a ray going from camera through a screen point.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua cameraRay = Space.Camera.ScreenCoordinatesToRay (Vector.New(0,50,0)) ``` * Lua ```lua --this script will make this object jump to wherever you right click --(Example: moving objects with right click ) thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetMouseDown(1) then clickRay = Space.Camera.ScreenCoordinatesToRay(Space.Input.MousePosition) rayCastHit = Space.Physics.RayCastSingle(clickRay.Origin, clickRay.Direction, 50.0) thisGameObject.WorldPosition = rayCastHit.Position end end thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` ##### ScreenCoordinatesToWorld[​](#screencoordinatestoworld "Direct link to ScreenCoordinatesToWorld") [SVector ](/scripting/client-scripting-api-reference/types/svector.md)**ScreenCoordinatesToWorld** ([SVector ](/scripting/client-scripting-api-reference/types/svector.md)screenCoordinates) *Transforms a point from screen space into world space.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua obj = Space.Host.ExecutingObject; Space.Log(Space.Camera.ScreenCoordinatesToWorld(Vector.New(0.5,0.5,0)).ToString()); -- Print 3 worldspace vectors created by screen space point to the console. ``` ##### WorldCoordinatesToScreen[​](#worldcoordinatestoscreen "Direct link to WorldCoordinatesToScreen") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **WorldCoordinatesToScreen** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) coordinates) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local trans = Space.Host.ExecutingObject; Space.Log(Space.Camera.WorldCoordinatesToScreen(trans.WorldPosition).ToString()); -- Print the position created by world space point to the console. ``` ##### ShakeCamera[​](#shakecamera "Direct link to ShakeCamera") void **ShakeCamera** (float magnitude, float time)
void **ShakeCamera** (float amplitude, float frequency, float time) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Camera.ShakeCamera(1, 1.0) --or Space.Camera.ShakeCamera(2, 1, 1.0) ``` --- ### SGrid #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**GetEnabledUserRegions** ](/scripting/client-scripting-api-reference/region/sgrid.md#getenableduserregions)(Closure onComplete) | | void [**GetRegionTexture** ](sgrid#getregiontexture)(SPublicRegion region, Closure onComplete)
void [**GetRegionTexture** ](sgrid#getregiontexture)(string json, Closure onComplete) | | void [**GetOutfits** ](/scripting/client-scripting-api-reference/region/sgrid.md#getoutfits)(Closure onComplete) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------- | | bool [**IsWhiteLabel** ](/scripting/client-scripting-api-reference/region/sgrid.md#iswhitelabel)`get` | | bool [**PlayerIsAdmin** ](/scripting/client-scripting-api-reference/region/sgrid.md#playerisadmin)`get` | | bool [**PlayerIsModerator** ](/scripting/client-scripting-api-reference/region/sgrid.md#playerismoderator)`get` | | bool [**PlayerIsDeveloper** ](/scripting/client-scripting-api-reference/region/sgrid.md#playerisdeveloper)`get` | | bool [**PlayerIsTrusted** ](/scripting/client-scripting-api-reference/region/sgrid.md#playeristrusted)`get` | | SColor [**ThemeColor1** ](/scripting/client-scripting-api-reference/region/sgrid.md#themecolor1)`get` | | SColor [**ThemeColor2** ](/scripting/client-scripting-api-reference/region/sgrid.md#themecolor2)`get` | | SColor [**ThemeColor3** ](/scripting/client-scripting-api-reference/region/sgrid.md#themecolor3)`get` | | SColor [**ThemeColor4** ](/scripting/client-scripting-api-reference/region/sgrid.md#themecolor4)`get` | | SColor [**TextColor1** ](/scripting/client-scripting-api-reference/region/sgrid.md#textcolor1)`get` | | SColor [**TextColor2** ](/scripting/client-scripting-api-reference/region/sgrid.md#textcolor2)`get` | | string [**Name**](/scripting/client-scripting-api-reference/region/sgrid.md#name) `get` | | string [**SiteURL** ](/scripting/client-scripting-api-reference/region/sgrid.md#siteurl)`get` | | int [**DefaultRegion** ](/scripting/client-scripting-api-reference/region/sgrid.md#defaultregion)`get` | | int\[] [**Avatars** ](/scripting/client-scripting-api-reference/region/sgrid.md#avatars)`get` | | int [**OrientationRegion** ](/scripting/client-scripting-api-reference/region/sgrid.md#orientationregion)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetEnabledUserRegions[​](#getenableduserregions "Direct link to GetEnabledUserRegions") void **GetEnabledUserRegions** (Closure onComplete) *Calling this function will asynchronously get and return information about this player's regions as* [*SUserRegions.* ](/scripting/client-scripting-api-reference/types/suserregions.md)*(This is the same information in the "Region List" window).* | Parameter | Type | Description | | ---------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | | onComplete | Closure (Callback) | onComplete is a function that will be called on completion with [SUserRegions ](../types/suserregions)as a parameter.
onComplete(SUserRegions) | | | | | * Lua ```lua function GetUserRegionsComplete(SUserRegions) -- end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` * Lua ```lua --Make's a UIText show this Grid's current Subscription Tier textObject = Space.Host.GetReference("TheTextReference") --add to References section in Scripting Runtime function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.SubscriptionTier text.UIText.Text = r end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### GetRegionTexture[​](#getregiontexture "Direct link to GetRegionTexture") void **GetRegionTexture** ([SPublicRegion ](/scripting/client-scripting-api-reference/types/spublicregion.md)region, Closure onComplete)
void **GetRegionTexture** (string json, Closure onComplete) *Returns the Region Texture (the image seen while loading the region) as a resource. This function requires an* [*SPublicRegion*](/scripting/client-scripting-api-reference/types/spublicregion.md) *object to identify which region. (white-label grids only)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Grid.GetRegionTexture(AnSPublicRegionObject,OnCompleteFunction) --see below example ``` * Lua ```lua --When this object is clicked, it's material becomes the Region Texture of the user's first region thisObject = Space.Host.ExecutingObject function GetTextureComplete(textureResource) thisObject.Renderer.Material.SetTexture("_MainTex",textureResource) end function GetUserRegionsComplete(SUserRegions) r = SUserRegions.AvailableRegions Space.Grid.GetRegionTexture(r[1],GetTextureComplete) end function OnClickFunction() Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### GetOutfits[​](#getoutfits "Direct link to GetOutfits") void **GetOutfits** (Closure onComplete) *Calling this function will asynchronously get and return information about this player's outfits as a List of* [*SOutfit*](/scripting/client-scripting-api-reference/types/soutfit.md)*.* | Parameter | Type | Description | | ---------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | onComplete | Closure (Callback) | onComplete is a function that will be called on completion with a List of [SOutfit](/scripting/client-scripting-api-reference/types/soutfit.md) as a parameter. | * Lua ```lua function OnGetOutfitsComplete(TableSOutfits) -- end Space.Grid.GetOutfits(OnGetOutfitsComplete) ``` #### Properties[​](#properties "Direct link to Properties") ##### IsWhiteLabel[​](#iswhitelabel "Direct link to IsWhiteLabel") bool **IsWhiteLabel** `get` *Returns true if this Grid is a white-label Grid.* * Lua ```lua isWhiteLabel = Space.Grid.IsWhiteLabel ``` * Lua ```lua --Clicking this object will turn it green color if this grid is white-label --and will turn it red color if not thisObject = Space.Host.ExecutingObject function OnClickFunction() if Space.Grid.IsWhiteLabel then thisObject.Renderer.Material.SetColor("_Color",Color.Green) else thisObject.Renderer.Material.SetColor("_Color",Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### PlayerIsAdmin[​](#playerisadmin "Direct link to PlayerIsAdmin") bool **PlayerIsAdmin** `get` *Returns true if this player's Grid role is Admin.(white-label grid only)* * Lua ```lua isAdmin = Space.Grid.PlayerIsAdmin ``` * Lua ```lua --Clicking this object will turn it green color if your grid role is Admin --and will turn it red color if not thisObject = Space.Host.ExecutingObject function OnClickFunction() if Space.Grid.PlayerIsAdmin then thisObject.Renderer.Material.SetColor("_Color",Color.Green) else thisObject.Renderer.Material.SetColor("_Color",Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### PlayerIsModerator[​](#playerismoderator "Direct link to PlayerIsModerator") bool **PlayerIsModerator** `get` *Returns true if this player's Grid role is Moderator. (white-label grid only)* * Lua ```lua isModerator = Space.Grid.PlayerIsModerator ``` * Lua ```lua --Clicking this object will turn it green color if your grid role is Moderator --and will turn it red color if not thisObject = Space.Host.ExecutingObject function OnClickFunction() if Space.Grid.PlayerIsModerator then thisObject.Renderer.Material.SetColor("_Color",Color.Green) else thisObject.Renderer.Material.SetColor("_Color",Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### PlayerIsDeveloper[​](#playerisdeveloper "Direct link to PlayerIsDeveloper") bool **PlayerIsDeveloper** `get` *Returns true if this player's Grid role is Developer.(white-label grid only)* * Lua ```lua isDeveloper = Space.Grid.PlayerIsDeveloper ``` * Lua ```lua --Clicking this object will turn it green color if your grid role is Developer --and will turn it red color if not thisObject = Space.Host.ExecutingObject function OnClickFunction() if Space.Grid.PlayerIsDeveloper then thisObject.Renderer.Material.SetColor("_Color",Color.Green) else thisObject.Renderer.Material.SetColor("_Color",Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### PlayerIsTrusted[​](#playeristrusted "Direct link to PlayerIsTrusted") bool **PlayerIsTrusted** `get` *Returns true if this player's Grid role is Trusted.(white-label grid only)* * Lua ```lua isTrusted = Space.Grid.PlayerIsTrusted ``` * Lua ```lua --Clicking this object will turn it green color if your grid role is Trusted --and will turn it red color if not thisObject = Space.Host.ExecutingObject function OnClickFunction() if Space.Grid.PlayerIsTrusted then thisObject.Renderer.Material.SetColor("_Color",Color.Green) else thisObject.Renderer.Material.SetColor("_Color",Color.Red) end end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### ThemeColor1[​](#themecolor1 "Direct link to ThemeColor1") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **ThemeColor1** `get` *The viewer's **Theme Color 1**.* *The viewer's theme consist of 4 Theme Colors and 2 Text Colors.* * Lua ```lua themeColor1 = Space.Grid.ThemeColor1 ``` ##### ThemeColor2[​](#themecolor2 "Direct link to ThemeColor2") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **ThemeColor2** `get` *The viewer's **Theme Color 2**.* *The viewer's theme consist of 4 Theme Colors and 2 Text Colors.* * Lua ```lua themeColor2 = Space.Grid.ThemeColor2 ``` ##### ThemeColor3[​](#themecolor3 "Direct link to ThemeColor3") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **ThemeColor3** `get` *The viewer's **Theme Color 3**.* *The viewer's theme consist of 4 Theme Colors and 2 Text Colors.* * Lua ```lua themeColor3 = Space.Grid.ThemeColor3 ``` ##### ThemeColor4[​](#themecolor4 "Direct link to ThemeColor4") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **ThemeColor4** `get` *The viewer's **Theme Color 4**.* *The viewer's theme consist of 4 Theme Colors and 2 Text Colors.* * Lua ```lua themeColor4 = Space.Grid.ThemeColor4 ``` ##### TextColor1[​](#textcolor1 "Direct link to TextColor1") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **TextColor1** `get` *The viewer's **Text Color 1**.* *The viewer's theme consist of 4 Theme Colors and 2 Text Colors.* * Lua ```lua textColor1 = Space.Grid.TextColor1 ``` ##### TextColor2[​](#textcolor2 "Direct link to TextColor2") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **TextColor2** `get` *The viewer's **Text Color 2**.* *The viewer's theme consist of 4 Theme Colors and 2 Text Colors.* * Lua ```lua textColor2 = Space.Grid.TextColor2 ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *Returns the Grid's Name. (white-label grid only)* * Lua ```lua gridName = Space.Grid.Name ``` * Lua ```lua --Clicking this object will populate a UIText field with the current Grid's Name thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("TheTextReference") function OnClickFunction() local gridName = Space.Grid.Name textObject.UIText.Text = gridName end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction ``` ##### SiteURL[​](#siteurl "Direct link to SiteURL") string **SiteURL** `get` *Returns the Grid's Site URL. (white-label grid only)* * Lua ```lua siteUrl = Space.Grid.SiteURL ``` * Lua ```lua --Clicking this object will populate a UIText field with the current Grid's Site URL thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("TheTextReference") function OnClickFunction() local siteURL = Space.Grid.SiteURL textObject.UIText.Text = siteURL end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction ``` ##### DefaultRegion[​](#defaultregion "Direct link to DefaultRegion") int **DefaultRegion** `get` *Returns the Region ID of the Default Region. The Default Region is set in the grid's Dashboard. (white-label grid only)* * Lua ```lua defaultRegion = Space.Grid.DefaultRegion ``` * Lua ```lua --Clicking this object will teleport the user to the grid's Default Region thisObject = Space.Host.ExecutingObject function OnClickFunction() local defaultRegion = Space.Grid.DefaultRegion Space.PlayerAvatar.Teleport(defaultRegion) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Avatars[​](#avatars "Direct link to Avatars") int\[] **Avatars** `get` *Returns the IDs of all Avatars in the grid. (white-label grid only)* * Lua ```lua avatars = Space.Grid.Avatars ``` * Lua ```lua --Clicking this object will populate a UIText field with the current Grid's Avatars thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("TheTextReference") function OnClickFunction() local avatars = Space.Grid.Avatars av = json.serialize(avatars) textObject.UIText.Text = av end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### OrientationRegion[​](#orientationregion "Direct link to OrientationRegion") int **OrientationRegion** `get` *Returns the Region ID of the "Orientation Region".* * Lua ```lua orientationRegion = Space.Grid.OrientationRegion ``` * Lua ```lua --Clicking this object will teleport the user to the grid's Orientation Region thisObject = Space.Host.ExecutingObject function OnClickFunction() local orientationRegionRegion = Space.Grid.OrientationRegion Space.PlayerAvatar.Teleport(orientationRegion) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` --- ### SHost #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**InvokeEvent** ](/scripting/client-scripting-api-reference/region/shost.md#invokeevent)(string name) | | void [**Stop** ](/scripting/client-scripting-api-reference/region/shost.md#stop)() | | void [**InvokeDelayed** ](/scripting/client-scripting-api-reference/region/shost.md#invokedelayed)(Closure c, float delay) | | void [**StartCoroutine** ](shost#startcoroutine)(DynValue value, DynValue parameter=default(DynValue), string name=null)
void [**StartCoroutine** ](shost#startcoroutine)(string value, DynValue parameter=default(DynValue) | | bool [**ReferenceExists** ](/scripting/client-scripting-api-reference/region/shost.md#referenceexists)(string name) | | bool [**ReferenceExistsAndNotEmpty** ](/scripting/client-scripting-api-reference/region/shost.md#referenceexistsandnotempty)(string name) | | SGameObject [**GetReference** ](/scripting/client-scripting-api-reference/region/shost.md#getreference)(string name) | | void [**Evaluate** ](/scripting/client-scripting-api-reference/region/shost.md#evaluate)(string script) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------ | | SGameObject [**ExecutingObject** ](/scripting/client-scripting-api-reference/region/shost.md#executingobject)`get` | | string [**Language** ](/scripting/client-scripting-api-reference/region/shost.md#language)`get` | #### Functions[​](#functions "Direct link to Functions") ##### InvokeEvent[​](#invokeevent "Direct link to InvokeEvent") void **InvokeEvent** (string name) *Invokes a UnityEvent attached to the Scripting Runtime component this script is executing in.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.InvokeEvent("EventName") ``` ##### Stop[​](#stop "Direct link to Stop") void **Stop** () *Pauses the current script until it is manually restarted, at the end of the current function/method; consider using return as well.* * Lua ```lua Space.Host.Stop() ``` * Lua ```lua local trans=Space.Host.ExecutingObject; trans.SubscribeToEvents(); function Running() Space.Log("Running") end trans.OnUpdate(Running) Space.Host.InvokeDelayed(function() Space.Log("Stop") Space.Host.Stop() end,5) --After print the "Stop","Running" won't display anymore. ``` ##### InvokeDelayed[​](#invokedelayed "Direct link to InvokeDelayed") void **InvokeDelayed** (Closure c, float delay) *Invoke the closure after the delayed time.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.InvokeDelayed(AFunction, 10) ``` * Lua ```lua --Clicking this object makes it destroy itself after 5 seconds thisObject = Space.Host.ExecutingObject function DeleteFunction() thisObject.Destroy() end function OnClickFunction() Space.Host.InvokeDelayed(DeleteFunction,10) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### StartCoroutine[​](#startcoroutine "Direct link to StartCoroutine") void **StartCoroutine** (DynValue value, DynValue parameter=default(DynValue), string name=null)
void **StartCoroutine** (string value, DynValue parameter=default(DynValue), string name=null) *Executes the specified function as a coroutine.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.StartCoroutine(aFunction) --or Space.Host.StartCoroutine("aFunctionName") ``` * Lua ```lua local function myCoroutine() -- The yield statement is a special kind of return, that ensures that the function will continue from the line once the coroutine resumes. -- Placing a float value inside of the yield will result in a delayed execution. -- Example: coroutine.yield(0.5) will wait 0.5 seconds before continuing the execution of the coroutine. -- This will print the current players active time. Space.Log(Space.Time); -- Execution of this coroutine will be halted for 10 seconds. coroutine.yield(10); -- This will print the current players active time, which will be 10 seconds greater then the previous as a result of the yield Space.Log(Space.Time); end Space.Host.StartCoroutine(myCoroutine); ``` ##### ReferenceExists[​](#referenceexists "Direct link to ReferenceExists") bool **ReferenceExists** (string name) *Return true when the reference object exists and is not empty.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua referenceExists = Space.Host.ReferenceExists("the reference name") ``` ##### ReferenceExistsAndNotEmpty[​](#referenceexistsandnotempty "Direct link to ReferenceExistsAndNotEmpty") bool **ReferenceExistsAndNotEmpty** (string name) *Return true when the reference object exists and is not empty.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua existsNotEmpty = Space.Host.ReferenceExistsAndNotEmpty("obj") --Print "false" to console if didn't set the object named "obj" to the Object References or attach the reference to "obj". ``` ##### GetReference[​](#getreference "Direct link to GetReference") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GetReference** (string name) *Pulls a reference from the scripting runtime component's "References" section by it's name.* | Parameter | Type | Description | | --------- | ------ | --------------------------------------------------------------------------------------------- | | name | string | The name of the reference as set within the Scripting Runtime component (references section). | * Lua ```lua theObject = Space.Host.GetReference("referenceName") ``` * Lua ```lua --Clicking this object makes it destroy the object we linked in the references section thisObject = Space.Host.ExecutingObject dObject = Space.Host.GetReference("theObjectToBeDestroyed") function OnClickFunction() dObject.Destroy() end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Evaluate[​](#evaluate "Direct link to Evaluate") void **Evaluate** (string script) Executes given Lua code/script. (white-label only) | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.Evaluate('Space.Log("test")') ``` #### Properties[​](#properties "Direct link to Properties") ##### ExecutingObject[​](#executingobject "Direct link to ExecutingObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **ExecutingObject** `get` *A reference to the GameObject that is executing this script. (The GameObject that this Scripting Runtime component is attached to).* * Lua ```lua object = Space.Host.ExecutingObject ``` ##### Language[​](#language "Direct link to Language") string **Language** `get` *Returns the English name for the users language, e.g. 'English', 'French', 'Chinese'* * Lua ```lua lang = Space.Host.Language ``` * Lua ```lua --Makes a UIText show a different message according to the client's language TextObject = Space.Host.GetReference("TextObject") --add to references section of Scripting Runtime component language = Space.Host.Language if language == "English" then TextObject.UIText.Text = "Welcome!" elseif language == "Dutch" then TextObject.UIText.Text = "welkom!" elseif language == "French" then TextObject.UIText.Text = "bienvenue!" else TextObject.UIText.Text = "Welcome!" end ``` --- ### SPersistence #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**UpdateInfo** ](/scripting/client-scripting-api-reference/region/spersistence.md#updateinfo)(Closure onComplete) | | string [**RetrieveValue** ](/scripting/client-scripting-api-reference/region/spersistence.md#retrievevalue)(string key) | | void [**SetValue** ](/scripting/client-scripting-api-reference/region/spersistence.md#setvalue)(string key, string value) | | void [**UpdateRegionInfo** ](spersistence#updateregioninfo)(Action onComplete)
void [**UpdateRegionInfo** ](spersistence#updateregioninfo)(Closure onComplete) | | string [**RetrieveRegionValue** ](/scripting/client-scripting-api-reference/region/spersistence.md#retrieveregionvalue)(string key) | | void [**SetRegionValue** ](/scripting/client-scripting-api-reference/region/spersistence.md#setregionvalue)(string key, string value) | #### Functions[​](#functions "Direct link to Functions") ##### UpdateInfo[​](#updateinfo "Direct link to UpdateInfo") void **UpdateInfo** (Closure onComplete) *Call the onComplete function upon the server saving a value.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function OnCompleteFunction() -- end Space.Persistence.UpdateInfo(OnCompleteFunction) ``` * Lua ```lua Space.Persistence.SetValue("TestValue","123"); Space.Persistence.UpdateInfo(function () local value = Space.Persistence.RetrieveValue("TestValue") Space.Log(value) end) --print "123" to console. ``` ##### RetrieveValue[​](#retrievevalue "Direct link to RetrieveValue") string **RetrieveValue** (string key) *Returns the saved value with the key.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Persistence.RetrieveValue("TestValue") ``` ##### SetValue[​](#setvalue "Direct link to SetValue") void **SetValue** (string key, string value) *Save a **value** to the storage record that is accessed with **key**.* | Parameter | Type | Description | | --------- | ------ | -------------- | | key | string | Max length 48 | | value | string | Max length 255 | * Lua ```lua Space.Persistence.SetValue("MyValue", "Hello World"); ``` ##### UpdateRegionInfo[​](#updateregioninfo "Direct link to UpdateRegionInfo") void **UpdateRegionInfo** (Action onComplete)
void **UpdateRegionInfo** (Closure onComplete) *Updates your local cache with the most up-to-date values from the server. This function should be called before using the* [*RetrieveRegionValue*](/scripting/client-scripting-api-reference/region/spersistence.md#retrieveregionvalue) function. | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Persistence.SetRegionValue("TestRegionValue","456") Space.Persistence.UpdateRegionInfo(function () local value = Space.Persistence.RetrieveRegionValue("TestRegionValue") Space.Log(value) end) --print "456" to console. ``` ##### RetrieveRegionValue[​](#retrieveregionvalue "Direct link to RetrieveRegionValue") string **RetrieveRegionValue** (string key) *Retrieves the saved value from "key" from your local cache. The* [*UpdateRegionInfo* ](/scripting/client-scripting-api-reference/region/spersistence.md#updateregioninfo)*function should be called first to update your local cache with the most up-to-date values from the server.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Persistence.RetrieveRegionValue("TestRegionValue"); ``` ##### SetRegionValue[​](#setregionvalue "Direct link to SetRegionValue") void **SetRegionValue** (string key, string value) *Save the "value" to "key" on both your local cache and on the server.* | Parameter | Type | Description | | --------- | ------ | -------------- | | key | string | Max length 48 | | value | string | Max length 255 | * Lua ```lua Space.Persistence.SetRegionValue("TestRegionValue","456"); ``` --- ### SPhysics #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | SPhysicsHit\[] [**RayCast** ](/scripting/client-scripting-api-reference/region/sphysics.md#raycast)(SVector origin, SVector normal, float distance, SLayerMask layerMask=null) | | SPhysicsHit [**RayCastSingle** ](/scripting/client-scripting-api-reference/region/sphysics.md#raycastsingle)(SVector origin, SVector normal, float distance, SLayerMask layerMask=null) | | SPhysicsHit\[] [**SphereCast** ](sphysics#spherecast)(SVector origin, float radius, float distance, SVector direction, SLayerMask layerMask=null)
SPhysicsHit\[] [**SphereCast** ](sphysics#spherecast)(SVector origin, float radius, float distance, SLayerMask layerMask=null) | | SPhysicsHit\[] [**CapsuleCast** ](sphysics#capsulecast)(SVector origin, SVector end, float radius, float distance, SVector up, SLayerMask layerMask=null)
SPhysicsHit\[] [**CapsuleCast** ](sphysics#capsulecast)(SVector origin, SVector end, float radius, float distance, SLayerMask layerMask=null) | | SPhysicsHit\[] [**BoxCast** ](/scripting/client-scripting-api-reference/region/sphysics.md#boxcast)(SVector origin, SVector extents, SVector direction, SQuaternion orientation, float distance, SLayerMask layerMask=null) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------- | | SVector [**Gravity** ](/scripting/client-scripting-api-reference/region/sphysics.md#gravity)`get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### RayCast[​](#raycast "Direct link to RayCast") [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md)\[] **RayCast** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) origin, [SVector](/scripting/client-scripting-api-reference/types/svector.md) normal, float distance, [SLayerMask](/scripting/client-scripting-api-reference/types/slayermask.md) layerMask=null) *Raycasts from origin along normal, distance meters - and returns a list of collisions in distance order (closest first)* | Parameter | Type | Description | | --------- | ---------- | ----------------------------------------------------------------- | | origin | SVector | | | normal | SVector | | | distance | SVector | | | layerMask | SLayerMask | Include a layer mask if you do not want to use viewer's defaults. | * Lua ```lua tableSPhysicsHit = Space.Physics.RayCast(Vector.New(0,0,0), Vector.New(1,0,0), 2.0) ``` * Lua ```lua local trans=Space.Host.ExecutingObject function Raycast() local rays = Space.Physics.RayCast(trans.WorldPosition,trans.Forward,50) if(rays~=nil and #rays>0) then for i=0,#rays - 1 do Space.Log(rays[i].Object.Name.." i = "..i) end end end trans.OnUpdate(Raycast) ``` ##### RayCastSingle[​](#raycastsingle "Direct link to RayCastSingle") [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md) **RayCastSingle** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) origin, [SVector](/scripting/client-scripting-api-reference/types/svector.md) normal, float distance, [SLayerMask](/scripting/client-scripting-api-reference/types/slayermask.md) layerMask=null) *Raycasts from origin along normal, distance meters - and returns the first collision.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua SPhysicsHit = Space.Physics.RayCastSingle(Vector.New(0,0,0), Vector.New(1,0,0), 2.0) ``` * Lua ```lua local trans=Space.Host.ExecutingObject function RaycastSingle() local ray=Space.Physics.RayCastSingle(trans.WorldPosition,trans.Forward,50) if(ray~=nil and ray.ContainsHit==true) then Space.Log(ray.Object.Name) end end trans.OnUpdate(RaycastSingle) ``` * Lua ```lua --this script will make this object jump to wherever you right click --(Example: moving objects with right click ) thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetMouseDown(1) then clickRay = Space.Camera.ScreenCoordinatesToRay(Space.Input.MousePosition) rayCastHit = Space.Physics.RayCastSingle(clickRay.Origin, clickRay.Direction, 50.0) thisGameObject.WorldPosition = rayCastHit.Position end end thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` ##### SphereCast[​](#spherecast "Direct link to SphereCast") [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md)\[] **SphereCast** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) origin, float radius, float distance, [SVector](/scripting/client-scripting-api-reference/types/svector.md) direction, [SLayerMask](/scripting/client-scripting-api-reference/types/slayermask.md) layerMask=null)
[SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md)\[] **SphereCast** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) origin, float radius, float distance, [SLayerMask](/scripting/client-scripting-api-reference/types/slayermask.md) layerMask=null) *Sweeps from origin in a spherical ray 'radius' wide, and returns the list of collided objects* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableSPhysicsHit = Space.Physics.SphereCast(Vector.New(0,0,0), 3.0, 2.0, Vector.New(1,0,0)) --or tableSPhysicsHit = Space.Physics.SphereCast(Vector.New(0,0,0), 3.0, 2.0) ``` * Lua ```lua local trans=Space.Host.ExecutingObject function SphereRaycast() local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5) local rays=Space.Physics.SphereCast(center,10,10,trans.Forward) if rays~=nil and #rays>0 then for i=0,#rays - 1 do Space.Log(rays[i].Object.Name.." i = "..i) end end end trans.OnUpdate(SphereRaycast) ``` ##### CapsuleCast[​](#capsulecast "Direct link to CapsuleCast") [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md)\[] **CapsuleCast** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) origin, [SVector ](/scripting/client-scripting-api-reference/types/svector.md)end, float radius, float distance, [SVector](/scripting/client-scripting-api-reference/types/svector.md) up, SLayerMask layerMask=null)
[SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md)\[] **CapsuleCast** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) origin, [SVector](/scripting/client-scripting-api-reference/types/svector.md) end, float radius, float distance, [SLayerMask](/scripting/client-scripting-api-reference/types/slayermask.md) layerMask=null) *Sweeps a capsule from origin to end, radius wide and returns a list of collisions.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableSPhysicsHit = Space.Physics.CapsuleCast(Vector.New(0,0,0),Vector.New(0,5,0), 3.0, 2.0, Vector.New(1,0,0)) --or tableSPhysicsHit = Space.Physics.CapsuleCast(Vector.New(0,0,0),Vector.New(0,5,0), 3.0, 2.0) ``` * Lua ```lua local trans=Space.Host.ExecutingObject function CapsuleCast() local startp=trans.WorldPosition local endp=startp+trans.Up*10 local rays=Space.Physics.CapsuleCast(startp,endp,1,10,trans.Up) if rays~=nil and #rays>0 then for i=0,#rays - 1 do Space.Log(rays[i].Object.Name.." i = "..i) end end end trans.OnUpdate(CapsuleCast) ``` ##### BoxCast[​](#boxcast "Direct link to BoxCast") [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md)\[] **BoxCast** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) origin, [SVector](/scripting/client-scripting-api-reference/types/svector.md) extents, [SVector ](/scripting/client-scripting-api-reference/types/svector.md)direction, [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) orientation, float distance, [SLayerMask](/scripting/client-scripting-api-reference/types/slayermask.md) layerMask=null) *Sweeps a box defined by origin+halfExtents along direction, distance meters with a orientation matching orientation - and returns a list of collisions in distance order.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableSPhysicsHit = Space.Physics.BoxCast(Vector.New(0,0,0),Vector.New(1,1,1), Vector.New(0,1,0), Quaternion.New(0,60,0), 10.0) ``` * Lua ```lua local trans=Space.Host.ExecutingObject function BoxCast() local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5) local endp=local extents=Vector.new(2,2,2) local rays=Space.Physics.BoxCast(center,extents,trans.Forward,Quaternion.Identity,2) if rays~=nil and #rays>0 then for i=0,#rays - 1 do Space.Log(rays[i].Object.Name.." i = "..i) end end end trans.OnUpdate(BoxCast) ``` #### Properties[​](#properties "Direct link to Properties") ##### Gravity[​](#gravity "Direct link to Gravity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Gravity** `get` `set` *The gravity applied to all rigid bodies in the Scene.* *Gravity can be turned off for an individual Rigidbody using its* [*UseGravity*](/scripting/client-scripting-api-reference/components/srigidbody.md#usegravity) *property.* * Lua ```lua Space.Physics.Gravity = Vector.New(0,-1.0,0) ``` --- ### SPostFX #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | SCommandBuffer [**CreateCommandBuffer** ](/scripting/client-scripting-api-reference/region/spostfx.md#createcommandbuffer)() | | void [**AddCommandBufferToCamera** ](/scripting/client-scripting-api-reference/region/spostfx.md#addcommandbuffertocamera)(SCommandBuffer commandbuffer, int cameraEvent=19) | | void [**RemoveCommandBufferFromCamera** ](/scripting/client-scripting-api-reference/region/spostfx.md#removecommandbufferfromcamera)(SCommandBuffer commandbuffer, int cameraEvent=19) | | void [**SetPostProfile** ](/scripting/client-scripting-api-reference/region/spostfx.md#setpostprofile)(SResource customProfile) | | void [**ClearPostProfile** ](/scripting/client-scripting-api-reference/region/spostfx.md#clearpostprofile)() | | void [**SetCrepsecularRays** ](/scripting/client-scripting-api-reference/region/spostfx.md#setcrepsecularrays)(bool on, float thresR, float thresG, float thresB, float colorR, float colorG, float colorB, float falloff, float blurSize, int blurIterations, float intensity) | | void [**SetAmbientOcclusion** ](/scripting/client-scripting-api-reference/region/spostfx.md#setambientocclusion)(bool on, float intensity, bool aoOnly) | | void [**SetMotionBlur** ](/scripting/client-scripting-api-reference/region/spostfx.md#setmotionblur)(bool on, float shutterAngle) | | void [**SetBloom** ](/scripting/client-scripting-api-reference/region/spostfx.md#setbloom)(bool on, float threshold, float intensity) | | void [**SetAnamorphicFlares** ](/scripting/client-scripting-api-reference/region/spostfx.md#setanamorphicflares)(bool on, float r, float g, float b, float intensity, float threshold, float spread, bool vertical) | | void [**SetVignette** ](/scripting/client-scripting-api-reference/region/spostfx.md#setvignette)(bool on, float r, float g, float b, float intensity) | | void [**SetLensDirt** ](/scripting/client-scripting-api-reference/region/spostfx.md#setlensdirt)(bool on, float threshold, SResource texture, float intensity) | | void [**SetChromaticAberrationPost** ](/scripting/client-scripting-api-reference/region/spostfx.md#setchromaticaberrationpost)(bool on, float strength, float cornerBlur) | | void [**SetFocus** ](/scripting/client-scripting-api-reference/region/spostfx.md#setfocus)(SGameObject target) | | void [**SupressFocus** ](/scripting/client-scripting-api-reference/region/spostfx.md#supressfocus)() | | void [**RestoreFocus** ](/scripting/client-scripting-api-reference/region/spostfx.md#restorefocus)() | | void [**SetLookUpTable** ](/scripting/client-scripting-api-reference/region/spostfx.md#setlookuptable)(SResource lut) | #### Functions[​](#functions "Direct link to Functions") ##### CreateCommandBuffer[​](#createcommandbuffer "Direct link to CreateCommandBuffer") [SCommandBuffer](/scripting/client-scripting-api-reference/types/scommandbuffer.md) **CreateCommandBuffer** () *Return a new CommandBuffer.* * Lua ```lua commandBuffer = Space.PostFX.CreateCommandBuffer() ``` * Lua ```lua local commandbuffer=Space.PostFX.CreateCommandBuffer() local mat=Space.Resources[1] local cube=Space.Host.GetReference("Cube") commandbuffer.DrawRenderer(cube.Renderer,mat.AsMaterial) Space.PostFX.AddCommandBufferToCamera(commandbuffer) ``` ##### AddCommandBufferToCamera[​](#addcommandbuffertocamera "Direct link to AddCommandBufferToCamera") void **AddCommandBufferToCamera** ([SCommandBuffer](/scripting/client-scripting-api-reference/types/scommandbuffer.md) commandbuffer, int cameraEvent=19) *Add the CommandBuffer to the Main Camera.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.AddCommandBufferToCamera(ACommandBuffer) ---or Space.PostFX.AddCommandBufferToCamera(ACommandBuffer, 18) ``` * Lua ```lua local commandbuffer=Space.PostFX.CreateCommandBuffer() local mat=Space.Resources[1] local cube=Space.Host.GetReference("Cube") commandbuffer.DrawRenderer(cube.Renderer,mat.AsMaterial) Space.PostFX.AddCommandBufferToCamera(commandbuffer) function RemoveCommandBuffer() --Bind this function to a button and then click it in playing. Space.PostFX.RemoveCommandBufferFromCamera(commandbuffer) end ``` ##### RemoveCommandBufferFromCamera[​](#removecommandbufferfromcamera "Direct link to RemoveCommandBufferFromCamera") void **RemoveCommandBufferFromCamera** ([SCommandBuffer](/scripting/client-scripting-api-reference/types/scommandbuffer.md) commandbuffer, int cameraEvent=19) *Remove the CommandBuffer from the Main Camera.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.RemoveCommandBufferToCamera(ACommandBuffer) ---or Space.PostFX.RemoveCommandBufferToCamera(ACommandBuffer, 18) ``` * Lua ```lua local commandbuffer=Space.PostFX.CreateCommandBuffer() local mat=Space.Resources[1] local cube=Space.Host.GetReference("Cube") commandbuffer.DrawRenderer(cube.Renderer,mat.AsMaterial) Space.PostFX.AddCommandBufferToCamera(commandbuffer) function RemoveCommandBuffer() --Bind this function to a button and then click it in playing. Space.PostFX.RemoveCommandBufferFromCamera(commandbuffer) end ``` ##### SetPostProfile[​](#setpostprofile "Direct link to SetPostProfile") void **SetPostProfile** ([SResource](/scripting/client-scripting-api-reference/types/sresource.md) customProfile) *Set a custom Space Post-Processing Profile.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetPostProfile(Space.Resources[1]) ``` ##### ClearPostProfile[​](#clearpostprofile "Direct link to ClearPostProfile") void **ClearPostProfile** () *Clear current Post-Processing profile and restore default one.* * Lua ```lua Space.PostFX.ClearPostProfile() ``` ##### SetCrepsecularRays[​](#setcrepsecularrays "Direct link to SetCrepsecularRays") void **SetCrepsecularRays** (bool on, float thresR, float thresG, float thresB, float colorR, float colorG, float colorB, float falloff, float blurSize, int blurIterations, float intensity) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetCrepsecularRays(true, 255.0, 0.0, 0.0, 0.0,0.0, 255.0, 1.0, 1.0, 2, 4.0) ``` ##### SetAmbientOcclusion[​](#setambientocclusion "Direct link to SetAmbientOcclusion") void **SetAmbientOcclusion** (bool on, float intensity, bool aoOnly) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetAmbientOcclusion(true, 4.0, true) ``` ##### SetMotionBlur[​](#setmotionblur "Direct link to SetMotionBlur") void **SetMotionBlur** (bool on, float shutterAngle) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetMotionBlur(true, 20.0) ``` ##### SetBloom[​](#setbloom "Direct link to SetBloom") void **SetBloom** (bool on, float threshold, float intensity) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetBloom(true, 2.0, 4.0) ``` ##### SetAnamorphicFlares[​](#setanamorphicflares "Direct link to SetAnamorphicFlares") void **SetAnamorphicFlares** (bool on, float r, float g, float b, float intensity, float threshold, float spread, bool vertical) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetBloom(true, 255.0, 0.0, 0.0, 4.0, 2.0, 3.0, true) ``` ##### SetVignette[​](#setvignette "Direct link to SetVignette") void **SetVignette** (bool on, float r, float g, float b, float intensity) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetVignette(true, 255.0, 0.0, 0.0, 4.0) ``` ##### SetLensDirt[​](#setlensdirt "Direct link to SetLensDirt") void **SetLensDirt** (bool on, float threshold, SResource texture, float intensity) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetLensDirt(true, 4.0, Space.Resources[1], 4.0) ``` ##### SetChromaticAberrationPost[​](#setchromaticaberrationpost "Direct link to SetChromaticAberrationPost") void **SetChromaticAberrationPost** (bool on, float strength, float cornerBlur) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetChromaticAberrationPost(true, 4.0, 1.0) ``` ##### SetFocus[​](#setfocus "Direct link to SetFocus") void **SetFocus** ([SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) target) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetFocus(Space.Host.ExecutingObject) ``` ##### SupressFocus[​](#supressfocus "Direct link to SupressFocus") void **SupressFocus** () *Function Description* * Lua ```lua Space.PostFX.SupressFocus() ``` ##### RestoreFocus[​](#restorefocus "Direct link to RestoreFocus") void **RestoreFocus** () *Function Description* * Lua ```lua Space.PostFX.RestoreFocus() ``` ##### SetLookUpTable[​](#setlookuptable "Direct link to SetLookUpTable") void **SetLookUpTable** ([SResource](/scripting/client-scripting-api-reference/types/sresource.md) lut) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.PostFX.SetLookUpTable(Space.Resources[1]) ``` --- ### SRenderSettings #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**SetGlobalShaderTexture** ](/scripting/client-scripting-api-reference/region/srendersettings.md#setglobalshadertexture)(string name, SResource dir) | | void [**SetGlobalShaderFloat** ](/scripting/client-scripting-api-reference/region/srendersettings.md#setglobalshaderfloat)(string name, float dir) | | void [**SetGlobalShaderColor** ](/scripting/client-scripting-api-reference/region/srendersettings.md#setglobalshadercolor)(string name, SColor dir) | | void [**SetGlobalShaderVector** ](/scripting/client-scripting-api-reference/region/srendersettings.md#setglobalshadervector)(string name, SVector dir) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | int [**DefaultReflectionResolution** ](/scripting/client-scripting-api-reference/region/srendersettings.md#defaultreflectionresolution)`get` `set` | | SMaterial [**Skybox** ](/scripting/client-scripting-api-reference/region/srendersettings.md#skybox)`get` `set` | | float [**FlareFadeSpeed** ](/scripting/client-scripting-api-reference/region/srendersettings.md#flarefadespeed)`get` `set` | | float [**FlareStrength** ](/scripting/client-scripting-api-reference/region/srendersettings.md#flarestrength)`get` `set` | | float [**HaloStrength** ](/scripting/client-scripting-api-reference/region/srendersettings.md#halostrength)`get` `set` | | int [**ReflectionBounces** ](/scripting/client-scripting-api-reference/region/srendersettings.md#reflectionbounces)`get` `set` | | float [**ReflectionIntensity** ](/scripting/client-scripting-api-reference/region/srendersettings.md#reflectionintensity)`get` `set` | | SColor [**SubtractiveShadowColor** ](/scripting/client-scripting-api-reference/region/srendersettings.md#subtractiveshadowcolor)`get` `set` | | float [**AmbientIntensity** ](/scripting/client-scripting-api-reference/region/srendersettings.md#ambientintensity)`get` `set` | | SColor [**AmbientLight** ](/scripting/client-scripting-api-reference/region/srendersettings.md#ambientlight)`get` `set` | | SColor [**AmbientGroundColor** ](/scripting/client-scripting-api-reference/region/srendersettings.md#ambientgroundcolor)`get` `set` | | SColor [**AmbientEquatorColor** ](/scripting/client-scripting-api-reference/region/srendersettings.md#ambientequatorcolor)`get` `set` | | SColor [**AmbientSkyColor** ](/scripting/client-scripting-api-reference/region/srendersettings.md#ambientskycolor)`get` `set` | | SAmbientMode [**AmbientMode** ](/scripting/client-scripting-api-reference/region/srendersettings.md#ambientmode)`get` `set` | | float [**FogEndDistance** ](/scripting/client-scripting-api-reference/region/srendersettings.md#fogenddistance)`get` `set` | | float [**FogStartDistance** ](/scripting/client-scripting-api-reference/region/srendersettings.md#fogstartdistance)`get` `set` | | float [**FogDensity** ](/scripting/client-scripting-api-reference/region/srendersettings.md#fogdensity)`get` `set` | | SColor [**FogColor** ](/scripting/client-scripting-api-reference/region/srendersettings.md#fogcolor)`get` `set` | | SFogMode [**FogMode** ](/scripting/client-scripting-api-reference/region/srendersettings.md#fogmode)`get` `set` | | bool [**Fog** ](/scripting/client-scripting-api-reference/region/srendersettings.md#fog)`get` `set` | | float [**AmbientSkyboxAmount** ](/scripting/client-scripting-api-reference/region/srendersettings.md#ambientskyboxamount)`get` `set` | | SDefaultReflectionMode [**DefaultReflectionMode** ](/scripting/client-scripting-api-reference/region/srendersettings.md#defaultreflectionmode)`get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### SetGlobalShaderTexture[​](#setglobalshadertexture "Direct link to SetGlobalShaderTexture") void **SetGlobalShaderTexture** (string name, [SResource](/scripting/client-scripting-api-reference/types/sresource.md) dir) *Set a global texture property.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.RenderSettings.SetGlobalShaderTexture("_TestTex",Space.Resources[1]) ``` ##### SetGlobalShaderFloat[​](#setglobalshaderfloat "Direct link to SetGlobalShaderFloat") void **SetGlobalShaderFloat** (string name, float dir) *Set a global float property for all shaders.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.RenderSettings.SetGlobalShaderFloat("_Mult",1) ``` ##### SetGlobalShaderColor[​](#setglobalshadercolor "Direct link to SetGlobalShaderColor") void **SetGlobalShaderColor** (string name, [SColor](/scripting/client-scripting-api-reference/types/scolor.md) dir) *Set a global color property for all shaders.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.RenderSettings.SetGlobalShaderFloat("_TestColor",Color.Red) ``` ##### SetGlobalShaderVector[​](#setglobalshadervector "Direct link to SetGlobalShaderVector") void **SetGlobalShaderVector** (string name, [SVector](/scripting/client-scripting-api-reference/types/svector.md) dir) *Set a global color property for all shaders.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.RenderSettings.SetGlobalShaderFloat("_TestVector",Vector.One) ``` #### Properties[​](#properties "Direct link to Properties") ##### DefaultReflectionResolution[​](#defaultreflectionresolution "Direct link to DefaultReflectionResolution") int **DefaultReflectionResolution** `get` `set` *Cubemap resolution for default reflection.* * Lua ```lua Space.RenderSettings.DefaultReflectionResolution=256 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Cube Map Resolution thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.DefaultReflectionResolution = slider.Value * 4096 -- from 0 to 40906 end slider.OnValueChanged(OVC) ``` ##### Skybox[​](#skybox "Direct link to Skybox") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **Skybox** `get` `set` *The global skybox to use.* * Lua ```lua Space.RenderSettings.Skybox=Space.Resources[1].AsMaterial ``` * Lua ```lua --clicking this object will toggle between two Skyboxes --[Add 2 materials to the first two Resource slots in Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject OnClick = function() if Space.RenderSettings.Skybox==Space.Resources[1].AsMaterial then Space.RenderSettings.Skybox=Space.Resources[2].AsMaterial else Space.RenderSettings.Skybox=Space.Resources[1].AsMaterial end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### FlareFadeSpeed[​](#flarefadespeed "Direct link to FlareFadeSpeed") float **FlareFadeSpeed** `get` `set` *The fade speed of all flares in the Scene.* * Lua ```lua Space.RenderSettings.FlareFadeSpeed=5 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Flare Fade Speed thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.FlareFadeSpeed = slider.Value * 5 -- from 0 to 5 end slider.OnValueChanged(OVC) ``` ##### FlareStrength[​](#flarestrength "Direct link to FlareStrength") float **FlareStrength** `get` `set` *The intensity of all flares in the Scene.* * Lua ```lua Space.RenderSettings.FlareStrength=1 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Flare Strength thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.FlareStrength = slider.Value * 5 -- from 0 to 5 end slider.OnValueChanged(OVC) ``` ##### HaloStrength[​](#halostrength "Direct link to HaloStrength") float **HaloStrength** `get` `set` *Size of the light halos.* * Lua ```lua Space.RenderSettings.HaloStrength=1 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Halo Strength thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.HaloStrength = slider.Value * 5 -- from 0 to 5 end slider.OnValueChanged(OVC) ``` ##### ReflectionBounces[​](#reflectionbounces "Direct link to ReflectionBounces") int **ReflectionBounces** `get` `set` *The number of times a reflection includes other reflections.* * Lua ```lua Space.RenderSettings.ReflectionBounces=5 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Reflection Bounces thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.ReflectionBounces = slider.Value * 5 -- from 0 to 5 end slider.OnValueChanged(OVC) ``` ##### ReflectionIntensity[​](#reflectionintensity "Direct link to ReflectionIntensity") float **ReflectionIntensity** `get` `set` *How much the skybox / custom cubemap reflection affects the Scene.* * Lua ```lua Space.RenderSettings.ReflectionIntensity=1 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Reflection Intensity thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.ReflectionIntensity = slider.Value * 5 -- from 0 to 5 end slider.OnValueChanged(OVC) ``` ##### SubtractiveShadowColor[​](#subtractiveshadowcolor "Direct link to SubtractiveShadowColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **SubtractiveShadowColor** `get` `set` *The color used for the sun shadows in the Subtractive lightmode.* * Lua ```lua Space.RenderSettings.SubtractiveShadowColor=Color.Red ``` * Lua ```lua --clicking the object will open a color picker that changes the Subtractive Shadow Color thisGameObject = Space.Host.ExecutingObject originalColor = Space.RenderSettings.SubtractiveShadowColor OnChange = function(SColor) Space.RenderSettings.SubtractiveShadowColor = SColor end OnSelect = function(SColor) Space.RenderSettings.SubtractiveShadowColor = SColor end OnCancel = function() Space.RenderSettings.SubtractiveShadowColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### AmbientIntensity[​](#ambientintensity "Direct link to AmbientIntensity") float **AmbientIntensity** `get` `set` *How much the light from the Ambient Source affects the Scene.* * Lua ```lua Space.RenderSettings.AmbientIntensity = 1 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Ambient Intensity thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.AmbientIntensity = slider.Value * 5 -- from 0 to 5 end slider.OnValueChanged(OVC) ``` ##### AmbientLight[​](#ambientlight "Direct link to AmbientLight") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **AmbientLight** `get` `set` *Flat ambient lighting color.* * Lua ```lua Space.RenderSettings.AmbientLight=Color.Blue ``` * Lua ```lua --clicking the object will open a color picker that changes the Ambient Light Color thisGameObject = Space.Host.ExecutingObject originalColor = Space.RenderSettings.AmbientLight OnChange = function(SColor) Space.RenderSettings.AmbientLight = SColor end OnSelect = function(SColor) Space.RenderSettings.AmbientLight = SColor end OnCancel = function() Space.RenderSettings.AmbientLight = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### AmbientGroundColor[​](#ambientgroundcolor "Direct link to AmbientGroundColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **AmbientGroundColor** `get` `set` *Ambient lighting coming from below.* * Lua ```lua Space.RenderSettings.AmbientGroundColor=Color.Green ``` * Lua ```lua --clicking the object will open a color picker that changes the Ambient Ground Color thisGameObject = Space.Host.ExecutingObject originalColor = Space.RenderSettings.AmbientGroundColor OnChange = function(SColor) Space.RenderSettings.AmbientGroundColor = SColor end OnSelect = function(SColor) Space.RenderSettings.AmbientGroundColor = SColor end OnCancel = function() Space.RenderSettings.AmbientGroundColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### AmbientEquatorColor[​](#ambientequatorcolor "Direct link to AmbientEquatorColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **AmbientEquatorColor** `get` `set` *Ambient lighting coming from the sides.* * Lua ```lua Space.RenderSettings.AmbientEquatorColor=Color.Green ``` * Lua ```lua --clicking the object will open a color picker that changes the Ambient Equator Color thisGameObject = Space.Host.ExecutingObject originalColor = Space.RenderSettings.AmbientEquatorColor OnChange = function(SColor) Space.RenderSettings.AmbientEquatorColor = SColor end OnSelect = function(SColor) Space.RenderSettings.AmbientEquatorColor = SColor end OnCancel = function() Space.RenderSettings.AmbientEquatorColor= originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### AmbientSkyColor[​](#ambientskycolor "Direct link to AmbientSkyColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **AmbientSkyColor** `get` `set` *Ambient lighting coming from above.* * Lua ```lua Space.RenderSettings.AmbientSkyColor=Color.White ``` * Lua ```lua --clicking the object will open a color picker that changes the Ambient Sky Color thisGameObject = Space.Host.ExecutingObject originalColor = Space.RenderSettings.AmbientSkyColor OnChange = function(SColor) Space.RenderSettings.AmbientSkyColor = SColor end OnSelect = function(SColor) Space.RenderSettings.AmbientSkyColor = SColor end OnCancel = function() Space.RenderSettings.AmbientSkyColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### AmbientMode[​](#ambientmode "Direct link to AmbientMode") int **AmbientMode** `get` `set` *Ambient lighting mode.* Skybox = 1. Trilight = 2. Flat = 3. Custom = 4. * Lua ```lua Space.RenderSettings.AmbientMode=1 ``` * Lua ```lua --clicking this object will toggle between 4 Ambient Modes thisGameObject = Space.Host.ExecutingObject OnClick = function() if Space.RenderSettings.AmbientMode==4 then Space.RenderSettings.AmbientMode=1 else Space.RenderSettings.AmbientMode = Space.RenderSettings.AmbientMode + 1 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### FogEndDistance[​](#fogenddistance "Direct link to FogEndDistance") float **FogEndDistance** `get` `set` *The ending distance of linear fog.* * Lua ```lua Space.RenderSettings.FogEndDistance=300 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Fog End Distance thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.FogEndDistance = (slider.Value * 170) + 30-- from 30 to 200 end slider.OnValueChanged(OVC) ``` ##### FogStartDistance[​](#fogstartdistance "Direct link to FogStartDistance") float **FogStartDistance** `get` `set` *The starting distance of linear fog.* * Lua ```lua Space.RenderSettings.FogStartDistance=10 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Fog Start Distance thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.FogStartDistance = (slider.Value * 10) -- from 0 to 10 end slider.OnValueChanged(OVC) ``` ##### FogDensity[​](#fogdensity "Direct link to FogDensity") float **FogDensity** `get` `set` *The density of the exponential fog.* * Lua ```lua Space.RenderSettings.FogDensity=10 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Fog Density thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.FogDensity = (slider.Value * 10) -- from 0 to 10 end slider.OnValueChanged(OVC) ``` ##### FogColor[​](#fogcolor "Direct link to FogColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **FogColor** `get` `set` *The color of the fog.* * Lua ```lua Space.RenderSettings.FogColor = Color.Red ``` * Lua ```lua --clicking the object will open a color picker that changes the Fog color thisGameObject = Space.Host.ExecutingObject originalColor = Space.RenderSettings.FogColor OnChange = function(SColor) Space.RenderSettings.FogColor = SColor end OnSelect = function(SColor) Space.RenderSettings.FogColor = SColor end OnCancel = function() Space.RenderSettings.FogColor = originalColor end OnClick = function() Space.Dialogues.ColorPicker("title","okbutton", OnChange, OnSelect, OnCancel, originalColor) end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### FogMode[​](#fogmode "Direct link to FogMode") int **FogMode** `get` `set` *Ambient lighting mode.* Linear = 1. Exponential = 2. ExponentialSquared = 3. * Lua ```lua Space.RenderSettings.FogMode=2 ``` * Lua ```lua --clicking this object will toggle between 3 Fog Modes thisGameObject = Space.Host.ExecutingObject OnClick = function() if Space.RenderSettings.FogMode==3 then Space.RenderSettings.FogMode=1 else Space.RenderSettings.FogMode = Space.RenderSettings.FogMode + 1 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### Fog[​](#fog "Direct link to Fog") bool **Fog** `get` `set` *Whether Fog is enabled* * Lua ```lua Space.RenderSettings.Fog=true ``` * Lua ```lua --clicking this object will toggle enable/disable Fog thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.RenderSettings.Fog = not Space.RenderSettings.Fog end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` ##### AmbientSkyboxAmount[​](#ambientskyboxamount "Direct link to AmbientSkyboxAmount") float **AmbientSkyboxAmount** `get` `set` *How much the light from the Ambient Source affects the Scene.* * Lua ```lua Space.RenderSettings.AmbientSkyboxAmount=10 ``` * Lua ```lua --the below script will make a slider change the Render Setting's Ambient Skybox Amount thisGameObject = Space.Host.ExecutingObject slider = Space.Host.GetReference("slider").UISlider --add reference to Scripting Runtime OVC = function() Space.RenderSettings.AmbientSkyboxAmount = (slider.Value * 10) -- from 0 to 10 end slider.OnValueChanged(OVC) ``` ##### DefaultReflectionMode[​](#defaultreflectionmode "Direct link to DefaultReflectionMode") int **DefaultReflectionMode** `get` `set` *Ambient lighting mode.* Skybox = 0. Custom = 1. * Lua ```lua Space.RenderSettings.DefaultReflectionMode = 1 ``` * Lua ```lua --clicking this object will toggle between two Default Reflection Modes thisGameObject = Space.Host.ExecutingObject OnClick = function() if Space.RenderSettings.DefaultReflectionMode==1 then Space.RenderSettings.DefaultReflectionMode=0 else Space.RenderSettings.DefaultReflectionMode=1 end end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClick) ``` --- ### SScene #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | SGameObject [**Find** ](/scripting/client-scripting-api-reference/region/sscene.md#find)(string name) | | SGameObject [**FindID** ](/scripting/client-scripting-api-reference/region/sscene.md#findid)(string id) | | void [**MarkObjectTemporary** ](/scripting/client-scripting-api-reference/region/sscene.md#markobjecttemporary)(SGameObject obj) | | SAvatar [**GetAvatar** ](sscene#getavatar)(long id)
SAvatar [**GetAvatar** ](sscene#getavatar)(string name) | | SGameObject [**CreateGameObject** ](sscene#creategameobject)(string name)
SGameObject [**CreateGameObject** ](sscene#creategameobject)(SResource resource) | | void [**SwitchToInstance** ](/scripting/client-scripting-api-reference/region/sscene.md#switchtoinstance)(uint id) | | void [**OnPlayerJoin** ](/scripting/client-scripting-api-reference/region/sscene.md#onplayerjoin)(Closure e) | | void [**OnPlayerLeave** ](/scripting/client-scripting-api-reference/region/sscene.md#onplayerleave)(Closure e) | | void [**OnEditModeStart** ](/scripting/client-scripting-api-reference/region/sscene.md#oneditmodestart)(Closure e) | | void [**OnEditModeEnd** ](/scripting/client-scripting-api-reference/region/sscene.md#oneditmodeend)(Closure e) | | void [**OnEditModeAdd** ](/scripting/client-scripting-api-reference/region/sscene.md#oneditmodeadd)(Closure e) | | void [**OnEditModeRemove** ](/scripting/client-scripting-api-reference/region/sscene.md#oneditmoderemove)(Closure e) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------- | | SAvatar [**PlayerAvatar** ](/scripting/client-scripting-api-reference/region/sscene.md#playeravatar)`get` | | SAvatar\[] [**Avatars** ](/scripting/client-scripting-api-reference/region/sscene.md#avatars)`get` | | List< SAvatar > [**AllAvatars** ](/scripting/client-scripting-api-reference/region/sscene.md#allavatars)`get` | | int [**Population** ](/scripting/client-scripting-api-reference/region/sscene.md#population)`get` | | SGameObject\[] [**Objects** ](/scripting/client-scripting-api-reference/region/sscene.md#objects)`get` | | string [**Name** ](/scripting/client-scripting-api-reference/region/sscene.md#name)`get` | | string [**Url** ](/scripting/client-scripting-api-reference/region/sscene.md#url)`get` | | long [**RegionID** ](/scripting/client-scripting-api-reference/region/sscene.md#regionid)`get` | | long [**InstanceID** ](/scripting/client-scripting-api-reference/region/sscene.md#instanceid)`get` | | long [**Owner** ](/scripting/client-scripting-api-reference/region/sscene.md#owner)`get` | | bool [**PlayerIsOwner** ](/scripting/client-scripting-api-reference/region/sscene.md#playerisowner)`get` | | bool [**PlayerIsAdmin** ](/scripting/client-scripting-api-reference/region/sscene.md#playerisadmin)`get` | | bool [**PlayerIsModerator** ](/scripting/client-scripting-api-reference/region/sscene.md#playerismoderator)`get` | | bool [**PlayerIsDeveloper** ](/scripting/client-scripting-api-reference/region/sscene.md#playerisdeveloper)`get` | | bool [**PlayerIsTrusted** ](/scripting/client-scripting-api-reference/region/sscene.md#playeristrusted)`get` | | bool [**IsInEditMode** ](/scripting/client-scripting-api-reference/region/sscene.md#isineditmode)`get` | | SGameObject\[] [**Floors** ](/scripting/client-scripting-api-reference/region/sscene.md#floors)`get` | | SLandmark\[] [**Landmarks** ](/scripting/client-scripting-api-reference/region/sscene.md#landmarks)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Find[​](#find "Direct link to Find") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Find** (string name) *Finds a single Game Object matching 'Name' and returns it. Can use '/' characters to designate a path (e.g. 'Parent/Child' returns Child with 'Parent')* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.Find('Door2') ``` * Lua ```lua hand = Space.Scene.Find("Hand"); --This returns the GameObject named Hand. hand = Space.Scene.Find("/Hand"); --This returns the GameObject named Hand. --Hand must not have a parent in the Hierarchy view. hand = Space.Scene.Find("/Monster/Arm/Hand"); --This returns the GameObject named Hand, --which is a child of Arm > Monster. --Monster must not have a parent in the Hierarchy view. hand = Space.Scene.Find("Monster/Arm/Hand"); --This returns the GameObject named Hand, --which is a child of Arm > Monster. ``` ##### FindID[​](#findid "Direct link to FindID") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **FindID** (string id) *Finds a single Game Object using ID and returns it* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua --add Scene Object Database to a Gameobject, set "123" to IDs and name the GameObject "Cube". local obj=Space.Scene.FindID("123") Space.Log(obj.Name); --print "Cube" if the object exists. ``` ##### MarkObjectTemporary[​](#markobjecttemporary "Direct link to MarkObjectTemporary") void **MarkObjectTemporary** ([SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) obj) *Marks the Game Object as temporary. Temporary objects will be cleaned up automatically if the script is destroyed or reset. Can be used to handle cleanup from procedural objects created by a script.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.MarkObjectTemporary(AnObjectReference) ``` ##### GetAvatar[​](#getavatar "Direct link to GetAvatar") [SAvatar](/scripting/client-scripting-api-reference/types/savatar.md) **GetAvatar** (long id)
[SAvatar](/scripting/client-scripting-api-reference/types/savatar.md) **GetAvatar** (string name) *Get reference to an avatar* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua theAvatar =Space.Scene.GetAvatar(43) --or theAvatar =Space.Scene.GetAvatar("TestUser") ``` ##### CreateGameObject[​](#creategameobject "Direct link to CreateGameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **CreateGameObject** (string name)
[SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **CreateGameObject** ([SResource](/scripting/client-scripting-api-reference/types/sresource.md) resource) *Creates a game object from the specified resource* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.CreateGameObject('NewBall') --or Space.Scene.CreateGameObject(Space.Resources[1]) ``` * Lua ```lua --clicking this object will create a GameObject from a resource and place it above our avatar thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar resource = Space.GetResource("Tomato") --add it as resource in your Scripting Runtime component OnClick = function() createdObject = Space.Scene.CreateGameObject(resource) createdObject.WorldPosition = thisPlayer.GameObject.WorldPosition + thisPlayer.GameObject.Up end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### SwitchToInstance[​](#switchtoinstance "Direct link to SwitchToInstance") void **SwitchToInstance** (uint id) *Switch to a shard region.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.SwitchToInstance(2) ``` ##### OnPlayerJoin[​](#onplayerjoin "Direct link to OnPlayerJoin") void **OnPlayerJoin** (Closure e) *Event which fires whenever a player joins the region* | Parameter | Type | Description | | --------- | ------------------ | ----------- | | e | Closure (Callback) | e(SAvatar) | * Lua ```lua --Place this script in a UIText object and it will --update itself with the name of the last player joined function updateText(Av) --we include "Av" here because the event gives us a reference to the Avatar that joined Space.Host.ExecutingObject.UIText.Text= "Last player joined: " .. Av.Username end Space.Scene.OnPlayerJoin(updateText) -- updateText will now be called everytime a player joins ``` ##### OnPlayerLeave[​](#onplayerleave "Direct link to OnPlayerLeave") void **OnPlayerLeave** (Closure e) *Event which fires whenever a player leaves the region* | Parameter | Type | Description | | --------- | ------------------ | ----------- | | e | Closure (Callback) | e(long) | * Lua ```lua function playerLeft(id) -- end Space.Scene.OnPlayerLeave(playerLeft) ``` * Lua ```lua --Place this script in a UIText object and it will --update itself with the name of the last player left function updateText(Av) --we include "Av" here because the event gives us a reference to the Avatar that has left Space.Host.ExecutingObject.UIText.Text= "Last player left: " .. Av.Username end Space.Scene.OnPlayerLeave(updateText) -- updateText will now be called every time a player leaves ``` ##### OnEditModeStart[​](#oneditmodestart "Direct link to OnEditModeStart") void **OnEditModeStart** (Closure e) *An event which is fired when player enters Room Edit mode* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.OnEditModeStart(AFunctionName) ``` * Lua ```lua --makes an object become active upon entering edit mode thisObject = Space.Host.ExecutingObject targetObject = Space.Host.GetReference("target") --add to references in Scripting Runtime component function OnEditModeFunction() targetObject.Active = true end Space.Scene.OnEditModeStart(OnEditModeFunction) ``` ##### OnEditModeEnd[​](#oneditmodeend "Direct link to OnEditModeEnd") void **OnEditModeEnd** (Closure e) *An event which is fired when player exits Room Edit mode* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.OnEditModeEnd(AfunctionName) ``` * Lua ```lua --makes an object become active upon exiting edit mode thisObject = Space.Host.ExecutingObject targetObject = Space.Host.GetReference("target") --add to references in Scripting Runtime component function OnEditModeFunction() targetObject.Active = false end Space.Scene.OnEditModeEnd(OnEditModeFunction) ``` ##### OnEditModeAdd[​](#oneditmodeadd "Direct link to OnEditModeAdd") void **OnEditModeAdd** (Closure e) *An event which is fired when object is added during Edit Mode* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.OnEditModeAdd(AFunctionName) ``` * Lua ```lua --prints the total number of objects in the scene whenever a new object is added in edit mode function OnEditModeFunction() Space.Log(#Space.Scene.Objects) end Space.Scene.OnEditModeAdd(OnEditModeFunction) ``` ##### OnEditModeRemove[​](#oneditmoderemove "Direct link to OnEditModeRemove") void **OnEditModeRemove** (Closure e) *An event which is fired when object is deleted during Edit Mode* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.OnEditModeRemove(AFunctionName) ``` * Lua ```lua --prints the total number of objects in the scene whenever a new object is removed in edit mode function OnEditModeFunction() Space.Log(#Space.Scene.Objects) end Space.Scene.OnEditModeRemove(OnEditModeFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### PlayerAvatar[​](#playeravatar "Direct link to PlayerAvatar") [SAvatar](/scripting/client-scripting-api-reference/types/savatar.md) **PlayerAvatar** `get` *Returns the current player avatar. If this script is calling this upon initialisation, the Player may not exist yet, and you will want to wait a few frames until the avatar is present before continuing.* * Lua ```lua CurrentPlayer = Space.Scene.PlayerAvatar ``` ##### Avatars[​](#avatars "Direct link to Avatars") [SAvatar](/scripting/client-scripting-api-reference/types/savatar.md)\[] **Avatars** `get` *Returns a list of Avatars in the scene* * Lua ```lua avatars = Space.Scene.Avatars ``` * Lua ```lua --this script, once clicked, will get all avatars in the scene --and print their ID, Username and Title (excluding self) --(Example: scoreboards/radars/scanners/game machines) thisGameObject = Space.Host.ExecutingObject OnClick = function() Avatars = Space.Scene.Avatars if #Avatars > 0 then for var=1, #Avatars do local ID = Avatars[var].ID local Username = Avatars[var].Username local Title = Avatars[var].Title if Title == "" then Title = "None" end Space.Log("ID: " .. ID .. ", Username: " .. Username .. ", Title: " .. Title) end else Space.Log("No Avatars") end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to print all avatars' information" thisGameObject.Clickable.OnClick(OnClick) ``` ##### AllAvatars[​](#allavatars "Direct link to AllAvatars") List< [SAvatar](/scripting/client-scripting-api-reference/types/savatar.md) > **AllAvatars** `get` *Returns a list of all avatars in the scene. The player avatar that is calling this will be added to the end of the list.* * Lua ```lua local avatars=Space.Scene.AllAvatars Space.Log(#avatars) --Print the length of AllAvatars. ``` * Lua ```lua --this script, once clicked, will get all avatars in the scene --and print their ID, Username and Title (including self) --(Example: scoreboards/radars/scanners/game machines) thisGameObject = Space.Host.ExecutingObject OnClick = function() allAvatars = Space.Scene.AllAvatars for var=1, #allAvatars do local ID = allAvatars[var].ID local Username = allAvatars[var].Username local Title = allAvatars[var].Title if Title == "" then Title = "None" end Space.Log("ID: " .. ID .. ", Username: " .. Username .. ", Title: " .. Title) end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to print all avatars' information" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Population[​](#population "Direct link to Population") int **Population** `get` *Property Description* * Lua ```lua currentPopulation = Space.Scene.Population ``` ##### Objects[​](#objects "Direct link to Objects") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md)\[] **Objects** `get` *Returns a list of Objects in the scene. IMPORTANT: This function is slow, you should cache the result and avoid calling this every frame.* * Lua ```lua objects = Space.Scene.Objects ``` * Lua ```lua --clicking this object will print a name of every object in the scene --[better use a coroutine incase the foor loop exceeds allowed frame time] thisObject = Space.Host.ExecutingObject OnClickFunction = function() local objects = Space.Scene.Objects for i=1, #objects, 1 do Space.Log(objects[i].Name) end end thisObject.AddClickable() ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *Returns the name of the current region* * Lua ```lua RegionName = Space.Scene.Name ``` * Lua ```lua --this object will be clickable only if it is in a region called "X Region" --((for example: limiting object functionality to a specific region)) thisObject = Space.Host.ExecutingObject OnClick = function() Space.Log("We are in X Region") end if Space.Scene.Name == "X Region" then thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) end ``` ##### Url[​](#url "Direct link to Url") string **Url** `get` *Returns the URL of the current region* * Lua ```lua RegionUrl = Space.Scene.Url ``` * Lua ```lua --the URL of this region will be placed in a UIText upon loading --and also printed if this object is clicked thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("textObject") -- add to scripting runtime references function OnClick() Space.Log(Space.Scene.Url) end textObject.UIText.Text = Space.Scene.Url thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### RegionID[​](#regionid "Direct link to RegionID") long **RegionID** `get` *Returns the region ID of current region.* * Lua ```lua Space.Log(Space.Scene.RegionID) ``` * Lua ```lua --the RegionID of this region will be placed in a UIText upon loading --and also printed if this object is clicked thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("textObject") -- add to scripting runtime references function OnClick() Space.Log(Space.Scene.RegionID) end textObject.UIText.Text = Space.Scene.RegionID thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### InstanceID[​](#instanceid "Direct link to InstanceID") long **InstanceID** `get` *Return the instance ID of current region.* * Lua ```lua instanceID = Space.Scene.InstanceID ``` * Lua ```lua --the RegionID of this region will be placed in a UIText upon loading --and also printed if this object is clicked thisObject = Space.Host.ExecutingObject textObject = Space.Host.GetReference("textObject") -- add to scripting runtime references function OnClick() Space.Log(Space.Scene.InstanceID) end textObject.UIText.Text = Space.Scene.InstanceID thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Owner[​](#owner "Direct link to Owner") long **Owner** `get` *Returns the avatar ID of the regions owner* * Lua ```lua RegionOwner = Space.Scene.Owner ``` * Lua ```lua --this script will make this object only clickable for the region owner thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OnClick = function() Space.Log("Do Something") end if thisPlayer.ID == Space.Scene.Owner then thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) end ``` ##### PlayerIsOwner[​](#playerisowner "Direct link to PlayerIsOwner") bool **PlayerIsOwner** `get` *Returns whether the current player is the owner of the region* * Lua ```lua isOwner = Space.Scene.PlayerIsOwner ``` * Lua ```lua --this script will make the object a clickable, but only if player is region owner --(Example: Access control) thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Log("this click was only possible because you are a region Owner") end if Space.Scene.PlayerIsOwner then thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click me" thisGameObject.Clickable.OnClick(OnClick) end ``` ##### PlayerIsAdmin[​](#playerisadmin "Direct link to PlayerIsAdmin") bool **PlayerIsAdmin** `get` *Does this Player have the **Admin** role?* * Lua ```lua Space.Scene.PlayerIsAdmin ``` * Lua ```lua --this script will make the object a clickable, but only if player is region Admin --(Example: Access control) thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Log("this click was only possible because you are a region Admin") end if Space.Scene.PlayerIsAdmin then thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click me Admin" thisGameObject.Clickable.OnClick(OnClick) end ``` ##### PlayerIsModerator[​](#playerismoderator "Direct link to PlayerIsModerator") bool **PlayerIsModerator** `get` *Does this Player have the **Moderator** role?* * Lua ```lua playerIsModerator = Space.Scene.PlayerIsModerator ``` * Lua ```lua --this script will make the object a clickable, but only if player is Moderator in this region --(Example: Access control) thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Log('this click was only possible because you are Moderator in this region') end if Space.Scene.PlayerIsModerator then thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click me Moderator" thisGameObject.Clickable.OnClick(OnClick) end ``` ##### PlayerIsDeveloper[​](#playerisdeveloper "Direct link to PlayerIsDeveloper") bool **PlayerIsDeveloper** `get` *Does this Player have the **Developer** role?* * Lua ```lua playerIsDeveloper = Space.Scene.PlayerIsDeveloper ``` ##### PlayerIsTrusted[​](#playeristrusted "Direct link to PlayerIsTrusted") bool **PlayerIsTrusted** `get` Does this Player have the **Trusted** role? * Lua ```lua playerIsTrusted = Space.Scene.PlayerIsTrusted ``` * Lua ```lua --this script will make the object a clickable, but only if player is Trusted in this region --(Example: Access control) thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Log("this click was only possible because you are Trusted in this region") end if Space.Scene.PlayerIsTrusted then thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click me Trusted" thisGameObject.Clickable.OnClick(OnClick) end ``` ##### IsInEditMode[​](#isineditmode "Direct link to IsInEditMode") bool **IsInEditMode** `get` *Returns true if current player is in edit mode.* * Lua ```lua Space.Log(Space.Scene.IsInEditMode) ``` * Lua ```lua --makes an object only active when this player is in Edit Mode thisObject = Space.Host.ExecutingObject targetObject = Space.Host.GetReference("target") --add to references in Scripting Runtime component function OnUpdateFunction() targetObject.Active = Space.Scene.IsInEditMode end thisObject.OnUpdate(OnUpdateFunction) ``` ##### Floors[​](#floors "Direct link to Floors") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md)\[] **Floors** `get` *Return an array of all floors in the region.* * Lua ```lua for i=1,#Space.Scene.Floors do Space.Log(Space.Scene.Floors[i].Name) end --print all floor names. ``` * Lua ```lua example 2 ``` ##### Landmarks[​](#landmarks "Direct link to Landmarks") [SLandmark](/scripting/client-scripting-api-reference/types/slandmark.md)\[] **Landmarks** `get` *Return all Landmarks in the region* * Lua ```lua local landmark = Space.Scene.Landmarks for i = 1,#landmark do if landmark[i].Type == LandmarkType.LandingZone then Space.Log("LandingZone") end Space.Log(landmark[i].Name .. " ".. landmark[i].Position.ToString()) end ``` --- ### SScript #### Functions[​](#functions "Direct link to Functions") ##### TypeName[​](#typename "Direct link to TypeName") string **TypeName** (DynValue dv) *Return the type name of the value.* | Parameter | Type | Description | | --------- | -------- | ----------- | | dv | DynValue | | * Lua ```lua typeName = Space.TypeName("123") ``` ##### TrackingAllowed[​](#trackingallowed "Direct link to TrackingAllowed") bool **TrackingAllowed** (string key) *Returns true on white-label grids when the user has opted into tracking for the given key. Always returns false on the main grid.* | Parameter | Type | Description | | --------- | ------ | -------------------------------------------------------------------------- | | key | string | A unique identifier used to store and look up the user's tracking consent. | * Lua ```lua isTrackingAllowed = Space.TrackingAllowed('3423423423423') ``` ##### TrackingRequest[​](#trackingrequest "Direct link to TrackingRequest") void **TrackingRequest** (string key, string privacynotice, Closure callback, bool force=false) *Displays a consent prompt (EULA-style) asking the user to allow tracking for a given key. On white-label grids, stores the user's choice and invokes the callback with a boolean indicating consent. On the main grid, this does nothing.* | Parameter | Type | Description | | ------------- | ------- | ------------------------------------------------------------------------------------ | | key | string | A unique identifier used to store and look up the user's tracking consent. | | privacynotice | string | The privacy notice text to display in the consent dialog. | | callback | Closure | A function invoked with one boolean parameter: `true` if allowed, `false` otherwise. | | force | bool | If `true`, show the prompt even if a stored decision exists. Defaults to `false`. | * Lua ```lua -- Request consent (white-label only). The callback receives a boolean 'allowed'. Space.TrackingRequest('24234234234234', 'A notice message', function(allowed) if allowed then Space.Log("Tracking allowed") else Space.Log("Tracking denied") end end) -- or force re-prompt even if a decision was saved previously: Space.TrackingRequest('24234234234234', 'A notice message', function(allowed) end, true) ``` ##### GetResource[​](#getresource "Direct link to GetResource") [SResource](/scripting/client-scripting-api-reference/types/sresource.md) **GetResource** (string name) *Returns a reference to a SResource using it's Resource name.* | Parameter | Type | Description | | --------- | ------ | ---------------------------------------------------------------------------------- | | name | string | Name of the Resource as set in the Scripting Runtime Component (Resources section) | * Lua ```lua aResource = Space.GetResource("ResourceName") ``` ##### LogEvent[​](#logevent "Direct link to LogEvent") void **LogEvent** (string eventName, float value, [SVector](/scripting/client-scripting-api-reference/types/svector.md) position) *Logs an analytics event to the server on white-label grids.* | Parameter | Type | Description | | --------- | ------- | --------------------------------------------- | | eventName | string | The name of the analytics event. | | value | float | A numeric value associated with the event. | | position | SVector | A world position to associate with the event. | * Lua ```lua Space.LogEvent('event name', 2.0, Vector.New(0,0,0) ) ``` ##### Log[​](#log "Direct link to Log") void **Log** (DynValue text, bool logToFile=false)
void **Log** (string text, bool logToFile=false) *Log a message to console.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Color.Blue) --or Space.Log("Log") --or Space.Log("Log",true) ``` #### Properties[​](#properties "Direct link to Properties") ##### Inventory[​](#inventory "Direct link to Inventory") [SInventory](/scripting/client-scripting-api-reference/player/sinventory.md) **Inventory** `get` *Allows access to the users inventory* * Lua ```lua inventory = Space.Inventory ``` ##### Persistence[​](#persistence "Direct link to Persistence") [SPersistence](/scripting/client-scripting-api-reference/region/spersistence.md) **Persistence** `get` *Stores information between user sessions, and for other users* * Lua \`\`\` persistence = Space.Persistence \`\`\` ##### Scene[​](#scene "Direct link to Scene") [SScene](/scripting/client-scripting-api-reference/region/sscene.md) **Scene** `get` *Allows access to the current scene graph (objects and avatars in the scene, and other information)* * Lua ```lua scene = Space.Scene ``` ##### Grid[​](#grid "Direct link to Grid") [SGrid](/scripting/client-scripting-api-reference/region/sgrid.md) **Grid** `get` *Property Description* * Lua ```lua grid = Space.Grid ``` ##### Host[​](#host "Direct link to Host") [SHost](/scripting/client-scripting-api-reference/region/shost.md) **Host** `get` *Access information about the current scripting runtime host* * Lua ```lua host = Space.Host ``` ##### Physics[​](#physics "Direct link to Physics") [SPhysics](/scripting/client-scripting-api-reference/region/sphysics.md) **Physics** `get` *Call physics-related commands, and variables, such as raycasting* * Lua ```lua physics = Space.Physics ``` ##### Math[​](#math "Direct link to Math") [SMath](/scripting/client-scripting-api-reference/types/smath.md) **Math** `get` *Math related functions (Sin, Cos, Tan, etc)* * Lua ```lua Space.Math.Ceil(4.0) ``` ##### String[​](#string "Direct link to String") [SString](/scripting/client-scripting-api-reference/types/sstring.md) **String** `get` *Miscellaneous additional string functions (e.g. MD5Sum)* * Lua ```lua Space.String.GetBytes("some data") ``` ##### Input[​](#input "Direct link to Input") [SInput](/scripting/client-scripting-api-reference/client/sinput.md) **Input** `get` *Input device related functions (mouse position, keyboard state)* * Lua ```lua Space.Input.Vibrate(1,1,false) ``` ##### Camera[​](#camera "Direct link to Camera") [SCameraManager](/scripting/client-scripting-api-reference/region/scameramanager.md) **Camera** `get` *Take and control the users camera* * Lua ```lua obj = Space.Host.ExecutingObject Space.Camera.LockCamera (obj) ``` ##### WebServices[​](#webservices "Direct link to WebServices") [SWebService](/scripting/client-scripting-api-reference/network/swebservice.md) **WebServices** `get` *Call remote web services to designated hosts (will not work with arbitrary domains, see page for details)* * Lua ```lua Space.WebServices.GetImage("example.com/mrlee.jpg") ``` ##### Network[​](#network "Direct link to Network") [SNetwork](/scripting/client-scripting-api-reference/network/snetwork.md) **Network** `get` *Send data to other clients through the region server* * Lua ```lua Space.Network.SubscribeToNetwork("helloworld", gotAMessageFunction) ``` ##### PostFX[​](#postfx "Direct link to PostFX") [SPostFX](/scripting/client-scripting-api-reference/region/spostfx.md) **PostFX** `get` *Property Description* * Lua ```lua Space.PostFX ``` ##### AudioAnalyser[​](#audioanalyser "Direct link to AudioAnalyser") SAudioAnalyser **AudioAnalyser** `get` *Property Description* * Lua ```lua Space.AudioAnalyser ``` ##### Tween[​](#tween "Direct link to Tween") STween **Tween** `get` *Property Description* * Lua ```lua Space.Tween ``` ##### UI[​](#ui "Direct link to UI") [SUI](/scripting/client-scripting-api-reference/client/sui.md) **UI** `get` *Property Description* * Lua ```lua ui = Space.UI ``` ##### Dialogues[​](#dialogues "Direct link to Dialogues") [SDialogues](/scripting/client-scripting-api-reference/client/sdialogues.md) **Dialogues** `get` *Property Description* * Lua ```lua dialogues = Space.Dialogues ``` ##### Shared[​](#shared "Direct link to Shared") [SShared](/scripting/client-scripting-api-reference/client/sshared.md) **Shared** `get` *Property Description* * Lua ```lua shared = Space.Shared ``` ##### Quests[​](#quests "Direct link to Quests") [SQuests](/scripting/client-scripting-api-reference/player/squests.md) **Quests** `get` *Property Description* * Lua ```lua quests = Space.Quests ``` ##### Economy[​](#economy "Direct link to Economy") [SEconomy](/scripting/client-scripting-api-reference/player/seconomy.md) **Economy** `get` *Property Description* * Lua ```lua economy = Space.Economy ``` ##### Groups[​](#groups "Direct link to Groups") [SGroup](/scripting/client-scripting-api-reference/player/sgroup.md) **Groups** `get` *Property Description* * Lua ```lua groups = Space.Groups ``` ##### Activity[​](#activity "Direct link to Activity") SActivity **Activity** `get` *Property Description* * Lua \`\`\` activity = Space.Activity \`\`\` ##### RenderSettings[​](#rendersettings "Direct link to RenderSettings") [SRenderSettings](/scripting/client-scripting-api-reference/region/srendersettings.md) **RenderSettings** `get` *Property Description* * Lua ```lua renderSettings = Space.RenderSettings ``` ##### Profile[​](#profile "Direct link to Profile") [SProfile](/scripting/client-scripting-api-reference/player/sprofile.md) **Profile** `get` *Property Description* * Lua ```lua profile = Space.Profile ``` ##### Photos[​](#photos "Direct link to Photos") [SPhotos](/scripting/client-scripting-api-reference/network/sphotos.md) **Photos** `get` *Property Description* * Lua ```lua photos = Space.Photos ``` ##### Videos[​](#videos "Direct link to Videos") [SVideos](/scripting/client-scripting-api-reference/network/svideos.md) **Videos** `get` *Property Description* * Lua ```lua videos = Space.Videos ``` ##### MusicDirectory[​](#musicdirectory "Direct link to MusicDirectory") SMusicDirectory **MusicDirectory** `get` *Property Description* * Lua ```lua musicDirectory = Space.MusicDirectory ``` ##### Journey[​](#journey "Direct link to Journey") SJourney **Journey** `get` *Property Description* * Lua ```lua journey = Space.Journey ``` ##### GameTester[​](#gametester "Direct link to GameTester") SGameTester **GameTester** `get` *Property Description* * Lua ```lua gameTester = Space.GameTester ``` ##### RuntimeType[​](#runtimetype "Direct link to RuntimeType") string **RuntimeType** `get` *Return current RuntimeType name.* * Lua ```lua runtimeType = Space.RuntimeType ``` ##### Platform[​](#platform "Direct link to Platform") string **Platform** `get` *Return current platform name.* * Lua ```lua platform = Space.Platform ``` ##### SessionID[​](#sessionid "Direct link to SessionID") string **SessionID** `get` *Return current SessionID.* * Lua ```lua sessionID = Space.SessionID ``` ##### InEditor[​](#ineditor "Direct link to InEditor") bool **InEditor** `get` *Return true if in unity editor.* * Lua ```lua isInEditor = Space.InEditor ``` * Lua ```lua --the below script checks if we are in Unity editor or in SS --this way we can provide an alternative --(Example: if we're using a function that doesn't work in Unity editor) thisGameObject = Space.Host.ExecutingObject if Space.InEditor then avatarUsername = "Player Name" else avatarUsername = Space.Scene.GetAvatar(thisGameObject.Owner).Username --example: this doesn't work in Editor end Space.Log(avatarUsername) ``` ##### Version[​](#version "Direct link to Version") int **Version** `get` *Returns the numeric build version of the viewer (for programmatic comparisons). In the Unity Editor this returns `int.MaxValue`; if unknown at runtime it returns `-1`.* * Lua ```lua viewerVersion = Space.Version ``` ##### FullVersionString[​](#fullversionstring "Direct link to FullVersionString") string **FullVersionString** `get` *Returns the full build version display string tied to release notes (e.g., "2025.6f210"). Best for user-facing display and logging.* * Lua ```lua viewerVersionString = Space.FullVersionString ``` ##### Resources[​](#resources "Direct link to Resources") [SResource](/scripting/client-scripting-api-reference/types/sresource.md)\[] **Resources** `get` *Property Description* * Lua ```lua tableOfResources = Space.Resources ``` * Lua ```lua --the below script will search through the Scripting Runtime's resources --and return the first instance of an Animation Clip --[You need to add a few resources to the scripting runtime and make one of them an animation] resources = Space.Resources for i = 1, #resources do if resources[i].Type == "AnimationClip" then Space.Log("Resource #".. i .. " is an Animation Clip. The resource name is: " .. resources[i].Name) break end end ``` ##### Time[​](#time "Direct link to Time") float **Time** `get` *Returns time at the beginning of this frame.* * Lua ```lua floatTime = Space.Time ``` * Lua ```lua --this script will update a UIText object with the current local time without using a coroutine --(example: clock ) --[UIText object needs to be added to the references section in the scripting runtime with name "Text"] rateUpdate = 1.0 nextUpdate = 0.0 text = Space.Host.GetReference("Text").UIText OnUpdate = function() if Space.Time > nextUpdate then nextUpdate = Space.Time + rateUpdate text.Text = Space.LocalTime end } Space.Host.ExecutingObject.OnUpdate(OnUpdate) ``` ##### ServerTime[​](#servertime "Direct link to ServerTime") string **ServerTime** `get` *Returns current server time.* * Lua ```lua serverTime = Space.ServerTime ``` * Lua ```lua --this script will update a UIText object with the current server time (UTC) --(example: clock) --[UIText object needs to be added to the references section in the scripting runtime with name "Text"] text = Space.Host.GetReference("Text").UIText co = function() while true do text.Text = Space.ServerTime coroutine.yield(1) end end Space.Host.StartCoroutine(co) ``` ##### LocalTime[​](#localtime "Direct link to LocalTime") string **LocalTime** `get` *Returns current local time.* * Lua ```lua localTime = Space.LocalTime ``` * Lua ```lua --this script will update a UIText object with the current local time --(example: clock) --[UIText object needs to be added to the references section in the scripting runtime with name "Text"] text = Space.Host.GetReference("Text").UIText co = function() while true do text.Text = Space.LocalTime coroutine.yield(1) end end Space.Host.StartCoroutine(co) ``` ##### LoginTime[​](#logintime "Direct link to LoginTime") float **LoginTime** `get` *Returns how long player has been logged in (in seconds).* * Lua ```lua loginTime = Space.LoginTime ``` * Lua ```lua --this script will update a UIText object with how long the user has been logged in (in seconds) --(example: clock) --[UIText object needs to be added to the references section in the scripting runtime with name "Text"] text = Space.Host.GetReference("Text").UIText co = function() while true do text.Text = Space.LoginTime coroutine.yield(1) end end Space.Host.StartCoroutine(co) ``` ##### ServerTimeUnix[​](#servertimeunix "Direct link to ServerTimeUnix") int **ServerTimeUnix** `get` *Returns the server time unix timestamp.* * Lua ```lua serverTimeUnix = Space.ServerTimeUnix ``` * Lua ```lua --this script will update a UIText object with the current server time unix timestamp --(example: clock) --[UIText object needs to be added to the references section in the scripting runtime with name "Text"] text = Space.Host.GetReference("Text").UIText co = function() while true do text.Text = Space.ServerTimeUnix coroutine.yield(1) end end Space.Host.StartCoroutine(co) ``` ##### LocalTimeUnix[​](#localtimeunix "Direct link to LocalTimeUnix") int **LocalTimeUnix** `get` *Returns the local time unix timestamp.* * Lua ```lua localTimeUnix = Space.LocalTimeUnix ``` * Lua ```lua --this script will update a UIText object with the current local time unix timestamp --(example: clock) --[UIText object needs to be added to the references section in the scripting runtime with name "Text"] text = Space.Host.GetReference("Text").UIText co = function() while true do text.Text = Space.LocalTimeUnix coroutine.yield(1) end end Space.Host.StartCoroutine(co) ``` ##### DeltaTime[​](#deltatime "Direct link to DeltaTime") float **DeltaTime** `get` *The completion time in seconds since the last frame.* * Lua ```lua deltaTime = Space.DeltaTime ``` * Lua ```lua --the below script rotates an object around Y axis but uses DeltaTime --to make sure it's not dependant on client's Framerate (FPS) --this way the object rotates per second not per frame --(Example: Important movement in OnUpdate) thisGameObject = Space.Host.ExecutingObject OnUpdate = function() currentY = thisGameObject.WorldRotation.EulerAngles.Y newRotation = Quaternion.Euler(0, currentY + 1 * Space.DeltaTime, 0) --We multiplied 1 by Space.DeltaTime thisGameObject.WorldRotation = newRotation end thisGameObject.OnUpdate(OnUpdate) ``` ##### PreviewServer[​](#previewserver "Direct link to PreviewServer") bool **PreviewServer** `get` *Return true if in preview server.* * Lua ```lua isInPreview = Space.PreviewServer ``` * Lua ```lua --this script will update a UIText object with "preview" or "live" depending --whether we are on preview server or live server --[UIText object needs to be added to the references section in the scripting runtime with name "Text"] text = Space.Host.GetReference("Text").UIText OnUpdate = function() if Space.PreviewServer then text.Text = "Preview" else text.Text = "Live" end end Space.Host.ExecutingObject.OnUpdate(OnUpdate) ``` ##### ComponentName[​](#componentname "Direct link to ComponentName") string **ComponentName** `get` *The name of this component.* * Lua ```lua componentName = Space.ComponentName ``` --- ### Types The data types passed to and returned from the client API β€” vectors, colours, transforms, and math helpers, plus the structures that describe avatars, items, and resources. --- ### SAnimationState #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------------------- | | bool [**Enabled** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#enabled)`get` `set` | | float [**Length** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#length)`get` | | string [**Name** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#name)`get` | | float [**NormalizedSpeed** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#normalizedspeed)`get` `set` | | float [**NormalizedTime** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#normalizedtime)`get` `set` | | float [**Speed** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#speed)`get` `set` | | float [**Time** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#time)`get` `set` | | float [**Weight** ](/scripting/client-scripting-api-reference/types/sanimationstate.md#weight)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Enabled[​](#enabled "Direct link to Enabled") bool **Enabled** `get` `set` *Is this Animation State enabled?* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() SAnimationState.Enabled = false ``` ##### Length[​](#length "Direct link to Length") float **Length** `get` *Returns the length of current animation.* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() length = SAnimationState.Length ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *Returns the name of current animation.* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() name = SAnimationState.Name ``` ##### NormalizedSpeed[​](#normalizedspeed "Direct link to NormalizedSpeed") float **NormalizedSpeed** `get` `set` *Returns the normalized speed of current animation.* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() normalizedSpeed = SAnimationState.NormalizedSpeed ``` ##### NormalizedTime[​](#normalizedtime "Direct link to NormalizedTime") float **NormalizedTime** `get` `set` *Returns the normalized time of current animation.* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() normalizedTime = SAnimationState.NormalizedTime ``` ##### Speed[​](#speed "Direct link to Speed") float **Speed** `get` `set` *The playback speed of the animation. 1.0 is normal playback speed.* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() SAnimationState.Speed = 0.5 ``` ##### Time[​](#time "Direct link to Time") float **Time** `get` `set` *Returns the Time of current animation.* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() SAnimationState.Time = 0.5 ``` ##### Weight[​](#weight "Direct link to Weight") float **Weight** `get` `set` *Returns the Weight of current animation.* * Lua ```lua SAnimationState = Space.Host.ExecutingObject.Animation.GetState() SAnimationState.Weight = 0.5 ``` --- ### SAnimatorStateInfo #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------- | | bool [**IsName** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#isname)(string name) | | bool [**IsTag** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#istag)(string tag) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------ | | int [**fullPathHash** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#fullpathhash)`get` | | int [**nameHash** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#namehash)`get` | | int [**shortNameHash** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#shortnamehash)`get` | | float [**normalizedTime** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#normalizedtime)`get` | | float [**length** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#length)`get` | | float [**speed** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#speed)`get` | | float [**speedMultiplier** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#speedmultiplier)`get` | | int [**tagHash** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#taghash)`get` | | bool [**loop** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#loop)`get` | | float [**Length** ](/scripting/client-scripting-api-reference/types/sanimatorstateinfo.md#length)`get` | #### Functions[​](#functions "Direct link to Functions") ##### IsName[​](#isname "Direct link to IsName") bool **IsName** (string name) *Does name match the name of the active state in the statemachine?* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) AnimationStateInfo.isName("aStateName") ``` ##### IsTag[​](#istag "Direct link to IsTag") bool **IsTag** (string tag) *Does tag match the tag of the active state in the statemachine.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) AnimationStateInfo.isTag("aStateTag") ``` #### Properties[​](#properties "Direct link to Properties") ##### fullPathHash[​](#fullpathhash "Direct link to fullPathHash") int **fullPathHash** `get` *The full path hash for this state. The hash is generated using Animator.StringToHash.* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) fullPathHash = AnimationStateInfo.fullPathHash ``` ##### nameHash[​](#namehash "Direct link to nameHash") int **nameHash** `get` *The hashed name of the State.* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) nameHash= AnimationStateInfo.nameHash ``` ##### shortNameHash[​](#shortnamehash "Direct link to shortNameHash") int **shortNameHash** `get` *The hash is generated using SAnimator.StringToHash. The hash does not include the name of the parent layer.* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) shortNameHash= AnimationStateInfo.shortNameHash ``` ##### normalizedTime[​](#normalizedtime "Direct link to normalizedTime") float **normalizedTime** `get` *Normalized time of the State. The integer part is the number of time a state has been looped. The fractional part is the % (0-1) of progress in the current loop.* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) normalizedTime= AnimationStateInfo.normalizedTime ``` ##### length[​](#length "Direct link to length") float **length** `get` *Current duration of the state. In seconds Can vary when the State contains a Blend Tree.* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) length= AnimationStateInfo.length ``` ##### speed[​](#speed "Direct link to speed") float **speed** `get` *The playback speed of the animation. 1 is the normal playback speed. A negative playback speed will play the animation from the end.* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) speed= AnimationStateInfo.speed ``` ##### speedMultiplier[​](#speedmultiplier "Direct link to speedMultiplier") float **speedMultiplier** `get` \_The speed multiplier for this state. A negative speed multiplier will play the animation backwards. If no speed parameter as been set for this SAnimatorState, the default value will be 1.\_ * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) speedMultiplier= AnimationStateInfo.speedMultiplier ``` ##### tagHash[​](#taghash "Direct link to tagHash") int **tagHash** `get` \_The Tag of the State. The hash is generated using SAnimator.StringToHash.\_ * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) tagHash= AnimationStateInfo.tagHash ``` ##### loop[​](#loop "Direct link to loop") bool **loop** `get` *Is the state looping. All animations in the state must be looping.* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) loop= AnimationStateInfo.loop ``` ##### Length[​](#length-1 "Direct link to Length") float **Length** `get` *Current duration of the state. In seconds Can vary when the State contains a Blend Tree* * Lua ```lua AnimationStateInfo = Space.Host.ExecutingObject.Animator.GetCurrentAnimationStateInfo(0) Length= AnimationStateInfo.Length ``` --- ### SAvatar #### Functions[​](#functions "Direct link to Functions") ##### AttachTo[​](#attachto "Direct link to AttachTo") void **AttachTo** ([SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) target) *Attaches the player to the target game object, keeping the avatar fixed in its current position/rotation relative to the target object (e.g. for use in Vehicles)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.PlayerAvatar.AttachTo(targetObject) ``` * Lua ```lua --the below script makes the player Attach/Detach to/from this object by clicking it --(Example: Seat/Vehicle/Experience etc.. ) thisGameObject = Space.Host.ExecutingObject isAttached = 0 OnClick = function() if isAttached == 0 then Space.Scene.PlayerAvatar.AttachTo(thisGameObject) isAttached = 1 elseif isAttached == 1 then Space.Scene.PlayerAvatar.Detach() isAttached = 0 end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Attach/Detach yourself to/from me" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Detach[​](#detach "Direct link to Detach") void **Detach** () *Detaches the avatar from whatever it may be attached to (only works for the player avatar), including chairs, vehicles and so forth.* * Lua ```lua Space.Scene.PlayerAvatar.Detach() ``` * Lua ```lua --the below script makes the player Attach/Detach to/from this object by clicking it --(Example: Seat/Vehicle/Experience etc.. ) thisGameObject = Space.Host.ExecutingObject isAttached = 0 OnClick = function() if isAttached == 0 then Space.Scene.PlayerAvatar.AttachTo(thisGameObject) isAttached = 1 elseif isAttached == 1 then Space.Scene.PlayerAvatar.Detach() isAttached = 0 end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Attach/Detach yourself to/from me" thisGameObject.Clickable.OnClick(OnClick) ``` ##### OnAvatarAttached[​](#onavatarattached "Direct link to OnAvatarAttached") void **OnAvatarAttached** () *An event which fires whenever this avatar is attached to a game object in the current scene.* * Lua ```lua function OAA() -- end Space.Scene.PlayerAvatar.OnAvatarAttached(OAA) ``` ##### OnAvatarDetached[​](#onavatardetached "Direct link to OnAvatarDetached") void **OnAvatarDetached** () *An event which fires whenever this avatar is detached from a game object in the current scene.* * Lua ```lua function OAD() -- end Space.Scene.PlayerAvatar.OnAvatarDetached(OAD) ``` ##### LoadOutfit[​](#loadoutfit "Direct link to LoadOutfit") void **LoadOutfit** (int outfitID) *Only works on a white-label deployment due to abuse concerns. Restrictions: The outfit ID needs to be one of the grid template outfits, with all the restrictions that apply to those (i.e. must use either SW content, or content uploaded by a grid admin account).* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local avatar=Space.Scene.PlayerAvatar avatar.LoadOutfit(10001) ``` * Lua ```lua --the below script changes the player's outfit into --a pre-defined outfit if they click the object containing the script --(Example: Player clicks on a wardrobe and their outfit changes) --[Only works on white-label deployment] thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Scene.PlayerAvatar.LoadOutfit(2662469) end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Put on your favourite suit" thisGameObject.Clickable.OnClick(OnClick) ``` ##### ResetOutfit[​](#resetoutfit "Direct link to ResetOutfit") void **ResetOutfit** () *Reset current outfit. (white-label only)* * Lua ```lua Space.Scene.PlayerAvatar.ResetOutfit() ``` * Lua ```lua --Clicking this object will reset player avatar's outfit thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OnClick = function() thisPlayer.ResetOutfit() end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Register[​](#register "Direct link to Register") void **Register** (string username, string password, string email, bool subscribeToSinespaceNewsletter=false, Closure onSuccess=null, Closure onError=null) *Allow a guest to register. (white-label only)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local avatar=Space.Scene.PlayerAvatar avatar.Register("MyName","MyPassword","MyEmail",false,function () Space.Log("Success!") end,function () Space.Log("OnError!!") end) ``` ##### ResetOutfitToTemplate[​](#resetoutfittotemplate "Direct link to ResetOutfitToTemplate") void **ResetOutfitToTemplate** (int outfitID) *Reset current outfit to a specific template. (white-label only)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local avatar=Space.Scene.PlayerAvatar avatar.ResetOutfitToTemplate(10001) ``` * Lua ```lua --Clicking this object will reset player avatar's outfit to a specific template. thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OnClick = function() thisPlayer.ResetOutfitToTemplate(10001) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### FindBone[​](#findbone "Direct link to FindBone") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **FindBone** (string bone) *Retrieves the specified humanoid bone as an SGameObject. Requires a Humanoid rig; returns nil if the bone is missing or the avatar is non‑humanoid. The name is matched case‑insensitively against UnityEngine.HumanBodyBones.* | Parameter | Type | Description | | --------- | ------ | -------------------------------------------------------------------------------------------- | | bone | string | Name of a UnityEngine.HumanBodyBones value (case‑insensitive), e.g., "LeftShoulder", "Head". | * Lua ```lua -- Humanoid models only. Pass a UnityEngine.HumanBodyBones name. local bone = Space.Scene.PlayerAvatar.FindBone("LeftShoulder") Space.Log(bone.Name) -- Prints the bone name of the corresponding search parameter; on default avatars, prints "LeftShoulder" --[[ UnityEngine.HumanBodyBones values Body: Hips, Spine, Chest, UpperChest Head: Neck, Jaw, Head, LeftEye, RightEye Left Arm: LeftShoulder, LeftUpperArm, LeftLowerArm, LeftHand Left Leg: LeftUpperLeg, LeftLowerLeg, LeftFoot, LeftToes Right Arm: RightShoulder, RightUpperArm, RightLowerArm, RightHand Right Leg: RightUpperLeg, RightLowerLeg, RightFoot, RightToes Left Hand (Thumb): LeftThumbProximal, LeftThumbIntermediate, LeftThumbDistal Left Hand (Index): LeftIndexProximal, LeftIndexIntermediate, LeftIndexDistal Left Hand (Middle): LeftMiddleProximal, LeftMiddleIntermediate, LeftMiddleDistal Left Hand (Ring): LeftRingProximal, LeftRingIntermediate, LeftRingDistal Left Hand (Little): LeftLittleProximal, LeftLittleIntermediate, LeftLittleDistal Right Hand (Thumb): RightThumbProximal, RightThumbIntermediate, RightThumbDistal Right Hand (Index): RightIndexProximal, RightIndexIntermediate, RightIndexDistal Right Hand (Middle): RightMiddleProximal, RightMiddleIntermediate, RightMiddleDistal Right Hand (Ring): RightRingProximal, RightRingIntermediate, RightRingDistal Right Hand (Little): RightLittleProximal, RightLittleIntermediate, RightLittleDistal ]] ``` * Lua ```lua --this script will set your avatar's "right hand" as parent of this object --this way this object will be a child of your right hand and therefore move with it --(Example: clicking on a gun to equip it) thisGameObject = Space.Host.ExecutingObject OnClick = function() RightHand = Space.Scene.PlayerAvatar.FindBone("RightHand") thisGameObject.SetParent(RightHand) thisGameObject.LocalPosition = Vector.New(0,0,0) -- resetting position to match hand end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip="Click to Equip " thisGameObject.Clickable.OnClick(OnClick) ``` ##### Teleport[​](#teleport "Direct link to Teleport") void **Teleport** (string landmarkName)
void **Teleport** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) position)
void **Teleport** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) position, [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) rotation)
void **Teleport** (int region)
void **Teleport** (int region, [SVector](/scripting/client-scripting-api-reference/types/svector.md) position, [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) rotation) *Teleport the avatar.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.PlayerAvatar.Teleport("MyLandMark") --or Space.Scene.PlayerAvatar.Teleport( Vector.New(0,0,0) ) --or Space.Scene.PlayerAvatar.Teleport( Vector.New(0,0,0), Quaternion.New(0,0,0) ) --or Space.Scene.PlayerAvatar.Teleport( 5432342) --or Space.Scene.PlayerAvatar.Teleport( 5432342, Vector.New(0,0,0), Quaternion.New(0,0,0) ) ``` * Lua ```lua --the below script teleports player to a specific landmark --if they click the object containing it --(Example: A region promotional/advertisement sign) --[You need a landmark in the scene with name "Fashion Section Landmark" thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Scene.PlayerAvatar.Teleport("Fashion Section Landmark") end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click me to go to the fashion section!" thisGameObject.Clickable.OnClick(OnClick) ``` ##### SetIKGoal[​](#setikgoal "Direct link to SetIKGoal") void **SetIKGoal** (string goal, bool positionGoal, float positionStrength, [SVector](/scripting/client-scripting-api-reference/types/svector.md) positionTarget, bool rotationGoal, float rotationStrength, [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) rotationTarget) *Set the IK goal to avatar.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua avatar=Space.Scene.PlayerAvatar pos=avatar.FindBone("Chest").WorldPosition avatar.SetIKGoal("Chest",false,0,pos,true,20,Quaternion.Euler(0,60,0)) ``` ##### ClearIKGoal[​](#clearikgoal "Direct link to ClearIKGoal") void **ClearIKGoal** (string goal) *Clear the IK Goal.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua avatar=Space.Scene.PlayerAvatar pos=avatar.FindBone("Chest").WorldPosition avatar.SetIKGoal("Chest",false,0,pos,true,20,Quaternion.Euler(0,60,0)) Space.Host.InvokeDelayed(function () avatar.ClearIKGoal("Chest") end,5) -- will clear after 5 seconds. ``` ##### PlayCustomAnimation[​](#playcustomanimation "Direct link to PlayCustomAnimation") void **PlayCustomAnimation** ([SResource](/scripting/client-scripting-api-reference/types/sresource.md) animationClip) *Play a custom animation on the avatar.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Scene.PlayerAvatar.PlayCustomAnimation(Space.Resources[1]) ``` * Lua ```lua --the below script makes the player Play/Stop a custom animation when clicking this object --(Example: Dance Machine ) --[Required: Place an animation in the first "Resource" in the scripting runtime] thisGameObject = Space.Host.ExecutingObject isDancing = 0 OnClick = function() if isDancing == 0 then Space.Scene.PlayerAvatar.PlayCustomAnimation(Space.Resources[1]) isDancing = 1 elseif isDancing == 1 then Space.Scene.PlayerAvatar.StopCustomAnimation() isDancing = 0 end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Start/Stop dancing" thisGameObject.Clickable.OnClick(OnClick) ``` ##### StopCustomAnimation[​](#stopcustomanimation "Direct link to StopCustomAnimation") void **StopCustomAnimation** () *Make the avatar stops playing custom animation.* * Lua ```lua avatar=Space.Scene.PlayerAvatar avatar.PlayCustomAnimation(Space.Resources[1]) avatar.StopCustomAnimation() ``` * Lua ```lua --the below script makes the player Play/Stop a custom animation when clicking this object --(Example: Dance Machine ) --[Required: Place an animation in the first "Resource" in the scripting runtime] thisGameObject = Space.Host.ExecutingObject isDancing = 0 OnClick = function() if isDancing == 0 then Space.Scene.PlayerAvatar.PlayCustomAnimation(Space.Resources[1]) isDancing = 1 elseif isDancing == 1 then Space.Scene.PlayerAvatar.StopCustomAnimation() isDancing = 0 end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to Start/Stop dancing" thisGameObject.Clickable.OnClick(OnClick) ``` ##### OnAvatarReload[​](#onavatarreload "Direct link to OnAvatarReload") void **OnAvatarReload** (Closure o) *This event will be called when the avatar gets loaded.* | Parameter | Type | Description | | --------- | ------------------ | -------------------------------------------------------------------------- | | o | Closure (callback) | A function that will be called once the OnAvatarReload event is triggered. | * Lua ```lua local avatar=Space.Scene.PlayerAvatar avatar.OnAvatarReload(function () Space.Log(avatar.OutfitID) end) ``` * Lua ```lua --this script ensures the avatar is still animating after their avatar gets reloaded thisPlayer = Space.Scene.PlayerAvatar theAnimation = Space.GetResource("The Animation") --add animation to resources in Scripting Runtime wasAnimated = true --you'll need to set this according to the situation, its true now for example's sake ResetDance = function() if wasAnimated then thisPlayer.PlayCustomAnimation(theAnimation) end end thisPlayer.OnAvatarReload(ResetDance) ``` ##### SynchroniseState[​](#synchronisestate "Direct link to SynchroniseState") void **SynchroniseState** () *Synchronise avatar's state to network.* * Lua ```lua Space.Scene.PlayerAvatar.SynchroniseState() ``` ##### StartFly[​](#startfly "Direct link to StartFly") void **StartFly** () *Puts the avatar into Fly Mode.* * Lua ```lua Space.Scene.PlayerAvatar.StartFly() ``` * Lua ```lua --the below script teleports the player to a sky location after he clicks --but then immediately puts the character in fly mode so they don't fall back down --(Example: Sky exhibit) thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Scene.PlayerAvatar.Teleport(Vector.New(0,10,0)) Space.Scene.PlayerAvatar.StartFly() end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click me to view our sky exhibit!" thisGameObject.Clickable.OnClick(OnClick) ``` ##### EndFly[​](#endfly "Direct link to EndFly") void **EndFly** () *Exits Avatar out of Fly Mode* * Lua ```lua Space.Scene.PlayerAvatar.EndFly() ``` * Lua ```lua --the below script teleports a player flying in the sky back to the ground --and then ends fly mode by switching to Idle so they remain standing --(Example: Going back down to ground from Sky exhibit) thisGameObject = Space.Host.ExecutingObject OnClick = function() Space.Scene.PlayerAvatar.Teleport(Vector.New(0,0,0)) Space.Scene.PlayerAvatar.EndFly() end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click me to go back to the ground!" thisGameObject.Clickable.OnClick(OnClick) ``` ##### OnAvatarSkeletonReload[​](#onavatarskeletonreload "Direct link to OnAvatarSkeletonReload") void **OnAvatarSkeletonReload** (Closure o) *This event will be called when the avatar skeleton gets loaded.* | Parameter | Type | Description | | --------- | ------------------ | ---------------------------------------------------------------------------------- | | o | Closure (callback) | A function that will be called once the OnAvatarSkeletonReload event is triggered. | * Lua ```lua avatar=Space.Scene.PlayerAvatar Space.Log(avatar.BlockJump) avatar.OnAvatarSkeletonReload(function () Space.Log(avatar.OutfitID) end) ``` * Lua ```lua --this script ensures the avatar is still animating after their avatar's skeleton gets reloaded thisPlayer = Space.Scene.PlayerAvatar theAnimation = Space.GetResource("The Animation") --add animation to resources in Scripting Runtime wasAnimated = true --you'll need to set this according to the situation, its true now for example's sake ResetDance = function() if wasAnimated then thisPlayer.PlayCustomAnimation(theAnimation) end end thisPlayer.OnAvatarSkeletonReload(ResetDance) ``` ##### TeleportToNextEvent[​](#teleporttonextevent "Direct link to TeleportToNextEvent") double **TeleportToNextEvent** (long withinSeconds=600) *Teleports to the region of the next scheduled event if it starts within the given time window. Returns 0 if a teleport occurs; returns the number of seconds until the next event if it is outside the cutoff; returns -1 if there are no upcoming events.* | Parameter | Type | Description | | ------------- | ---- | --------------------------------------------------------------------- | | withinSeconds | long | Maximum seconds ahead to consider for auto-teleport. Defaults to 600. | * Lua ```lua timeUntilNextEvent = Space.Scene.PlayerAvatar.TeleportToNextEvent() --or timeUntilNextEvent = Space.Scene.PlayerAvatar.TeleportToNextEvent(500) ``` #### Properties[​](#properties "Direct link to Properties") ##### Username[​](#username "Direct link to Username") string **Username** `get` *Returns the avatar's current username (note: this can be changed by players for a small fee)* * Lua ```lua playerUsername = Space.Scene.PlayerAvatar.Username ``` * Lua ```lua --this script, once clicked, will get all avatars in the scene --and print their Username(including self) --(Example: scoreboards/radars/scanners/game machines) thisGameObject = Space.Host.ExecutingObject OnClick = function() allAvatars = Space.Scene.AllAvatars for var=1, #allAvatars do local Username = allAvatars[var].Username Space.Log("Username: " .. Username) end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to print all avatars' Username" thisGameObject.Clickable.OnClick(OnClick) ``` ##### DisplayName[​](#displayname "Direct link to DisplayName") string **DisplayName** `get` *Returns the avatar's display name (falls back to Username if unset).* * Lua ```lua playerDisplayName = Space.Scene.PlayerAvatar.DisplayName ``` ##### Title[​](#title "Direct link to Title") string **Title** `get` *Returns the avatar's current title* * Lua ```lua playerTitle = Space.Scene.PlayerAvatar.Title ``` * Lua ```lua --this script, once clicked, will get all avatars in the scene --and print their Title and Username(including self) thisGameObject = Space.Host.ExecutingObject OnClick = function() allAvatars = Space.Scene.AllAvatars for var=1, #allAvatars do local Username = allAvatars[var].Username local Title = allAvatars[var].Title Space.Log(Title .. " " .. Username) end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to print all avatars' Titles and Username" thisGameObject.Clickable.OnClick(OnClick) ``` ##### OrgTitle[​](#orgtitle "Direct link to OrgTitle") string **OrgTitle** `get` *Returns the user's organizational job title (JobTitle).* * Lua ```lua playerJobTitle = Space.Scene.PlayerAvatar.OrgTitle ``` ##### OrgName[​](#orgname "Direct link to OrgName") string **OrgName** `get` *Returns the user's organization/company name (Company).* * Lua ```lua playerCompanyName = Space.Scene.PlayerAvatar.OrgName ``` ##### ID[​](#id "Direct link to ID") long **ID** `get` *Returns the avatar's user ID, please note if you store these, this is a 'long' value not a 'int'.* * Lua ```lua playerID = Space.Scene.PlayerAvatar.ID ``` * Lua ```lua --this script, once clicked, will get all avatars in the scene --and print their ID(including self) --(Example: scoreboards/radars/scanners/game machines) thisGameObject = Space.Host.ExecutingObject OnClick = function() allAvatars = Space.Scene.AllAvatars for var=1, #allAvatars do local ID = allAvatars[var].ID Space.Log("ID: " .. ID) end end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Click to print all avatars' ID" thisGameObject.Clickable.OnClick(OnClick) ``` ##### IsAttached[​](#isattached "Direct link to IsAttached") bool **IsAttached** `get` *Returns True if avatar is Attached* * Lua ```lua isAttached = Space.Scene.PlayerAvatar.IsAttached ``` ##### MovementSpeed[​](#movementspeed "Direct link to MovementSpeed") float **MovementSpeed** `get` `set` *How fast the avatar's movement is* * Lua ```lua Space.Scene.PlayerAvatar.MovementSpeed = 20 ``` * Lua ```lua --the below script makes the object give the player triple movement speed --once it's clicked, and then returns them to original speed after 10 seconds --(Example: Triple Speed Powerup (avatar running race)) thisGameObject = Space.Host.ExecutingObject TripleSpeedCoroutine = function() local originalSpeed = Space.Scene.PlayerAvatar.MovementSpeed Space.Scene.PlayerAvatar.MovementSpeed = originalSpeed * 3 coroutine.yield(10) Space.Scene.PlayerAvatar.MovementSpeed = originalSpeed end OnClick = function() Space.Host.StartCoroutine(TripleSpeedCoroutine) end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Triple Speed Powerup!" thisGameObject.Clickable.OnClick(OnClick) ``` ##### JumpHeight[​](#jumpheight "Direct link to JumpHeight") float **JumpHeight** `get` `set` *How high the avatar's jump is* * Lua ```lua Space.Scene.PlayerAvatar.JumpHeight = 20 ``` * Lua ```lua --the below script makes the object give the player triple jump height --once it's clicked, and then returns them to original jump height after 10 seconds --(Example: Triple Jump Height Powerup ) thisGameObject = Space.Host.ExecutingObject originalJumpHeight = Space.Scene.PlayerAvatar.JumpHeight TripleJumpHeightCoroutine = function() Space.Scene.PlayerAvatar.JumpHeight = originalJumpHeight * 3 coroutine.yield(10) Space.Scene.PlayerAvatar.JumpHeight = originalJumpHeight end OnClick = function() Space.Host.StartCoroutine(TripleJumpHeightCoroutine) end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip = "Triple JumpHeight Powerup!" thisGameObject.Clickable.OnClick(OnClick) ``` ##### Guest[​](#guest "Direct link to Guest") bool **Guest** `get` *Is this Avatar a Guest?* * Lua ```lua isGuest = Space.Scene.PlayerAvatar.Guest ``` * Lua ```lua --this script will make this object non-clickable for guest players thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OnClick = function() Space.Log("Do Something") end if not thisPlayer.Guest then --if player is not guest thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) end ``` ##### OutfitID[​](#outfitid "Direct link to OutfitID") long **OutfitID** `get` *Returns the current outfit ID of the avatar* * Lua ```lua avOutfit = Space.Scene.PlayerAvatar.OutfitID ``` ##### Loaded[​](#loaded "Direct link to Loaded") bool **Loaded** `get` *Returns true if avatar is Loaded* * Lua ```lua isLoaded = Space.Scene.PlayerAvatar.Loaded ``` * Lua ```lua --this script will wait for a joining avatar to load first before making it play an animation --(otherwise that animation may be reset if played before load is complete) NewJoinAnimation = Space.GetResource("The Animation") OnPlayerJoin = function(NewAvatar) Space.Host.StartCoroutine(function() while not NewAvatar.Loaded do coroutine.yield(0) end --makes it wait Space.Log("yes") NewAvatar.PlayCustomAnimation(NewJoinAnimation) --at this point Loaded is True end) end Space.Scene.OnPlayerJoin(OnPlayerJoin) ``` ##### Gender[​](#gender "Direct link to Gender") string **Gender** `get` *Returns the avatar's gender as a string (e.g., "Male", "Female").* * Lua ```lua playerGender = Space.Scene.PlayerAvatar.Gender ``` ##### LockObject[​](#lockobject "Direct link to LockObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **LockObject** `get` *The object the Avatar is* [*Attached*](/scripting/client-scripting-api-reference/types/savatar.md#attachto) *to. Returns **Null** if Avatar is not attached.* * Lua ```lua lockObject = Space.Scene.PlayerAvatar.LockObject ``` ##### Skeleton[​](#skeleton "Direct link to Skeleton") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Skeleton** `get` *Returns a reference to avatar's skeleton GameObject* * Lua ```lua avSkeleton = Space.Scene.PlayerAvatar.Skeleton ``` * Lua ```lua --clicking this object will replace your avatar's animator controller (found on the skeleton) thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar customController = Space.GetResource("animcont") OnClick = function() thisPlayer.Skeleton.Animator.Controller = customController end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### BlockMovement[​](#blockmovement "Direct link to BlockMovement") bool **BlockMovement** `get` `set` *If set to True, avatar's movement will be blocked* * Lua ```lua Space.Scene.PlayerAvatar.BlockMovement = true ``` * Lua ```lua --the below script makes this object a boundary area where any user entering it --will be blocked from movement for 20 seconds, then the object will release controls and --destroy itself after that --(Example: freezing trap) --[This object's collider needs to be set as IsTrigger (Please read about OnTriggerStart for troubleshooting)] thisGameObject = Space.Host.ExecutingObject FrozenTime = 0.0 OnTriggerStart = function(TriggerStarter) if TriggerStarter.Root.Avatar ~= nil then if TriggerStarter.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then Space.Scene.PlayerAvatar.BlockMovement = true end end end OnTriggerStay = function(TriggerStayer) if TriggerStayer.Root.Avatar ~= nil then if TriggerStayer.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then FrozenTime = FrozenTime + Space.DeltaTime if FrozenTime > 20 then Space.Scene.PlayerAvatar.BlockMovement = false thisGameObject.Destroy() end end end end thisGameObject.SubscribeToEvents() thisGameObject.OnTriggerStart(OnTriggerStart) thisGameObject.OnTriggerStay(OnTriggerStay) ``` ##### BlockRun[​](#blockrun "Direct link to BlockRun") bool **BlockRun** `get` `set` *Is the Avatar blocked from running?* * Lua ```lua Space.Scene.PlayerAvatar.BlockRun = true ``` * Lua ```lua --this script will block a player's run ability when entering trigger collider and release it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockRun = true end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockRun = false end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### BlockFly[​](#blockfly "Direct link to BlockFly") bool **BlockFly** `get` `set` *Is the Avatar blocked from flying?* * Lua ```lua Space.Scene.PlayerAvatar.BlockFly = true ``` * Lua ```lua --this script will block a player's fly ability when entering trigger collider and release it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockFly = true end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockFly = false end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### BlockCrouch[​](#blockcrouch "Direct link to BlockCrouch") bool **BlockCrouch** `get` `set` *Is the Avatar blocked from crouching?* * Lua ```lua Space.Scene.PlayerAvatar.BlockCrouch = true ``` * Lua ```lua --this script will block a player's crouch ability when entering trigger collider and release it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockCrouch = true end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockCrouch = false end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### BlockJump[​](#blockjump "Direct link to BlockJump") bool **BlockJump** `get` `set` *Is the Avatar blocked from jumping?* * Lua ```lua Space.Scene.PlayerAvatar.BlockJump = true ``` * Lua ```lua --this script will block a player's jump ability when entering trigger collider and release it when leaving --[Requires this object to have a "Trigger" collider] thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OTS = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockJump= true end end OTE = function(gameObject) if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then thisPlayer.BlockJump= false end end thisObject.OnTriggerStart(OTS) thisObject.OnTriggerExit(OTE) ``` ##### IsGrounded[​](#isgrounded "Direct link to IsGrounded") bool **IsGrounded** `get` *Returns True if avatar is Grounded* * Lua ```lua isGrounded = Space.Scene.PlayerAvatar.IsGrounded ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *The reference to the Avatar's GameObject* * Lua ```lua playerObject = Space.Scene.PlayerAvatar.GameObject ``` * Lua ```lua --Clicking this object will teleport you 2 units forward and make you face the opposite way thisObject = Space.Host.ExecutingObject thisPlayer = Space.Scene.PlayerAvatar OnClick = function() local targetPos = thisPlayer.GameObject.WorldPosition + (thisPlayer.GameObject.Forward * 2) local targetRot = thisPlayer.GameObject.WorldRotation * Quaternion.AngleAxis(Vector.Up, 180) thisPlayer.Teleport(targetPos, targetRot) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` --- ### SAvatarAppearance #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------- | | void [**LoadOutfit** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#loadoutfit)(int outfitID) | | void [**ResetOutfit** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#resetoutfit)() | | void [**ResetOutfitToTemplate** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#resetoutfittotemplate)(int outfitID) | | float [**GetSlider** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#getslider)(SAppearanceSlider slider) | | float [**GetHeight** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#getheight)() | | SColor [**GetSkinTone** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#getskintone)() | | SColor [**GetEyeTone** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#geteyetone)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------- | | long [**OutfitID** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#outfitid)`get` | | SGameObject [**Skeleton** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#skeleton)`get` | | bool [**Loaded** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#loaded)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/types/savatarappearance.md#gameobject)`get` | #### Functions[​](#functions "Direct link to Functions") ##### LoadOutfit[​](#loadoutfit "Direct link to LoadOutfit") void **LoadOutfit** (int outfitID) *Changes the current Avatar's outfit to outfitID. For a player Avatar, this only works on white-label grid. For NPC avatars, this works on all grids.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.AvatarAppearance.LoadOutfit(160) ``` * Lua ```lua --this script toggles between 3 different outfits when NPC Statue object is clicked --[Object needs to have an NPC Statue component] outfits = {4134388, 4134385, 4134386} currentOutfit = 0 thisObject = Space.Host.ExecutingObject function OnClickFunction() if currentOutfit == #outfits then currentOutfit = 1 else currentOutfit = currentOutfit + 1 end thisObject.AvatarAppearance.LoadOutfit(outfits[currentOutfit]) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### ResetOutfit[​](#resetoutfit "Direct link to ResetOutfit") void **ResetOutfit** () *Changes the current Avatar's outfit and resets it to outfitID 0. For a player Avatar, this only works on white-label grid. For NPC avatars, this works on all grids.* * Lua ```lua Space.Host.ExecutingObject.AvatarAppearance.ResetOutfit() ``` * Lua ```lua --this script makes a UIButton reset an NPC statue outfit when clicked --[UIButton object needs to be linked in scripting runtime references with name "button1"] --[Object needs to have an NPC Statue component] thisObject = Space.Host.ExecutingObject refButton = Space.Host.GetReference("button1") function OnClickFunction() thisObject.AvatarAppearance.ResetOutfit() end refButton.UIButton.OnClick(OnClickFunction) ``` ##### ResetOutfitToTemplate[​](#resetoutfittotemplate "Direct link to ResetOutfitToTemplate") void **ResetOutfitToTemplate** (int outfitID) *Changes the current Avatar's outfit to outfitID only if the player running this code already owns that outfit. For a player Avatar, this only works on white-label grid. For NPC avatars, this works on all grids.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.AvatarAppearance.ResetOutfitToTemplate(10001) ``` * Lua ```lua --this script toggles between 3 different outfits when NPC Statue object is clicked --[Object needs to have an NPC Statue component] --For this function, the player needs to own this outfit. Use LoadOutfit if player might not own it outfits = {4134388, 4134385, 4134386} currentOutfit = 0 thisObject = Space.Host.ExecutingObject function OnClickFunction() if currentOutfit == #outfits then currentOutfit = 1 else currentOutfit = currentOutfit + 1 end thisObject.AvatarAppearance.ResetOutfitToTemplate(outfits[currentOutfit]) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### GetSlider[​](#getslider "Direct link to GetSlider") float **GetSlider** (int slider) *Return the value of Appearance Sliders.* | Parameter | Type | Description | | --------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | slider | int | 1= Asian, 2= European, 3= African, 4= FaceShape, 5= FaceWidth, 6= FaceLength, 7= ForeheadShape, 8= ForeheadDepth, 9= CheekHeight, 10= CheekWidth, 11= JawShape, 12= JawWidth, 13= JawHeight, 14= EyebrowHeight, 15= EyebrowDepth, 16= EyeHeight, 17= EyeSpacing, 18= EyeSize, 19= EyeWidth, 20= EyeballSize, 21= EyeInside, 22= EyeOutside, 23= EyelashLength, 24= NoseWidth, 25= NoseDepth, 26= NoseHeight, 27= NoseShape, 28= NoseTipShape, 29= NostrilWidth, 30= MouthWidth, 31= MouthHeight, 32= MouthDepth, 33= UpperLipWidth, 34= UpperLipThickness, 35= LowerLipWidth, 36= LowerLipThickness, 37= Smile, 38= EarHeight, 39= EarWidth, 40= Earlobe, 41= EarShape, 42= Muscular, 43= Toned, 44= Grand, 45= Lean, 46= SkullHeight, 47= SkullWidth, 48= SkullDepth, 49= NeckThickness, 50= ShoulderThickness, 51= UpperArmThickness, 52= ForearmThickness, 53= WristSize, 54= ElbowThin, 55= HandThickness, 56= HandTone, 57= FingerWidth, 58= BustProximity, 59= BustSize, 60= ChestDepth, 61= PectoralSize, 62= PectoralHeight, 63= AbdomenMiddle, 64= AbdomenDepth, 65= WaistWidth, 66= HipSize, 67= GlutesSize, 68= GlutesHeight, 69= LoveHandles, 70= ThighSize, 71= KneeTone, 72= ShinSize, 73= AnkleTone, 74= FootThickness, 75= FootTone, 76= ToeWidth, 77= HeadSize, 78= NeckSize, 79= ShoulderSize, 80= UpperArmSize, 81= ForearmSize, 82= HandSize, 83= SpineSize, 84= ChestSize, 85= UpperLegSize, 86= LowerLegSize, 87= FeetSize, 88= ToesSize, 89= HeadPosition, 90= NeckLength, 91= ForearmLength, 92= HandPosition, 93= SpineLength, 94= ChestLength, 95= UpperLegLength, 96= LowerLegLength, 97= FeetLength, 98= ToesLength, 99= ShoulderHeight, 100= ShoulderWidth, 101= FeetFloorOffset | * Lua ```lua FaceLength = Space.Host.ExecutingObject.AvatarAppearance.GetSlider(AppearanceSlider.FaceLength) ``` * Lua ```lua --this script updates a UIText with the current Face Length of the npc thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("thetext").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdateFunction = function() uiText.Text = thisObject.AvatarAppearance.GetSlider(AppearanceSlider.FaceLength) end thisObject.OnUpdate(OnUpdateFunction) ``` ##### GetHeight[​](#getheight "Direct link to GetHeight") float **GetHeight** () *Return height of avatar.* * Lua ```lua height = Space.Host.ExecutingObject.AvatarAppearance.GetHeight() ``` * Lua ```lua --this script updates a UIText with the height of this NPC statue thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("thetext").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdateFunction = function() uiText.Text = thisObject.AvatarAppearance.GetHeight() end thisObject.OnUpdate(OnUpdateFunction) ``` ##### GetSkinTone[​](#getskintone "Direct link to GetSkinTone") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **GetSkinTone** () *Return skin tone of avatar.* * Lua ```lua SkinTone = Space.Host.ExecutingObject.AvatarAppearance.GetSkinTone() ``` * Lua ```lua --this script updates a UIText with the current Skin Tone of the npc thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("thetext").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdateFunction = function() uiText.Text = thisObject.AvatarAppearance.GetSkinTone().ToString() end thisObject.OnUpdate(OnUpdateFunction) ``` ##### GetEyeTone[​](#geteyetone "Direct link to GetEyeTone") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **GetEyeTone** () *Return eye tone of avatar.* * Lua ```lua EyeTone = Space.Host.ExecutingObject.AvatarAppearance.GetEyeTone() ``` * Lua ```lua --this script updates a UIText with the current Eye Tone of the npc thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("thetext").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdateFunction = function() uiText.Text = thisObject.AvatarAppearance.GetEyeTone().ToString() end thisObject.OnUpdate(OnUpdateFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### OutfitID[​](#outfitid "Direct link to OutfitID") long **OutfitID** `get` *Return the current outfit id.* * Lua ```lua outfitID= Space.Host.ExecutingObject.AvatarAppearance.OutfitID ``` * Lua ```lua --this script updates a UIText with the current outfit ID of the npc thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("thetext").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdateFunction = function() uiText.Text = thisObject.GameObject.AvatarAppearance.OutfitID end thisObject.OnUpdate(OnUpdateFunction) ``` ##### Skeleton[​](#skeleton "Direct link to Skeleton") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Skeleton** `get` *Return the GameObject of avatar skeleton.* * Lua ```lua playerSkeleton = Space.Host.ExecutingObject.AvatarAppearance.Skeleton ``` ##### Loaded[​](#loaded "Direct link to Loaded") bool **Loaded** `get` *Returns true if the avatar is full loaded.* * Lua ```lua isLoaded= Space.Host.ExecutingObject.AvatarAppearance.Loaded ``` * Lua ```lua --this script updates a UIText with the loading status of the npc thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("thetext").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdateFunction = function() uiText.Text = thisObject.AvatarAppearance.Loaded end thisObject.OnUpdate(OnUpdateFunction) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Property Description* * Lua ```lua npcGameObject = Space.Host.ExecutingObject.AvatarAppearance.GameObject ``` --- ### SChatMessage #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Attribute Name | | --------------------------------------------------------------------------------------------------- | | uint [**SenderID** ](/scripting/client-scripting-api-reference/types/schatmessage.md#senderid)`get` | | string [**Sender** ](/scripting/client-scripting-api-reference/types/schatmessage.md#sender)`get` | | string [**Channel** ](/scripting/client-scripting-api-reference/types/schatmessage.md#channel)`get` | | string [**Message** ](/scripting/client-scripting-api-reference/types/schatmessage.md#message)`get` | #### Properties[​](#properties "Direct link to Properties") ##### SenderID[​](#senderid "Direct link to SenderID") uint **SenderID** `get` *ID of the sender of the message* * Lua ```lua function oc(chatm) Space.Log(chatm.SenderID) end Space.Network.Chat.OnChat(oc) ``` * Lua ```lua --this script processes every new chat message and makes a UIText display the Sender's ID uiText = Space.Host.GetReference("text").UIText --Add this Text object as reference in Scripting Runtime OnChatFunction = function(SChatMessage) uiText.Text = SChatMessage.SenderID end Space.Network.Chat.OnChat(OnChatFunction) ``` ##### Sender[​](#sender "Direct link to Sender") string **Sender** `get` *Name of the sender of the message* * Lua ```lua function oc(chatm) Space.Log(chatm.Sender) end Space.Network.Chat.OnChat(oc) ``` * Lua ```lua --this script processes every new chat message and makes a UIText display the Sender name uiText = Space.Host.GetReference("text").UIText --Add this Text object as reference in Scripting Runtime OnChatFunction = function(SChatMessage) uiText.Text = SChatMessage.Sender end Space.Network.Chat.OnChat(OnChatFunction) ``` ##### Channel[​](#channel "Direct link to Channel") string **Channel** `get` *Name of the channel* * Lua ```lua function oc(chatm) Space.Log(chatm.Channel) end Space.Network.Chat.OnChat(oc) ``` * Lua ```lua --this script processes every new chat message and makes a UIText display the channel's name uiText = Space.Host.GetReference("text").UIText --Add this Text object as reference in Scripting Runtime OnChatFunction = function(SChatMessage) uiText.Text = SChatMessage.Channel end Space.Network.Chat.OnChat(OnChatFunction) ``` ##### Message[​](#message "Direct link to Message") string **Message** `get` *The contents of the chat message* * Lua ```lua function oc(chatm) Space.Log(chatm.Message) end Space.Network.Chat.OnChat(oc) ``` * Lua ```lua --this script processes every new chat message and makes a UIText display the Message uiText = Space.Host.GetReference("text").UIText --Add this Text object as reference in Scripting Runtime OnChatFunction = function(SChatMessage) uiText.Text = SChatMessage.Message end Space.Network.Chat.OnChat(OnChatFunction) ``` --- ### SColor #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | --------------------------------------------------------------------------------------------------------------------------- | | string [**ToHex** ](/scripting/client-scripting-api-reference/types/scolor.md#tohex)() | | SColor [**Lerp** ](/scripting/client-scripting-api-reference/types/scolor.md#lerp)(SColor b, float t) | | bool [**Equals** ](/scripting/client-scripting-api-reference/types/scolor.md#equals)(SColor other) | | override string [**ToString** ](/scripting/client-scripting-api-reference/types/scolor.md#tostring)() | | static SColor [**New** ](/scripting/client-scripting-api-reference/types/scolor.md#new)(float r, float g, float b, float a) | | static SColor [**FromHex** ](/scripting/client-scripting-api-reference/types/scolor.md#fromhex)(string hex) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------- | | float [**R** ](/scripting/client-scripting-api-reference/types/scolor.md#r)`get` | | float [**G**](/scripting/client-scripting-api-reference/types/scolor.md#g) `get` | | float [**B**](/scripting/client-scripting-api-reference/types/scolor.md#b) `get` | | float [**A**](/scripting/client-scripting-api-reference/types/scolor.md#a) `get` | | SColor [**Black** ](/scripting/client-scripting-api-reference/types/scolor.md#black)`get` | | SColor [**White** ](/scripting/client-scripting-api-reference/types/scolor.md#white)`get` | | SColor [**Red** ](/scripting/client-scripting-api-reference/types/scolor.md#red)`get` | | SColor [**Blue** ](/scripting/client-scripting-api-reference/types/scolor.md#blue)`get` | | SColor [**Green** ](/scripting/client-scripting-api-reference/types/scolor.md#green)`get` | | SColor [**Yellow** ](/scripting/client-scripting-api-reference/types/scolor.md#yellow)`get` | #### Functions[​](#functions "Direct link to Functions") ##### ToHex[​](#tohex "Direct link to ToHex") string **ToHex** () *Return the Hex value of the color.* * Lua ```lua colorRedHex = Color.Red.ToHex() ``` ##### Lerp[​](#lerp "Direct link to Lerp") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Lerp** ([SColor](/scripting/client-scripting-api-reference/types/scolor.md) b, float t) *Linearly interpolates between current color and b by t.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua lerpedRedBlue = Color.Blue.Lerp(Color.Red, 0.5) ``` * Lua ```lua --create a cube and set a new material. --add ScriptingRuntime. local mat=Space.Host.ExecutingObject.Renderer.Material function ChangeColor() mat.SetColor("_Color",Color.Red.Lerp(Color.Blue,Space.Math.PingPong(Space.Time,1))) end Space.Host.ExecutingObject.OnUpdate(ChangeColor) ``` ##### Equals[​](#equals "Direct link to Equals") bool **Equals** ([SColor](/scripting/client-scripting-api-reference/types/scolor.md) other) *Returns true if colors are same.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isItTrue = Color.Red.Equals(Color.Blue) ``` ##### ToString[​](#tostring "Direct link to ToString") string **ToString** () *Returns the RGBA value of the current color.* * Lua ```lua redString = Color.Red.ToString() ``` ##### New[​](#new "Direct link to New") static [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **New** (float r, float g, float b, float a) *Create a color by red, green, blue and alpha parameters.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua theColor = Color.New(255.0, 0.0, 0.0, 1.0) ``` ##### FromHex[​](#fromhex "Direct link to FromHex") static [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **FromHex** (string hex) *Create a color by Hex value.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua fromHex = Color.FromHex('FF0000') ``` #### Properties[​](#properties "Direct link to Properties") ##### R[​](#r "Direct link to R") float **R** `get` *Property Description* * Lua ```lua r = Color.Red.R ``` ##### G[​](#g "Direct link to G") float **G** `get` *Property Description* * Lua ```lua g = Color.Red.G ``` ##### B[​](#b "Direct link to B") float **B** `get` *Property Description* * Lua ```lua g = Color.Red.B ``` ##### A[​](#a "Direct link to A") float **A** `get` *Property Description* * Lua ```lua g = Color.Red.A ``` ##### Black[​](#black "Direct link to Black") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Black** `get` *Solid black. RGBA is (0, 0, 0, 1).* * Lua ```lua blackColor = Color.Black ``` ##### White[​](#white "Direct link to White") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **White** `get` *Solid White. RGBA is (1, 1, 1, 1).* * Lua ```lua whiteColor = Color.White ``` ##### Red[​](#red "Direct link to Red") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Red** `get` *Solid Red. RGBA is (1, 0, 0, 1).* * Lua ```lua blackRed = Color.Red ``` ##### Blue[​](#blue "Direct link to Blue") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Blue** `get` *Solid Blue. RGBA is (0, 0, 1, 1).* * Lua ```lua blueColor = Color.Blue ``` ##### Green[​](#green "Direct link to Green") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Green** `get` *Solid Green. RGBA is (0, 1, 0, 1).* * Lua ```lua greenColor = Color.Green ``` ##### Yellow[​](#yellow "Direct link to Yellow") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **Yellow** `get` *Yellow. RGBA is (1, 0.92, 0.016, 1).* * Lua ```lua yellowColor = Color.Yellow ``` --- ### SCommandBuffer ##### DrawRenderer[​](#drawrenderer "Direct link to DrawRenderer") void **DrawRenderer** ([SRenderer](/scripting/client-scripting-api-reference/components/srenderer.md) renderer, [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) material) *Add a "draw renderer" command.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua commandbuffer=Space.PostFX.CreateCommandBuffer() mat=Space.Resources[1] cube=Space.Host.GetReference("Cube") commandbuffer.DrawRenderer(cube.Renderer,mat.AsMaterial) Space.PostFX.AddCommandBufferToCamera(commandbuffer) ``` ##### Blit[​](#blit "Direct link to Blit") void **Blit** ([SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) mat) *Add a "bit into a render texture" command.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua commandbuffer=Space.PostFX.CreateCommandBuffer() mat=Space.Resources[1] commandbuffer.Blit(mat.AsMaterial) Space.PostFX.AddCommandBufferToCamera(commandbuffer) ``` --- ### SDateTime #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------- | | bool [**Equals** ](/scripting/client-scripting-api-reference/types/sdatetime.md#equals)(SDateTime other) | | int [**ComparesTo** ](/scripting/client-scripting-api-reference/types/sdatetime.md#comparesto)(SDateTime other) | | string [**FormatLocal** ](/scripting/client-scripting-api-reference/types/sdatetime.md#formatlocal)(string format) | | string [**FormatGlobal** ](/scripting/client-scripting-api-reference/types/sdatetime.md#formatlocal)(string format) | | string [**Regional** ](/scripting/client-scripting-api-reference/types/sdatetime.md#regional)(string region) | | string [**FormatRegional** ](/scripting/client-scripting-api-reference/types/sdatetime.md#formatregional)(string region, string format) | | SDateTime [**AddYears** ](/scripting/client-scripting-api-reference/types/sdatetime.md#addyears)(int amount) | | SDateTime [**AddMonths** ](/scripting/client-scripting-api-reference/types/sdatetime.md#addmonths)(int amount) | | SDateTime [**AddDays** ](/scripting/client-scripting-api-reference/types/sdatetime.md#adddays)(double amount) | | SDateTime [**AddHours** ](/scripting/client-scripting-api-reference/types/sdatetime.md#addhours)(double amount) | | SDateTime [**AddMinutes** ](/scripting/client-scripting-api-reference/types/sdatetime.md#addminutes)(double amount) | | SDateTime [**AddSeconds** ](/scripting/client-scripting-api-reference/types/sdatetime.md#addseconds)(double amount) | | SDateTime [**AddMilliseconds** ](/scripting/client-scripting-api-reference/types/sdatetime.md#functionname-1)(double amount) | | | | | | **Static Functions** | | static SDateTime [**Now**](/scripting/client-scripting-api-reference/types/sdatetime.md#now)() | | static SDateTime [**Server** ](/scripting/client-scripting-api-reference/types/sdatetime.md#server)() | | static SDateTime [**Parse**](/scripting/client-scripting-api-reference/types/sdatetime.md#parse) (string input) | | static bool [**IsLeapYear**](/scripting/client-scripting-api-reference/types/sdatetime.md#isleapyear) (int year) | | static int [**DaysInMonth** ](/scripting/client-scripting-api-reference/types/sdatetime.md#daysinmonth)(int year, int month) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------ | | int [**Year** ](/scripting/client-scripting-api-reference/types/sdatetime.md#year)`get` | | int [**Month** ](/scripting/client-scripting-api-reference/types/sdatetime.md#month)`get` | | int [**Day** ](/scripting/client-scripting-api-reference/types/sdatetime.md#day)`get` | | int [**Hour** ](/scripting/client-scripting-api-reference/types/sdatetime.md#hour)`get` | | int [**Minute** ](/scripting/client-scripting-api-reference/types/sdatetime.md#minute)`get` | | int [**Second** ](/scripting/client-scripting-api-reference/types/sdatetime.md#second)`get` | | int [**Millisecond** ](/scripting/client-scripting-api-reference/types/sdatetime.md#millisecond)`get` | | string [**Local** ](/scripting/client-scripting-api-reference/types/sdatetime.md#local)`get` | | string [**Global** ](/scripting/client-scripting-api-reference/types/sdatetime.md#global)`get` | | int [**UnixTime** ](/scripting/client-scripting-api-reference/types/sdatetime.md#unixtime)`get` | | bool [**IsDaylightSavingTime** ](/scripting/client-scripting-api-reference/types/sdatetime.md#isdaylightsavingtime)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Equals[​](#equals "Direct link to Equals") bool **Equals** (SDateTime other) *Returns true if the datetimes are same.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua \`\`\` ATargetDateTime = DateTime.Now().AddMinutes(5) AreEqual = ATargetDateTime.Equals(DateTime.Now()) \`\`\` ##### ComparesTo[​](#comparesto "Direct link to ComparesTo") int **ComparesTo** (SDateTime other) *Compares two datetimes and returns an integer. 0 == identical. greater than 0 == This datetime is greater than other. less than 0 == This datetime is less than other.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua ATargetDateTime = DateTime.Now().AddMinutes(5) AreEqual = ATargetDateTime.ComparesTo(DateTime.Now()) ``` ##### FormatLocal[​](#formatlocal "Direct link to FormatLocal") string **FormatLocal** (string format) *Outputs a custom formatted string with the date and time according to local language rules.* | Parameter | Type | Description | | --------- | ------ | ---------------------- | | format | string | See below for examples | * Lua ```lua localTimeCustomFormat = DateTime.Now().FormatLocal("dddd, MMMM dd, yyyy h:mm:ss tt") ``` * Lua \`\`\` --Example format strings \--\[\[ format = "dddd, MMMM dd, yyyy h:mm:ss tt" Result: Monday, May 28, 2012 11:35:00 AM format = "Ldddd, MMMM dd, yyyy" Result: Monday, May 28, 2012 format = "h:mm:ss tt" Result: 11:35:00 AM format = "MMMM dd" Result: May 28 format = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT" Result: Mon, 28 May 2012 11:35:00 GMT format = "M/d/yyyy" Result: 5/28/2012 format = "h:mm tt" Result: 11:35 AM format = "yyyy'-'MM'-'dd'T'HH':'mm':'ss" Result: 2012-05-28T11:35:00 format = "yyyy'-'MM'-'dd HH':'mm':'ss'Z'" Result: 2012-05-28 11:35:00Z format = "MMMM, yyyy" Result: May, 2012 --]] \`\`\` ##### FunctionName[​](#functionname "Direct link to FunctionName") string **FormatGlobal** (string format) *Outputs a custom formatted string with the date and time according to global rules (culture invariant).* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua GlobalTimeCustomFormat = DateTime.Now().FormatLocal("dddd, MMMM dd, yyyy h:mm:ss tt") ``` * Lua ```lua --Example format strings --[[ format = "dddd, MMMM dd, yyyy h:mm:ss tt" Result: Monday, May 28, 2012 11:35:00 AM format = "Ldddd, MMMM dd, yyyy" Result: Monday, May 28, 2012 format = "h:mm:ss tt" Result: 11:35:00 AM format = "MMMM dd" Result: May 28 format = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT" Result: Mon, 28 May 2012 11:35:00 GMT format = "M/d/yyyy" Result: 5/28/2012 format = "h:mm tt" Result: 11:35 AM format = "yyyy'-'MM'-'dd'T'HH':'mm':'ss" Result: 2012-05-28T11:35:00 format = "yyyy'-'MM'-'dd HH':'mm':'ss'Z'" Result: 2012-05-28 11:35:00Z format = "MMMM, yyyy" Result: May, 2012 --]] ``` ##### Regional[​](#regional "Direct link to Regional") string **Regional** (string region) *Outputs a string with the date and time formatted according to specific regional rules.* | Parameter | Type | Description | | --------- | ------ | --------------------------------------------------------------------------------------------------------------------------------- | | region | string | [List available here](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c) | * Lua ```lua stringTimeRegional = DateTime.Now().Regional('en-us') ``` ##### FormatRegional[​](#formatregional "Direct link to FormatRegional") string **FormatRegional** (string region, string format) *Outputs a custom formatted string with the date and time according to specific regional rules.* | Parameter | Type | Description | | --------- | ------ | --------------------------------------------------------------------------------------------------------------------------------- | | region | string | [List available here](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c) | | format | string | See below | * Lua ```lua stringTimeFormatRegional = DateTime.Now().FormatRegional('en-us','dddd, MMMM dd, yyyy h:mm:ss tt') ``` * Lua ```lua --Example format strings --[[ format = "dddd, MMMM dd, yyyy h:mm:ss tt" Result: Monday, May 28, 2012 11:35:00 AM format = "Ldddd, MMMM dd, yyyy" Result: Monday, May 28, 2012 format = "h:mm:ss tt" Result: 11:35:00 AM format = "MMMM dd" Result: May 28 format = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT" Result: Mon, 28 May 2012 11:35:00 GMT format = "M/d/yyyy" Result: 5/28/2012 format = "h:mm tt" Result: 11:35 AM format = "yyyy'-'MM'-'dd'T'HH':'mm':'ss" Result: 2012-05-28T11:35:00 format = "yyyy'-'MM'-'dd HH':'mm':'ss'Z'" Result: 2012-05-28 11:35:00Z format = "MMMM, yyyy" Result: May, 2012 --]] ``` ##### AddYears[​](#addyears "Direct link to AddYears") SDateTime **AddYears** (int amount) *Return a new SDateTime that is the current date time + amount years.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua date5YearsLater = DateTime.Now().AddYears(5) ``` ##### AddMonths[​](#addmonths "Direct link to AddMonths") SDateTime **AddMonths** (int amount) *Return a new SDateTime that is the current date time + amount months.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua date5MonthsLater = DateTime.Now().AddMonths(5) ``` ##### AddDays[​](#adddays "Direct link to AddDays") SDateTime **AddDays** (double amount) *Return a new SDateTime that is the current date time + amount days.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua date5DaysLater = DateTime.Now().AddDays(5) ``` ##### AddHours[​](#addhours "Direct link to AddHours") SDateTime **AddHours** (double amount) *Return a new SDateTime that is the current date time + amount hours.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua date5HoursLater = DateTime.Now().AddHours(5) ``` ##### AddMinutes[​](#addminutes "Direct link to AddMinutes") SDateTime **AddMinutes** (double amount) *Return a new SDateTime that is the current date time + amount minutes.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua date5MinutesLater = DateTime.Now().AddMinutes(5) ``` ##### AddSeconds[​](#addseconds "Direct link to AddSeconds") SDateTime **AddSeconds** (double amount) *Return a new SDateTime that is the current date time + amount seconds.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua date5SecondsLater = DateTime.Now().AddSeconds(5) ``` ##### AddMilliseconds[​](#addmilliseconds "Direct link to AddMilliseconds") SDateTime **AddMilliseconds** (double amount) *Return a new SDateTime that is the current date time + amount milliseconds.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua date5MillisecondsLater = DateTime.Now().AddMilliseconds(5) ``` ##### Now[​](#now "Direct link to Now") static SDateTime **Now**() *Creates a new SDateTime object equal to the current local time.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua localDateTime = DateTime.Now() ``` ##### Server[​](#server "Direct link to Server") static SDateTime **Server** () *Creates a new SDateTime object equal to the current server time.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua serverDateTime = DateTime.Server() ``` ##### Parse[​](#parse "Direct link to Parse") static SDateTime **Parse** (string input) *Creates a new SDateTime object by attempting to parse a string input. Returns null/nil if the string cannot be parsed.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua parseDateTime = DateTime.Parse('10/3/2022 1:26:02 PM') ``` ##### IsLeapYear[​](#isleapyear "Direct link to IsLeapYear") static bool **IsLeapYear** (int year) *Return true if the specified year is a leap year.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isLeapYear = DateTime.IsLeapYear(2024) ``` ##### DaysInMonth[​](#daysinmonth "Direct link to DaysInMonth") static int **DaysInMonth** (int year, int month) *Return the number of days in the given month for the given year.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isLeapYear = DateTime.DaysInMonth(2022, 8) ``` #### Properties[​](#properties "Direct link to Properties") ##### Year[​](#year "Direct link to Year") int **Year** `get` *Get the independent time unit property of the SDateTime object.* * Lua ```lua currentYear = DateTime.Now().Year ``` ##### Month[​](#month "Direct link to Month") int **Month** `get` *Property Description* * Lua ```lua currentMonth = DateTime.Now().Month ``` ##### Day[​](#day "Direct link to Day") int **Day** `get` *Property Description* * Lua ```lua currentDay = DateTime.Now().Day ``` ##### Hour[​](#hour "Direct link to Hour") int **Hour** `get` *Property Description* * Lua ```lua currentHour = DateTime.Now().Hour ``` ##### Minute[​](#minute "Direct link to Minute") int **Minute** `get` *Property Description* * Lua ```lua currentMinute = DateTime.Now().Minute ``` ##### Second[​](#second "Direct link to Second") int **Second** `get` *Property Description* * Lua ```lua currentSecond = DateTime.Now().Second ``` ##### Millisecond[​](#millisecond "Direct link to Millisecond") int **Millisecond** `get` *Property Description* * Lua ```lua currentMillisecond = DateTime.Now().Millisecond ``` ##### Local[​](#local "Direct link to Local") string **Local** `get` *Outputs a string with the date and time formatted according to local language rules.* * Lua ```lua currentTimeStringLocal = DateTime.Now().Local ``` ##### Global[​](#global "Direct link to Global") string **Global** `get` *Outputs a string with the date and time formatted according to global rules (culture invariant).* * Lua ```lua currentTimeStringGlobal = DateTime.Now().Global ``` ##### UnixTime[​](#unixtime "Direct link to UnixTime") int **UnixTime** `get` *Return this time in Unix time, the number of seconds since Jan 1st, 1970.* * Lua ```lua currentUnixTime = DateTime.Now().UnixTime ``` ##### IsDaylightSavingTime[​](#isdaylightsavingtime "Direct link to IsDaylightSavingTime") bool **IsDaylightSavingTime** `get` *Indicates whether this instance of DateTime is within the daylight saving time range for the current time zone.* * Lua ```lua isCurrentTimeDaylightSaving = DateTime.Now().IsDaylightSavingTime ``` --- ### SGameObject #### Functions[​](#functions "Direct link to Functions") ##### SubscribeToEvents[​](#subscribetoevents "Direct link to SubscribeToEvents") void **SubscribeToEvents** () *Causes this script to start listening to events on the object.* info ***This function is now automatically called by events that require it*** * Lua ```lua Space.Host.ExecutingObject.SubscribeToEvents() ``` ##### SetSiblingIndex[​](#setsiblingindex "Direct link to SetSiblingIndex") void **SetSiblingIndex** (int newIndex) *Sets the sibling index.* *Use this to change the sibling index of the GameObject. If a GameObject shares a parent with other GameObjects and are on the same level (i.e. they share the same direct parent), these GameObjects are known as siblings. The sibling index shows where each GameObject sits in this sibling hierarchy.* *Use SetSiblingIndex to change the GameObject’s place in this hierarchy. When the sibling index of a GameObject is changed, its order in the Hierarchy window will also change.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.SetSiblingIndex(2) ``` ##### SetAsFirstSibling[​](#setasfirstsibling "Direct link to SetAsFirstSibling") void **SetAsFirstSibling** () *This GameObject becomes the first Sibling* * Lua ```lua Space.Host.ExecutingObject.SetAsFirstSibling() ``` ##### SetAsLastSibling[​](#setaslastsibling "Direct link to SetAsLastSibling") void **SetAsLastSibling** () *This GameObject becomes the last Sibling* * Lua ```lua Space.Host.ExecutingObject.SetAsLastSibling() ``` ##### Duplicate[​](#duplicate "Direct link to Duplicate") SGameObject **Duplicate** () *Copies the object and returns a reference to the copy. Equivalent to calling Instantiate() in Unity* * Lua ```lua local copy = Space.Host.ExecutingObject.Duplicate() ``` * Lua ```lua --this script will make this object, once clicked, duplicate itself, then the duplicate --moves up and then duplicate itself again and the duplicate move down (total 3 vertically aligned) --(Example: cells multiplying) thisGameObject = Space.Host.ExecutingObject OnClick = function() local firstDuplicate = thisGameObject.Duplicate() firstDuplicate.WorldPosition = firstDuplicate.WorldPosition + firstDuplicate.Up local secondDuplicate = thisGameObject.Duplicate() secondDuplicate.WorldPosition = secondDuplicate.WorldPosition - secondDuplicate.Up end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip="Click to watch me multiply " thisGameObject.Clickable.OnClick(OnClick) ``` ##### Instantiate[​](#instantiate "Direct link to Instantiate") SGameObject **Instantiate** () *Copy of Duplicate() for convenience* * Lua ```lua NewGameObject = Space.Host.ExecutingObject.Instantiate() ``` * Lua ```lua --this script will make this object, once clicked, duplicate itself, then the duplicate --moves up and then duplicate itself again and the duplicate move down (total 3 vertically aligned) --(Example: cells multiplying) thisGameObject = Space.Host.ExecutingObject OnClick = function() local firstDuplicate = thisGameObject.Instantiate() firstDuplicate.WorldPosition = firstDuplicate.WorldPosition + firstDuplicate.Up local secondDuplicate = thisGameObject.Instantiate() secondDuplicate.WorldPosition = secondDuplicate.WorldPosition - secondDuplicate.Up end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip="Click to watch me multiply " thisGameObject.Clickable.OnClick(OnClick) ``` ##### AddHingeJoint[​](#addhingejoint "Direct link to AddHingeJoint") [SHingeJoint](/scripting/client-scripting-api-reference/components/shingejoint.md) **AddHingeJoint** () *Adds a Hinge Joint component to this Game Object and returns its reference* * Lua ```lua NewHingeJoint = Space.Host.ExecutingObject.AddHingeJoint() ``` * Lua ```lua --clicking this object will add a Hinge Joint component to it at runtime thisObject = Space.Host.ExecutingObject OnClick = function() HJ = thisObject.AddHingeJoint() end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### AddLight[​](#addlight "Direct link to AddLight") [SLight](/scripting/client-scripting-api-reference/components/slight.md) **AddLight** () *Adds a Light component to the object.* * Lua ```lua newLightComponent = Space.Host.ExecutingObject.AddLight() ``` ##### AddAnimator[​](#addanimator "Direct link to AddAnimator") [SAnimator](/scripting/client-scripting-api-reference/components/sanimator.md) **AddAnimator** () *Adds an Animator component to this Game Object and returns its reference* * Lua ```lua NewAnimator = Space.Host.ExecutingObject.AddAnimator() ``` * Lua ```lua --clicking this object will add an animator to it and controller at runtime thisObject = Space.Host.ExecutingObject theResource = Space.GetResource("An Animator Controller") -- add controller to resources in Scripting Runtime OnClick = function() Animator = thisObject.AddAnimator() Animator.Controller = theResource end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### AddAudioSource[​](#addaudiosource "Direct link to AddAudioSource") [SAudioSource](/scripting/client-scripting-api-reference/components/saudiosource.md) **AddAudioSource** () *Adds an AudioSource component to the object.* * Lua ```lua newAudioSourceComponent = Space.Host.ExecutingObject.AddAudioSource() ``` ##### AddClickable[​](#addclickable "Direct link to AddClickable") [SClickable](/scripting/client-scripting-api-reference/components/sclickable.md) **AddClickable** () *Adds a Clickable component to the object.* * Lua ```lua newClikcableComponent = Space.Host.ExecutingObject.AddClickable() ``` ##### GetScript[​](#getscript "Direct link to GetScript") [SScriptingRuntime](/scripting/client-scripting-api-reference/components/sscriptingruntime.md) **GetScript** (string name) *Returns a Scripting Runtime component attached to this object by Component Name, or nil if none exist* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingRuntime = Space.Host.ExecutingObject.GetScript("scriptingruntimecomponentname") ``` ##### GetScriptsInChildren[​](#getscriptsinchildren "Direct link to GetScriptsInChildren") List< [SScriptingRuntime](/scripting/client-scripting-api-reference/components/sscriptingruntime.md) > **GetScriptsInChildren** (string name, bool includeInactive=false) *Returns Scripting Runtime components attached to this object by Component Name or its children* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableScriptsInChildren = Space.Host.ExecutingObject.GetScriptsInChildren("scriptingruntimecomponentname",true) ``` ##### GetScriptInChildren[​](#getscriptinchildren "Direct link to GetScriptInChildren") [SScriptingRuntime](/scripting/client-scripting-api-reference/components/sscriptingruntime.md) **GetScriptInChildren** (string name, bool includeInactive=false) *Returns a Scripting Runtime component attached to this object or its children by Component Name, or nil if none exist* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingRuntimeInChildren = Space.Host.ExecutingObject.GetScriptInChildren("scriptingruntimecomponentname",true) ``` ##### GetScriptInParent[​](#getscriptinparent "Direct link to GetScriptInParent") [SScriptingRuntime](/scripting/client-scripting-api-reference/components/sscriptingruntime.md) **GetScriptInParent** (string name) *Returns a Scripting Runtime component attached to this object or its parents by Component Name, or nil if none exist* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingRuntimeInParent = Space.Host.ExecutingObject.GetScript("scriptingruntimecomponentname") ``` ##### GetEvents[​](#getevents "Direct link to GetEvents") [SScriptingEvents](/scripting/client-scripting-api-reference/components/sscriptingevents.md) **GetEvents** (string name) *Function Description* | Parameter | Type | Description | | --------- | ------ | ----------- | | name | string | | * Lua ```lua scriptingEvent = Space.Host.ExecutingObject.GetEvents('ScriptingEventsComponentName') ``` ##### GetAllEventsInChildren[​](#getalleventsinchildren "Direct link to GetAllEventsInChildren") List< [SScriptingEvents](/scripting/client-scripting-api-reference/components/sscriptingevents.md) > **GetAllEventsInChildren** (string name, bool includeInactive=false) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableScriptingEvent = Space.Host.ExecutingObject.GetAllEventsInChildren ``` ##### GetEventsInChildren[​](#geteventsinchildren "Direct link to GetEventsInChildren") [SScriptingEvents](/scripting/client-scripting-api-reference/components/sscriptingevents.md) **GetEventsInChildren** (string name, bool includeInactive=false) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingEvent = Space.Host.ExecutingObject.GetEventsInChildren('ScriptingEventsComponentName') --or scriptingEvent = Space.Host.ExecutingObject.GetEventsInChildren('ScriptingEventsComponentName', true) ``` ##### GetEventsInParent[​](#geteventsinparent "Direct link to GetEventsInParent") [SScriptingEvents](/scripting/client-scripting-api-reference/components/sscriptingevents.md) **GetEventsInParent** (string name) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingEvent = Space.Host.ExecutingObject.GetEventsInParent('ScriptingEventsComponentName') ``` ##### GetResources[​](#getresources "Direct link to GetResources") [SScriptingResources](/scripting/client-scripting-api-reference/components/sscriptingresources.md) **GetResources** (string name) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.GetResources('ResourcesComponentName') ``` ##### GetAllResourcesInChildren[​](#getallresourcesinchildren "Direct link to GetAllResourcesInChildren") List< [SScriptingResources](/scripting/client-scripting-api-reference/components/sscriptingresources.md) > **GetAllResourcesInChildren** (string name, bool includeInactive=false) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableScriptingResources = Space.Host.ExecutingObject.GetAllResourcesInChildren('ScriptingResourcesComponentName') --or tableScriptingResources = Space.Host.ExecutingObject.GetAllResourcesInChildren('ScriptingResourcesComponentName', true) ``` ##### GetResourcesInChildren[​](#getresourcesinchildren "Direct link to GetResourcesInChildren") [SScriptingResources](/scripting/client-scripting-api-reference/components/sscriptingresources.md) **GetResourcesInChildren** (string name, bool includeInactive=false) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableScriptingResources = Space.Host.ExecutingObject.GetResourcesInChildren('ScriptingResourcesComponentName') --or tableScriptingResources = Space.Host.ExecutingObject.GetResourcesInChildren('ScriptingResourcesComponentName', true) ``` ##### GetResourcesInParent[​](#getresourcesinparent "Direct link to GetResourcesInParent") [SScriptingResources](/scripting/client-scripting-api-reference/components/sscriptingresources.md) **GetResourcesInParent** (string name) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableScriptingResources = Space.Host.ExecutingObject.GetResourcesInParent('ScriptingResourcesComponentName') ``` ##### GetData[​](#getdata "Direct link to GetData") [SScriptingData](/scripting/client-scripting-api-reference/components/sscriptingdata.md) **GetData** (string name) *Returns a Scripting Data component attached to this object by Component Name, or nil if none exist* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingData = Space.Host.ExecutingObject.GetData("scriptingdatacomponentname") ``` ##### GetAllDataInChildren[​](#getalldatainchildren "Direct link to GetAllDataInChildren") List< [SScriptingData](/scripting/client-scripting-api-reference/components/sscriptingdata.md) > **GetAllDataInChildren** (string name, bool includeInactive=false) *Returns Scripting Data components attached to this object by Component Name or its children* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua tableScriptingDataInChildren = Space.Host.ExecutingObject.GetAllDataInChildren("scriptingdatacomponentname",true) ``` ##### GetDataInChildren[​](#getdatainchildren "Direct link to GetDataInChildren") [SScriptingData](/scripting/client-scripting-api-reference/components/sscriptingdata.md) **GetDataInChildren** (string name, bool includeInactive=false) *Returns a Scripting Data component attached to this object or its children by Component Name, or nil if none exist* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingDataInChildren = Space.Host.ExecutingObject.GetDataInChildren("scriptingdatacomponentname",true) ``` ##### GetDataInParent[​](#getdatainparent "Direct link to GetDataInParent") [SScriptingData](/scripting/client-scripting-api-reference/components/sscriptingdata.md) **GetDataInParent** (string name) *Returns a Scripting Data component attached to this object or its parents by Component Name, or nil if none exist* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua scriptingDataInParent = Space.Host.ExecutingObject.GetDataInParent("scriptingdatacomponentname") ``` ##### AddRigidbody[​](#addrigidbody "Direct link to AddRigidbody") [SRigidbody](/scripting/client-scripting-api-reference/components/srigidbody.md) **AddRigidbody** () *Adds a Rigidbody component to the object.* * Lua ```lua newRigibodyComponent = Space.Host.ExecutingObject.AddRigidbody() ``` ##### AddNavMeshAgent[​](#addnavmeshagent "Direct link to AddNavMeshAgent") [SNavMeshAgent](/scripting/client-scripting-api-reference/components/snavmeshagent.md) **AddNavMeshAgent** () *Adds a NavMeshAgent component to the object.* * Lua ```lua newNavMeshAgentComponent = Space.Host.ExecutingObject.AddNavMeshAgent() ``` ##### AddSeat[​](#addseat "Direct link to AddSeat") [SSeat](/scripting/client-scripting-api-reference/components/sseat.md) **AddSeat** () *Adds a Seat component to the object.* * Lua ```lua newSeatComponent = Space.Host.ExecutingObject.AddSeat() ``` ##### OnAwake[​](#onawake "Direct link to OnAwake") void **OnAwake** (Closure e) *Binds a event to the Awake() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnAwake(F) ``` ##### OnStart[​](#onstart "Direct link to OnStart") void **OnStart** (Closure e) *Binds a event to the Start() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnStart(F) ``` ##### OnEnable[​](#onenable "Direct link to OnEnable") void **OnEnable** (Closure e) *Binds a event to the OnEnable() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnEnable(F) ``` ##### OnDisable[​](#ondisable "Direct link to OnDisable") void **OnDisable** (Closure e) *Binds a event to the OnDisable() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnDisable(F) ``` ##### OnFixedUpdate[​](#onfixedupdate "Direct link to OnFixedUpdate") void **OnFixedUpdate** (Closure e) *Binds a event to the OnFixedUpdate() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnFixedUpdate(F) ``` * Lua ```lua --this script will make this object move forward each physics frame thisObject = Space.Host.ExecutingObject OnFixedUpdate = function() thisObject.WorldPosition = thisObject.WorldPosition + (thisObject.Forward * 0.01 ) --unlike OnUpdate we did not multiply by Space.DeltaTime --because OnFixedUpdate executes at the same rate regardless end thisObject.OnFixedUpdate(OnFixedUpdate) ``` ##### OnLateUpdate[​](#onlateupdate "Direct link to OnLateUpdate") void **OnLateUpdate** (Closure e) *Binds a event to the OnLateUpdate() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnLateUpdate(F) ``` * Lua ```lua --this script will make this object move forward each frame --but it will be last to move among other objects (read about OnLateUpdate) --(example: camera movement) thisObject = Space.Host.ExecutingObject OnLateUpdate = function() thisObject.WorldPosition = thisObject.WorldPosition + (thisObject.Forward * 0.01 * Space.DeltaTime) --we multipy by Space.DeltaTime so that it behaves the same for all players --even though they have different FPS (frames per second) end thisObject.OnLateUpdate(OnLateUpdate) ``` ##### OnTriggerStart[​](#ontriggerstart "Direct link to OnTriggerStart") void **OnTriggerStart** (Action< SGameObject > e)
void **OnTriggerStart** (Closure e) *When a GameObject collides with another GameObject, Unity calls OnTriggerEnter.* *OnTriggerEnter happens on the FixedUpdate function when two GameObjects collide. The Colliders involved are not always at the point of initial contact.* *Note: Both GameObjects must contain a Collider component. One must have Collider.isTrigger enabled, and contain a Rigidbody. If both GameObjects have Collider.isTrigger enabled, no collision happens. The same applies when both GameObjects do not have a Rigidbody component.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnTriggerStart = function(SGameObject) Space.Log("Trigger Start") end this.OnTriggerStart (OnTriggerStart ) ``` * Lua ```lua --the below scipt makes this object a boundary area where flying gets blocked --while player is in it and flying is allowed once player leaves it --(Example: No fly zone) --[This object's collider needs to be set as IsTrigger (Please read about OnTriggerStart for troubleshooting)] thisGameObject = Space.Host.ExecutingObject OnTriggerStart = function(TriggerStarter) if TriggerStarter.Root.Avatar ~= nil then if TriggerStarter.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then Space.Scene.PlayerAvatar.BlockFly = true end end end OnTriggerExit = function(TriggerExiter) if TriggerExiter.Root.Avatar ~= nil then if TriggerExiter.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then Space.Scene.PlayerAvatar.BlockFly = false end end end thisGameObject.OnTriggerStart(OnTriggerStart) thisGameObject.OnTriggerExit(OnTriggerExit) ``` ##### OnTriggerStay[​](#ontriggerstay "Direct link to OnTriggerStay") void **OnTriggerStay** (Action< SGameObject > e)
void **OnTriggerStay** (Closure e) *OnTriggerStay is called almost all the frames for every Collider other that is touching the trigger. The function is on the physics timer so it won't necessarily run every frame.* *This message is sent to the trigger and the collider that touches the trigger. Note that trigger events are only sent if one of the colliders also has a rigidbody attached. Trigger events will be sent to disabled MonoBehaviours, to allow enabling Behaviours in response to collisions.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnTriggerStay = function(SGameObject) Space.Log("Trigger Stay") end this.OnTriggerStay(OnTriggerStay) ``` * Lua ```lua --the below scipt makes this object a boundary area where any user entering it --will be blocked from movement for 10 seconds, then the object will release controls and --destry itself after that --(Example: freezing trap) --[This object's collider needs to be set as IsTrigger (Please read about OnTriggerStart for troubleshooting)] thisGameObject = Space.Host.ExecutingObject FrozenTime = 0.0 OnTriggerStart = function(TriggerStarter) if TriggerStarter.Root.Avatar ~= nil then if TriggerStarter.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then Space.Scene.PlayerAvatar.BlockMovement = true end end end OnTriggerStay = function(TriggerStayer) if TriggerStayer.Root.Avatar ~= nil then if TriggerStayer.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then FrozenTime = FrozenTime + Space.DeltaTime if FrozenTime > 20 then Space.Scene.PlayerAvatar.BlockMovement = false thisGameObject.Destroy() end end end end thisGameObject.OnTriggerStart(OnTriggerStart) thisGameObject.OnTriggerStay(OnTriggerStay) ``` ##### OnTriggerExit[​](#ontriggerexit "Direct link to OnTriggerExit") void **OnTriggerExit** (Action< SGameObject > e)
void **OnTriggerExit** (Closure e) *OnTriggerExit is called when the Collider other has stopped touching the trigger.* *This message is sent to the trigger and the Collider that touches the trigger. Notes: Trigger events are only sent if one of the Colliders also has a Rigidbody attached. Trigger events will be sent to disabled MonoBehaviours, to allow enabling Behaviours in response to collisions. OnTriggerExit occurs on the FixedUpdate after the Colliders have stopped touching. The Colliders involved are not guaranteed to be at the point of initial separation.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnTriggerExit = function(SGameObject) Space.Log("Trigger Stay") end this.OnTriggerExit(OnTriggerExit) ``` * Lua ```lua --the below scipt makes this object a boundary area where flying gets blocked --while player is in it and flying is allowed once player leaves it --(Example: No fly zone) --[This object's collider needs to be set as IsTrigger (Please read about OnTriggerStart for troubleshooting)] thisGameObject = Space.Host.ExecutingObject OnTriggerStart = function(TriggerStarter) if TriggerStarter.Root.Avatar ~= nil then if TriggerStarter.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then Space.Scene.PlayerAvatar.BlockFly = true end end end OnTriggerExit = function(TriggerExiter) if TriggerExiter.Root.Avatar ~= nil then if TriggerExiter.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then Space.Scene.PlayerAvatar.BlockFly = false end end end thisGameObject.OnTriggerStart(OnTriggerStart) thisGameObject.OnTriggerExit(OnTriggerExit) ``` ##### OnCollisionEnter[​](#oncollisionenter "Direct link to OnCollisionEnter") void **OnCollisionEnter** (Action< SPhysicsHit > e)
void **OnCollisionEnter** (Closure e) *OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.* *In contrast to* [*OnTrigger*](/scripting/client-scripting-api-reference/types/sgameobject.md#ontriggerstart)[*Start*](/scripting/client-scripting-api-reference/types/sgameobject.md#ontriggerstart)*, OnCollisionEnter is passed the* [*SPhysicsHit*](/scripting/client-scripting-api-reference/types/sphysicshit.md) *class and not a Collider (GameObject). The SPhysicsHit class contains information, for example, about contact points and impact velocity. Notes: Collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached. Collision events will be sent to disabled MonoBehaviours, to allow enabling Behaviours in response to collisions.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnCollisionEnter = function(SPhysicsHit) Space.Log("Collision Enter") end this.OnCollisionEnter(OnCollisionEnter) ``` * Lua ```lua --this script will make this object delete itself if it collides with something --(Example: grenade) --[Make sure you add a rigibody to this object (read above about "collisions") thisGameObject = Space.Host.ExecutingObject OnCollisionEnter = function(SPhysicsHit) thisGameObject.Destroy() end thisGameObject.OnCollisionEnter(OnCollisionEnter) ``` ##### OnCollisionStay[​](#oncollisionstay "Direct link to OnCollisionStay") void **OnCollisionStay** (Action< [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md) > e)
void **OnCollisionStay** (Closure e) *OnCollisionStay is called once per frame for every collider/rigidbody that is touching rigidbody/collider.* *In contrast to* [*OnTriggerStay*](/scripting/client-scripting-api-reference/types/sgameobject.md#ontriggerstay)*, OnCollisionStay is passed the* [*SPhysicsHit*](/scripting/client-scripting-api-reference/types/sphysicshit.md) *class and not a Collider (GameObject). The* [*SPhysicsHit*](/scripting/client-scripting-api-reference/types/sphysicshit.md) *class contains information about contact points, impact velocity etc. If you don't use collisionInfo in the function, leave out the collisionInfo parameter as this avoids unneccessary calculations. Notes: Collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached. Collision events will be sent to disabled MonoBehaviours, to allow enabling Behaviours in response to collisions. Collision stay events are not sent for sleeping Rigidbodies.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnCollisionStay = function(SPhysicsHit) Space.Log("Collision Stay") end this.OnCollisionStay(OnCollisionStay) ``` * Lua ```lua --this script will make this object delete itself if --it is being touched for around 10 seconds --(Example: a flag being captured) --[Make sure this object has collider/rigidbody (read above about "collisions" for troubleshooting)] thisGameObject = Space.Host.ExecutingObject touchedTime = 0.0 OnCollisionStay = function(SPhysicsHit) touchedTime = touchedTime + Space.DeltaTime if touchedTime > 25 then thisGameObject.Destroy() end end thisGameObject.OnCollisionStay(OnCollisionStay) ``` ##### OnCollisionExit[​](#oncollisionexit "Direct link to OnCollisionExit") void **OnCollisionExit** (Action< [SPhysicsHit](/scripting/client-scripting-api-reference/types/sphysicshit.md) > e)
void **OnCollisionExit** (Closure e) *OnCollisionExit is called when this collider/rigidbody has stopped touching another rigidbody/collider.* *In contrast to OnTriggerExit, OnCollisionExit is passed the SPhysicsHit class and not a Collider. The SPhysicsHit class contains information about contact points, impact velocity etc. If you don't use collisionInfo in the function, leave out the collisionInfo parameter as this avoids unneccessary calculations. Notes: Collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached. Collision events will be sent to disabled MonoBehaviours, to allow enabling Behaviours in response to collisions.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnCollisionExit = function(SPhysicsHit) Space.Log("Collision Exit") end this.OnCollisionExit(OnCollisionExit) ``` * Lua ```lua --this script will make this object destroy itself when an object --that collided with it exits the collission --(Example: landmine) --[Make sure you add a rigibody to this object (read above about "collisions") thisGameObject = Space.Host.ExecutingObject OnCollisionExit = function(SPhysicsHit) thisGameObject.Destroy() end thisGameObject.OnCollisionExit(OnCollisionExit) ``` ##### OnParticleCollision[​](#onparticlecollision "Direct link to OnParticleCollision") void **OnParticleCollision** (Action< SGameObject > e)
void **OnParticleCollision** (Closure e) *OnParticleCollision is called when a particle hits a Collider.* *This can be used to apply damage to a GameObject when hit by particles.* *This message is sent to scripts attached to Particle Systems and to the Collider that was hit.* *When OnParticleCollision is invoked from a script attached to a GameObject with a Collider, the GameObject parameter represents the ParticleSystem. The Collider receives at most one message per Particle System that collided with it in any given frame even when the Particle System struck the Collider with multiple particles in the current frame.* *When OnParticleCollision is invoked from a script attached to a ParticleSystem, the GameObject parameter represents a GameObject with an attached Collider struck by the ParticleSystem. The ParticleSystem receives at most one message per Collider that is struck.* *Messages are only sent if you enable Send Collision Messages in the Inspector of the Particle System Collision module.* *The OnParticleCollision can be a co-routine. Simply use the yield statement in the function.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnParticleCollision = function(GameObject) Space.Log("Particle Collision") end this.OnParticleCollision(OnParticleCollision) ``` ##### OnParticleTrigger[​](#onparticletrigger "Direct link to OnParticleTrigger") void **OnParticleTrigger** (Closure e) *Binds a new event handler for the OnParticleTrigger event.* *OnParticleTrigger event is called when any particles in a Particle System meet the conditions in the trigger module.* *This can be used to kill or modify particles that are inside or outside a collision volume.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) Space.Log("Particle Trigger Event") end this.OnParticleTrigger(OnParticleTrigger) ``` ##### OnUpdate[​](#onupdate "Direct link to OnUpdate") void **OnUpdate** (Closure e) *Binds a event to the OnUpdate() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnUpdate(F) ``` * Lua ```lua --this script will make this object move forward each frame thisObject = Space.Host.ExecutingObject OnUpdate = function() thisObject.WorldPosition = thisObject.WorldPosition + (thisObject.Forward * 0.01 * Space.DeltaTime) --we multipy by Space.DeltaTime so that it behaves the same for all players --even though they have different FPS (frames per second) end thisObject.OnUpdate(OnUpdate) ``` ##### OnMouseDown[​](#onmousedown "Direct link to OnMouseDown") void **OnMouseDown** (Closure e) *Binds a event to the OnMouseDown() event.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function F() Space.Log("bound") end Space.Host.ExecutingObject.OnMouseDown(F) ``` ##### OnApplicationQuit[​](#onapplicationquit "Direct link to OnApplicationQuit") void **OnApplicationQuit** (Closure e) *Binds a new event handler for the On Application Quit event* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua this = Space.Host.ExecutingObject OnApplicationQuit = function() Space.Log("Application Quit") end this.OnApplicationQuit(OnApplicationQuit) ``` ##### CompareTag[​](#comparetag "Direct link to CompareTag") bool **CompareTag** (string tag) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isSame = Space.Host.ExecutingObject.CompareTag('tagname') ``` ##### SetParent[​](#setparent "Direct link to SetParent") void **SetParent** (SGameObject other, bool worldPositionStays=true) *Make this GameObject the child of GameObject 'other'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.SetParent(otherObjectReference,true) ``` * Lua ```lua --this script will set your avatar's "right hand" as parent of this object --this way this object will be a child of your right hand and therefore move with it --(Example: clicking on a gun to equip it) thisGameObject = Space.Host.ExecutingObject OnClick = function() RightHand = Space.Scene.PlayerAvatar.FindBone("RightHand") thisGameObject.SetParent(RightHand) thisGameObject.LocalPosition = Vector.New(0,0,0) -- resetting position to match hand end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip="Click to Equip " thisGameObject.Clickable.OnClick(OnClick) ``` ##### Find[​](#find "Direct link to Find") SGameObject **Find** (string name) *Find and return a reference to GameObject with name 'name'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua FoundObject = Space.Host.ExecutingObject.Find("GameObject Name") ``` ##### FindInChildren[​](#findinchildren "Direct link to FindInChildren") SGameObject **FindInChildren** (string name) *Find and return a reference to GameObject with name 'name' including children* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua FoundObjectInChildren = Space.Host.ExecutingObject.FindInChildren("GameObject Name") ``` ##### Destroy[​](#destroy "Direct link to Destroy") void **Destroy** () *Schedules this object for deletion at the end of the frame* * Lua ```lua Space.Host.ExecutingObject.Destroy() ``` ##### GetComponent[​](#getcomponent "Direct link to GetComponent") SComponent **GetComponent** (string name) danger Depreciated #### Properties[​](#properties "Direct link to Properties") ##### Owner[​](#owner "Direct link to Owner") long **Owner** `get` *Returns the GameObject's Owner* * Lua ```lua Owner = Space.Host.ExecutingObject.Owner ``` ##### LocalID[​](#localid "Direct link to LocalID") int **LocalID** `get` *Returns the GameObject's Local ID* * Lua ```lua LocalID = Space.Host.ExecutingObject.LocalID ``` ##### InventoryID[​](#inventoryid "Direct link to InventoryID") int **InventoryID** `get` *Return's the GameObject's InventoryID* * Lua ```lua InventoryID = Space.Host.ExecutingObject.InventoryID ``` ##### HasStableID[​](#hasstableid "Direct link to HasStableID") bool **HasStableID** `get` *Returns true if GameObject has Stable ID* * Lua ```lua HasStableID = Space.Host.ExecutingObject.HasStableID ``` ##### GlobalID[​](#globalid "Direct link to GlobalID") string? **GlobalID** `get` *Returns the global ID of the GameObject* * Lua ```lua GlobalID = Space.Host.ExecutingObject.GlobalID ``` ##### Exists[​](#exists "Direct link to Exists") bool **Exists** `get` *Does this object still exist in the scene (returns false if the object has been deleted via Destroy();)* * Lua ```lua doesExist = Space.Host.ExecutingObject.Exists ``` ##### HingeJoint[​](#hingejoint "Direct link to HingeJoint") [SHingeJoint](/scripting/client-scripting-api-reference/components/shingejoint.md) **HingeJoint** `get` *Returns a HingeJoint component attached to this object, or nil if none exist* * Lua ```lua HingeJoint = Space.Host.ExecutingObject.HingeJoint ``` ##### Light[​](#light "Direct link to Light") [SLight](/scripting/client-scripting-api-reference/components/slight.md) **Light** `get` *Returns a reference to a Light component on the object. Will return null if it does not exist.* * Lua ```lua newLightComponent = Space.Host.ExecutingObject.Light ``` ##### ReflectionProbe[​](#reflectionprobe "Direct link to ReflectionProbe") [SReflectionProbe](/scripting/client-scripting-api-reference/components/sreflectionprobe.md) **ReflectionProbe** `get` *Returns a ReflectionProbe component attached to this object, or nil if none exist* * Lua ```lua ReflectionProbe = Space.Host.ExecutingObject.ReflectionProbe ``` ##### LightInChild[​](#lightinchild "Direct link to LightInChild") [SLight](/scripting/client-scripting-api-reference/components/slight.md) **LightInChild**`get` *Returns a Light component attached to this object or its children, or nil if none exist* * Lua ```lua LightInChild = Space.Host.ExecutingObject.LightInChild ``` ##### LightInParent[​](#lightinparent "Direct link to LightInParent") [SLight](/scripting/client-scripting-api-reference/components/slight.md) **LightInParent** `get` *Returns a Light component attached to this object or it's parent, or nil if none exist* * Lua ```lua LightInParent = Space.Host.ExecutingObject.LightInParent ``` ##### Animator[​](#animator "Direct link to Animator") [SAnimator](/scripting/client-scripting-api-reference/components/sanimator.md) **Animator** `get` *Returns a reference to a Animator component on the object. Will return null if it does not exist.* * Lua ```lua animatorComponent = Space.Host.ExecutingObject.Animator ``` ##### Animation[​](#animation "Direct link to Animation") [SAnimation](/scripting/client-scripting-api-reference/components/sanimation.md) **Animation** `get` *Returns an Animation component attached to this object, or nil if none exist Animation is a legacy component and should not be confused with Animator* * Lua ```lua Animation = Space.Host.ExecutingObject.Animation ``` ##### CanvasGroup[​](#canvasgroup "Direct link to CanvasGroup") [SCanvasGroup](/scripting/client-scripting-api-reference/components/scanvasgroup.md) **CanvasGroup** `get` *Returns Canvas Group component attached to this object, or nil if none exist* * Lua ```lua CanvasGroup = Space.Host.ExecutingObject.CanvasGroup ``` ##### Audio[​](#audio "Direct link to Audio") [SAudioSource](/scripting/client-scripting-api-reference/components/saudiosource.md) **Audio** `get` *Returns a reference to a AudioSource component on the object. Will return null if it does not exist.* * Lua ```lua newAudioComponent = Space.Host.ExecutingObject.Audio ``` ##### Floor[​](#floor "Direct link to Floor") [SRoomFloor](/scripting/client-scripting-api-reference/components/sroomfloor.md) **Floor** `get` *Returns a RoomFloor component attached to this object, or nil if none exist* * Lua ```lua Floor = Space.Host.ExecutingObject.Floor ``` ##### VoiceZone[​](#voicezone "Direct link to VoiceZone") [SVoiceZone](/scripting/client-scripting-api-reference/components/svoicezone.md) **VoiceZone** `get` *Returns a VoiceZone component attached to this object, or nil if none exist* * Lua ```lua VoiceZone = Space.Host.ExecutingObject.VoiceZone ``` ##### Browser[​](#browser "Direct link to Browser") [SBrowserSurface](/scripting/client-scripting-api-reference/components/sbrowsersurface.md) **Browser** `get` *Returns a reference to a BrowserSurface component on the object. Will return null if it does not exist.* * Lua ```lua newBrowserComponent = Space.Host.ExecutingObject.Browser ``` ##### Director[​](#director "Direct link to Director") [SPlayableDirector](/scripting/client-scripting-api-reference/components/splayabledirector.md) **Director** `get` *Returns a PlayableDirector component attached to this object, or nil if none exist* * Lua ```lua Director = Space.Host.ExecutingObject.Director ``` ##### Renderer[​](#renderer "Direct link to Renderer") [SRenderer](/scripting/client-scripting-api-reference/components/srenderer.md) **Renderer** `get` *Returns a reference to a Renderer component on the object. Will return null if it does not exist.* * Lua ```lua renderer = Space.Host.ExecutingObject.Renderer ``` ##### Vehicle[​](#vehicle "Direct link to Vehicle") [SModularVehicle](/scripting/client-scripting-api-reference/components/smodularvehicle.md) **Vehicle** `get` *Returns a Modular Vehicle component attached to this object, or nil if none exist* * Lua ```lua Vehicle = Space.Host.ExecutingObject.Vehicle ``` ##### PostProcessVolume[​](#postprocessvolume "Direct link to PostProcessVolume") [SPostProcessVolume](/scripting/client-scripting-api-reference/components/spostprocessvolume.md) **PostProcessVolume** `get` *Returns a Post Process Volume component attached to this object, or nil if none exist* * Lua ```lua PostProcessVolume = Space.Host.ExecutingObject.PostProcessVolume ``` ##### Archimatix[​](#archimatix "Direct link to Archimatix") SAXModel **Archimatix** `get` *Returns a Archimatix Model ("AXModel" component) - or Nil if nothing exists* * Lua ```lua Archimatix = Space.Host.ExecutingObject.Archimatix ``` ##### Clickable[​](#clickable "Direct link to Clickable") [SClickable](/scripting/client-scripting-api-reference/components/sclickable.md) **Clickable** `get` *Returns a reference to a Clickable component on the object. Will return null if it does not exist.* * Lua ```lua clickableComponent = Space.Host.ExecutingObject.Clickable ``` ##### EmbeddedVideo[​](#embeddedvideo "Direct link to EmbeddedVideo") [SEmbeddedVideo](/scripting/client-scripting-api-reference/components/sembeddedvideo.md) **EmbeddedVideo** `get` *Returns an Embedded Video component attached to this object, or nil if none exist (may not work within editor)* * Lua ```lua EmbeddedVideo = Space.Host.ExecutingObject.EmbeddedVideo ``` ##### Avatar[​](#avatar "Direct link to Avatar") [SAvatar](/scripting/client-scripting-api-reference/types/savatar.md) **Avatar** `get` *A reference to an Avatar component on the GameObject.* * Lua ```lua Avatar = Space.Host.ExecutingObject.Avatar ``` ##### AvatarAppearance[​](#avatarappearance "Direct link to AvatarAppearance") [SAvatarAppearance](/scripting/client-scripting-api-reference/types/savatarappearance.md) **AvatarAppearance** `get` *Returns a AvatarAppearance component attached to this object, or nil if none exist* * Lua ```lua AvatarAppearance = Space.Host.ExecutingObject.AvatarAppearance ``` ##### Script[​](#script "Direct link to Script") [SScriptingRuntime](/scripting/client-scripting-api-reference/components/sscriptingruntime.md) **Script** `get` *Returns a Scripting Runtime component attached to this object, or nil if none exist* * Lua ```lua Script = Space.Host.ExecutingObject.Script ``` ##### StateMachine[​](#statemachine "Direct link to StateMachine") [SStateMachine](/scripting/client-scripting-api-reference/components/sstatemachine.md) **StateMachine** `get` *Returns a State Machine component attached to this object, or nil if none exist* * Lua ```lua StateMachine = Space.Host.ExecutingObject.StateMachine ``` ##### Networking[​](#networking "Direct link to Networking") [SNetworking](/scripting/client-scripting-api-reference/components/snetworking.md) **Networking** `get` *Returns a Simple Networking component attached to this object, or nil if none exists* * Lua ```lua SimpleNetworking = Space.Host.ExecutingObject.Networking ``` ##### Events[​](#events "Direct link to Events") [SScriptingEvents](/scripting/client-scripting-api-reference/components/sscriptingevents.md) **Events** `get` *Property Description* * Lua ```lua eventsComponent = Space.Host.ExecutingObject.Events ``` ##### Resources[​](#resources "Direct link to Resources") [SScriptingResources](/scripting/client-scripting-api-reference/components/sscriptingresources.md) **Resources** `get` *Property Description* * Lua ```lua resourcesComponent = Space.Host.ExecutingObject.Resources ``` ##### Data[​](#data "Direct link to Data") [SScriptingData](/scripting/client-scripting-api-reference/components/sscriptingdata.md) **Data** `get` *Returns a Scripting Data component attached to this object, or nil if none exist* * Lua ```lua Data = Space.Host.ExecutingObject.Data ``` ##### Rigidbody[​](#rigidbody "Direct link to Rigidbody") [SRigidbody](/scripting/client-scripting-api-reference/components/srigidbody.md) **Rigidbody** `get` *Returns a reference to a Rigidbody component on the object. Will return null if it does not exist.* * Lua ```lua rigidbodyComponent = Space.Host.ExecutingObject.Rigidbody ``` ##### Collider[​](#collider "Direct link to Collider") [SCollider](/scripting/client-scripting-api-reference/components/scollider.md) **Collider** `get` *Returns a reference to a Collider component on the object. Will return null if it does not exist.* * Lua ```lua colliderComponent = Space.Host.ExecutingObject.Collider ``` ##### BoxCollider[​](#boxcollider "Direct link to BoxCollider") [SBoxCollider](/scripting/client-scripting-api-reference/components/sboxcollider.md) **BoxCollider** `get` *Returns a Box Collider component attached to this object, or nil if none exist* * Lua ```lua BoxCollider = Space.Host.ExecutingObject.BoxCollider ``` ##### SphereCollider[​](#spherecollider "Direct link to SphereCollider") [SSphereCollider](/scripting/client-scripting-api-reference/components/sspherecollider.md) **SphereCollider** `get` *Returns a Sphere Collider component attached to this object, or nil if none exist* * Lua ```lua SphereCollider = Space.Host.ExecutingObject.SphereCollider ``` ##### CapsuleCollider[​](#capsulecollider "Direct link to CapsuleCollider") [SCapsuleCollider](/scripting/client-scripting-api-reference/components/scapsulecollider.md) **CapsuleCollider** `get` *Returns a Capsule Collider component attached to this object, or nil if none exist* * Lua ```lua CapsuleCollider = Space.Host.ExecutingObject.CapsuleCollider ``` ##### WheelCollider[​](#wheelcollider "Direct link to WheelCollider") [SWheelCollider](#) **WheelCollider** `get` *Returns a WheelCollider component attached to this object, or nil if none exist* * Lua ```lua WheelCollider = Space.Host.ExecutingObject.WheelCollider ``` ##### CharacterController[​](#charactercontroller "Direct link to CharacterController") [SCharacterController](/scripting/client-scripting-api-reference/components/scharactercontroller.md) **CharacterController** `get` *Returns a Character Controller component attached to this object, or nil if none exist* * Lua ```lua CharacterController = Space.Host.ExecutingObject.CharacterController ``` ##### AudioReactive[​](#audioreactive "Direct link to AudioReactive") [SAudioReactiveBase](/scripting/client-scripting-api-reference/components/saudioreactivebase.md) **AudioReactive** `get` *Returns the first Audio Reactive component attached to this object, or nil if none exist* * Lua ```lua AudioReactive = Space.Host.ExecutingObject.AudioReactive ``` ##### AttachmentHelper[​](#attachmenthelper "Direct link to AttachmentHelper") SAttachmentHelper **AttachmentHelper** `get` *Returns the first Attachment Helper component attached to this object, or nil if none exist* * Lua ```lua AttachmentHelper = Space.Host.ExecutingObject.AttachmentHelper ``` ##### AudioReactiveAnimation[​](#audioreactiveanimation "Direct link to AudioReactiveAnimation") [SAudioReactiveAnimation](/scripting/client-scripting-api-reference/components/saudioreactiveanimation.md) **AudioReactiveAnimation** `get` *Returns the first Audio Reactive Animation component attached to this object, or nil if none exist* * Lua ```lua AudioReactiveAnimation = Space.Host.ExecutingObject.AudioReactiveAnimation ``` ##### AudioReactiveLight[​](#audioreactivelight "Direct link to AudioReactiveLight") [SAudioReactiveLight](/scripting/client-scripting-api-reference/components/saudioreactivelight.md) **AudioReactiveLight** `get` *Returns the first Audio Reactive Light component attached to this object, or nil if none exist* * Lua ```lua AudioReactiveLight = Space.Host.ExecutingObject.AudioReactiveLight ``` ##### AudioReactiveParticleSystem[​](#audioreactiveparticlesystem "Direct link to AudioReactiveParticleSystem") [SAudioReactiveParticleSystem](/scripting/client-scripting-api-reference/components/saudioreactiveparticlesystem.md) **AudioReactiveParticleSystem** `get` *Returns the first Audio Reactive Particle System component attached to this object, or nil if none exist* * Lua ```lua AudioReactiveParticleSystem = Space.Host.ExecutingObject.AudioReactiveParticleSystem ``` ##### AudioReactiveMaterial[​](#audioreactivematerial "Direct link to AudioReactiveMaterial") [SAudioReactiveMaterial](/scripting/client-scripting-api-reference/components/saudioreactivelight.md) **AudioReactiveMaterial** `get` *Returns the first Audio Reactive Material component attached to this object, or nil if none exist* * Lua ```lua AudioReactiveMaterial = Space.Host.ExecutingObject.AudioReactiveMaterial ``` ##### AudioReactiveTransform[​](#audioreactivetransform "Direct link to AudioReactiveTransform") [SAudioReactiveTransform](/scripting/client-scripting-api-reference/components/saudioreactivetransform.md) **AudioReactiveTransform** `get` *Returns the first Audio Reactive Transform component attached to this object, or nil if none exist* * Lua ```lua AudioReactiveTransform = Space.Host.ExecutingObject.AudioReactiveTransform ``` ##### TrailRenderer[​](#trailrenderer "Direct link to TrailRenderer") [STrailRenderer](/scripting/client-scripting-api-reference/components/strailrenderer.md) **TrailRenderer** `get` *Returns a Trail Renderer component attached to this object, or nil if none exist* * Lua ```lua TrailRenderer = Space.Host.ExecutingObject.TrailRenderer ``` ##### LineRenderer[​](#linerenderer "Direct link to LineRenderer") [SLineRenderer](/scripting/client-scripting-api-reference/components/slinerenderer.md) **LineRenderer** `get` *Returns a Line Renderer component attached to this object, or nil if none exist* * Lua ```lua LineRenderer = Space.Host.ExecutingObject.LineRenderer ``` ##### UILayout[​](#uilayout "Direct link to UILayout") [SUILayout](/scripting/client-scripting-api-reference/components/suilayout.md) **UILayout** `get` *Returns a Renderer component attached to this object, or nil if none exist* * Lua ```lua UILayout = Space.Host.ExecutingObject.UILayout ``` ##### UIToggle[​](#uitoggle "Direct link to UIToggle") [SUIToggle](/scripting/client-scripting-api-reference/components/suitoggle.md) **UIToggle** `get` *Returns a Unity uGUI Toggle component attached to this object, or nil if none exist* * Lua ```lua UIToggle = Space.Host.ExecutingObject.UIToggle ``` ##### UIDropdown[​](#uidropdown "Direct link to UIDropdown") [SUIDropdown](/scripting/client-scripting-api-reference/components/suidropdown.md) **UIDropdown** `get` *Returns a Unity uGUI Dropdown component attached to this object, or nil if none exist* * Lua ```lua UIDropdown = Space.Host.ExecutingObject.UIDropdown ``` ##### UIButton[​](#uibutton "Direct link to UIButton") [SUIButton](/scripting/client-scripting-api-reference/components/suibutton.md) **UIButton** `get` *Returns a Unity uGUI Dropdown component attached to this object, or nil if none exist* * Lua ```lua UIButton = Space.Host.ExecutingObject.UIButton ``` ##### UIText[​](#uitext "Direct link to UIText") [SUIText](/scripting/client-scripting-api-reference/components/suitext.md) **UIText** `get` *Returns a reference to a UI.Text component on the object. Will return null if it does not exist.* * Lua ```lua uitext = Space.Host.ExecutingObject.UIText ``` ##### UISlider[​](#uislider "Direct link to UISlider") [SUISlider](/scripting/client-scripting-api-reference/components/suislider.md) **UISlider** `get` *Returns a Unity uGUI Slider component attached to this object, or nil if none exist* * Lua ```lua UISlider = Space.Host.ExecutingObject.UISlider ``` ##### UIScrollbar[​](#uiscrollbar "Direct link to UIScrollbar") [SUIScrollbar](/scripting/client-scripting-api-reference/components/suiscrollbar.md) **UIScrollbar** `get` *Returns a Unity uGUI Scrollbar component attached to this object, or nil if none exist* * Lua ```lua UIScrollbar = Space.Host.ExecutingObject.UIScrollbar ``` ##### UICanvas[​](#uicanvas "Direct link to UICanvas") [SUICanvas](/scripting/client-scripting-api-reference/components/suicanvas.md) **UICanvas** `get` *Returns a Unity uGUI Canvas component attached to this object, or nil if none exist* * Lua ```lua UICanvas = Space.Host.ExecutingObject.UICanvas ``` ##### UIImage[​](#uiimage "Direct link to UIImage") [SUIImage](/scripting/client-scripting-api-reference/components/suiimage.md) **UIImage** `get` *Returns a Unity uGUI Image component attached to this object, or nil if none exist* * Lua ```lua UIImage = Space.Host.ExecutingObject.UIImage ``` ##### UIRawImage[​](#uirawimage "Direct link to UIRawImage") [SUIRawImage](/scripting/client-scripting-api-reference/components/suirawimage.md) **UIRawImage** `get` *Returns a Unity uGUI Text component attached to this object, or nil if none exist* * Lua ```lua UIRawImage = Space.Host.ExecutingObject.UIRawImage ``` ##### UIInputField[​](#uiinputfield "Direct link to UIInputField") [SUIInputField](/scripting/client-scripting-api-reference/components/suiinputfield.md) **UIInputField** `get` *Returns a Unity uGUI Text component attached to this object, or nil if none exist* * Lua ```lua UIInputField = Space.Host.ExecutingObject.UIInputField ``` ##### UIToolTipHint[​](#uitooltiphint "Direct link to UIToolTipHint") [SUIToolTipHint](/scripting/client-scripting-api-reference/components/suitooltiphint.md) **UIToolTipHint** `get` *Property Description* * Lua ```lua tooltipHint = Space.Host.ExecutingObject.UIToolTipHint ``` ##### Camera[​](#camera "Direct link to Camera") [SCamera](/scripting/client-scripting-api-reference/components/scamera.md) **Camera** `get` *Property Description* * Lua ```lua camera = Space.Host.ExecutingObject.Camera ``` ##### VirtualCamera[​](#virtualcamera "Direct link to VirtualCamera") [SVirtualCamera](/scripting/client-scripting-api-reference/components/svirtualcamera.md) **VirtualCamera** `get` *Returns a VirtualCamera component attached to this object, or nil if none exists* * Lua ```lua VirtualCamera = Space.Host.ExecutingObject.VirtualCamera ``` ##### Cloth[​](#cloth "Direct link to Cloth") [SCloth](/scripting/client-scripting-api-reference/components/scloth.md) **Cloth** `get` *Returns a Cloth component attached to this object, or nil if none exists* * Lua ```lua Cloth = Space.Host.ExecutingObject.Cloth ``` ##### MeshRenderer[​](#meshrenderer "Direct link to MeshRenderer") [SMeshRenderer](/scripting/client-scripting-api-reference/components/smeshrenderer.md) **MeshRenderer** `get` *Returns a MeshRenderer component attached to this object, or nil if none exists* * Lua ```lua MeshRenderer = Space.Host.ExecutingObject.MeshRenderer ``` ##### Furniture[​](#furniture "Direct link to Furniture") [SFurniture](/scripting/client-scripting-api-reference/components/sfurniture.md) **Furniture** `get` *Returns a Furniture component attached to this object, or nil if none exists* * Lua ```lua Furniture = Space.Host.ExecutingObject.Furniture ``` ##### NavMeshAgent[​](#navmeshagent "Direct link to NavMeshAgent") [SNavMeshAgent](/scripting/client-scripting-api-reference/components/snavmeshagent.md) **NavMeshAgent** `get` *Adds a NavMeshAgent component to the object.* * Lua ```lua navMeshAgent = Space.Host.ExecutingObject.AddNavMeshAgent() ``` ##### NavMeshObstacle[​](#navmeshobstacle "Direct link to NavMeshObstacle") [SNavMeshObstacle](/scripting/client-scripting-api-reference/components/snavmeshobstacle.md) **NavMeshObstacle** `get` *Returns a NavMeshObstacle component attached to this object, or nil if none exists* * Lua ```lua NavMeshObstacle = Space.Host.ExecutingObject.NavMeshObstacle ``` ##### ParticleSystem[​](#particlesystem "Direct link to ParticleSystem") [SParticleSystem](/scripting/client-scripting-api-reference/components/sparticlesystem.md) **ParticleSystem** `get` *Returns a ParticleSystem component attached to this object, or nil if none exists* * Lua ```lua ParticleSystem = Space.Host.ExecutingObject.ParticleSystem ``` ##### RectTransform[​](#recttransform "Direct link to RectTransform") [SRectTransform](/scripting/client-scripting-api-reference/components/srecttransform.md) **RectTransform** `get` *Returns a RectTransform component attached to this object, or nil if none exists* * Lua ```lua RectTransform = Space.Host.ExecutingObject.RectTransform ``` ##### Seat[​](#seat "Direct link to Seat") [SSeat](/scripting/client-scripting-api-reference/components/sseat.md) **Seat** `get` *Returns a reference to a Seat component on the object. Will return null if it does not exist.* * Lua ```lua seatComponent = Space.Host.ExecutingObject.AddSeat() ``` ##### SkinnedMeshRenderer[​](#skinnedmeshrenderer "Direct link to SkinnedMeshRenderer") [SSkinnedMeshRenderer](/scripting/client-scripting-api-reference/components/sskinnedmeshrenderer.md) **SkinnedMeshRenderer** `get` *Returns a SkinnedMeshRenderer component attached to this object, or nil if none exists* * Lua ```lua SkinnedMeshRenderer = Space.Host.ExecutingObject.SkinnedMeshRenderer ``` ##### Radio[​](#radio "Direct link to Radio") [SSceneBackgroundMusic](/scripting/client-scripting-api-reference/components/sscenebackgroundmusic.md) **Radio** `get` *Returns a SceneBackgroundMusic component attached to this object, or nil if none exists* * Lua ```lua Radio = Space.Host.ExecutingObject.Radio ``` ##### Terrain[​](#terrain "Direct link to Terrain") [STerrain](/scripting/client-scripting-api-reference/components/sterrain.md) **Terrain** `get` *Returns a Terrain component attached to this object, or nil if none exists* * Lua ```lua Terrain = Space.Host.ExecutingObject.Terrain ``` ##### AnalyticsEvent[​](#analyticsevent "Direct link to AnalyticsEvent") SAnalyticsEvent **AnalyticsEvent** `get` *Property Description* * Lua ```lua analyticsEvent = Space.Host.ExecutingObject.AnalyticsEvent ``` ##### GraphicRaycaster[​](#graphicraycaster "Direct link to GraphicRaycaster") [SGraphicRaycaster](/scripting/client-scripting-api-reference/components/sgraphicraycaster.md) **GraphicRaycaster** `get` *Property Description* * Lua ```lua graphicRaycaster = Space.Host.ExecutingObject.GraphicRaycaster ``` ##### ContentSizeFitter[​](#contentsizefitter "Direct link to ContentSizeFitter") SContentSizeFitter **ContentSizeFitter** `get` *Property Description* * Lua ```lua contentSzeFitter = Space.Host.ExecutingObject.ContentSizeFitter ``` ##### Active[​](#active "Direct link to Active") bool **Active** `get` `set` *Is this object Active in the scene* * Lua ```lua Space.Host.ExecutingObject.Active = false ``` * Lua ```lua --the below script will make this object become inactive --after being being clicked --(Example: picking up fruits) thisGameObject = Space.Host.ExecutingObject OnClick = function() thisGameObject.Active = false end thisGameObject.AddClickable() thisGameObject.Clickable.Tooltip="Pick me!" thisGameObject.Clickable.OnClick(OnClick) ``` ##### ActiveSelf[​](#activeself "Direct link to ActiveSelf") bool **ActiveSelf** `get` `set` *Returns true if GameObject is Active (even if it's parent is not active)* * Lua ```lua Space.Host.ExecutingObject.ActiveSelf = false ``` ##### Layer[​](#layer "Direct link to Layer") int **Layer** `get` `set` *Gets/Sets the object onto a particular layer (0-31)* * Lua ```lua Space.Host.ExecutingObject.Layer = 21 ``` ##### Tag[​](#tag "Direct link to Tag") string **Tag** `get` *Gets this objects Tag* * Lua ```lua objectTag = Space.Host.ExecutingObject.Tag ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` `set` *Gets/sets the name of this object* * Lua ```lua Space.Host.ExecutingObject.Name = 'Hello World!' ``` ##### Moniker[​](#moniker "Direct link to Moniker") string? **Moniker** `get` `set` *Property Description* * Lua ```lua Space.Host.ExecutingObject.Moniker = 'New Moniker' ``` ##### Parent[​](#parent "Direct link to Parent") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Parent** `get` `set` *Gets/sets the parent GameObject of this object. Assign nil/null to set this as the root.* * Lua ```lua Space.Host.ExecutingObject.Parent = Space.Host.GetReference("TheOtherObject") ``` ##### Root[​](#root "Direct link to Root") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **Root** `get` *Gets the root of this object group - may be this object.* * Lua ```lua objectRoot = Space.Host.ExecutingObject.Root ``` ##### Children[​](#children "Direct link to Children") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md)\[] **Children** `get` *Returns the list of direct children of this object.* * Lua ```lua tableChildren = Space.Host.ExecutingObject.Children ``` ##### WorldPosition[​](#worldposition "Direct link to WorldPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **WorldPosition** `get` `set` *Gets or sets the current position of this object relative to the scene* * Lua ```lua Space.Host.ExecutingObject.WorldPosition = Vector.New(1,1,1) ``` ##### LocalPosition[​](#localposition "Direct link to LocalPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **LocalPosition** `get` `set` *Gets or sets the current position of this object relative to the objects parent, taking into account local position/scale/rotation* * Lua ```lua Space.Host.ExecutingObject.LocalPosition = Vector.New(1,1,1) ``` ##### WorldRotation[​](#worldrotation "Direct link to WorldRotation") [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) **WorldRotation** `get` `set` *Gets or sets the current rotation of this object relative to the scene* * Lua ```lua Space.Host.ExecutingObject.WorldRotation = Quaternion.Euler(0,180,0) ``` ##### LocalRotation[​](#localrotation "Direct link to LocalRotation") [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) **LocalRotation** `get` `set` *Gets or sets the current rotation of this object relative to the parent object* * Lua ```lua Space.Host.ExecutingObject.LocalRotation = Quaternion.Euler(0,180,0) ``` ##### LocalScale[​](#localscale "Direct link to LocalScale") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **LocalScale** `get` `set` *Gets or sets the current scale of this object relative to the parent* * Lua ```lua Space.Host.ExecutingObject.LocalScale = Vector.New(2,2,2) ``` ##### WorldScale[​](#worldscale "Direct link to WorldScale") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **WorldScale** `get` *Gets the current scale of this object relative to the scene* * Lua ```lua worldScale = Space.Host.ExecutingObject.WorldScale ``` ##### Forward[​](#forward "Direct link to Forward") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Forward** `get` *Returns the forward direction vector of this game object (blue arrow)* * Lua ```lua vectorForward = Space.Host.ExecutingObject.Forward ``` ##### Up[​](#up "Direct link to Up") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Up** `get` *Returns the up direction vector of this game object (green arrow)* * Lua ```lua vectorUp = Space.Host.ExecutingObject.Up ``` ##### Right[​](#right "Direct link to Right") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Right** `get` *Returns the right direction vector of this game object (red arrow)* * Lua ```lua vectorRight = Space.Host.ExecutingObject.Right ``` ##### **EventCalendar**[​](#eventcalendar "Direct link to eventcalendar") [SEventCalendar](/scripting/client-scripting-api-reference/components/seventcalendar.md) **EventCalendar** `get` *Returns an EventCalendar component attached to this object, or nil if none exists* * Lua ```lua EventCalendar = Space.Host.ExecutingObject.EventCalendar ``` --- ### SGenre #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------- | | override string [**ToString** ](/scripting/client-scripting-api-reference/types/sgenre.md#tostring)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------------- | | string [**Name** ](/scripting/client-scripting-api-reference/types/sgenre.md#name)`get` `set` | | string [**ID** ](/scripting/client-scripting-api-reference/types/sgenre.md#id)`get` `set` | | string [**HasChildren** ](/scripting/client-scripting-api-reference/types/sgenre.md#haschildren)`get` `set` | | string [**ParentID** ](/scripting/client-scripting-api-reference/types/sgenre.md#parentid)`get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### ToString[​](#tostring "Direct link to ToString") override string **ToString** () *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` #### Properties[​](#properties "Direct link to Properties") ##### Name[​](#name "Direct link to Name") string **Name** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### ID[​](#id "Direct link to ID") string **ID** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### HasChildren[​](#haschildren "Direct link to HasChildren") string **HasChildren** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### ParentID[​](#parentid "Direct link to ParentID") string **ParentID** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SGroupInfo #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------- | | int [**ID** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#id)`get` | | int [**OwnerID** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#ownerid)`get` | | string [**Name** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#name)`get` | | string [**Description** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#description)`get` | | string [**Access** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#access)`get` | | string [**ImageUrl** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#imageurl)`get` | | int [**MaxAvatars** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#maxavatars)`get` | | string [**Role** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#role)`get` | | string [**CreateDate** ](/scripting/client-scripting-api-reference/types/sgroupinfo.md#createdate)`get` | #### Properties[​](#properties "Direct link to Properties") ##### ID[​](#id "Direct link to ID") int **ID** `get` *The ID of the group.* * Lua ```lua ID = Space.Groups.GetGroupInfo(350).ID ``` ##### OwnerID[​](#ownerid "Direct link to OwnerID") int **OwnerID** `get` *The ID of the group's owner.* * Lua ```lua OwnerID = Space.Groups.GetGroupInfo(350).OwnerID ``` * Lua ```lua --Clicking this object will show canvas1 if you are a group's owner --and will show canvas2 if you are not thisObject = Space.Host.ExecutingObject canvas1 = Space.Host.GetReference("canvas1")--Add this object with canvas as reference in Scripting Runtime canvas2 = Space.Host.GetReference("canvas2")--Add this object with canvas as reference in Scripting Runtime OnClickFunction = function() local groupInfo = Space.Groups.GetGroupInfo(350) if groupInfo.OwnerID == Space.Scene.PlayerAvatar.ID then canvas1.Active = true else canvas2.Active = true end end ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *The name of the group.* * Lua ```lua Name = Space.Groups.GetGroupInfo(350).Name ``` * Lua ```lua --Clicking this object will show group 355's Name on a UIText object thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnClickFunction = function() GroupInfo = Space.Groups.GetGroupInfo(350) uiText.Text = GroupInfo.Name end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Description[​](#description "Direct link to Description") string **Description** `get` *The description of the group.* * Lua ```lua Description =Space.Groups.GetGroupInfo(350).Description ``` * Lua ```lua --Clicking this object will show group 355's Description on a UIText object thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnClickFunction = function() GroupInfo = Space.Groups.GetGroupInfo(350) uiText.Text = GroupInfo.Description end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Access[​](#access "Direct link to Access") string **Access** `get` *The level of access the group has, e.g. public or private.* * Lua ```lua Access = Space.Groups.GetGroupInfo(350).Access ``` * Lua ```lua --Clicking this object will show group 355's Access on a UIText object thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnClickFunction = function() GroupInfo = Space.Groups.GetGroupInfo(350) uiText.Text = GroupInfo.Access end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### ImageUrl[​](#imageurl "Direct link to ImageUrl") string **ImageUrl** `get` *The URL of the group's image.* * Lua ```lua ImageUrl = Space.Groups.GetGroupInfo(350).ImageUrl ``` * Lua ```lua --Clicking this object will show group 355's ImageUrl on a UIText object thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnClickFunction = function() GroupInfo = Space.Groups.GetGroupInfo(350) uiText.Text = GroupInfo.ImageUrl end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### MaxAvatars[​](#maxavatars "Direct link to MaxAvatars") int **MaxAvatars** `get` *The max number of members the group can have.* * Lua ```lua MaxAvatars = Space.Groups.GetGroupInfo(350).MaxAvatars ``` * Lua ```lua --Clicking this object will show group 355's MaxAvatars on a UIText object thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnClickFunction = function() GroupInfo = Space.Groups.GetGroupInfo(350) uiText.Text = GroupInfo.MaxAvatars end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Role[​](#role "Direct link to Role") string **Role** `get` *Player's role in this group.* * Lua ```lua Role = Space.Groups.GetGroupInfo(350).Role ``` * Lua ```lua --Clicking this object will show canvas1 if you are a VIP in the group --and will show canvas2 if you are a regular member --and will show canvas3 if you are the group owner thisObject = Space.Host.ExecutingObject canvas1 = Space.Host.GetReference("canvas1")--Add this object with canvas as reference in Scripting Runtime canvas2 = Space.Host.GetReference("canvas2")--Add this object with canvas as reference in Scripting Runtime canvas3 = Space.Host.GetReference("canvas3")--Add this object with canvas as reference in Scripting Runtime OnClickFunction = function() local groupInfo = Space.Groups.GetGroupInfo(350) if groupInfo.Role == "Owner" then canvas3.Active = true elseif groupInfo.Role == "VIP" then canvas1.Active = true elseif groupInfo.Role == "Normal" then canvas2.Active = true end end ``` ##### CreateDate[​](#createdate "Direct link to CreateDate") string **CreateDate** `get` *Creation date of the group.* * Lua ```lua CreateDate = Space.Groups.GetGroupInfo(350).CreateDate ``` * Lua ```lua --Clicking this object will show group 355's creation date on a UIText object thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnClickFunction = function() CreateDate = Space.Groups.GetGroupInfo(350).CreateDate uiText.Text = CreateDate end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` --- ### SInventoryItem #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------- | | bool [**StoreCustomData** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#storecustomdata)(string data) | | void [**Use** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#use)() | | void [**Delete** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#delete)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------- | | long [**MasterID** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#masterid)`get` | | long [**PlayerItemID** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#playeritemid)`get` | | string [**Name** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#name)`get` | | string [**Description** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#description)`get` | | string [**Brand** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#brand)`get` | | string [**CustomData** ](/scripting/client-scripting-api-reference/types/sinventoryitem.md#customdata)`get` | #### Functions[​](#functions "Direct link to Functions") ##### StoreCustomData[​](#storecustomdata "Direct link to StoreCustomData") bool **StoreCustomData** (string data) *Updates the inventory items custom data, and requests a synchronisation with the inventory server. It may not update on the server immediately, but all local calls will reflect the new data. Note: this request can be rate limited and should only be called from a user initiated action (such as clicking a button). Updates to custom data must not be initiated on a timer or regular automatic event. Access to this function can be blacklisted to specific creators if abused.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Items = Space.Inventory.Items Items[1].StoreCustomData('data1data2data3') ``` ##### Use[​](#use "Direct link to Use") void **Use** () *Player will 'Use' this item. (White-label only)* * Lua ```lua Items = Space.Inventory.Items Items[1].Use() ``` ##### Delete[​](#delete "Direct link to Delete") void **Delete** () *Player will 'Delete' this item. (White-label only)* * Lua ```lua Items = Space.Inventory.Items Items[1].Delete() ``` #### Properties[​](#properties "Direct link to Properties") ##### MasterID[​](#masterid "Direct link to MasterID") long **MasterID** `get` *The master ID for this item - also known as the Curator ID or Item ID, this is the ID for the master item from which this copy exists.* * Lua ```lua Items = Space.Inventory.Items iMasterID = Items[1].MasterID ``` ##### PlayerItemID[​](#playeritemid "Direct link to PlayerItemID") long **PlayerItemID** `get` *The instance ID for this item - this is guaranteed to be unique per inventory item* * Lua ```lua Items = Space.Inventory.Items iPlayerItemID= Items[1].PlayerItemID ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *Returns the name of the inventory item* * Lua ```lua Items = Space.Inventory.Items iName= Items[1].Name ``` ##### Description[​](#description "Direct link to Description") string **Description** `get` *Returns the registered description of the inventory item in the users locale* * Lua ```lua Items = Space.Inventory.Items iDescription=Items[1].Description ``` ##### Brand[​](#brand "Direct link to Brand") string **Brand** `get` *Returns brand information about the item* * Lua ```lua Items = Space.Inventory.Items iBrand = Items[1].Brand ``` ##### CustomData[​](#customdata "Direct link to CustomData") string **CustomData** `get` *Returns any custom data associated with this item, typically used for 'game' items* * Lua ```lua Items = Space.Inventory.Items iCustomData = Items[1].CustomData ``` --- ### SJointLimits #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | override string [**ToString** ](/scripting/client-scripting-api-reference/types/sjointlimits.md#tostring)() | | static SJointLimits [**New** ](/scripting/client-scripting-api-reference/types/sjointlimits.md#new)(float min, float max, float bounciness, float bounceMinVelocity, float contactDistance) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------------------- | | float [**Min** ](/scripting/client-scripting-api-reference/types/sjointlimits.md#min)`get` `set` | | float [**Max** ](/scripting/client-scripting-api-reference/types/sjointlimits.md#max)`get` `set` | | float [**Bounciness** ](/scripting/client-scripting-api-reference/types/sjointlimits.md#bounciness)`get` `set` | | float [**BounceMinVelocity** ](/scripting/client-scripting-api-reference/types/sjointlimits.md#bounceminvelocity)`get` `set` | | float [**ContactDistance** ](/scripting/client-scripting-api-reference/types/sjointlimits.md#contactdistance)`get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### ToString[​](#tostring "Direct link to ToString") override string **ToString** () *Returns this SJointLimits's properties as a string* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua LimitsString = Space.Host.ExecutingObject.HingeJoint.Limits.ToString() ``` * Lua ```lua --the below script will make a UI Text element display this GameObjects Hinge Joint Limits' properties --[Add "thetext" and "thehingejoint" reference to the Scripting Runtime component] thisObject = Space.Host.ExecutingObject text = Space.Host.GetReference("thetext").UIText hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint function OnUpdateFunction() limits = hingejoint.Limits text.Text = limits.ToString() end thisObject.OnUpdate(OnUpdateFunction) ``` ##### New[​](#new "Direct link to New") static SJointLimits **New** (float min, float max, float bounciness, float bounceMinVelocity, float contactDistance) *Creates a new SJoinLimits with the given min, max, bounciness, bounceMinVelocity and contactDistance.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Limits = Space.Host.ExecutingObject.HingeJoint.Limits.New((1,2,3,4,5)) ``` * Lua ```lua --the below script will change all Hinge Joint Limits properties to 0 when clicked --[Add "thehingejoint" reference to the Scripting Runtime component] thisObject = Space.Host.ExecutingObject hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint function OnClickFunction() limits = hingejoint.Limits hingejoint.Limits = limits.New(0,0,0,0,0) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### Min[​](#min "Direct link to Min") float **Min** `get` `set` *The lower angular limit (in degrees) of the joint.* * Lua ```lua LimitsMin = Space.Host.ExecutingObject.HingeJoint.Limits.Min ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Limits Min property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() limits = hingejoint.Limits limits.Min = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Limits = limits end slider.OnValueChanged(OVC) ``` ##### Max[​](#max "Direct link to Max") float **Max** `get` `set` *The upper angular limit (in degrees) of the joint.* * Lua ```lua LimitsMax= Space.Host.ExecutingObject.HingeJoint.Limits.Max ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Limits Max property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() limits = hingejoint.Limits limits.Max = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Limits = limits end slider.OnValueChanged(OVC) ``` ##### Bounciness[​](#bounciness "Direct link to Bounciness") float **Bounciness** `get` `set` *Determines the size of the bounce when the joint hits it's limit. Also known as restitution.* * Lua ```lua LimitsBounciness = Space.Host.ExecutingObject.HingeJoint.Limits.Bounciness ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Limits Bounciness property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() limits = hingejoint.Limits limits.Bounciness = (slider.Value * 1.0) -- from 0.0 to 1.0 hingejoint.Limits = limits end slider.OnValueChanged(OVC) ``` ##### BounceMinVelocity[​](#bounceminvelocity "Direct link to BounceMinVelocity") float **BounceMinVelocity** `get` `set` *The minimum impact velocity which will cause the joint to bounce.* * Lua ```lua LimitsBounceMinVelocity = Space.Host.ExecutingObject.HingeJoint.Limits.BounceMinVelocity ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Limits BounceMinVelocity property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() limits = hingejoint.Limits limits.BounceMinVelocity = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Limits = limits end slider.OnValueChanged(OVC) ``` ##### ContactDistance[​](#contactdistance "Direct link to ContactDistance") float **ContactDistance** `get` `set` *Distance inside the limit value at which the limit will be considered to be active by the solver.* * Lua ```lua LimitsContactDistance = Space.Host.ExecutingObject.HingeJoint.Limits.ContactDistance ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Limits Contact Distance property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() limits = hingejoint.Limits limits.ContactDistance = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Limits = limits end slider.OnValueChanged(OVC) ``` --- ### SJointMotor #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------- | | override string [**ToString** ](/scripting/client-scripting-api-reference/types/sjointmotor.md#tostring)() | | static SJointMotor [**New** ](/scripting/client-scripting-api-reference/types/sjointmotor.md#new)(float targetVelocity, float force, bool freeSpin) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------------------- | | float [**TargetVelocity** ](/scripting/client-scripting-api-reference/types/sjointmotor.md#targetvelocity)`get` | | float [**Force** ](/scripting/client-scripting-api-reference/types/sjointmotor.md#force)`get` | | bool [**FreeSpin** ](/scripting/client-scripting-api-reference/types/sjointmotor.md#freespin)`get` | #### Functions[​](#functions "Direct link to Functions") ##### ToString[​](#tostring "Direct link to ToString") override string **ToString** () *Returns this SJointMotor's properties as a string* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua MotorString = Space.Host.ExecutingObject.HingeJoint.Motor.ToString() ``` * Lua ```lua --the below script will make a UI Text element display this GameObjects Hinge Joint Motor properties --[Add "thetext" and "thehingejoint" reference to the Scripting Runtime component] thisObject = Space.Host.ExecutingObject text = Space.Host.GetReference("thetext").UIText hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint function OnUpdateFunction() motor = hingejoint.Motor text.Text = motor.ToString() end thisObject.OnUpdate(OnUpdateFunction) ``` ##### New[​](#new "Direct link to New") static SJointMotor **New** (float targetVelocity, float force, bool freeSpin) *Creates a new SJointMotor with the given targetVelocity, force, freeSpin.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Motor= Space.Host.ExecutingObject.HingeJoint.Motor.New(1,2,true) ``` * Lua ```lua --the below script will change all Hinge Joint Motor properties to 0 when clicked --[Add "thehingejoint" reference to the Scripting Runtime component] thisObject = Space.Host.ExecutingObject hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint function OnClickFunction() motor = hingejoint.Motor hingejoint.Motor = motor.New(0,0,false) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### TargetVelocity[​](#targetvelocity "Direct link to TargetVelocity") float **TargetVelocity**`get` *The motor will apply a force up to force to achieve targetVelocity.* * Lua ```lua MotorTargetVelocity = Space.Host.ExecutingObject.HingeJoint.Motor.TargetVelocity ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Motor TargetVelocity property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() motor = hingejoint.Motor motor.TargetVelocity = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Motor = motor end slider.OnValueChanged(OVC) ``` ##### Force[​](#force "Direct link to Force") float **Force**`get` *The motor will apply a force.* * Lua ```lua MotorForce= Space.Host.ExecutingObject.HingeJoint.Motor.Force ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Motor Force property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() motor = hingejoint.Motor motor.Force = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Motor = motor end slider.OnValueChanged(OVC) ``` ##### FreeSpin[​](#freespin "Direct link to FreeSpin") bool **FreeSpin**`get` *If freeSpin is enabled the motor will only accelerate but never slow down.* * Lua ```lua MotorFreeSpin = Space.Host.ExecutingObject.HingeJoint.Motor.FreeSpin ``` * Lua ```lua --the below script will toggle Hinge Joint Motor FreeSpin property --[Add "thehingejoint" reference to the Scripting Runtime component] thisGameObject = Space.Host.ExecutingObject hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint function OnClickFunction() motor = hingejoint.Motor motor.FreeSpin = not motor.FreeSpin hingejoint.Motor = motor end thisGameObject.AddClickable() thisGameObject.Clickable.OnClick(OnClickFunction) ``` --- ### SJointSpring #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function Name | | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | override string [**ToString** ](/scripting/client-scripting-api-reference/types/sjointspring.md#tostring)() | | static SJointSpring [**New** ](/scripting/client-scripting-api-reference/types/sjointspring.md#new)(float spring, float damper, float targetPosition) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ---------------------------------------------------------------------------------------------------------------- | | float [**Spring** ](/scripting/client-scripting-api-reference/types/sjointspring.md#spring)`get` | | float [**Damper** ](/scripting/client-scripting-api-reference/types/sjointspring.md#damper)`get` | | float [**TargetPosition** ](/scripting/client-scripting-api-reference/types/sjointspring.md#targetposition)`get` | #### Functions[​](#functions "Direct link to Functions") ##### ToString[​](#tostring "Direct link to ToString") override string **ToString** () *Returns this SJointSpring's properties as a string* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua SpringString = Space.Host.ExecutingObject.HingeJoint.Spring.ToString() ``` * Lua ```lua --the below script will make a UI Text element display this GameObjects Hinge Joint Spring properties --[Add "thetext" and "thehingejoint" reference to the Scripting Runtime component] thisObject = Space.Host.ExecutingObject text = Space.Host.GetReference("thetext").UIText hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint function OnUpdateFunction() spring = hingejoint.Spring text.Text = spring.ToString() end thisObject.OnUpdate(OnUpdateFunction) ``` ##### New[​](#new "Direct link to New") static SJointSpring **New** (float spring, float damper, float targetPosition) *Creates a new SJointSpring with the given spring, damper, targetPosition.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Motor= Space.Host.ExecutingObject.HingeJoint.Spring.New(1,2,3) ``` * Lua ```lua --the below script will change all Hinge Joint Spring properties to 0 when clicked --[Add "thehingejoint" reference to the Scripting Runtime component] thisObject = Space.Host.ExecutingObject hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint function OnClickFunction() spring = hingejoint.Spring hingejoint.Spring = spring .New(0,0,0) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### Spring[​](#spring "Direct link to Spring") float **Spring**`get` *The spring forces used to reach the target position.* * Lua ```lua SpringSpring= Space.Host.ExecutingObject.HingeJoint.Spring.Spring ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Spring Spring property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() spring = hingejoint.Spring spring.Spring = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Spring= spring end slider.OnValueChanged(OVC) ``` ##### Damper[​](#damper "Direct link to Damper") float **Damper**`get` *The damper force uses to dampen the spring.* * Lua ```lua SpringDamper= Space.Host.ExecutingObject.HingeJoint.Spring.Damper ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Spring Damper property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() spring = hingejoint.Spring spring.Damper = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Spring = spring end slider.OnValueChanged(OVC) ``` ##### TargetPosition[​](#targetposition "Direct link to TargetPosition") float **TargetPosition**`get` *The target position the joint attempts to reach.* * Lua ```lua SpringTargetPosition = Space.Host.ExecutingObject.HingeJoint.Spring.TargetPosition ``` * Lua ```lua --the below script will make a slider change a Hinge Joint Spring TargetPosition property --[Add "theslider" and "thehingejoint" reference to the Scripting Runtime component] slider = Space.Host.GetReference("theslider").UISlider hingejoint = Space.Host.GetReference("thehingejoint").HingeJoint OVC = function() spring = hingejoint.Spring spring.TargetPosition = (slider.Value * 10.0) -- from 0.0 to 10.0 hingejoint.Spring = spring end slider.OnValueChanged(OVC) ``` --- ### SLandmark ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------- | | string [**Name** ](/scripting/client-scripting-api-reference/types/slandmark.md#name)`get` | | SVector [**Position** ](/scripting/client-scripting-api-reference/types/slandmark.md#position)`get` | | SQuaternion [**Rotation** ](/scripting/client-scripting-api-reference/types/slandmark.md#rotation)`get` | | bool [**SpawnPoint** ](/scripting/client-scripting-api-reference/types/slandmark.md#spawnpoint)`get` | | float [**SpawnRadius** ](/scripting/client-scripting-api-reference/types/slandmark.md#spawnradius)`get` | | SLandmarkType [**Type** ](/scripting/client-scripting-api-reference/types/slandmark.md#type)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Name[​](#name "Direct link to Name") string **Name** `get` *Landmark's Name* * Lua ```lua LandmarkName = Space.Scene.Landmarks[1].Name ``` ##### Position[​](#position "Direct link to Position") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Position** `get` *Landmark's Position* * Lua ```lua LandmarkPosition = Space.Scene.Landmarks[1].Position ``` ##### Rotation[​](#rotation "Direct link to Rotation") [SQuaternion](/scripting/client-scripting-api-reference/types/squaternion.md) **Rotation** `get` *Landmark's Rotation* * Lua ```lua LandmarkRotation = Space.Scene.Landmarks[1].Rotation ``` ##### SpawnPoint[​](#spawnpoint "Direct link to SpawnPoint") bool **SpawnPoint** `get` *Is this Landmark a spawn point?* * Lua ```lua LandmarkSpawnPoint = Space.Scene.Landmarks[1].SpawnPoint ``` ##### SpawnRadius[​](#spawnradius "Direct link to SpawnRadius") float **SpawnRadius** `get` *The size of the radius around the Landmark where players spawn within* * Lua ```lua LandmarkSpawnRadius = Space.Scene.Landmarks[1].SpawnRadius ``` ##### Type[​](#type "Direct link to Type") int **Type** `get` *The type of Landmark*
*1= LandingZone, 2= Area, 3= Shop, 4= Quest,5= Activity, 6= Teleport, 7= Music, 8= Dance, 9= Clothes, 10= Vehicle, 11= Item* * Lua ```lua LandmarkType = Space.Scene.Landmarks[1].Type ``` --- ### SLayerMask #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | --------------------------------------------------------------------------------------------------------------------------------------------- | | void [**SetLayers** ](slayermask#setlayers)(params string\[] layerNames)
void [**SetLayers** ](slayermask#setlayers)(Table layerNames) | | void [**AddLayer** ](/scripting/client-scripting-api-reference/types/slayermask.md#addlayer)(string layerName) | | void [**RemoveLayer** ](/scripting/client-scripting-api-reference/types/slayermask.md#removelayer)(string layerName) | | | | **Static Functions** | | static SLayerMask [**New** ](slayermask#new)(Table layerNames)
static SLayerMask [**New** ](slayermask#new)(params string\[] layerNames) | | | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | Description | | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | | bool [**Inverted** ](/scripting/client-scripting-api-reference/types/slayermask.md#new-1)`get` `set` | Is the mask exclusionary or not. | | string\[] [**Layers** ](/scripting/client-scripting-api-reference/types/slayermask.md#layers)`get` `set` | The layer names represented in this layer mask | #### Functions[​](#functions "Direct link to Functions") ##### SetLayers[​](#setlayers "Direct link to SetLayers") void **SetLayers** (params string\[] layerNames)
void **SetLayers** (Table layerNames) \_Function that changes an existing layer mask \_ | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Let's create a new layer mask to filter out other avatars, then overwrite it to be vehicles instead: local mask = LayerMask.New({"Avatars"}); mask.SetLayers({"Vehicles"}); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` * Lua ```lua -- Let's create a new layer mask to filter out other avatars, then overwrite it to be vehicles instead: local mask = LayerMask.New("Avatars"); mask.SetLayers("Vehicles"); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` ##### AddLayer[​](#addlayer "Direct link to AddLayer") void **AddLayer** (string layerName) *Add a new layer to an existing layer mask.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local mask = LayerMask.New("Avatars"); mask.AddLayer("Vehicles"); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` * Lua ```lua local mask = LayerMask.New("Avatars"); mask.AddLayer("Vehicles"); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` ##### RemoveLayer[​](#removelayer "Direct link to RemoveLayer") void **RemoveLayer** (string layerName)| *Remove a new layer from an existing layer mask.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local mask = LayerMask.New("Avatars", "Vehicles", "UI"); mask.RemoveLayer("Vehicles"); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` * Lua ```lua local mask = LayerMask.New("Avatars", "Vehicles", "UI"); mask.RemoveLayer("Vehicles"); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` ##### New[​](#new "Direct link to New") static SLayerMask **New** (Table layerNames)
static SLayerMask **New** (params string\[] layerNames) *Static function that creates a new layer mask* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local mask = LayerMask.New({"Avatars", "Vehicles"}); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` * Lua ```lua local mask = LayerMask.New("Avatars"); or local mask = LayerMask.New("Avatars", "Vehicles", "UI"); local hit = Space.Physics.RaycastSingle(Space.Host.ExecutingObject.WorldPosition, Space.Host.ExecutingObject.Forward, 500.0, mask) ``` #### Properties[​](#properties "Direct link to Properties") ##### Inverted[​](#inverted "Direct link to Inverted") bool **Inverted** `get` `set` *Is the mask exclusionary or not.* * Lua ```lua local mask = LayerMask.New("Avatars"); -- Now change it to be an exclusionary mask that gets everything EXCEPT Avatars.' mask.inverted = true; ``` ##### Layers[​](#layers "Direct link to Layers") string\[] **Layers** `get` `set` *The layer names represented in this layer mask* * Lua ```lua local mask = LayerMask.New("Avatars"); -- Get local layers = mask.Layers; -- Set local layers = {"Vehicles", "UI"}; mask.Layers = layers; ``` --- ### SMaterial #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | SMaterial **Instantiate**() | | void [**SetFloat** ](/scripting/client-scripting-api-reference/types/smaterial.md#setfloat)(string key, float value) | | float [**GetFloat** ](/scripting/client-scripting-api-reference/types/smaterial.md#getfloat)(string key) | | void [**SetColor** ](smaterial#setcolor)(string key, SColor color)
void [**SetColor** ](smaterial#setcolor)(string key, float r, float g, float b, float a) | | [SColor](/scripting/client-scripting-api-reference/types/scolor.md) [**GetColor** ](/scripting/client-scripting-api-reference/types/smaterial.md#getcolor)(string key) | | void [**SetColor32** ](/scripting/client-scripting-api-reference/types/smaterial.md#setcolor32)(string key, byte r, byte g, byte b, byte a) | | void [**SetInt** ](/scripting/client-scripting-api-reference/types/smaterial.md#setint)(string key, int value) | | int [**GetInt** ](/scripting/client-scripting-api-reference/types/smaterial.md#getint)(string key) | | void [**SetTexture** ](/scripting/client-scripting-api-reference/types/smaterial.md#settexture)(string key, SResource value) | | SResource [**GetTexture** ](/scripting/client-scripting-api-reference/types/smaterial.md#gettexture)(string key) | | void [**SetTextureOffset** ](/scripting/client-scripting-api-reference/types/smaterial.md#settextureoffset)(string key, float x, float y) | | void [**SetTextureScale** ](/scripting/client-scripting-api-reference/types/smaterial.md#settexturescale)(string key, float x, float y) | | void [**SetVector** ](/scripting/client-scripting-api-reference/types/smaterial.md#setvector)(string key, SVector value) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | Description | | ----------------------------------------------------------------------------------------------------------- | ----------- | | string [**Name** ](/scripting/client-scripting-api-reference/types/smaterial.md#name)`get` `set` | | | string [**Shader** ](/scripting/client-scripting-api-reference/types/smaterial.md#shader)`get` | | | int [**RenderQueue** ](/scripting/client-scripting-api-reference/types/smaterial.md#renderqueue)`get` `set` | | #### Functions[​](#functions "Direct link to Functions") ##### Instantiate[​](#instantiate "Direct link to Instantiate") SMaterial **Instantiate**() *Return a new SMaterial from old.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local cube=Space.Host.ExecutingObject local cube2=cube.Children[1] local mat1=cube.Renderer.Material local newMat=mat1.Instantiate() newMat.SetColor("_Color",Color.Red) cube2.Renderer.Material=newMat --at this moment, cube2 will turn to red but cube will keep original color. ``` ##### SetFloat[​](#setfloat "Direct link to SetFloat") void **SetFloat** (string key, float value) *Sets a shader property to value* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Let's set the Metallic property to 0.75: local obj = Space.Host.ExecutingObject; obj.Renderer.Material.SetFloat("_Metallic", 0.75); ``` ##### GetFloat[​](#getfloat "Direct link to GetFloat") float **GetFloat** (string key) *Gets the current value of a shader property.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Let's find out the current Glosiness level local obj = Space.Host.ExecutingObject; Space.Log(obj.Renderer.Material.GetFloat("_Glossiness")); -- prints "0.5" (by default) to the console. ``` ##### SetColor[​](#setcolor "Direct link to SetColor") void **SetColor** (string key, SColor color)
void **SetColor** (string key, float r, float g, float b, float a) *Sets a shader colour* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Let's change the Color to red: local obj = Space.Host.ExecutingObject; local newColor = Color.New(1, 0, 0, 1); obj.Renderer.Material.SetColor("_Color", newColor); ``` * Lua ```lua -- Let's change the Color to purple: local obj = Space.Host.ExecutingObject; obj.Renderer.Material.SetColor("_Color", 0.5,0,0.5,1); ``` ##### GetColor[​](#getcolor "Direct link to GetColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **GetColor** (string propertyName) Get a named color value. Many shaders use more than one color. Use GetColor to get the propertyName color. | Parameter | Type | Description | | ------------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | propertyName | string | Common color names used by Unity's builtin shaders: "\_Color" is the main color of a material."\_SpecColor" is the specular color of a material (used in specular/glossy/vertexlit shaders)."\_EmissionColor" is the emissive color of a material (used in vertexlit shaders). "\_ReflectColor" is the reflection color of the material (used in reflective shaders). | * Lua ```lua Space.Host.ExecutingObject.Renderer.Material.GetColor("_Color") ``` ##### SetColor32[​](#setcolor32 "Direct link to SetColor32") void **SetColor32** (string key, byte r, byte g, byte b, byte a) *Sets a shader colour to value (32-bit, 0..255 values)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Let's change the Color to light blue: local obj = Space.Host.ExecutingObject; obj.Renderer.Material.SetColor32("_Color", 53,172,232,255); ``` ##### SetInt[​](#setint "Direct link to SetInt") void **SetInt** (string key, int value) *Sets a shader property to value. This can be a convenient way to work with Boolean values.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- For example, let's disable Specular Highlights (enabled by default in the Standard shader): local obj = Space.Host.ExecutingObject; obj.Renderer.Material.SetInt("_SpecularHighlights", 0); ``` ##### GetInt[​](#getint "Direct link to GetInt") int **GetInt** (string key) *Gets the current value of a shader property. This can be a convenient way to work with Boolean values.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Let's find out if the Reflections property is enabled: local obj = Space.Host.ExecutingObject; Space.Log(obj.Renderer.Material.GetInt("_GlossyReflections")); -- prints "1" (by default) to the console, which means that the Reflections property is indeed enabled. ``` ##### SetTexture[​](#settexture "Direct link to SetTexture") void **SetTexture** (string key, SResource value) *Sets a object's specified texture map (specified in parameter 1) to the texture provided as a resource in parameter #2. The example script must be in a object with a '\_MainTex' map, and that object should be set as a resource on the scripting runtime. Additionally, that object should be called 'dispobj'.* *note also that this function can be used to set any of the texture maps by varying the value of the first parameter accordingly.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function hithere() image = "mrlee.jpg" server = "https://middleware.systems/" obj = Space.Host.GetReference("dispobj") resrc = Space.WebServices.GetImage(server .. image) obj.Renderer.Material.SetTexture("_MainTex", resrc) end ``` ##### GetTexture[​](#gettexture "Direct link to GetTexture") SResource **GetTexture** (string propertyName) *Get a named texture. Many shaders use more than one texture. Use GetTexture to get the propertyName texture.* | Parameter | Type | Description | | ------------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | propertyName | string | Common texture names used by Unity's builtin shaders:"\_MainTex" is the main diffuse texture."\_BumpMap" is the normal map. "\_Cube" is the reflection cubemap. | * Lua ```lua textureResource = Space.Host.ExecutingObject.Renderer.Material.GetTexture("_MainTex") ``` ##### SetTextureOffset[​](#settextureoffset "Direct link to SetTextureOffset") void **SetTextureOffset** (string key, float x, float y) *Sets a texture offset to a value.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Renderer.Material.SetTextureOffset("_MainTex", 0, 1) ``` ##### SetTextureScale[​](#settexturescale "Direct link to SetTextureScale") void **SetTextureScale** (string key, float x, float y) *Sets a texture scale to a value.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Renderer.Material.SetTextureScale("_MainTex", 0, 1) ``` ##### SetVector[​](#setvector "Direct link to SetVector") void **SetVector** (string key, SVector value) *Sets a shader property to value* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Host.ExecutingObject.Renderer.Material.SetTexture("_APropertyName", Vector.New(0,1,0)) ``` #### Properties[​](#properties "Direct link to Properties") ##### Name[​](#name "Direct link to Name") string **Name** `get` `set` *Return a new SMaterial from old.* * Lua ```lua local cube=Space.Host.ExecutingObject local mat=cube.Renderer.Material Space.Log(mat.Name) ``` ##### Shader[​](#shader "Direct link to Shader") string **Shader** `get` *Return the shader name of current SMaterial.* * Lua ```lua local cube=Space.Host.ExecutingObject local mat=cube.Renderer.Material Space.Log(mat.Shader) ``` ##### RenderQueue[​](#renderqueue "Direct link to RenderQueue") int **RenderQueue** `get` `set` *Render queue of this material.* *By default materials use render queue of the shader it uses. You can override the render queue used using this variable. Note that if a shader on the material is changed, the render queue resets to that of the shader itself.* *Render queue value should be in \[0..5000] range to work properly; or -1 to use the render queue from the shader.* * Lua ```lua RenderQueue = Space.Host.ExecutingObject.Renderer.Material.RenderQueue ``` --- ### SMath #### Index[​](#index "Direct link to Index") ##### Static Functions Index[​](#static-functions-index "Direct link to Static Functions Index") | Function Name | | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | static float [**Random** ](/scripting/client-scripting-api-reference/types/smath.md#random)() | | static float [**RandomRange** ](/scripting/client-scripting-api-reference/types/smath.md#randomrange)(float min, float max) | | static int [**RandomInteger** ](/scripting/client-scripting-api-reference/types/smath.md#randominteger)(int min, int max) | | static float [**Abs** ](smath#abs)(float v)
static int [**Abs** ](smath#abs)(int v) | | static float [**Acos** ](/scripting/client-scripting-api-reference/types/smath.md#acos)(float v) | | static bool [**Approximately** ](/scripting/client-scripting-api-reference/types/smath.md#approximately)(float a, float b) | | static float [**Asin** ](/scripting/client-scripting-api-reference/types/smath.md#asin)(float v) | | static float [**Atan** ](/scripting/client-scripting-api-reference/types/smath.md#atan)(float v) | | static float [**Atan2** ](/scripting/client-scripting-api-reference/types/smath.md#atan2)(float y, float x) | | static int [**Ceil** ](/scripting/client-scripting-api-reference/types/smath.md#ceil)(float v) | | static float [**Clamp** ](/scripting/client-scripting-api-reference/types/smath.md#clamp)(float v, float min, float max) | | static float [**Clamp01** ](/scripting/client-scripting-api-reference/types/smath.md#clamp01)(float v) | | static int [**ClosestPowerOfTwo** ](/scripting/client-scripting-api-reference/types/smath.md#closestpoweroftwo)(int v) | | static float [**Cos** ](/scripting/client-scripting-api-reference/types/smath.md#cos)(float v) | | static float [**DeltaAngle** ](/scripting/client-scripting-api-reference/types/smath.md#deltaangle)(float current, float target) | | static float [**Exp** ](/scripting/client-scripting-api-reference/types/smath.md#exp)(float v) | | static int [**Floor** ](/scripting/client-scripting-api-reference/types/smath.md#floor)(float v) | | static float [**GammaToLinearSpace** ](/scripting/client-scripting-api-reference/types/smath.md#gammatolinearspace)(float v) | | static float [**InverseLerp** ](/scripting/client-scripting-api-reference/types/smath.md#inverselerp)(float a, float b, float value) | | static bool [**IsPowerOfTwo** ](/scripting/client-scripting-api-reference/types/smath.md#ispoweroftwo)(int v) | | static float [**Lerp** ](/scripting/client-scripting-api-reference/types/smath.md#lerp)(float a, float b, float v) | | static float [**LerpAngle** ](/scripting/client-scripting-api-reference/types/smath.md#lerpangle)(float a, float b, float v) | | static float [**LerpUnclamped** ](/scripting/client-scripting-api-reference/types/smath.md#lerpunclamped)(float a, float b, float v) | | static float [**LinearToGammaSpace** ](/scripting/client-scripting-api-reference/types/smath.md#lineartogammaspace)(float v) | | static float [**Log** ](smath#log)(float v)
static float [Log ](smath#log)(float v, float p) | | static float [**Log10** ](/scripting/client-scripting-api-reference/types/smath.md#log10)(float v) | | static float [**Max** ](/scripting/client-scripting-api-reference/types/smath.md#max)(float a, float b) | | static float [**Min** ](/scripting/client-scripting-api-reference/types/smath.md#min)(float a, float b) | | static float [**MoveTowards** ](/scripting/client-scripting-api-reference/types/smath.md#movetowards)(float value, float target, float delta) | | static float [**MoveTowardsAngle** ](/scripting/client-scripting-api-reference/types/smath.md#movetowardsangle)(float value, float target, float delta) | | static int [**NextPowerOfTwo** ](/scripting/client-scripting-api-reference/types/smath.md#nextpoweroftwo)(int v) | | static float [**PerlinNoise** ](/scripting/client-scripting-api-reference/types/smath.md#perlinnoise)(float x, float y) | | static float [**PingPong** ](/scripting/client-scripting-api-reference/types/smath.md#pingpong)(float t, float length) | | static float [**Pow** ](/scripting/client-scripting-api-reference/types/smath.md#pow)(float value, float pow) | | static float [**Repeat** ](/scripting/client-scripting-api-reference/types/smath.md#repeat)(float value, float length) | | static int [**Round** ](/scripting/client-scripting-api-reference/types/smath.md#round)(float value) | | static float [**Sign** ](/scripting/client-scripting-api-reference/types/smath.md#sign)(float value) | | static float [**Sin** ](/scripting/client-scripting-api-reference/types/smath.md#sin)(float value) | | static float [**SmoothStep** ](/scripting/client-scripting-api-reference/types/smath.md#smoothstep)(float from, float to, float t) | | static float [**Sqrt** ](/scripting/client-scripting-api-reference/types/smath.md#sqrt)(float value) | | static float [**Tan** ](/scripting/client-scripting-api-reference/types/smath.md#tan)(float value) | ##### Static Attributes Index[​](#static-attributes-index "Direct link to Static Attributes Index") | Property Name | | --------------------------------------------------------------------------------------------------- | | static readonly float [**Pi**](/scripting/client-scripting-api-reference/types/smath.md#pi)\*\*\*\* | #### Static Functions[​](#static-functions "Direct link to Static Functions") ##### Random[​](#random "Direct link to Random") static float **Random** () *Returns a random float between 0 and 1 (inclusive)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local randomNumber = Space.Math.Random(); Space.Log(randomNumber); -- prints 0.689094245433807 ``` ##### RandomRange[​](#randomrange "Direct link to RandomRange") static float **RandomRange** (float min, float max) *Returns a random float between min and max (inclusive)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local min = 100.0; local max = 500.0; local randomNumber = Space.Math.RandomRange(min, max ); Space.Log(randomNumber); -- prints 0206.659149169922 ``` ##### RandomInteger[​](#randominteger "Direct link to RandomInteger") static int **RandomInteger** (int min, int max) *Returns a random float between min (inclusive) and max (exclusive)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local min = 50; local max = 75; local randomInteger = Space.Math.RandomInteger(min, max); Space.Log(randomInteger); -- prints 52 ``` ##### Abs[​](#abs "Direct link to Abs") static float **Abs** (float v)
static int **Abs** (int v) *Returns the absolute value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = -4.2 local absoluteNum = Space.Math.Abs(value); Space.Log(absoluteNum); -- prints 4 [BUG] should be 4.2 ``` ##### Acos[​](#acos "Direct link to Acos") static float **Acos** (float v) *Returns the arc cosine value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 0.5; local arcCosine = Space.Math.Acos(value); Space.Log(arcCosine); -- prints 1.04719758033752 (radians) which is 60 degrees ``` ##### Approximately[​](#approximately "Direct link to Approximately") static bool **Approximately** (float a, float b) *True if the difference between a and b is less than epsilon* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local a = 5.0; local b = 5; local approx1 = Space.Math.Approximately(a, b); Space.Log(approx1); -- prints true local a = 5.01; local b = 5.0; local approx2 = Space.Math.Approximately(a, b); Space.Log(approx2); -- prints false local a = 5.01; local b = 5.0; local approx3 = Space.Math.Approximately(a, b); Space.Log(approx3); -- prints false ``` ##### Asin[​](#asin "Direct link to Asin") static float **Asin** (float v) *Returns the arc sine value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 0.5; local arcSine = Space.Math.Asin(value); Space.Log(arcSine); -- prints 0.523598790168762 (radians) which is 30 degrees ``` ##### Atan[​](#atan "Direct link to Atan") static float **Atan** (float v) *Returns the arc tangent value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 1.732050808; local arcTangent = Space.Math.Atan(value); Space.Log(arcTangent); -- prints 1.04719758033752 (radians) which is 60 degrees ``` ##### Atan2[​](#atan2 "Direct link to Atan2") static float **Atan2** (float y, float x) *Returns the arc tangent of y/x* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local x = 0.5; local y = 0.5; local arcTangent = Space.Math.Atan2(y, x); Space.Log(arcTangent); -- prints 0.785398185253143 ``` ##### Ceil[​](#ceil "Direct link to Ceil") static int **Ceil** (float v) *Returns the ceil value of 'val' as an integer* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Ceil(4.0)); -- prints 4 Space.Log(Space.Math.Ceil(4.2)); -- prints 5 Space.Log(Space.Math.Ceil(-4.2)); -- prints -4 ``` ##### Clamp[​](#clamp "Direct link to Clamp") static float **Clamp** (float v, float min, float max) *Clamps val between min and max, and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 100.0; local min = 20.0; local max = 82.0; local clampedValue = Space.Math.Clamp(value, min, max); Space.Log(clampedValue); -- prints 82 ``` ##### Clamp01[​](#clamp01 "Direct link to Clamp01") static float **Clamp01** (float v) *Clamps val between 0 and 1, and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = -1.0; local clampedValue = Space.Math.Clamp01(value); Space.Log(clampedValue); -- prints 0 ``` ##### ClosestPowerOfTwo[​](#closestpoweroftwo "Direct link to ClosestPowerOfTwo") static int **ClosestPowerOfTwo** (int v) *Returns the closest power of two to val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 33; local powerOfTwo = Space.Math.ClosestPowerOfTwo(value); Space.Log(powerOfTwo); -- prints 32 ``` ##### Cos[​](#cos "Direct link to Cos") static float **Cos** (float v) *Returns the cosine of val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local cosine = Space.Math.Cos(angle); Space.Log(cosine); -- prints 0.499999970197678 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local cosine2 = Space.Math.Cos(angle2); Space.Log(cosine2); -- prints 0.499999970197678 ``` ##### DeltaAngle[​](#deltaangle "Direct link to DeltaAngle") static float **DeltaAngle** (float current, float target) *Returns the difference in degrees between two values (e.g. 350' and 17' returns 27')* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.DeltaAngle(350.0, 17.0)); -- prints 27 ``` ##### Exp[​](#exp "Direct link to Exp") static float **Exp** (float v) *Returns e raised to val power.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Exp(3.0)); -- prints 20.0855369567871 ``` ##### Floor[​](#floor "Direct link to Floor") static int **Floor** (float v) *Returns floor of val, converted to an int* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Floor(4.0)); -- prints 4 Space.Log(Space.Math.Floor(4.2)); -- prints 4 Space.Log(Space.Math.Floor(-4.2)); -- prints -5 ``` ##### GammaToLinearSpace[​](#gammatolinearspace "Direct link to GammaToLinearSpace") static float **GammaToLinearSpace** (float v) *Converts a colour value from Gamma to Linear Space (Pow 2.2)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.GammaToLinearSpace(0.5)); -- prints 0.214041143655777 ``` ##### InverseLerp[​](#inverselerp "Direct link to InverseLerp") static float **InverseLerp** (float a, float b, float value) *Returns the percentage between a and b that 'val' is on a line (opposite of Lerp)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 0.0; local sliderStop = 100.0; local currentSliderPos = 75.0; local percentage = Space.Math.InverseLerp(sliderStart, sliderStop, currentSliderPos); Space.Log(percentage); -- prints 0.75 ``` ##### IsPowerOfTwo[​](#ispoweroftwo "Direct link to IsPowerOfTwo") static bool **IsPowerOfTwo** (int v) *Returns true if val is a power of two* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.IsPowerOfTwo(55)); -- prints False Space.Log(Space.Math.IsPowerOfTwo(32)); -- prints True ``` ##### Lerp[​](#lerp "Direct link to Lerp") static float **Lerp** (float a, float b, float v) *Interpolates between 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 0.0; local sliderStop = 100.0; local percentage = 0.75; local currentSliderPos = Space.Math.Lerp(sliderStart, sliderStop, percentage); Space.Log(currentSliderPos); -- prints 75 ``` ##### LerpAngle[​](#lerpangle "Direct link to LerpAngle") static float **LerpAngle** (float a, float b, float v) *Interpolates between angles 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStartAngle = 0.0; local sliderStopAngle = Space.Math.Pi;-- 180 degrees local percentage = 0.50; local currentSliderPos = Space.Math.LerpAngle(sliderStartAngle, sliderStopAngle, percentage); Space.Log(currentSliderPos); -- prints 1.57079637050629 (90 degrees) ``` ##### LerpUnclamped[​](#lerpunclamped "Direct link to LerpUnclamped") static float **LerpUnclamped** (float a, float b, float v) *Interpolates between 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1, but unbounded (allowing higher/lower values)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 0.0; local sliderStop = 100.0; local percentage = 2.0; local currentSliderPos = Space.Math.LerpUnclamped(sliderStart, sliderStop, percentage); Space.Log(currentSliderPos); -- prints 200 ``` ##### LinearToGammaSpace[​](#lineartogammaspace "Direct link to LinearToGammaSpace") static float **LinearToGammaSpace** (float v) *Converts a colour value from Linear to Gamma Space (Pow 1/2.2)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.LinearToGammaSpace(0.214041143655777)); -- prints 0.5 ``` ##### Log[​](#log "Direct link to Log") static float **Log** (float v)
static float **Log** (float v, float p) *Returns the natural logarithm for 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Log(30.0)); -- prints 3.40119743347168 Space.Log(Space.Math.Log(4.0, 2.0)); -- prints 2 ``` ##### Log10[​](#log10 "Direct link to Log10") static float **Log10** (float v) *Returns the Log10 value for 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Log10(100.0)); -- prints 2 ``` ##### Max[​](#max "Direct link to Max") static float **Max** (float a, float b) *Returns higher of 'a' or 'b'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Max(20.0, 100.0)); -- prints 100 ``` ##### Min[​](#min "Direct link to Min") static float **Min** (float a, float b) *Returns lower of 'a' or 'b'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Min(20.0, 100.0)); -- prints 20 ``` ##### MoveTowards[​](#movetowards "Direct link to MoveTowards") static float **MoveTowards** (float value, float target, float delta) *Move value to target, but by no more than delta* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 5.0; local sliderStop = 10.0; local deltaChange = 1.0; local currentSliderPos = Space.Math.MoveTowards(sliderStart, sliderStop, deltaChange); Space.Log(currentSliderPos); -- prints 6 (moves forward 1) local sliderStart = 5.0; local sliderStop = 10.0; local deltaChange = 7.0; local currentSliderPos = Space.Math.MoveTowards(sliderStart, sliderStop, deltaChange); Space.Log(currentSliderPos); -- prints 10 (caps out at at the target value) -- NOTE: Use negative delta to move away from target. ``` ##### MoveTowardsAngle[​](#movetowardsangle "Direct link to MoveTowardsAngle") static float **MoveTowardsAngle** (float value, float target, float delta) *Move angle value to target, but by no more than delta* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStartAngle = Space.Math.Pi/2; -- 90 degrees local sliderStopAngle = Space.Math.Pi; -- 180 degrees local deltaChange = Space.Math.Pi/6; -- 30 degrees local currentSliderPos = Space.Math.MoveTowardsAngle(sliderStartAngle, sliderStopAngle, deltaChange); Space.Log(currentSliderPos); -- prints 2.09439516067505 (moves forward 30 degrees to 120 degrees) -- NOTE: Add 180 degrees (Space.Math.Pi) to move away from target. ``` ##### NextPowerOfTwo[​](#nextpoweroftwo "Direct link to NextPowerOfTwo") static int **NextPowerOfTwo** (int v) *Return the next power of two larger or equal to val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.NextPowerOfTwo(16)); -- prints 16 Space.Log(Space.Math.NextPowerOfTwo(17)); -- prints 32 ``` ##### PerlinNoise[​](#perlinnoise "Direct link to PerlinNoise") static float **PerlinNoise** (float x, float y) *Return 2D Perlin noise for coordinates x and y* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Lua Translation of Unity C# Documentation local ball = Space.Host.ExecutingObject; ball.SubscribeToEvents(); -- animates this object to move upwards on the y axis with slight random movement local animateBall = function() local heightScale = 0.1; -- controls speed of movement local xScale = 1.0; -- shifts x position on perlin noise plane local height = heightScale * Space.Math.PerlinNoise(Space.Time * xScale, 0.0); local pos = ball.LocalPosition; pos.y = pos.y + height; ball.LocalPosition = pos; Space.Log(pos.y); end ball.OnUpdate(animateBall); -- NOTE: If you need a guaranteed range of [0,1], make sure to clamp the value with Space.Math.Clamp01. ``` ##### PingPong[​](#pingpong "Direct link to PingPong") static float **PingPong** (float t, float length) *Return a value between 0 and length that oscillates upwards and back based on the position of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua --[[ In this example, if you traced the output of Space.Math.PingPong(value, length), the return values would cycle forward through the range [0,5] then cycle backwards through the range [5,0] in order. --]] local ball = Space.Host.ExecutingObject; local originalPos = ball.LocalPosition; ball.SubscribeToEvents(); -- The ball object oscillates back and forth on the x-axis. local animateBall = function() local value = Space.Time; local length = 5.0; local newPos = Vector.New(Space.Math.PingPong(value, length) + originalPos.x, originalPos.y, originalPos.z); ball.LocalPosition = newPos; end ball.OnUpdate(animateBall); ``` ##### Pow[​](#pow "Direct link to Pow") static float **Pow** (float value, float pow) *Return x raised to y power* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Pow(2, 4)); -- prints 16 ``` ##### Repeat[​](#repeat "Direct link to Repeat") static float **Repeat** (float value, float length) *Return a value between 0 and length that returns to 0 after exceeding length based on 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua --[[ In this example, if you traced the output of Space.Math.Repeat(value, length), the return values would cycle forward through the range [0,5]. The cycle is repeated again from 0.--]] local ball = Space.Host.ExecutingObject; local originalPos = ball.LocalPosition; ball.SubscribeToEvents(); -- The ball object moves forward on the x-axis. -- Then, it repeats the same motion again from the beginning. local animateBall = function() local value = Space.Time; local length = 5.0; local newPos = Vector.New(Space.Math.Repeat(value, length) + originalPos.x, originalPos.y, originalPos.z); ball.LocalPosition = newPos; end ball.OnUpdate(animateBall); ``` ##### Round[​](#round "Direct link to Round") static int **Round** (float value) *Returns the nearest integer value to val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Round(4.0)); -- prints 4 Space.Log(Space.Math.Round(4.2)); -- prints 4 Space.Log(Space.Math.Round(4.5)); -- prints 4 Space.Log(Space.Math.Round(4.55)); -- prints 5 Space.Log(Space.Math.Round(4.8)); -- prints 5 Space.Log(Space.Math.Round(-4.2)); -- prints -4 Space.Log(Space.Math.Round(-4.8)); -- prints -5 ``` ##### Sign[​](#sign "Direct link to Sign") static float **Sign** (float value) *Returns either 1 or -1 based on the sign of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Sign(4.2)); -- prints 1 Space.Log(Space.Math.Sign(-4.2)); -- prints -1 ``` ##### Sin[​](#sin "Direct link to Sin") static float **Sin** (float value) *Returns the sine of val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local sine = Space.Math.Sin(angle); Space.Log(sine); -- prints 0.866025447845459 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local sine2 = Space.Math.Sin(angle2); Space.Log(sine2); -- prints 0.866025447845459 ``` ##### SmoothStep[​](#smoothstep "Direct link to SmoothStep") static float **SmoothStep** (float from, float to, float t) *Similar to Lerp but moves slowly closer to the edges ('Spherical Lerp')* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Lua Translation of Unity C# Documentation --[[ In this example, Space.Math.SmoothStep(min, max, time) returns values in the range [1,10] in order. As values approach 10, the interpolation slows down. --]] local ball = Space.Host.ExecutingObject; local originalPos = ball.LocalPosition; local min = 1.0; local max = 10.0; local duration = 5.0; --lower value to speed up; raise to slow down local startTime; ball.SubscribeToEvents(); local initStartTime = function() startTime = Space.Time; end -- The ball jumps to min + originalPos, then it moves towards -- max + originalPos while slowing down at the end. local animateBall = function() local time = (Space.Time - startTime) / duration; local newPos = Vector.New(Space.Math.SmoothStep(min, max, time) + originalPos.x, originalPos.y, originalPos.z); ball.LocalPosition = newPos; end ball.OnStart(initStartTime); ball.OnUpdate(animateBall); ``` ##### Sqrt[​](#sqrt "Direct link to Sqrt") static float **Sqrt** (float value) *Returns the square root of val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Sqrt(16)); -- prints 4 Space.Log(Space.Math.Sqrt(-16)); -- prints NaN ``` ##### Tan[​](#tan "Direct link to Tan") static float **Tan** (float value) *Returns the tangent value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local tangent = Space.Math.Tan(angle); Space.Log(tangent); -- prints 1.73205089569092 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local tangent2 = Space.Math.Tan(angle2); Space.Log(tangent2); -- prints 1.73205089569092 ``` * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local tangent = Space.Math.Tan(angle); Space.Log(tangent); -- prints 1.73205089569092 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local tangent2 = Space.Math.Tan(angle2); Space.Log(tangent2); -- prints 1.73205089569092 ``` * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local tangent = Space.Math.Tan(angle); Space.Log(tangent); -- prints 1.73205089569092 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local tangent2 = Space.Math.Tan(angle2); Space.Log(tangent2); -- prints 1.73205089569092 ``` #### Static Attributes[​](#static-attributes "Direct link to Static Attributes") ##### Pi[​](#pi "Direct link to Pi") static readonly float **Pi** = 3.14159265358979f *Returns the constant value of Ξ .* * Lua ```lua pi = Space.Math.Pi ``` --- ### SMusicDirectory #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ----------------------------------------------------------------------------------------------------------------------------------------- | | void [**GetTop100** ](/scripting/client-scripting-api-reference/types/smusicdirectory.md#gettop100)(Closure onLoad) | | void [**GetGenreList** ](/scripting/client-scripting-api-reference/types/smusicdirectory.md#getgenrelist)(Closure onLoad, int parentId=0) | | void [**SearchByGenre** ](/scripting/client-scripting-api-reference/types/smusicdirectory.md#searchbygenre)(SGenre genre, Closure onLoad) | | void [**SearchByText** ](/scripting/client-scripting-api-reference/types/smusicdirectory.md#searchbytext)(string search, Closure onLoad) | #### Functions[​](#functions "Direct link to Functions") ##### GetTop100[​](#gettop100 "Direct link to GetTop100") void **GetTop100** (Closure onLoad) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### GetGenreList[​](#getgenrelist "Direct link to GetGenreList") void **GetGenreList** (Closure onLoad, int parentId=0) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### SearchByGenre[​](#searchbygenre "Direct link to SearchByGenre") void **SearchByGenre** ([SGenre](/scripting/client-scripting-api-reference/types/sgenre.md) genre, Closure onLoad) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### SearchByText[​](#searchbytext "Direct link to SearchByText") void **SearchByText** (string search, Closure onLoad) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SMusicStation #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ------------------------------------------------------------------------------------------------------------ | | override string [**ToString** ](/scripting/client-scripting-api-reference/types/smusicstation.md#tostring)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | -------------------------------------------------------------------------------------------------------- | | string [**Name** ](/scripting/client-scripting-api-reference/types/smusicstation.md#name)`get` `set` | | string [**Mt**](/scripting/client-scripting-api-reference/types/smusicstation.md#mt) `get` `set` | | string [**Id**](/scripting/client-scripting-api-reference/types/smusicstation.md#id) `get` `set` | | string [**Br**](/scripting/client-scripting-api-reference/types/smusicstation.md#br) `get` `set` | | string [**Genre**](/scripting/client-scripting-api-reference/types/smusicstation.md#genre) `get` `set` | | string [**Genre2** ](/scripting/client-scripting-api-reference/types/smusicstation.md#genre2)`get` `set` | | string [**Logo** ](/scripting/client-scripting-api-reference/types/smusicstation.md#logo)`get` `set` | | string [**Ct**](/scripting/client-scripting-api-reference/types/smusicstation.md#ct) `get` `set` | | string [**Lc**](/scripting/client-scripting-api-reference/types/smusicstation.md#lc) `get` `set` | #### Functions[​](#functions "Direct link to Functions") ##### ToString[​](#tostring "Direct link to ToString") override string **ToString** () *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` #### Properties[​](#properties "Direct link to Properties") ##### Name[​](#name "Direct link to Name") string **Name** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Mt[​](#mt "Direct link to Mt") string **Mt** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Id[​](#id "Direct link to Id") string **Id** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Br[​](#br "Direct link to Br") string **Br** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Genre[​](#genre "Direct link to Genre") string **Genre** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Genre2[​](#genre2 "Direct link to Genre2") string **Genre2** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Logo[​](#logo "Direct link to Logo") string **Logo** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Ct[​](#ct "Direct link to Ct") string **Ct** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Lc[​](#lc "Direct link to Lc") string **Lc** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SMusicStationList #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ----------------------------------------------------------------------------------------------------------------------------- | | STuneIn [**TuneIn** ](/scripting/client-scripting-api-reference/types/smusicstationlist.md#tunein)`get` `set` | | List< SMusicStation > [**Station** ](/scripting/client-scripting-api-reference/types/smusicstationlist.md#station)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### TuneIn[​](#tunein "Direct link to TuneIn") [STuneIn](/scripting/client-scripting-api-reference/types/stunein.md) **TuneIn** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Station[​](#station "Direct link to Station") List< [SMusicStation](/scripting/client-scripting-api-reference/types/smusicstation.md) > **Station** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SOutfit #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ----------------------------------------------------------------------------------------------------------------- | | void [**GetPreview** ](/scripting/client-scripting-api-reference/types/soutfit.md#getpreview)(Closure onComplete) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ---------------------------------------------------------------------------------------- | | int [**ID**](/scripting/client-scripting-api-reference/types/soutfit.md#id) `get` | | string [**Name** ](/scripting/client-scripting-api-reference/types/soutfit.md#name)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetPreview[​](#getpreview "Direct link to GetPreview") void **GetPreview** (Closure onComplete) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` #### Properties[​](#properties "Direct link to Properties") ##### ID[​](#id "Direct link to ID") int **ID** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SParticle #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | --------------------------------------------------------------------------------------------------------------------------- | | SVector [**position** ](/scripting/client-scripting-api-reference/types/sparticle.md#position)`get` `set` | | SVector [**velocity** ](/scripting/client-scripting-api-reference/types/sparticle.md#velocity)`get` `set` | | SVector [**animatedVelocity** ](/scripting/client-scripting-api-reference/types/sparticle.md#animatedvelocity)`get` | | SVector [**totalVelocity** ](/scripting/client-scripting-api-reference/types/sparticle.md#totalvelocity)`get` | | float [**remainingLifetime** ](/scripting/client-scripting-api-reference/types/sparticle.md#remaininglifetime)`get` `set` | | float [**startLifetime** ](/scripting/client-scripting-api-reference/types/sparticle.md#startlifetime)`get` `set` | | SColor [**startColor** ](/scripting/client-scripting-api-reference/types/sparticle.md#startcolor)`get` `set` | | uint [**randomSeed** ](/scripting/client-scripting-api-reference/types/sparticle.md#randomseed)`get` `set` | | SVector [**axisOfRotation** ](/scripting/client-scripting-api-reference/types/sparticle.md#axisofrotation)`get` `set` | | float [**startSize** ](/scripting/client-scripting-api-reference/types/sparticle.md#startsize)`get` `set` | | SVector [**startSize3D** ](/scripting/client-scripting-api-reference/types/sparticle.md#startsize3d)`get` `set` | | float [**rotation** ](/scripting/client-scripting-api-reference/types/sparticle.md#rotation)`get` `set` | | SVector [**rotation3D** ](/scripting/client-scripting-api-reference/types/sparticle.md#rotation3d)`get` `set` | | float [**angularVelocity** ](/scripting/client-scripting-api-reference/types/sparticle.md#angularvelocity)`get` `set` | | SVector [**angularVelocity3D** ](/scripting/client-scripting-api-reference/types/sparticle.md#angularvelocity3d)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### position[​](#position "Direct link to position") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **position** `get` `set` *The position of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] position = FirstParticle.position end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` * Lua ```lua example 2 ``` ##### velocity[​](#velocity "Direct link to velocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **velocity** `get` `set` *The velocity of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] velocity= FirstParticle.velocity end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### animatedVelocity[​](#animatedvelocity "Direct link to animatedVelocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **animatedVelocity** `get` *The animated velocity of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] animatedVelocity= FirstParticle.animatedVelocity end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` * Lua ```lua example 2 ``` ##### totalVelocity[​](#totalvelocity "Direct link to totalVelocity") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **totalVelocity** `get` *The total velocity of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] totalVelocity= FirstParticle.totalVelocity end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### remainingLifetime[​](#remaininglifetime "Direct link to remainingLifetime") float **remainingLifetime** `get` `set` *The remaining lifetime of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] remainingLifetime= FirstParticle.remainingLifetime end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### startLifetime[​](#startlifetime "Direct link to startLifetime") float **startLifetime** `get` `set` *The starting lifetime of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] startLifetime= FirstParticle.startLifetime end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### startColor[​](#startcolor "Direct link to startColor") [SColor](/scripting/client-scripting-api-reference/types/scolor.md) **startColor** `get` `set` *The initial color of the particle. The current color of the particle is calculated procedurally based on this value and the active color modules.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] startColor= FirstParticle.startColor end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### randomSeed[​](#randomseed "Direct link to randomSeed") uint **randomSeed** `get` `set` *The random seed of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] randomSeed= FirstParticle.randomSeed end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### axisOfRotation[​](#axisofrotation "Direct link to axisOfRotation") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **axisOfRotation** `get` `set` *Mesh particles rotate around this axis.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] axisOfRotation= FirstParticle.axisOfRotation end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### startSize[​](#startsize "Direct link to startSize") float **startSize** `get` `set` *The initial size of the particle. The current size of the particle is calculated procedurally based on this value and the active size modules.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] startSize= FirstParticle.startSize end this.OnParticleTrigger(OnParticleTrigger) ``` ##### startSize3D[​](#startsize3d "Direct link to startSize3D") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **startSize3D** `get` `set` *The initial 3D size of the particle. The current size of the particle is calculated procedurally based on this value and the active size modules.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] startSize3D= FirstParticle.startSize3D end this.OnParticleTrigger(OnParticleTrigger) ``` ##### rotation[​](#rotation "Direct link to rotation") float **rotation** `get` `set` *The rotation of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] rotation= FirstParticle.rotation end this.OnParticleTrigger(OnParticleTrigger) ``` ##### rotation3D[​](#rotation3d "Direct link to rotation3D") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **rotation3D** `get` `set` *The 3D rotation of the particle.* * Lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray\[1] rotation3D= FirstParticle.rotation3D end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ````text
```lua example 2 ```` ##### angularVelocity[​](#angularvelocity "Direct link to angularVelocity") float **angularVelocity** `get` `set` *The angular velocity of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] angularVelocity= FirstParticle.angularVelocity end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` ##### angularVelocity3D[​](#angularvelocity3d "Direct link to angularVelocity3D") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **angularVelocity3D** `get` `set` *The 3D angular velocity of the particle.* * Lua ```lua this = Space.Host.ExecutingObject OnParticleTrigger = function(GameObject) ParticlesArray = this.ParticleSystem.GetTriggerParticles(0) FirstParticle = ParticlesArray[1] angularVelocity3D= FirstParticle.angularVelocity3D end this.SubscribeToEvents() this.OnParticleTrigger(OnParticleTrigger) ``` --- ### SPhysicsHit #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | -------------------------------------------------------------------------------------------------------- | | SGameObject [**Object** ](/scripting/client-scripting-api-reference/types/sphysicshit.md#object)`get` | | SVector [**Position** ](/scripting/client-scripting-api-reference/types/sphysicshit.md#position)`get` | | SVector [**Normal** ](/scripting/client-scripting-api-reference/types/sphysicshit.md#normal)`get` | | SVector [**UV** ](/scripting/client-scripting-api-reference/types/sphysicshit.md#uv)`get` | | SVector [**UV2** ](/scripting/client-scripting-api-reference/types/sphysicshit.md#uv2)`get` | | float [**Distance** ](/scripting/client-scripting-api-reference/types/sphysicshit.md#distance)`get` | | bool [**ContainsHit** ](/scripting/client-scripting-api-reference/types/sphysicshit.md#containshit)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Object[​](#object "Direct link to Object") [SGameObject ](/scripting/client-scripting-api-reference/types/sgameobject.md)**Object** `get` *Property Description* * Lua ```lua this = Space.Host.ExecutingObject hit = Space.Physics.RayCastSingle(this.WorldPosition,this.Forward,20) hitGameObject = hit.Object ``` * Lua ```lua example 2 ``` ##### Position[​](#position "Direct link to Position") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Position** `get` *Where the physics hit occurred* * Lua ```lua this = Space.Host.ExecutingObject hit = Space.Physics.RayCastSingle(this.WorldPosition,this.Forward,20) hitPosition = hit.Position ``` ##### Normal[​](#normal "Direct link to Normal") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Normal** `get` *The normal of the hit* * Lua ```lua this = Space.Host.ExecutingObject hit = Space.Physics.RayCastSingle(this.WorldPosition,this.Forward,20) hitNormal = hit.Normal ``` ##### UV[​](#uv "Direct link to UV") SVector **UV** `get` *The UV coordinates of where the hit occurred on a mesh.* danger This property will currently always return \[0,0] due to a current bug. * Lua ```lua this = Space.Host.ExecutingObject hit = Space.Physics.RayCastSingle(this.WorldPosition,this.Forward,20) hitUV = hit.UV ``` ##### UV2[​](#uv2 "Direct link to UV2") SVector **UV2** `get` *The UV2 coordinates of where the hit occurred on a mesh.* danger This property will currently always return \[0,0] due to a current bug. * Lua ```lua this = Space.Host.ExecutingObject hit = Space.Physics.RayCastSingle(this.WorldPosition,this.Forward,20) hitUV2 = hit.UV2 ``` ##### Distance[​](#distance "Direct link to Distance") float **Distance** `get` *How far down a ray or from the collider, the hit occurred* * Lua ```lua this = Space.Host.ExecutingObject hit = Space.Physics.RayCastSingle(this.WorldPosition,this.Forward,20) hitDistance = hit.Distance ``` ##### ContainsHit[​](#containshit "Direct link to ContainsHit") bool **ContainsHit** `get` *Whether it was a hit or not* * Lua ```lua this = Space.Host.ExecutingObject hit = Space.Physics.RayCastSingle(this.WorldPosition,this.Forward,20) hitContainsHit = hit.ContainsHit ``` --- ### SPublicRegion #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | -------------------------------------------------------------------------------------------------------------- | | int [**ID**](/scripting/client-scripting-api-reference/types/spublicregion.md#id) `get` | | int [**OwnerID** ](/scripting/client-scripting-api-reference/types/spublicregion.md#ownerid)`get` | | string [**Name** ](/scripting/client-scripting-api-reference/types/spublicregion.md#name)`get` | | string [**MapPath** ](/scripting/client-scripting-api-reference/types/spublicregion.md#mappath)`get` | | string [**PreviewPath** ](/scripting/client-scripting-api-reference/types/spublicregion.md#previewpath)`get` | | int [**RankingScore** ](/scripting/client-scripting-api-reference/types/spublicregion.md#rankingscore)`get` | | int [**MaxAvatars** ](/scripting/client-scripting-api-reference/types/spublicregion.md#maxavatars)`get` | | int [**FileSize** ](/scripting/client-scripting-api-reference/types/spublicregion.md#filesize)`get` | | int [**Memory** ](/scripting/client-scripting-api-reference/types/spublicregion.md#memory)`get` | | SLandmark\[] [**Landmarks** ](/scripting/client-scripting-api-reference/types/spublicregion.md#landmarks)`get` | | SSubRegion\[] [**Regions** ](/scripting/client-scripting-api-reference/types/spublicregion.md#regions)`get` | | string [**Description** ](/scripting/client-scripting-api-reference/types/spublicregion.md#description)`get` | | SAccessType [**Access** ](/scripting/client-scripting-api-reference/types/spublicregion.md#access)`get` | #### Properties[​](#properties "Direct link to Properties") ##### ID[​](#id "Direct link to ID") int **ID** `get` *The Region ID of this region* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionID = r.ID end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### OwnerID[​](#ownerid "Direct link to OwnerID") int **OwnerID** `get` *The ID of the owner of this region* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionOwnerID = r.OwnerID end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *The Name of this region* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionName = r.Name end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### MapPath[​](#mappath "Direct link to MapPath") string **MapPath** `get` *Property Description* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionMapPath = r.MapPath end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### PreviewPath[​](#previewpath "Direct link to PreviewPath") string **PreviewPath** `get` *Property Description* * Lua ```lua --Make's a UIText show the Preview Path of the user's first available region textObject = Space.Host.GetReference("TheTextReference") function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionPreviewPath = r.PreviewPath end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### RankingScore[​](#rankingscore "Direct link to RankingScore") int **RankingScore** `get` *The Ranking Score of the region.* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionRankingScore = r.RankingScore end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### MaxAvatars[​](#maxavatars "Direct link to MaxAvatars") int **MaxAvatars** `get` *The max number of avatars this region can hold.* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionMaxAvatars = r.MaxAvatars end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### FileSize[​](#filesize "Direct link to FileSize") int **FileSize** `get` *The current MBs the region is using.* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionFileSize = r.FileSize end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### Memory[​](#memory "Direct link to Memory") int **Memory** `get` *Property Description* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionMemory = r.Memory end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### Landmarks[​](#landmarks "Direct link to Landmarks") [SLandmark](/scripting/client-scripting-api-reference/types/slandmark.md)\[] **Landmarks** `get` *An array of Landmarks in the region.* * Lua \`\`\` function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions\[1] regionLandmarks = r.Landmarks end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) \`\`\` ##### Regions[​](#regions "Direct link to Regions") [SSubRegion](/scripting/client-scripting-api-reference/types/ssubregion.md)\[] **Regions** `get` *Returns an array of* [*SSubRegion*](/scripting/client-scripting-api-reference/types/ssubregion.md) *in the region.* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionSubRegions = r.Regions end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### Description[​](#description "Direct link to Description") string **Description** `get` *Returns the description of the region.* * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionDescription = r.Description end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### Access[​](#access "Direct link to Access") int **Access** `get` *The access type of the region (such as "Public" or "Approved only")*
*1=* Disabled, 2= FreeForall, 3= FriendsOnly, 4= ApprovedOnly, 5= GroupsOnly * Lua ```lua function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] regionAccessType = r.Access end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` --- ### SQuaternion #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | string [**ToString** ](/scripting/client-scripting-api-reference/types/squaternion.md#tostring)() | | float [**Angle** ](/scripting/client-scripting-api-reference/types/squaternion.md#angle)(SQuaternion b) | | SQuaternion [**Lerp** ](/scripting/client-scripting-api-reference/types/squaternion.md#lerp)(SQuaternion b, float t) | | SQuaternion [**Slerp** ](/scripting/client-scripting-api-reference/types/squaternion.md#slerp)(SQuaternion b, float t) | | SQuaternion [**RotateTowards** ](/scripting/client-scripting-api-reference/types/squaternion.md#rotatetowards)(SQuaternion b, float delta) | | float [**Dot** ](/scripting/client-scripting-api-reference/types/squaternion.md#dot)(SQuaternion b) | | bool [**Equals** ](/scripting/client-scripting-api-reference/types/squaternion.md#equals)(SQuaternion other) | | | | **Static Functions** | | static SQuaternion [**New** ](/scripting/client-scripting-api-reference/types/squaternion.md#new)(float x, float y, float z, float w) | | static SQuaternion [**Euler** ](/scripting/client-scripting-api-reference/types/squaternion.md#euler)(float x, float y, float z) | | static SQuaternion [**AngleAxis** ](/scripting/client-scripting-api-reference/types/squaternion.md#angleaxis)(SVector axis, float angle) | | static SQuaternion [**LookRotation** ](squaternion#lookrotation)(SVector forward)
static SQuaternion [**LookRotation** ](squaternion#lookrotation)(SVector forward, SVector up) | | static SVector [**operator**](squaternion#operator) *(SQuaternion a, SVector b)*
*static SQuaternion* [***operator***](squaternion#operator) (SQuaternion a, SQuaternion b) | | static SQuaternion **FromToRotation** (SVector a, SVector b) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ---------------------------------------------------------------------------------------------------------------- | | float [**X**](/scripting/client-scripting-api-reference/types/squaternion.md#x) `get` `set` | | float [**Y**](/scripting/client-scripting-api-reference/types/squaternion.md#y) `get` `set` | | float [**Z**](/scripting/client-scripting-api-reference/types/squaternion.md#z) `get` `set` | | float [**W**](/scripting/client-scripting-api-reference/types/squaternion.md#w) `get` `set` | | SVector [**EulerAngles** ](/scripting/client-scripting-api-reference/types/squaternion.md#eulerangles)`get` | | SQuaternion [**Inverse** ](/scripting/client-scripting-api-reference/types/squaternion.md#inverse)`get` | | | | **Static Properties** | | static SQuaternion [**Identity** ](/scripting/client-scripting-api-reference/types/squaternion.md#identity)`get` | #### Functions[​](#functions "Direct link to Functions") ##### ToString[​](#tostring "Direct link to ToString") string **ToString** () *Converts a quaternion to a human readable string* * Lua ```lua aQuaternion = Quaternion.New(0.0, 1.0, 0.0, 0.0) theString = aQuaternion.ToString() ``` ##### Angle[​](#angle "Direct link to Angle") float **Angle** (SQuaternion b) *Returns the angle between two quaternions* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707); local otherQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0); angle = newQuat.Angle(otherQuat); Space.Log(angle); -- prints 90.0173034667969 ``` ##### Lerp[​](#lerp "Direct link to Lerp") SQuaternion **Lerp** (SQuaternion b, float t) *Linearly interpolates between this and other quaternion, by factor t and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707) QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0) QuatLerpAB = QuatA.Lerp(QuatB, Space.Time * 0.1) ``` * Lua ```lua local cube = Space.Host.ExecutingObject local fromQuat = cube.LocalRotation local toQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707) local speed = 0.1 -- The cube will rotate 90 degrees from current rotation by speed amount. local moveCube = function() cube.LocalRotation = fromQuat.Lerp(toQuat, Space.Time * speed); end cube.OnUpdate(moveCube) ``` ##### Slerp[​](#slerp "Direct link to Slerp") SQuaternion **Slerp** (SQuaternion b, float t) *Spherically interpolates between this and other quaternion, by factor t and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707) QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0) QuatLerpAB = QuatA.Slerp(QuatB, Space.Time * 0.1) ``` * Lua ```lua local cube = Space.Host.ExecutingObject; local fromQuat = cube.LocalRotation; local toQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0); local speed = 0.1; -- The cube will rotate 180 degrees from current rotation by speed amount. local moveCube = function() cube.LocalRotation = fromQuat.Slerp(toQuat, Space.Time * speed) end cube.OnUpdate(moveCube) ``` ##### RotateTowards[​](#rotatetowards "Direct link to RotateTowards") SQuaternion **RotateTowards** (SQuaternion b, float delta) *Rotates this towards other, by no more than t degrees* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707) QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0) ARotatedTowardB = QuatA.RotateTowards(QuatB, Space.Time * 0.1) ``` * Lua ```lua local cube = Space.Host.ExecutingObject local fromQuat = cube.LocalRotation local target = Quaternion.New(0.0, 0.707, 0.0, 0.707) local speed = 10.0 -- The cube will rotate 90 degrees from current rotation by step amount. local moveCube = function() local step = speed * Space.Time cube.LocalRotation = fromQuat.RotateTowards(target, step) end cube.OnUpdate(moveCube) ``` ##### Dot[​](#dot "Direct link to Dot") float **Dot** (SQuaternion b) *Returns the dot product of this and another quaternion* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local quat = Quaternion.New(0.0, 0.707, 0.0, 0.707); local quatOther = Quaternion.New(0.0, 0.0, 0.0, 1.0); Space.Log(quat.Dot(quatOther)); -- prints 0.707000017166138 ``` ##### Equals[​](#equals "Direct link to Equals") bool **Equals** (SQuaternion other) *Function Description* | Parameter | Type | Description | | --------- | ----------- | ------------------------------------------------ | | other | SQuaternion | The other Quaternion that we are comparing with. | * Lua ```lua QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707) QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0) isEqual = QuatA.Equals(QuatB) ``` ##### New[​](#new "Direct link to New") static SQuaternion **New** (float x, float y, float z, float w) *Creates a new Quaternion* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707) ``` ##### Euler[​](#euler "Direct link to Euler") static SQuaternion **Euler** (float x, float y, float z) *Creates a quaternion using Euler angles.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newQuat = Quaternion.Euler(0.0, 90.0, 0.0) ``` ##### AngleAxis[​](#angleaxis "Direct link to AngleAxis") static SQuaternion **AngleAxis** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) axis, float angle) *Creates a quaternion from an Angle/Axis pair* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newVector = Vector.New(0.0, 90.0, 0.0) newQuat = Quaternion.AngleAxis(newVector, 90.0) ``` ##### LookRotation[​](#lookrotation "Direct link to LookRotation") static SQuaternion **LookRotation** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) forward)
static SQuaternion **LookRotation** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) forward, [SVector](/scripting/client-scripting-api-reference/types/svector.md) up) *Creates a quaternion a forward vector; presuming up is (0,1,0)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local newQuat = Quaternion.LookRotation(Vector.Forward); -- or local newQuat = Quaternion.LookRotation(Vector.Forward, Vector.Up); ``` ##### operator\*[​](#operator "Direct link to operator*") static [SVector](/scripting/client-scripting-api-reference/types/svector.md) **operator**\* (SQuaternion a, [SVector](/scripting/client-scripting-api-reference/types/svector.md) b)
static SQuaternion **operator**\* (SQuaternion a, SQuaternion b) *The result of using the \* operator.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0) newVector = Vector.Forward rotatedVector = newQuat * newVector --or newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707) newVector = Vector.New(0.0, 0.0, 0.0) rotatedVector = newQuat * newQuat ``` ##### FromToRotation[​](#fromtorotation "Direct link to FromToRotation") static SQuaternion **FromToRotation** (SVector a, SVector b) *Creates a rotation which rotates from a to b.* *Usually you use this to rotate a transform so that one of its axes eg. the y-axis - follows a target direction b in world space.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua VectorA = Vector.New(0.0,1.0,0.0) VectorB = Vector.New(1.0,0.0,0.0) QuaternionFromToRotation = Quaternion.FromToRotation(VectorA, VectorB) ``` #### Properties[​](#properties "Direct link to Properties") ##### X[​](#x "Direct link to X") float **X** `get` `set` *X axis* * Lua ```lua newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0) newQuat.X = 40.0 ``` * Lua ```lua obj = Space.Host.ExecutingObject originalRot = obj.LocalRotation onStartMethod = function() Space.Log(originalRot.x) -- prints the X component of this object as a float originalRot.x = 0.25 -- assigns 0.25 value to the X component obj.LocalRotation = originalRot -- sets the the new rotation end obj.OnStart(onStartMethod) ``` ##### Y[​](#y "Direct link to Y") float **Y** `get` `set` *Y axis* * Lua ```lua newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0) newQuat.Y = 40.0 ``` * Lua ```lua obj = Space.Host.ExecutingObject originalRot = obj.LocalRotation onStartMethod = function() Space.Log(originalRot.y); -- prints the Y component of this object as a float originalRot.y = 0.25; -- assigns 0.25 value to the Y component obj.LocalRotation = originalRot; -- sets the the new rotation end obj.OnStart(onStartMethod); ``` ##### Z[​](#z "Direct link to Z") float **Z** `get` `set` *Z axis* * Lua ```lua newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0) newQuat.Z = 40.0 ``` * Lua ```lua local obj = Space.Host.ExecutingObject; local originalRot = obj.LocalRotation; obj.SubscribeToEvents(); local onStartMethod = function() Space.Log(originalRot.z); -- prints the Z component of this object as a float originalRot.z = 0.25; -- assigns 0.25 value to the Z component obj.LocalRotation = originalRot; -- sets the the new rotation end obj.OnStart(onStartMethod); ``` ##### W[​](#w "Direct link to W") float **W** `get` `set` *W axis* * Lua ```lua newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0) newQuat.W = 40.0 ``` * Lua ```lua local obj = Space.Host.ExecutingObject; local originalRot = obj.LocalRotation; obj.SubscribeToEvents(); local onStartMethod = function() Space.Log(originalRot.w); -- prints the W component of this object as a float originalRot.w = 0.25; -- assigns 0.25 value to the W component obj.LocalRotation = originalRot; -- sets the the new rotation end obj.OnStart(onStartMethod); ``` ##### EulerAngles[​](#eulerangles "Direct link to EulerAngles") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **EulerAngles** `get` *Returns the Euler rotation for this Quaternion* * Lua ```lua newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707) euler = newQuat.EulerAngles ``` ##### Inverse[​](#inverse "Direct link to Inverse") SQuaternion **Inverse** `get` *Returns the inverse of this quaternion* * Lua ```lua quat = Quaternion.New(0.0, 0.707, 0.0, 0.707) inverseQuat = quat.Inverse ``` ##### Identity[​](#identity "Direct link to Identity") static SQuaternion **Identity** `get` *Equivalent of new SQuaternion(0,0,0,1)* * Lua ```lua identity = Quaternion.Identity ``` --- ### SRay #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------------ | | SVector [**Origin** ](/scripting/client-scripting-api-reference/types/sray.md#origin)`get` | | SVector [**Direction** ](/scripting/client-scripting-api-reference/types/sray.md#direction)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Origin[​](#origin "Direct link to Origin") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Origin** `get` *The origin point of the ray.* * Lua ```lua ray=Space.Camera.ScreenCoordinatesToRay(Vector.New(0.5,0.5,0)) rayOrigin = ray.Origin ``` * Lua ```lua --this script will make this object jump to wherever you right click --(Example: moving objects with right click ) thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetMouseDown(1) then clickRay = Space.Camera.ScreenCoordinatesToRay(Space.Input.MousePosition) rayCastHit = Space.Physics.RayCastSingle(clickRay.Origin, clickRay.Direction, 50.0) thisGameObject.WorldPosition = rayCastHit.Position end end thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` ##### Direction[​](#direction "Direct link to Direction") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Direction** `get` *The direction of the ray.* * Lua ```lua ray=Space.Camera.ScreenCoordinatesToRay(Vector.New(0.5,0.5,0)) rayDirection = ray.Direction ``` * Lua ```lua --this script will make this object jump to wherever you right click --(Example: moving objects with right click ) thisGameObject = Space.Host.ExecutingObject OnUpdate = function() if Space.Input.GetMouseDown(1) then clickRay = Space.Camera.ScreenCoordinatesToRay(Space.Input.MousePosition) rayCastHit = Space.Physics.RayCastSingle(clickRay.Origin, clickRay.Direction, 50.0) thisGameObject.WorldPosition = rayCastHit.Position end end thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` --- ### SRect #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ---------------------------------------------------------------------------------------------------------------------------------- | | bool [**Contains** ](srect#contains)(SVector point)
bool [**Contains** ](srect#contains)(SVector point, bool allowInverse) | | bool [**Overlaps** ](srect#overlaps)(SRect other)
bool [**Overlaps** ](srect#overlaps)(SRect other, bool allowInverse) | | bool [**Equals** ](/scripting/client-scripting-api-reference/types/srect.md#equals)(SRect other) | | string [**ToString** ](srect#tostring)(string format)
string [**ToString** ](srect#tostring)() | | | | **Static Functions** | | static SRect [**New** ](/scripting/client-scripting-api-reference/types/srect.md#new)(float x, float y, float width, float height) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ----------------------------------------------------------------------------------------------- | | float [**X**](/scripting/client-scripting-api-reference/types/srect.md#x) `get` `set` | | float [**Y**](/scripting/client-scripting-api-reference/types/srect.md#y) `get` `set` | | float [**Width**](/scripting/client-scripting-api-reference/types/srect.md#width) `get` `set` | | float [**Height** ](/scripting/client-scripting-api-reference/types/srect.md#height)`get` `set` | | SVector [**Position** ](/scripting/client-scripting-api-reference/types/srect.md#position)`get` | | SVector [**Center** ](/scripting/client-scripting-api-reference/types/srect.md#center)`get` | | SVector [**Min** ](/scripting/client-scripting-api-reference/types/srect.md#min)`get` | | SVector [**Max** ](/scripting/client-scripting-api-reference/types/srect.md#max)`get` | | SVector [**Size** ](/scripting/client-scripting-api-reference/types/srect.md#size)`get` | | float [**XMin** ](/scripting/client-scripting-api-reference/types/srect.md#xmin)`get` | | float [**YMin** ](/scripting/client-scripting-api-reference/types/srect.md#ymin)`get` | | float [**XMax** ](/scripting/client-scripting-api-reference/types/srect.md#xmax)`get` | | float [**YMax** ](/scripting/client-scripting-api-reference/types/srect.md#ymax)`get` | | float [**Left** ](/scripting/client-scripting-api-reference/types/srect.md#left)`get` | | float [**Right** ](/scripting/client-scripting-api-reference/types/srect.md#right)`get` | | float [**Top** ](/scripting/client-scripting-api-reference/types/srect.md#top)`get` | | float [**Bottom** ](/scripting/client-scripting-api-reference/types/srect.md#bottom)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Contains[​](#contains "Direct link to Contains") bool **Contains** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) point)
bool **Contains** ([SVector](/scripting/client-scripting-api-reference/types/svector.md) point, bool allowInverse) *Returns true if the x and y components of point is a point inside this rectangle. If allowInverse is present and true, the width and height of the Rect are allowed to take negative values (ie, the min value is greater than the max), and the test will still work.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newRect=Rect.New(0,0,150,150) otherRect = Rect.New(0,0,150,150) isContains = newRect.Contains(otherRect) --or isContains = newRect.Contains(otherRect , true) ``` ##### Overlaps[​](#overlaps "Direct link to Overlaps") bool **Overlaps** (SRect other)
bool **Overlaps** (SRect other, bool allowInverse) *Returns true if the other rectangle overlaps this one. If allowInverse is present and true, the widths and heights of the Rects are allowed to take negative values (ie, the min value is greater than the max), and the test will still work.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newRect=Rect.New(0,0,150,150) otherRect = Rect.New(0,0,150,150) isOverlapping = newRect.Overlaps(otherRect) --or isOverlapping = newRect.Overlaps(otherRect , true) ``` ##### Equals[​](#equals "Direct link to Equals") bool **Equals** (SRect other) Returns true if the rectangles are the same. | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newRect=Rect.New(0,0,150,150) otherRect = Rect.New(0,0,150,150) AreEqual = newRect.Equals(otherRect) ``` ##### ToString[​](#tostring "Direct link to ToString") string **ToString** (string format)
string **ToString** () Returns string for this Rect. | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newRect=Rect.New(0,0,150,150) otherRect = Rect.New(0,0,150,150) AreEqual = newRect.Equals(otherRect) ``` ##### New[​](#new "Direct link to New") static SRect **New** (float x, float y, float width, float height) *Constructs a new SRect* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newRect=Rect.New(0,0,150,150) ``` #### Properties[​](#properties "Direct link to Properties") ##### X[​](#x "Direct link to X") float **X** `get` `set` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) newRect.X = 10.0 ``` ##### Y[​](#y "Direct link to Y") float **Y** `get` `set` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) newRect.Y = 10.0 ``` ##### Width[​](#width "Direct link to Width") float **Width** `get` `set` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) newRect.Width = 10.0 ``` ##### Height[​](#height "Direct link to Height") float **Height** `get` `set` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) newRect.Height = 10.0 ``` ##### Position[​](#position "Direct link to Position") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Position** `get` *The X and Y position of the rectangle.* * Lua ```lua newRect=Rect.New(50,50,150,150) positionVector = newRect.position ``` ##### Center[​](#center "Direct link to Center") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Center** `get` *The position of the center of the rectangle.* * Lua ```lua newRect = Rect.New(50,50,150,150) VectorCenter = newRect.Center ``` ##### Min[​](#min "Direct link to Min") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Min** `get` *The position of the minimum corner of the rectangle.* * Lua ```lua newRect=Rect.New(0,0,150,150) vectorMin = newRect.Min ``` ##### Max[​](#max "Direct link to Max") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Max** `get` *The position of the maximum corner of the rectangle.* * Lua ```lua newRect=Rect.New(0,0,150,150) vectorMax = newRect.Max ``` ##### Size[​](#size "Direct link to Size") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **Size** `get` *The width and height of the rectangle.* * Lua ```lua newRect=Rect.New(0,0,150,150) vectorSize = newRect.Size ``` ##### XMin[​](#xmin "Direct link to XMin") float **XMin** `get` *The minimum X coordinate of the rectangle.* * Lua ```lua newRect=Rect.New(0,0,150,150) floatXMin = newRect.XMin ``` ##### YMin[​](#ymin "Direct link to YMin") float **YMin** `get` *The minimum Y coordinate of the rectangle.* * Lua ```lua newRect=Rect.New(0,0,150,150) floatYMin = newRect.YMin ``` ##### XMax[​](#xmax "Direct link to XMax") float **XMax** `get` *The maximum Y coordinate of the rectangle.* * Lua ```lua newRect=Rect.New(0,0,150,150) floatXMax = newRect.XMax ``` ##### YMax[​](#ymax "Direct link to YMax") float **YMax** `get` *The maximum Y coordinate of the rectangle.* * Lua ```lua newRect=Rect.New(0,0,150,150) floatYMax = newRect.YMax ``` ##### Left[​](#left "Direct link to Left") float **Left** `get` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) floatLeft = newRect.Left ``` ##### Right[​](#right "Direct link to Right") float **Right** `get` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) floatRight = newRect.Right ``` ##### Top[​](#top "Direct link to Top") float **Top** `get` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) floatTop = newRect.Top ``` ##### Bottom[​](#bottom "Direct link to Bottom") float **Bottom** `get` *Property Description* * Lua ```lua newRect=Rect.New(0,0,150,150) floatBottom = newRect.Bottom ``` --- ### SResource #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | --------------------------------------------------------------------------------------------------------------- | | string [**Name** ](/scripting/client-scripting-api-reference/types/sresource.md#name)`get` | | string [**Type** ](/scripting/client-scripting-api-reference/types/sresource.md#type)`get` | | string [**AsText** ](/scripting/client-scripting-api-reference/types/sresource.md#astext)`get` | | SGameObject [**AsGameObject** ](/scripting/client-scripting-api-reference/types/sresource.md#asgameobject)`get` | | SMaterial [**AsMaterial** ](/scripting/client-scripting-api-reference/types/sresource.md#asmaterial)`get` | | float [**TextureWidth** ](/scripting/client-scripting-api-reference/types/sresource.md#texturewidth)`get` | | float [**TextureHeight** ](/scripting/client-scripting-api-reference/types/sresource.md#textureheight)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Name[​](#name "Direct link to Name") string **Name** `get` *Returns the name of the resource as entered in the scripting runtime* * Lua ```lua ResourceName = Space.Resources[1].Name ``` * Lua ```lua --the below script will search through the Scripting Runtime's resources --and return the first instance of an Animation Clip --[You need to add a few resources to the scripting runtime and make one of them an animation] resources = Space.Resources for i = 1, #resources do if resources[i].Type == "AnimationClip" then Space.Log("Resource #".. i .. " is an Animation Clip. The resource name is: " .. resources[i].Name) break end end ``` ##### Type[​](#type "Direct link to Type") string **Type** `get` *Returns the type of the resource as a string* * Lua ```lua ResourceType = Space.GetResource("Resource Name").Type ``` * Lua ```lua --the below script will search through the Scripting Runtime's resources --and return the first instance of an Animation Clip --[You need to add a few resources to the scripting runtime and make one of them an animation] resources = Space.Resources for i = 1, #resources do if resources[i].Type == "AnimationClip" then Space.Log("Resource #".. i .. " is an Animation Clip. The resource name is: " .. resources[i].Name) break end end ``` ##### AsText[​](#astext "Direct link to AsText") string **AsText** `get` *Converts the resource's type from SResource type to string* * Lua ```lua Text = Space.GetResource("Resource Name").AsText ``` ##### AsGameObject[​](#asgameobject "Direct link to AsGameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **AsGameObject** `get` *Property Description* * Lua ```lua GameObject = Space.GetResource("Resource Name").AsGameObject ``` ##### AsMaterial[​](#asmaterial "Direct link to AsMaterial") [SMaterial](/scripting/client-scripting-api-reference/types/smaterial.md) **AsMaterial** `get` *Converts the resource's type from SResource to SMaterial* * Lua ```lua Material = Space.GetResource("Resource Name").AsMaterial ``` ##### TextureWidth[​](#texturewidth "Direct link to TextureWidth") float **TextureWidth** `get` *Returns the Texture Width of this resource* * Lua ```lua TextureWidth = Space.GetResource("Resource Name").TextureWidth ``` ##### TextureHeight[​](#textureheight "Direct link to TextureHeight") float **TextureHeight** `get` *Returns the Texture Height of this resource* * Lua ```lua TextureHeight = Space.GetResource("Resource Name").TextureHeight ``` --- ### SScore #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ----------------------------------------------------------------------------------------------- | | int [**Rank** ](/scripting/client-scripting-api-reference/types/sscore.md#rank)`get` | | long [**Score** ](/scripting/client-scripting-api-reference/types/sscore.md#score)`get` | | string [**Username** ](/scripting/client-scripting-api-reference/types/sscore.md#username)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Rank[​](#rank "Direct link to Rank") int **Rank** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Score[​](#score "Direct link to Score") long **Score** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Username[​](#username "Direct link to Username") string **Username** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SScoreRank #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | -------------------------------------------------------------------------------------------------------------------------- | | int [**Level** ](/scripting/client-scripting-api-reference/types/sscorerank.md#level)`get` | | SScore\[] [**AllTimeLeaderboard** ](/scripting/client-scripting-api-reference/types/sscorerank.md#alltimeleaderboard)`get` | | SScore\[] [**DailyLeaderboard** ](/scripting/client-scripting-api-reference/types/sscorerank.md#dailyleaderboard)`get` | | SScore [**AllTimePlayerRecord** ](/scripting/client-scripting-api-reference/types/sscorerank.md#alltimeplayerrecord)`get` | | SScore [**DailyPlayerRecord** ](/scripting/client-scripting-api-reference/types/sscorerank.md#dailyplayerrecord)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Level[​](#level "Direct link to Level") int **Level** `get` *The level of current activity.* * Lua ```lua Space.Activity.FinishActivity(99956,100,0,function (rank) Space.Log(rank.Level) end) ``` ##### AllTimeLeaderboard[​](#alltimeleaderboard "Direct link to AllTimeLeaderboard") SScore\[] **AllTimeLeaderboard** `get` *The AllTimeLeaderboard of current activity.* * Lua ```lua Space.Activity.FinishActivity(99956,100,0,function (rank) local leaderBoard=rank.AllTimeLeaderboard for i=1,#leaderBoard do Space.Log(leaderBoard[i].Rank) Space.Log(leaderBoard[i].Score) Space.Log(leaderBoard[i].Username) end end) ``` ##### DailyLeaderboard[​](#dailyleaderboard "Direct link to DailyLeaderboard") SScore\[] **DailyLeaderboard** `get` *The daily Leaderboard of current activity.* * Lua ```lua Space.Activity.FinishActivity(99956,100,0,function (rank) local leaderBoard=rank.DailyLeaderboard for i=1,#leaderBoard do Space.Log(leaderBoard[i].Rank) Space.Log(leaderBoard[i].Score) Space.Log(leaderBoard[i].Username) end end) ``` ##### AllTimePlayerRecord[​](#alltimeplayerrecord "Direct link to AllTimePlayerRecord") SScore **AllTimePlayerRecord** `get` *The AllTimePlayerRecord of current activity.* * Lua ```lua Space.Activity.FinishActivity(99956,100,0,function (rank) local record=rank.AllTimePlayerRecord Space.Log(record.Rank) Space.Log(record.Score) Space.Log(record.Username) end) ``` ##### DailyPlayerRecord[​](#dailyplayerrecord "Direct link to DailyPlayerRecord") SScore **DailyPlayerRecord** `get` *The daily player records of current activity.* * Lua ```lua Space.Activity.FinishActivity(99956,100,0,function (rank) local record=rank.DailyPlayerRecord Space.Log(record.Rank) Space.Log(record.Score) Space.Log(record.Username) end) ``` --- ### SSocialMedia #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | --------------------------------------------------------------------------------------------------- | | string [**Type** ](/scripting/client-scripting-api-reference/types/ssocialmedia.md#type)`get` | | string [**MediaID** ](/scripting/client-scripting-api-reference/types/ssocialmedia.md#mediaid)`get` | | string [**Url** ](/scripting/client-scripting-api-reference/types/ssocialmedia.md#url)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Type[​](#type "Direct link to Type") string **Type** `get` *Property Description* * Lua ```lua tableOfSSocialMedia = Space.Profile.ActivePlayerProfile.SocialMediaProfiles profileType = tableOfSSocialMedia[1].Type ``` ##### MediaID[​](#mediaid "Direct link to MediaID") string **MediaID** `get` *Property Description* * Lua ```lua tableOfSSocialMedia = Space.Profile.ActivePlayerProfile.SocialMediaProfiles profileID = tableOfSSocialMedia[1].MediaID ``` ##### Url[​](#url "Direct link to Url") string **Url** `get` *Property Description* * Lua ```lua tableOfSSocialMedia = Space.Profile.ActivePlayerProfile.SocialMediaProfiles profileType = tableOfSSocialMedia[1].Url ``` --- ### SString #### Index[​](#index "Direct link to Index") ##### Static Functions Index[​](#static-functions-index "Direct link to Static Functions Index") | Function Name | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | static string [**MD5** ](/scripting/client-scripting-api-reference/types/sstring.md#md5)(string input) | | static string [**SHA1** ](/scripting/client-scripting-api-reference/types/sstring.md#sha1)(string input) | | static string [**Replace** ](/scripting/client-scripting-api-reference/types/sstring.md#replace)(string old, string pattern, string replace) | | static string [**GenerateGUID** ](/scripting/client-scripting-api-reference/types/sstring.md#generateguid)() | | static string [**Base64Encode** ](sstring#base64encode)(string input)
static string [**Base64Encode** ](sstring#base64encode)(byte\[] input) | | static string [**Base64Decode** ](/scripting/client-scripting-api-reference/types/sstring.md#base64decode)(string input) | | static byte\[] [**GetBytes** ](/scripting/client-scripting-api-reference/types/sstring.md#getbytes)(string input) | | static string [**GetString** ](/scripting/client-scripting-api-reference/types/sstring.md#getstring)(byte\[] bytes) | | static string [**EncodeURL** ](/scripting/client-scripting-api-reference/types/sstring.md#encodeurl)(string input) | | static string [**DecodeURL** ](/scripting/client-scripting-api-reference/types/sstring.md#decodeurl)(string input) | | static string [**RegexMatchResult** ](/scripting/client-scripting-api-reference/types/sstring.md#regexmatchresult)(string input, string pattern, string replacement) | #### Static Functions[​](#static-functions "Direct link to Static Functions") ##### MD5[​](#md5 "Direct link to MD5") static string **MD5** (string input) *Calculates the MD5Sum of input and returns the result as a hexadecimal string* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua md5 = Space.String.MD5('AString') ``` ##### SHA1[​](#sha1 "Direct link to SHA1") static string **SHA1** (string input) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua sha1 = Space.String.SHA1('AString') ``` ##### Replace[​](#replace "Direct link to Replace") static string **Replace** (string old, string pattern, string replace) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua replaced = Space.String.Replace('AString', 'APattern', 'AReplace') ``` ##### GenerateGUID[​](#generateguid "Direct link to GenerateGUID") static string **GenerateGUID** () *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua guid = Space.String.GenerateGUID() ``` ##### Base64Encode[​](#base64encode "Direct link to Base64Encode") static string **Base64Encode** (string input) *Converts input to Base64 and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua baseEncodeByte = Space.String.Base64Encode{117, 116, 32, 116, 100, 101}) ``` ##### Base64Decode[​](#base64decode "Direct link to Base64Decode") static string **Base64Decode** (string input) *Converts input from Base64 and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua baseDecodedStr = Space.String.Base64Decode('aW5wdXQgdG8gZW5jb2Rl') ``` ##### GetBytes[​](#getbytes "Direct link to GetBytes") static byte\[] **GetBytes** (string input) *Converts input to bytes using UTF8 encoding* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua stringAsByteArray = Space.String.GetBytes('A String') ``` ##### GetString[​](#getstring "Direct link to GetString") static string **GetString** (byte\[] bytes) *Converts input to a UTF8 string* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua ByteArrayAsString = Space.String.GetString({115, 111, 109, 101, 32}) ``` ##### EncodeURL[​](#encodeurl "Direct link to EncodeURL") static string **EncodeURL** (string input) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua encodedURL = Space.String.EncodeURL('A String') ``` ##### DecodeURL[​](#decodeurl "Direct link to DecodeURL") static string **DecodeURL** (string input) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua decodedURL = Space.String.DecodeURL('A String') ``` ##### RegexMatchResult[​](#regexmatchresult "Direct link to RegexMatchResult") static string **RegexMatchResult** (string input, string pattern, string replacement) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Math.RegexMatchResult('astring', 'astring','astring') ``` --- ### SSubRegion #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | --------------------------------------------------------------------------------------------------------------- | | int [**RegionID** ](/scripting/client-scripting-api-reference/types/ssubregion.md#regionid)`get` | | int [**Count** ](/scripting/client-scripting-api-reference/types/ssubregion.md#count)`get` | | string [**ServerLocation** ](/scripting/client-scripting-api-reference/types/ssubregion.md#serverlocation)`get` | #### Properties[​](#properties "Direct link to Properties") ##### RegionID[​](#regionid "Direct link to RegionID") int **RegionID** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Count[​](#count "Direct link to Count") int **Count** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### ServerLocation[​](#serverlocation "Direct link to ServerLocation") string **ServerLocation** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### STrackInfo #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ----------------------------------------------------------------------------------------------- | | string [**Title** ](/scripting/client-scripting-api-reference/types/strackinfo.md#title)`get` | | string [**Artist** ](/scripting/client-scripting-api-reference/types/strackinfo.md#artist)`get` | #### Properties[​](#properties "Direct link to Properties") ##### Title[​](#title "Direct link to Title") string **Title** `get` *Title of the track* * Lua ```lua otc = function(trackInfo) Space.Log(trackInfo.Title) end Space.Host.ExecutingObject.Radio.OnTrackChange(otc) ``` ##### Artist[​](#artist "Direct link to Artist") string **Artist** `get` *Artist of the track* * Lua ```lua otc = function(trackInfo) Space.Log(trackInfo.Artist) end Space.Host.ExecutingObject.Radio.OnTrackChange(otc) ``` --- ### STuneIn #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------------------ | | string [**Base** ](/scripting/client-scripting-api-reference/types/stunein.md#base)`get` `set` | | string [**Basem3u** ](/scripting/client-scripting-api-reference/types/stunein.md#basem3u)`get` `set` | | string [**Basexspf** ](/scripting/client-scripting-api-reference/types/stunein.md#basexspf)`get` `set` | #### Properties[​](#properties "Direct link to Properties") ##### Base[​](#base "Direct link to Base") string **Base** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Basem3u[​](#basem3u "Direct link to Basem3u") string **Basem3u** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Basexspf[​](#basexspf "Direct link to Basexspf") string **Basexspf** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SUIRaycastResult #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ------------------------------------------------------------------------------------------------------ | | void [**Clear** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#clear)() | | string [**ToString** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#tostring)() | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ---------------------------------------------------------------------------------------------------------------------- | | float [**Distance** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#distance)`get` | | float [**Index** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#index)`get` | | int [**Depth** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#depth)`get` | | int [**SortingLayer** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#sortinglayer)`get` | | int [**SortingOrder** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#sortingorder)`get` | | SVector [**WorldPosition** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#worldposition)`get` | | SVector [**WorldNormal** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#worldnormal)`get` | | SVector [**ScreenPosition** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#screenposition)`get` | | SGameObject [**GameObject** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#gameobject)`get` | | bool [**IsValid** ](/scripting/client-scripting-api-reference/types/suiraycastresult.md#isvalid)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Clear[​](#clear "Direct link to Clear") void **Clear** () *Reset all the parameters of this RaycastResult* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Result = Space.UI.Raycast() Result.Clear() ``` ##### ToString[​](#tostring "Direct link to ToString") string **ToString** () *Converts all the properties of this UIRaycastResult into a string* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Result = Space.UI.Raycast().ToString() ``` * Lua ```lua --This script will update a UIText element with the result of a UIRaycast whenever... --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.ToString() end end end thisObject.OnUpdate(OnUpdate) ``` #### Properties[​](#properties "Direct link to Properties") ##### Distance[​](#distance "Direct link to Distance") float **Distance** `get` *Returns the distance of the Raycast result* * Lua ```lua Result = Distance = Space.UI.Raycast().Distance ``` * Lua ```lua --This script will update a UIText element with the Distance of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.Distance end end end thisObject.OnUpdate(OnUpdate) ``` ##### Index[​](#index-1 "Direct link to Index") float **Index** `get` *Returns the Index of the Raycast result* * Lua ```lua Index= Space.UI.Raycast().Index ``` * Lua ```lua --This script will update a UIText element with the Index of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.Index end end end thisObject.OnUpdate(OnUpdate) ``` ##### Depth[​](#depth "Direct link to Depth") int **Depth** `get` *Returns the Depth of the Raycast result* * Lua ```lua Depth= Space.UI.Raycast().Depth ``` * Lua ```lua --This script will update a UIText element with the Depth of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.Depth end end end thisObject.OnUpdate(OnUpdate) ``` ##### SortingLayer[​](#sortinglayer "Direct link to SortingLayer") int **SortingLayer** `get` *Returns the Sorting Layer of the Raycast result* * Lua ```lua SortingLayer= Space.UI.Raycast().SortingLayer ``` * Lua ```lua --This script will update a UIText element with the Sorting Layer of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.SortingLayer end end end thisObject.OnUpdate(OnUpdate) ``` ##### SortingOrder[​](#sortingorder "Direct link to SortingOrder") int **SortingOrder** `get` *Returns the Sorting Order of the Raycast result* * Lua ```lua SortingOrder= Space.UI.Raycast().SortingOrder ``` * Lua ```lua --This script will update a UIText element with the Sorting Order of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.SortingOrder end end end thisObject.OnUpdate(OnUpdate) ``` ##### WorldPosition[​](#worldposition "Direct link to WorldPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **WorldPosition** `get` *Returns the World Position vector of the Raycast result* * Lua ```lua WorldPosition= Space.UI.Raycast().WorldPosition ``` * Lua ```lua --This script will update a UIText element with the World Position of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.WorldPosition end end end thisObject.OnUpdate(OnUpdate) ``` ##### WorldNormal[​](#worldnormal "Direct link to WorldNormal") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **WorldNormal** `get` *Returns the World Normal vector of the Raycast result* * Lua ```lua WorldNormal= Space.UI.Raycast().WorldNormal ``` * Lua ```lua --This script will update a UIText element with the World Normal of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.WorldNormal end end end thisObject.OnUpdate(OnUpdate) ``` ##### ScreenPosition[​](#screenposition "Direct link to ScreenPosition") [SVector](/scripting/client-scripting-api-reference/types/svector.md) **ScreenPosition** `get` *Returns the Screen Position vector of the Raycast result* * Lua ```lua ScreenPosition= Space.UI.Raycast().ScreenPosition ``` * Lua ```lua --This script will update a UIText element with the Screen Position of the UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.ScreenPosition end end end thisObject.OnUpdate(OnUpdate) ``` ##### GameObject[​](#gameobject "Direct link to GameObject") [SGameObject](/scripting/client-scripting-api-reference/types/sgameobject.md) **GameObject** `get` *Returns a reference to the GameObject of the Raycast result* * Lua ```lua GameObject= Space.UI.Raycast().GameObject ``` * Lua ```lua --This script will update a UIText element with the name of the UIRaycast --by accesing it's GameObject whenever the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.GameObject.Name end end end thisObject.OnUpdate(OnUpdate) ``` ##### IsValid[​](#isvalid "Direct link to IsValid") bool **IsValid** `get` *Returns whether the Raycast hit a valid UI Raycast target. This will be true if the Raycast hits an element on Sinespace's UI* * Lua ```lua IsValid= Space.UI.Raycast().IsValid ``` * Lua ```lua --This script will check if Raycast result is valid --and update a UIText element with the result of a UIRaycast whenever --the player clicks on a Sinespace UI element thisObject = Space.Host.ExecutingObject uiText = Space.Host.GetReference("text").UIText --Add this object with UIText component as reference in Scripting Runtime OnUpdate = function() if Space.Input.GetMouseDown(0) == true then result = Space.UI.Raycast() if result.IsValid then uiText = result.ToString() end end end thisObject.OnUpdate(OnUpdate) ``` --- ### SUserProfile #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ------------------------------------------------------------------------------------------------------------------------------------ | | string [**UserName** ](/scripting/client-scripting-api-reference/types/suserprofile.md#username)`get` | | string [**Title** ](/scripting/client-scripting-api-reference/types/suserprofile.md#title)`get` | | string [**RealName** ](/scripting/client-scripting-api-reference/types/suserprofile.md#realname)`get` | | string [**Gender** ](/scripting/client-scripting-api-reference/types/suserprofile.md#gender)`get` | | string [**Since** ](/scripting/client-scripting-api-reference/types/suserprofile.md#since)`get` | | string [**Country** ](/scripting/client-scripting-api-reference/types/suserprofile.md#country)`get` | | string [**City** ](/scripting/client-scripting-api-reference/types/suserprofile.md#city)`get` | | int [**SocialGold** ](/scripting/client-scripting-api-reference/types/suserprofile.md#socialgold)`get` | | int [**SocialSilver** ](/scripting/client-scripting-api-reference/types/suserprofile.md#socialsilver)`get` | | int [**SocialFlower** ](/scripting/client-scripting-api-reference/types/suserprofile.md#socialflower)`get` | | string [**Interests** ](/scripting/client-scripting-api-reference/types/suserprofile.md#interests)`get` | | string [**About** ](/scripting/client-scripting-api-reference/types/suserprofile.md#about)`get` | | SSocialMedia\[] [**SocialMediaProfiles** ](/scripting/client-scripting-api-reference/types/suserprofile.md#socialmediaprofiles)`get` | #### Properties[​](#properties "Direct link to Properties") ##### UserName[​](#username "Direct link to UserName") string **UserName** `get` *Get player profile's Username* * Lua ```lua userName = Space.Profile.ActivePlayerProfile.Username ``` ##### Title[​](#title "Direct link to Title") string **Title** `get` *Get player profile's Title* * Lua ```lua userTitle = Space.Profile.ActivePlayerProfile.Title ``` ##### RealName[​](#realname "Direct link to RealName") string **RealName** `get` *Get player profile's Real Name* * Lua ```lua userRealName = Space.Profile.ActivePlayerProfile.RealName ``` ##### Gender[​](#gender "Direct link to Gender") string **Gender** `get` *Get player profile's Gender* * Lua ```lua userGender = Space.Profile.ActivePlayerProfile.Gender ``` ##### Since[​](#since "Direct link to Since") string **Since** `get` *Get player profile's Since* * Lua ```lua userSince = Space.Profile.ActivePlayerProfile.Since ``` ##### Country[​](#country "Direct link to Country") string **Country** `get` *Get player profile's Country* * Lua ```lua userCountry = Space.Profile.ActivePlayerProfile.Country ``` ##### City[​](#city "Direct link to City") string **City** `get` *Get player profile's City* * Lua ```lua userCity = Space.Profile.ActivePlayerProfile.City ``` ##### SocialGold[​](#socialgold "Direct link to SocialGold") int **SocialGold** `get` *Get player profile's Gold Badge count* * Lua ```lua userSocialGold = Space.Profile.ActivePlayerProfile.SocialGold ``` ##### SocialSilver[​](#socialsilver "Direct link to SocialSilver") int **SocialSilver** `get` *Get player profile's Silver Badge count* * Lua ```lua userSocialSilver = Space.Profile.ActivePlayerProfile.SocialSilver ``` ##### SocialFlower[​](#socialflower "Direct link to SocialFlower") int **SocialFlower** `get` *Get player profile's Flower count* * Lua ```lua userSocialFlower = Space.Profile.ActivePlayerProfile.SocialFlower ``` ##### Interests[​](#interests "Direct link to Interests") string **Interests** `get` *Get player profile's Interests* * Lua ```lua userInterests = Space.Profile.ActivePlayerProfile.Interests ``` ##### About[​](#about "Direct link to About") string **About** `get` *Get player profile's About* * Lua ```lua userAbout = Space.Profile.ActivePlayerProfile.About ``` ##### SocialMediaProfiles[​](#socialmediaprofiles "Direct link to SocialMediaProfiles") [SSocialMedia](/scripting/client-scripting-api-reference/types/ssocialmedia.md)\[] **SocialMediaProfiles** `get` *Get player profile's Social Media Profiles* * Lua ```lua tableOfSSocialMedia = Space.Profile.ActivePlayerProfile.SocialMediaProfiles ``` --- ### SUserRegions #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------------------------------------------- | | int [**SubscriptionTier** ](/scripting/client-scripting-api-reference/types/suserregions.md#subscriptiontier)`get` | | int [**NumberOfRegions** ](/scripting/client-scripting-api-reference/types/suserregions.md#numberofregions)`get` | | int [**UsersPerRegion** ](/scripting/client-scripting-api-reference/types/suserregions.md#usersperregion)`get` | | int [**FileSize** ](/scripting/client-scripting-api-reference/types/suserregions.md#filesize)`get` | | string [**SubscriptionName** ](/scripting/client-scripting-api-reference/types/suserregions.md#subscriptionname)`get` | | SPublicRegion\[] [**AvailableRegions** ](/scripting/client-scripting-api-reference/types/suserregions.md#availableregions)`get` | #### Properties[​](#properties "Direct link to Properties") ##### SubscriptionTier[​](#subscriptiontier "Direct link to SubscriptionTier") int **SubscriptionTier** `get` *The subscription tier indicates which type of premium memberhsip the player has. (As found in "Region" window)* * Lua ```lua --Make's a UIText show this User's Regions' current Subscription Tier textObject = Space.Host.GetReference("TheTextReference") --add to References section in Scripting Runtime function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.SubscriptionTier text.UIText.Text = r end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### NumberOfRegions[​](#numberofregions "Direct link to NumberOfRegions") int **NumberOfRegions** `get` *The number of regions the player has. (As found in "Region" window)* * Lua ```lua --Make's a UIText show this User's Regions' current NumberOfRegions textObject = Space.Host.GetReference("TheTextReference") --add to References section in Scripting Runtime function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.NumberOfRegions text.UIText.Text = r end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### UsersPerRegion[​](#usersperregion "Direct link to UsersPerRegion") int **UsersPerRegion** `get` *The max number of users allowed per region. ("Concurrency" as found in "Region" window).* * Lua ```lua --Make's a UIText show this User's Regions' current UsersPerRegion textObject = Space.Host.GetReference("TheTextReference") --add to References section in Scripting Runtime function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.UsersPerRegion text.UIText.Text = r end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### FileSize[​](#filesize "Direct link to FileSize") int **FileSize** `get` *The maximum MB size the player's regions can be. ("Max Region SizE" in the "Region" window)* * Lua ```lua --Make's a UIText show this User's Regions' current FileSize textObject = Space.Host.GetReference("TheTextReference") --add to References section in Scripting Runtime function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.FileSize text.UIText.Text = r end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### SubscriptionName[​](#subscriptionname "Direct link to SubscriptionName") string **SubscriptionName** `get` *The name of the current player's premium subscription (as found in "Region" window)* * Lua ```lua --Make's a UIText show this User's Regions' current SubscriptionName textObject = Space.Host.GetReference("TheTextReference") --add to References section in Scripting Runtime function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.SubscriptionName text.UIText.Text = r end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` ##### AvailableRegions[​](#availableregions "Direct link to AvailableRegions") [SPublicRegion](/scripting/client-scripting-api-reference/types/spublicregion.md)\[] **AvailableRegions** `get` *Returns an array of SPublicRegion which is a group of data for each of the user's available regions.* * Lua ```lua --Make's a UIText show the Name of the user's first available region textObject = Space.Host.GetReference("TheTextReference") function GetUserRegionsComplete(SUserRegions) local r = SUserRegions.AvailableRegions[1] textObject.UIText.Text = r.Name end Space.Grid.GetEnabledUserRegions(GetUserRegionsComplete) ``` --- ### SVector #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | SVector [**Add** ](svector#add)(SVector other)
SVector [**Add** ](svector#add)(float other) | | SVector [**Scale** ](svector#scale)(SVector other)
SVector [**Scale** ](svector#scale)(float other) | | SVector [**Divide** ](svector#divide)(SVector other)
SVector [**Divide** ](svector#divide)(float other) | | float [**Distance** ](/scripting/client-scripting-api-reference/types/svector.md#distance)(SVector other) | | float [**SquareDistance** ](/scripting/client-scripting-api-reference/types/svector.md#squaredistance)(SVector other) | | bool [**InRange** ](/scripting/client-scripting-api-reference/types/svector.md#inrange)(SVector other, float range) | | SVector [**Cross** ](/scripting/client-scripting-api-reference/types/svector.md#cross)(SVector other) | | SVector [**Lerp** ](/scripting/client-scripting-api-reference/types/svector.md#lerp)(SVector other, float t) | | SVector [**Slerp** ](/scripting/client-scripting-api-reference/types/svector.md#slerp)(SVector other, float t) | | SVector [**MoveTowards** ](/scripting/client-scripting-api-reference/types/svector.md#movetowards)(SVector other, float maxDistance) | | float [**Dot** ](/scripting/client-scripting-api-reference/types/svector.md#dot)(SVector other) | | bool [**Equals** ](/scripting/client-scripting-api-reference/types/svector.md#equals)(SVector other) | | string [**ToString** ](/scripting/client-scripting-api-reference/types/svector.md#tostring)() | | | | **Static Functions** | | static SVector [**New** ](/scripting/client-scripting-api-reference/types/svector.md#new)(float x, float y, float z) | | static SVector [**operator**](svector#operator+)**+** (SVector a, SVector b)
static SVector [**operator**](svector#operator+)**+** (SVector a, float b) | | static SVector [**operator**](svector#operator)**-** (SVector a, SVector b)
static SVector [**operator**](svector#operator)**-** (SVector a, float b) | | static SVector [**operator**](svector#operator-1)\* (SVector a, SVector b)
static SVector [**operator**](svector#operator-1)\* (SVector a, float b) | | static SVector [**operator**](svector#operator-2)**/** (SVector a, SVector b)
static SVector [**operator**](svector#operator-2)**/** (SVector a, float b) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | -------------------------------------------------------------------------------------------------------- | | float [**X**](/scripting/client-scripting-api-reference/types/svector.md#x) `get` `set` | | float [**Y**](/scripting/client-scripting-api-reference/types/svector.md#y) `get` `set` | | float [**Z**](/scripting/client-scripting-api-reference/types/svector.md#z) `get` `set` | | float [**Magnitude** ](/scripting/client-scripting-api-reference/types/svector.md#magnitude)`get` | | SVector [**Normalised** ](/scripting/client-scripting-api-reference/types/svector.md#normalised)`get` | | | | **Static Properties** | | static SVector [**Up**](/scripting/client-scripting-api-reference/types/svector.md#up) `get` | | static SVector [**Down** ](/scripting/client-scripting-api-reference/types/svector.md#down)`get` | | static SVector [**Left** ](/scripting/client-scripting-api-reference/types/svector.md#left)`get` | | static SVector [**Right** ](/scripting/client-scripting-api-reference/types/svector.md#right)`get` | | static SVector [**Forward** ](/scripting/client-scripting-api-reference/types/svector.md#forward)`get` | | static SVector [**Back** ](/scripting/client-scripting-api-reference/types/svector.md#back)`get` | | static SVector [**Zero** ](/scripting/client-scripting-api-reference/types/svector.md#zero)`get` | | static SVector [**One** ](/scripting/client-scripting-api-reference/types/svector.md#one)`get` | | static SVector [**MaxValue** ](/scripting/client-scripting-api-reference/types/svector.md#maxvalue)`get` | | static SVector [**MinValue** ](/scripting/client-scripting-api-reference/types/svector.md#minvalue)`get` | #### Functions[​](#functions "Direct link to Functions") ##### Add[​](#add "Direct link to Add") SVector **Add** (SVector other)
SVector **Add** (float other) *Adds this Vector* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vector = Vector.New(0, 10, 0); local vectorOther = Vector.New(40, 50, 6); Space.Log(vector.Add(vectorOther)); -- prints [40, 60, 6] Space.Log(vector + vectorOther); -- prints [40, 60, 6] ``` * Lua ```lua local vectorB = Vector.New(0, 10, 0); Space.Log(vectorB.Add(5)); -- prints [5, 15, 5] ``` ##### Scale[​](#scale "Direct link to Scale") SVector **Scale** (SVector other)
SVector **Scale** (float other) *Multiplies this Vector* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vector = Vector.New(0, 10, 0); local vectorOther = Vector.New(2, 5, 4); Space.Log(vector.Scale(vectorOther)); -- prints [0, 50, 0] Space.Log(vector * vectorOther); -- prints [0, 50, 0] ``` * Lua ```lua local vector = Vector.New(0, 10, 0); Space.Log(vector.Scale(5)); -- prints [0, 50, 0] Space.Log(vector * 5); -- prints [0, 50, 0] ``` ##### Divide[​](#divide "Direct link to Divide") SVector **Divide** (SVector other)
SVector **Divide** (float other) *Divides this Vector* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vector = Vector.New(10, 10, 10); local vectorOther = Vector.New(2, 2, 2); Space.Log(vector.Divide(vectorOther)); -- prints [5, 5, 5] Space.Log(vector / vectorOther); -- prints [5, 5, 5] ``` * Lua ```lua local vector = Vector.New(10, 10, 10); Space.Log(vector.Divide(2)); -- prints [5, 5, 5] Space.Log(vector / 2); -- prints [5, 5, 5] ``` ##### Distance[​](#distance "Direct link to Distance") float **Distance** (SVector other) *Returns the distance between this vector and other in meters* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vector = Vector.New(3, 3, 3.5); local vectorOther = Vector.New(2, 2, 2); Space.Log(vector.Distance(vectorOther)); -- prints 2.06155276298523 ``` * Lua ```lua --the below script will change the objects color to green if you are near the object --and change color to red if you are far from the object thisGameObject = Space.Host.ExecutingObject function OnUpdate() positionAvatar = Space.Scene.PlayerAvatar.GameObject.WorldPosition positionObject = thisGameObject.WorldPosition if positionAvatar.Distance(positionObject) < 5 then thisGameObject.Renderer.Material.SetColor("_Color",0,1,0,1) else thisGameObject.Renderer.Material.SetColor("_Color",1,0,0,1) end end thisGameObject.OnUpdate(OnUpdate) ``` ##### SquareDistance[​](#squaredistance "Direct link to SquareDistance") float **SquareDistance** (SVector other) *Returns the square of the distance between this vector and other in meters, considerably faster than distance()* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vector = Vector.New(3, 3, 3.5); local vectorOther = Vector.New(2, 2, 2); Space.Log(vector.SquareDistance(vectorOther)); -- prints 4.25 ``` * Lua ```lua --the below script will change the objects color to green if you are near the object --and change color to red if you are far from the object thisGameObject = Space.Host.ExecutingObject function OnUpdate() positionAvatar = Space.Scene.PlayerAvatar.GameObject.WorldPosition positionObject = thisGameObject.WorldPosition if positionAvatar.SquareDistance(positionObject) < 25 then thisGameObject.Renderer.Material.SetColor("_Color",0,1,0,1) else thisGameObject.Renderer.Material.SetColor("_Color",1,0,0,1) end end thisGameObject.OnUpdate(OnUpdate) ``` ##### InRange[​](#inrange "Direct link to InRange") bool **InRange** (SVector other, float range) *Returns if other is within range meters of this vector, inclusive* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vector = Vector.New(370, 30, 0); local vectorOther = Vector.New(372, 30, 0); Space.Log(vector.InRange(vectorOther, 2.0)); -- prints True local vector2 = Vector.New(80, 30, 20); local vectorOther2 = Vector.New(1, 15, 25); Space.Log(vector2.InRange(vectorOther2, 1.0)); -- prints False ``` * Lua ```lua --the below script will change the objects color to green if you are near the object --and change color to red if you are far from the object --(example: motion sensor lights) thisGameObject = Space.Host.ExecutingObject function OnUpdate() positionAvatar = Space.Scene.PlayerAvatar.GameObject.WorldPosition positionObject = thisGameObject.WorldPosition if positionAvatar.InRange(positionObject, 5.0) then thisGameObject.Renderer.Material.SetColor("_Color",0,1,0,1) else thisGameObject.Renderer.Material.SetColor("_Color",1,0,0,1) end end thisGameObject.SubscribeToEvents() thisGameObject.OnUpdate(OnUpdate) ``` ##### Cross[​](#cross "Direct link to Cross") SVector **Cross** (SVector other) *Returns the cross product of this vector and other* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vector = Vector.New(0, 1, 0); local vectorOther = Vector.New(1, 0, 0); Space.Log(vector.Cross(vectorOther)); -- prints [0, 0, -1] ``` ##### Lerp[​](#lerp "Direct link to Lerp") SVector **Lerp** (SVector other, float t) *Linear interpolates between this and other based on factor t (0-1)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua lerpVector = currentVector.Lerp(targetVector, 0.5) ``` * Lua ```lua -- Lua Translation of Unity C# Documentation --[["StartMarker" and "EndMaker" are game objects set up as endpoints. These objects are attached to the script in the Object Reference section. The name fields in that section should match these names for the example. --]] local startMarker = Space.Host.GetReference("StartMarker"); local endMarker = Space.Host.GetReference("EndMarker"); local ball = Space.Host.ExecutingObject; local speed = 1.0; local startTime; local journeyLength; ball.SubscribeToEvents(); local onStartMethod = function() startTime = Space.Time; journeyLength = startMarker.LocalPosition.Distance(endMarker.LocalPosition); end -- This ball object will move from the start endpoint object to the end endpoint. local moveBall = function() local distCovered = (Space.Time - startTime) * speed; local fracJourney = distCovered / journeyLength; ball.LocalPosition = startMarker.LocalPosition.Lerp(endMarker.LocalPosition, fracJourney); end ball.OnStart(onStartMethod); ball.OnUpdate(moveBall); ``` ##### Slerp[​](#slerp "Direct link to Slerp") SVector **Slerp** (SVector other, float t) *Spherically linear interpolates between this and other based on factor t (0-1)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua slerpVector = currentVector.Slerp(targetVector, 0.5) ``` * Lua ```lua -- Lua Translation of Unity C# Documentation --[["Sunrise" and "Sunset" are game objects set up as endpoints. These objects are attached to the script in the Object Reference section. The name fields in that section should match these names for the example. --]] local sunrise = Space.Host.GetReference("Sunrise"); local sunset = Space.Host.GetReference("Sunset"); local ball = Space.Host.ExecutingObject; local startTime; local journeyTime = 1.0; ball.SubscribeToEvents(); local onStartMethod = function() startTime = Space.Time; end -- This ball object will move from the start endpoint object to the end endpoint. local moveBall = function() local center = (sunrise.LocalPosition + sunset.LocalPosition) * 0.5; center = center - Vector.Up; local riseRelCenter = sunrise.LocalPosition - center; local setRelCenter = sunset.LocalPosition - center; local fracComplete = (Space.Time - startTime) / journeyTime; ball.LocalPosition = riseRelCenter.Slerp(setRelCenter, fracComplete); ball.LocalPosition = ball.LocalPosition + center; end ball.OnStart(onStartMethod); ball.OnUpdate(moveBall); ``` ##### MoveTowards[​](#movetowards "Direct link to MoveTowards") SVector **MoveTowards** (SVector other, float maxDistance) *Moves this vector closer to other by a maximum of maxDistance units* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newVector = currentVector.MoveTowards(targetVector) ``` * Lua ```lua -- Lua Translation of Unity C# Documentation --[["Target" is a game object set up as a target position. This object is attached to the script in the Object Reference section. The name field in that section should match this name for the example. --]] local target = Space.Host.GetReference("Target"); local ball = Space.Host.ExecutingObject; local speed = 1.0;Vecto local onStartMethod = function() startTime = Space.Time; end -- This ball object will move towards the target. Negative values for -- the maxDistance parameter will push the ball away from the target. local moveBall = function() local step = speed * Space.DeltaTime; ball.LocalPosition = ball.LocalPosition.MoveTowards(target.LocalPosition, step); end ball.OnStart(onStartMethod); ball.OnUpdate(moveBall); -- NOTE: If you use MoveTowards, the movement will not overshoot the target. ``` ##### Dot[​](#dot "Direct link to Dot") float **Dot** (SVector other) *Returns the dot product between this and other (note - normalise your vectors first!* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local vectorA = Vector.New(0, 1, 0); local vectorOtherA = Vector.New(1, 0, 0); Space.Log(vectorA.Dot(vectorOtherA)); -- prints 0 local vectorB = Vector.New(0, 1, 0); local vectorOtherB = Vector.New(0, 1, 0); Space.Log(vectorB.Dot(vectorOtherB)); -- prints 1 local vectorC = Vector.New(0, 1, 0); local vectorOtherC = Vector.New(0, -1, 0); Space.Log(vectorC.Dot(vectorOtherC)); -- prints -1 ``` ##### Equals[​](#equals "Direct link to Equals") bool **Equals** (SVector other) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua isEqual = Vector.Up.Equals( Vector.New(0,1,0) ) ``` ##### ToString[​](#tostring "Direct link to ToString") string **ToString** () *Function Description* * Lua ```lua stringVector = Vector.New(0,0,0).ToString() ``` ##### New[​](#new "Direct link to New") static SVector **New** (float x, float y, float z) *Initialises vector from three floats* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua newVector = Vector.New(0, 1, 0) ``` ##### operator+[​](#operator "Direct link to operator+") static SVector **operator+** (SVector a, SVector b)
static SVector **operator+** (SVector a, float b) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` ##### operator-[​](#operator- "Direct link to operator-") static SVector **operator-** (SVector a, SVector b)
static SVector **operator-** (SVector a, float b) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` ##### operator\*[​](#operator-1 "Direct link to operator*") static SVector **operator**\* (SVector a, SVector b)
static SVector **operator**\* (SVector a, float b) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` ##### operator/[​](#operator-2 "Direct link to operator/") static SVector **operator/** (SVector a, SVector b)
static SVector **operator/** (SVector a, float b) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` #### Properties[​](#properties "Direct link to Properties") ##### X[​](#x "Direct link to X") float **X** `get` `set` *X axis (red axis)* * Lua ```lua newVect = Vector.New(0,0,0) newVect.X = 5.0 ``` * Lua ```lua local obj = Space.Host.ExecutingObject; local originalPos = obj.LocalPosition; obj.SubscribeToEvents(); local onStartMethod = function() Space.Log(originalPos.x); -- prints the X axis position of this object as a float originalPos.x = 100.0; -- assigns 100.0 value to the X axis position of this object obj.LocalPosition = originalPos; -- sets the the new position end obj.OnStart(onStartMethod); ``` ##### Y[​](#y "Direct link to Y") float **Y** `get` `set` *Y axis (green axis)* * Lua ```lua newVect = Vector.New(0,0,0) newVect.Y = 5.0 ``` * Lua ```lua local obj = Space.Host.ExecutingObject; local originalPos = obj.LocalPosition; obj.SubscribeToEvents(); local onStartMethod = function() Space.Log(originalPos.y); -- prints the Y axis position of this object as a float originalPos.y = 100.0; -- assigns 100.0 value to the Y axis position of this object obj.LocalPosition = originalPos; -- sets the the new position end obj.OnStart(onStartMethod); ``` ##### Z[​](#z "Direct link to Z") float **Z** `get` `set` *Z axis (blue axis)* * Lua ```lua newVect = Vector.New(0,0,0) newVect.Z = 5.0 ``` * Lua ```lua local obj = Space.Host.ExecutingObject local originalPos = obj.LocalPosition local onStartMethod = function() Space.Log(originalPos.z) -- prints the Z axis position of this object as a float originalPos.z = 100.0 -- assigns 100.0 value to the Z axis position of this object obj.LocalPosition = originalPos -- sets the the new position end obj.OnStart(onStartMethod) ``` ##### Magnitude[​](#magnitude "Direct link to Magnitude") float **Magnitude** `get` *Returns the magnitude of this vector* * Lua ```lua vector = Vector.New(1.0, 5.0, 0.0) vectorMagnitude = vector.Magnitude ``` ##### Normalised[​](#normalised "Direct link to Normalised") SVector **Normalised** `get` *Returns the normalised version of this vector* * Lua ```lua vector = Vector.New(0.0, 10.0, 0.0) vectorNormalised = vector.Normalised ``` ##### Up[​](#up "Direct link to Up") static SVector **Up** `get` *Equivalent of new SVector(0,1,0)* * Lua ```lua up = Vector.Up ``` * Lua ```lua --this script will make clicking this object move 2 units up on the world Y axis thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = thisObject.WorldPosition + (Vector.Up * 2) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Down[​](#down "Direct link to Down") static SVector **Down** `get` *Equivalent of new SVector(0,-1,0)* * Lua ```lua down = Vector.Down ``` * Lua ```lua --this script will make clicking this object move 2 units down on the world Y axis thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = thisObject.WorldPosition + (Vector.Down * 2) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Left[​](#left "Direct link to Left") static SVector **Left** `get` *Equivalent of new SVector(-1,0,0)* * Lua ```lua left = Vector.Left ``` * Lua ```lua --this script will make clicking this object move 2 units left on the world X axis thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = thisObject.WorldPosition + (Vector.Left * 2) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Right[​](#right "Direct link to Right") static SVector **Right** `get` *Equivalent of new SVector(1,0,0)* * Lua ```lua right = Vector.Right ``` * Lua ```lua --this script will make clicking this object move 2 units right on the world X axis thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = thisObject.WorldPosition + (Vector.Right * 2) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Forward[​](#forward "Direct link to Forward") static SVector **Forward** `get` *Equivalent of new SVector(0,0,1)* * Lua ```lua forward = Vector.Forward ``` * Lua ```lua --this script will make clicking this object move 2 units Forward on the world Z axis thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = thisObject.WorldPosition + (Vector.Forward * 2) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Back[​](#back "Direct link to Back") static SVector **Back** `get` *Equivalent of new SVector(0,0,-1)* * Lua ```lua back = Vector.Back ``` * Lua ```lua --this script will make clicking this object move 2 units Back on the world Z axis thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = thisObject.WorldPosition + (Vector.Back * 2) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### Zero[​](#zero "Direct link to Zero") static SVector **Zero** `get` *Equivalent of new SVector(0,0,0)* * Lua ```lua vectorZero = Vector.Zero ``` * Lua ```lua --clicking this object move it to the center of the region <0,0,0> thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = Vector.Zero end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### One[​](#one "Direct link to One") static SVector **One** `get` *Equivalent of new SVector(1,1,1)* * Lua ```lua vectorOne = Vector.One ``` * Lua ```lua --clicking this object move it to the <1,1,1> coordinates of the region. thisObject = Space.Host.ExecutingObject OnClick = function() thisObject.WorldPosition = Vector.One end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClick) ``` ##### MaxValue[​](#maxvalue "Direct link to MaxValue") static SVector **MaxValue** `get` *Contains the largest possible vector* \[3.402823E+38, 3.402823E+38, 3.402823E+38] * Lua ```lua vectorMaxValue = Vector.MaxValue ``` ##### MinValue[​](#minvalue "Direct link to MinValue") static SVector **MinValue** `get` *Contains the largest possible negative vector* * Lua ```lua vectorMinValue = Vector.MinValue ``` --- ### SWebResponse #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property Name | | ----------------------------------------------------------------------------------------------------- | | string [**Error**](/scripting/client-scripting-api-reference/types/swebresponse.md#propertyname) | | string [**Response**](/scripting/client-scripting-api-reference/types/swebresponse.md#propertyname-1) | #### Properties[​](#properties "Direct link to Properties") ##### Error[​](#error "Direct link to Error") string **Error** `get` *Any error, will be empty or null if the request was successful* * Lua ```lua function ResponseFunction(responseData) stringError = responseData.Error end Space.WebServices.Get('aURL', ResponseFunction) ``` ##### Response[​](#response "Direct link to Response") string **Response** `get` *The body text of the webpage response if error is empty or null* * Lua ```lua function ResponseFunction(responseData) stringResponse = responseData.Response end Space.WebServices.Get('aURL', ResponseFunction) ``` --- ### Guides #### [πŸ“„οΈPersistence](/scripting/guides/persistence.md) [Guide on how to script persistence in Sinespace](/scripting/guides/persistence.md) --- ### Persistence The Sinespace API has a range of API functions that enable us to create different types of persistence. As scripters, we have to choose the type which is more suitable for the task at hand, or even mix and match. In this guide we will go through all the the different classes and functions and explain how to use them. #### Reference[​](#reference "Direct link to Reference") These two tables briefly explains the difference between the different types of classes and members that have persistence functionality, and we will expand even more after that. | Class | Member | Type of persistence | | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | [SNetwork](../client-scripting-api-reference/network/snetwork)
(client scripting) | [SetRegionProperty](../client-scripting-api-reference/network/snetwork#setregionproperty)
[GetRegionProperty](../client-scripting-api-reference/network/snetwork#getregionproperty)
[SetShardProperty](../client-scripting-api-reference/network/snetwork#setshardproperty)
[GetShardProperty](../client-scripting-api-reference/network/snetwork#getshardproperty)
[HasShardProperties](../client-scripting-api-reference/network/snetwork#hasshardproperties) | Semi-permanent Region
Semi-permanent Region
Semi-permanent Shard
Semi-permanent Shard
Semi-permanent Shard/Region | | [SPersistence](../client-scripting-api-reference/region/spersistence)
(client scripting) | [UpdateInfo
](../client-scripting-api-reference/region/spersistence#updateinfo)[RetrieveValue](../client-scripting-api-reference/region/spersistence#retrievevalue)
[SetValue](../client-scripting-api-reference/region/spersistence#setvalue)
[UpdateRegionInfo](../client-scripting-api-reference/region/spersistence#updateregioninfo)
[RetrieveRegionValue](../client-scripting-api-reference/region/spersistence#retrieveregionvalue)
[SetRegionValue](../client-scripting-api-reference/region/spersistence#setregionvalue) | Permanent Player
Permanent Player
Permanent Player
Permanent Region
Permanent Region
Permanent Region | | [SShared](../client-scripting-api-reference/client/sshared)
(client scripting) | [SetSuperGlobal](../client-scripting-api-reference/client/sshared#setsuperglobal)
[GetSuperGlobal](../client-scripting-api-reference/client/sshared#getsuperglobal) | Semi-permanent Viewer
Semi-permanent Viewer | | [SDatabase](../server-scripting-api-reference/storage/sdatabase) (server scripting) | [GetPlayerValue](../server-scripting-api-reference/storage/sdatabase#getplayervalue)
[SetPlayerValue](../server-scripting-api-reference/storage/sdatabase#setplayervalue)
[GetRegionValue](../server-scripting-api-reference/storage/sdatabase#getregionvalue)
[SetRegionValue](../server-scripting-api-reference/storage/sdatabase#setregionvalue) | Permanent Player
Permanent Player
Permanent Region
Permanent Region | | Types of persistence | Description | | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Semi-permanent Region | Persistence will last until Region is closed (after all players leave the Region).Persistence applied region-wide (including all shards, if any are active). | | Semi-permanent Shard | Persistence will last until Shard is closed (after all players leave the Shard).Persistence applied only to a specific Shard. | | Semi-permanent Viewer | Persistence will last until Viewer is closed.
Persistence applied to the Viewer. | | Permanent Player | Persistence will last permanently.
Persistence applied to specific Player. | | Permanent Region | Persistence will last permanently.
Persistence applied to Region. | #### What is persistence?[​](#what-is-persistence "Direct link to What is persistence?") Sending Network Messages is cool for one off events, for example: a player waving Hello, which is relevant for only a few seconds. However, sometimes we want to make changes that are relevant for more than just a few seconds, for example: a window being opened.

If we send a Network Message to broadcast to all players that Window A is now open, when a new player enters our region, they would have missed that Network Message, and Window A would still be closed for them in their viewer.

This is why we need the ability to make certain changes to the scene **Persist**, either permanently or at least until everyone's left the region. #### SNetwork class[​](#snetwork-class "Direct link to SNetwork class") The SNetwork class has a variety of networking functions but has 4 functions and 1 property which are related to persistence. * SetRegionProperty/GetRegionProperty * SetShardProperty/GetShardProperty * HasShardProperties ##### Shard Vs Region[​](#shard-vs-region "Direct link to Shard Vs Region") You'll notice some functions apply to **Shards** and some to **Regions**. What are "shards" anyways? A Shard is a feature in Sinespace where **one** **Region** can have **multiple** **Shards** (instances), very much like parallel universes, where players on one Shard cannot see players on another Shard. For the purpose of this beginner guide, we won't go into scripting multi-Shard experiences, but it's enough to understand the differences. ##### What are Shard/Region properties?[​](#what-are-shardregion-properties "Direct link to What are Shard/Region properties?") For every Shard/Region that is open (there's players inside), there's a semi-permanent storage created on the server that holds **properties**. All scripts using these functions will access this same storage to read and write properties. This storage is a collection of **keys** and **values**. This storage will close after the Shard/Region is closed (after all players leave). ##### What "key" should you use?[​](#what-key-should-you-use "Direct link to What \"key\" should you use?") You mostly want your **key** to be a private one, so other scripts cannot access it. You are also most likely to want your key to be specific to a GameObject. We can achieve both of the above in this way: ```lua thisGameObject = Space.Host.ExecutingObject KEY = 'SomethingSecret' .. thisGameObject.ID ``` Now we've created a **key** which both **private** and **specific to a GameObject**. We will use it later to access the properties storage and read/write a specific value. ##### HasShardProperties[​](#hasshardproperties "Direct link to HasShardProperties") When a player joins the region, scripts that want to immediately access the properties database might fire off during a very tiny period where we haven't yet connected to the properties storage. This is why use **HasShardProperties** to check if the storage database is connected and ready for read/write. (HasShardProperties is used for both Shard properties and Region properties) Let's expand our previous code by adding a coroutine (run our code in a parallel thread) to take care of this: ```lua thisGameObject = Space.Host.ExecutingObject KEY = 'SomethingSecret' .. thisGameObject.ID function TheCoroutineFunction() while not Space.Network.HasShardProperties do --this while loop keeps looping until HasShardProperties returns true coroutine.yield(0) --this ensures our loop runs once per frame, otherwise it will be crashed for running too long on a single frame end --At this point we have the confirmation we need to begin read/write end Space.Host.StartCoroutine(TheCoroutineFunction) ``` ##### Setting and Getting properties[​](#setting-and-getting-properties "Direct link to Setting and Getting properties") Shard properties and Region properties are executed in the exact same way. So for the purpose of this guide we will continue using Region properties only. Note: The below to functions are usage limited to 10 calls per second. (20 calls per second on Breakroom) To get a Region property: `value = Space.Network.GetRegionProperty(KEY)` Note: Sometimes a Region property may have not been set before, so it might return **Nil**. We'll have to add a check for that. To set a Region property: `Space.Network.SetRegionProperty(KEY, 'A Value')` Note: Region property values are a string datatype, so you'll have to convert your numbers or tables to a string to store them. ```lua thisGameObject = Space.Host.ExecutingObject KEY = 'SomethingSecret' .. thisGameObject.ID function TheCoroutineFunction() while not Space.Network.HasShardProperties do --this while loop keeps looping until HasShardProperties returns true coroutine.yield(0) --this ensures our loop runs once per frame, otherwise it will be crashed for running too long on a single frame end --below part only runs after weve got our confirmation value = Space.Network.GetRegionProperty(KEY) --how to read Space.Network.SetRegionProperty(KEY, 'A Value') --how to write end Space.Host.StartCoroutine(TheCoroutineFunction) ``` ##### The window example[​](#the-window-example "Direct link to The window example") Let's write a script for a window which when clicked opens/closes and updates it's Region property, and also keeps reading the Region property incase another player opens/closes the window. We are going to add to our script two main parts. First part is constantly reading the Region property to monitor and react to changes. Second part reacts to clicks and updates the Region property which holds the state of the window (open/close). ###### The First Part[​](#the-first-part "Direct link to The First Part") ```lua thisGameObject = Space.Host.ExecutingObject KEY = 'SomethingSecret' .. thisGameObject.ID refWindow = Space.Host.GetReference("window") -- this should be linked in the Scripting Runtime "references" section function TheCoroutineForFirstPart() while true do local value = Space.Network.GetRegionProperty(KEY) --how to read if value = nil then --we're going to default the window to closed if Nil refWindow.Active = true elseif value == "Open" then --if it's "Open" we're going to make the window disappear refWindow.Active = false elseif value == "Closed" then --if it's "Closed" we're going to make the window appear refWindow.Active = true end coroutine.yield(0.2) --We'll make this run every 0.2 seconds. That's should be quick enough and we also have a limit to mind. end end function TheCoroutineFunction() while not Space.Network.HasShardProperties do --this while loop keeps looping until HasShardProperties returns true coroutine.yield(0) --this ensures our loop runs once per frame, otherwise it will be crashed for running too long on a single frame end --below part only runs after weve got our confirmation Space.Host.StartCoroutine(TheCoroutineForFirstPart) -- we can no start our coroutine which consist of the first part Space.Network.SetRegionProperty(KEY, 'A Value') --how to write end Space.Host.StartCoroutine(TheCoroutineFunction) ``` ###### The Second Part (and final code)[​](#the-second-part-and-final-code "Direct link to The Second Part (and final code)") ```lua thisGameObject = Space.Host.ExecutingObject KEY = 'SomethingSecret' .. thisGameObject.ID refWindow = Space.Host.GetReference("window") -- this should be linked in the Scripting Runtime "references" section function TheCoroutineForFirstPart() while true do local value = Space.Network.GetRegionProperty(KEY) --how to read if value = nil then --we're going to default the window to closed if Nil refWindow.Active = true elseif value == "Open" then --if it's "Open" we're going to make the window disappear refWindow.Active = false elseif value == "Closed" then --if it's "Closed" we're going to make the window appear refWindow.Active = true end coroutine.yield(0.2) --We'll make this run every 0.2 seconds. That's should be quick enough and we also have a limit to mind. end end function TheOnClickFunctionForSecondPart() --Second Part code which will update region properties when object is clicked local checkFirst = Space.Network.GetRegionProperty(KEY) if checkFirst == nil then --if it's nil, this window was never used, so we update property to open Space.Network.SetRegionProperty(KEY, "Open") elseif checkFirst == "Open" --if its "Open" we update it to "Closed" Space.Network.SetRegionProperty(KEY, "Closed") elseif checkFirst == "Closed" --if its "Closed" we update it to "Open" end end function TheCoroutineFunction() while not Space.Network.HasShardProperties do --this while loop keeps looping until HasShardProperties returns true coroutine.yield(0) --this ensures our loop runs once per frame, otherwise it will be crashed for running too long on a single frame end --below part only runs after weve got our confirmation Space.Host.StartCoroutine(TheCoroutineForFirstPart) -- we can no start our coroutine which consist of the first part Space.Network.SetRegionProperty(KEY, 'A Value') --how to write end thisGameObject.AddClickable() --we make this object a clickable thisGameObject.Clickable.OnClick(TheOnClickFunctionForSecondPart) --we add our Second Part new code to be executed On cLick Space.Host.StartCoroutine(TheCoroutineFunction) ``` #### SShared class[​](#sshared-class "Direct link to SShared class") The SShared class (client scripting) has a variety of inter-script communication functions and local viewer storage functions but has 2 functions which are related to persistence. * SetSuperGlobal * GetSuperGlobal ##### What is a Super Global?[​](#what-is-a-super-global "Direct link to What is a Super Global?") A "Global" in the SShared class is a storage within the local player's viewer accessible to all scripts. A "Super Global" is the same storage but semi-permanent; it will keep existing even when changing regions, until the viewer is closed. For this example, we will creator a clickable object that teleports us to a region, and on that region we will have a script that reacts depending where we came from. ##### What "namespace" and "key" should you use?[​](#what-namespace-and-key-should-you-use "Direct link to What \"namespace\" and \"key\" should you use?") Unlike [our previous case](/scripting/guides/persistence.md#what-key-should-you-use), these functions are storing on a specific player's viewer, and they could be meant to be accessed by multiple scripts (could be our other scripts or other scripters' scripts too). It's inherently specific to a player, and likely to a specific project or operation/objective. That's why it's accessed using a **namespace**, **key** and **value**, vs just **key** and **value**. The **namespace** could be a type of accessor which doesn't have to be private, while still having a **key** accessor that we can make private. ```lua --SCRIPT A NAMESPACE = 'space.sine.apidocs.persistenceguide' --this format is just a naming convention KEY = 'Teleported From' ``` ##### Setting and Getting Super Globals[​](#setting-and-getting-super-globals "Direct link to Setting and Getting Super Globals") When Setting a Super Global, the value need not be a **string**. It accepts a value of type **DynValue**, which means it can be a **string**, **number** or **table** etc... We set a Super Global like this: `Space.Shared.SetSuperGlobal('namespace', 'key', AVariable)` We get a Super Global like this: `value = Space.Shared.GetSuperGlobal('namespace','key')` ##### The teleporter example[​](#the-teleporter-example "Direct link to The teleporter example") We will create 2 scripts for this example. The first script will be the one teleporting us an Setting a Super Global, and the second one will be at the destination and will access our Super Global and react to where we teleported from.
We will start creating our first script by expanding on our code above by adding a clickable and make it Set a Super Global with the information we need to carry on to the second region. For the purpose of this guide we will pass our information in a Table rather than a single variable. ```lua --Script A NAMESPACE = 'space.sine.apidocs.persistenceguide' --this format is just a naming convention KEY = 'Teleported From' thisGameObject = Space.Host.ExecutingObject function OnClickFunction() local tableValue = {id = Space.Scene.RegionID, name = Space.Scene.Name} --we create a Table that holds both RegionID and Region Name Space.Shared.SetSuperGlobal(NAMESPACE,KEY, tableValue) --we Set our Super Global Space.Scene.PlayerAvatar.Teleport(0000000) -- We teleport. You'll have to replace the zeros with your region ID end thisGameObject.AddClickable() --we make the object clickable thisGameObject.Clickable.OnClick(OnClickFunction) --we hook our OnClickFunction to the clickable's OnClick event ``` Now we have an object, that when clicked, Sets a Super Global and then teleports us. On the destination region we will now create the script that processes our carried over information (regiond name and ID). ```lua --Script B NAMESPACE = 'space.sine.apidocs.persistenceguide' --this format is just a naming convention KEY = 'Teleported From' getTableValue = Space.Shared.GetSuperGlobal(NAMESPACE, KEY) Space.Log("You have arrived from region ID: ".. getTableValue.id .. " with Name: " .. getTableValue.name) ``` #### SPersistence Class[​](#spersistence-class "Direct link to SPersistence Class") The SPersistence class has 6 functions that are all used for creating permanent persistence. * UpdateInfo/UpdateRegionInfo * RetrieveValue/RetrieveRegionValue * SetValue/SetRegionValue ##### What are Region Values and Values?[​](#what-are-region-values-and-values "Direct link to What are Region Values and Values?") Half the functions in this class create Permanent Region persistence, and the other half create Permanent Player persistence. If the function has the word **region** in it, that means it creates Region persistence. If it does not, that means it creates Player persistence. Region/Player values are values in a permanent storage. Region values are in a permanent storage which is linked to the region, and (Player) Values are in a permanent storage linked to the player running the script. In terms of usage, Region Values are the equivalent to the permanent version of the[ SNetwork class](/scripting/guides/persistence.md#snetwork-class). Whereas Player values are the equivalent to the [SShared class](/scripting/guides/persistence.md#sshared-class). ##### What "key" should you use?[​](#what-key-should-you-use-1 "Direct link to What \"key\" should you use?") In the case of Region values we will be creating keys in the same way as we did for the [SNetwork class](/scripting/guides/persistence.md#what-key-should-you-use). In the case of (Player) values we will be creating keys in the same way as we did for the [SShared class](/scripting/guides/persistence.md#sshared-class). ##### Why do we need to "Update Region Info"?[​](#why-do-we-need-to-update-region-info "Direct link to Why do we need to \"Update Region Info\"?") The unique feature of this class is that it is a client scripting class, but gives us the ability to create persistence without the use of a **server script.** The storage used to achieve this is an external one, which means we have to start with using the **UpdateRegionInfo()** function to request the storage to send us a copy of it's most recent values (before trying to access these values). We do it this way: ```lua function WhatToDoWhenInfoIsReady() --We access the data we need from inside here end Space.Persistence.UpdateRegionInfo() --or UpdateInfo() for Player version ``` Unlike semi-permanent region properties, this function call is not as instant. Because it accesses an external permanent storage, we need to hook a function which will be called once the info has arrived. ```lua thisGameObject = Space.Host.ExecutingObject KEY = "Secret" .. thisGameObject.GlobalID function WhatToDoWhenInfoIsReady() value = Space.Persistence.RetrieveRegionValue(KEY) --Getting a region value Space.Log(value) --should print "Something" end Space.Persistence.SetRegionValue(KEY, "Something") --Setting a region value Space.Persistence.UpdateRegionInfo() ``` The slower or variable response speed of this functionality means that it's not recommended to be called rapidly like we did with SNetwork region properties. Therefore we might have to mix and match our code with other types of persistence. ##### Smart Lights Example[​](#smart-lights-example "Direct link to Smart Lights Example") [Visit our **Smart Lights** sample project page.](/scripting/sample-projects/smart-lights.md) #### SDatabase Class[​](#sdatabase-class "Direct link to SDatabase Class") The SDatabase class is the equivalent of the SPersistence class but the only difference being that it is accessed only through [**Server Scripts**](/scripting/guides/server-scripts.md)**.** Server scripts do not have access to the SPersistence class. A server script is also inherently semi-persistent. That means if you do this `aVariable = 5` in a server script. This variable will be persistent until all players leave the region. This makes the usage of the SDatabase class much easier than the SPersistent class due to not having to mix and match persistent methods. A downside to server scripts is that they can only be placed in furniture items and need to be loaded on a region to be used (unlike client scripts). Since this class is almost an exact copy of the SPersistence class. We will only be outlining the differences below (to avoid being repetitive). ##### Differences between SDatabase and SPersistence[​](#differences-between-sdatabase-and-spersistence "Direct link to Differences between SDatabase and SPersistence") The only two small differences between these to classes are: 1. Functions SetValue/GetValue in SPersistence, are SetPlayerValue/GetPlayerValue in SDatabase 2. GetRegionValue and GetPlayerValue have an extra **onSave** parameter which is a hook that lets us know when the value as been successfully set. ```lua --Setting a region value using SPersistence in a client script Space.Persistence.SetRegionValue(KEY, "Something") --vs --Setting a region value using SDatabase in a server script function onSave() --do something when set is succesful end Space.Database.SetRegionValue(KEY, "Something", onSave) ``` #### Thank You[​](#thank-you "Direct link to Thank You") **Thanks for completing this guide. If you run into any issues or would like to recommend improvements,**[ **please do so on this page**](/scripting/support/report-an-issue.md)**.** --- ### Server Scripts ##### What are server scripts and why do we need them?[​](#what-are-server-scripts-and-why-do-we-need-them "Direct link to What are server scripts and why do we need them?") The main difference between Server scripts and Client scripts is that they are running on the server. For **Client scripts**, each player is **running their own local version of a script**, while for **Server scripts**, all players are **running the same version of a script**. Also, server scripts and client scripts **do not share the same API**. Most of the time we should be able to achieve our task using Client scripts, specially with the availability of classes like the SNetwork or SPersistence classes, which allow scripts to communicate with each other and share data. However, we may sometimes run into tasks that are more complex and require an independent script (a server script) to be a central hub for communication, data storage, processing information, syncing etc... A good example of an interactive object that would be done using a server script is a multiplayer board game. ##### Creating a Server script:[​](#creating-a-server-script "Direct link to Creating a Server script:") * Create a GameObject. * Add the server script component to the GameObject. (Add Component -> Server Script) * Fill in the **Class ID** field with a unique identifier for your server script. (example: com.example.theserverscript) * Drag your .lua file into the **Script** field. * Add a Virtual Good component. (Add Component -> Virtual Good) * Most important part in a Server Script's Virtual Good component is that the **Type** needs to be set to **Server Script.** * Upload the GameObject . ##### Using a Server script:[​](#using-a-server-script "Direct link to Using a Server script:") * Create a GameObject. * Add a **Require Server Script** component. * Set the **Virtual Good ID** field to the same virtual good ID of your above created server script. * Set the **Class ID** field to the same class ID of your above created server script. * Add a **Room Furniture** component (Add Component -> Room Furniture) * Now this object will load the above created server script in the region it is placed in. * You can also add a **Scripting Runtime** component to this GameObject. (Add Component -> Scripting Runtime). #### Events[​](#events "Direct link to Events") Unlike client scripting where you have to create hooks/bindings to events, Server scripts only need you to declare that function without creating any hooks/bindings. For example: ```lua function OnAvatarJoin(id) Space.Log(id .. " joined the scene.") end ``` You can find [Server script events here](/scripting/server-scripting-api-reference/region/sregionscript.md#events-index). #### Sample Project[​](#sample-project "Direct link to Sample Project") The **Trivia Box** sample project is a good demonstration of how to use server scripts. [You can access it here and download it's open-source files.](/scripting/sample-projects/trivia-box.md) #### Thank You[​](#thank-you "Direct link to Thank You") **\[This guide is still in progress.**[ **Please report issues here**](/scripting/support/report-an-issue.md)**]** --- ### Sample Projects #### [πŸ“„οΈSmart Lights](/scripting/sample-projects/smart-lights.md) [This sample project is a panel that has switches to turn off/on and change the colors of all lights connected to it. This project demonstrates how we](/scripting/sample-projects/smart-lights.md) --- ### Smart Lights This sample project is a panel that has switches to turn off/on and change the colors of all lights connected to it. This project demonstrates how we can achieve permanent persistence, how a World Canvas can interface with a script and a bit of networking. Creators can access and download the project files (which are open-source) and do as they wish with it. Note: Control of the panel is limited to Owner and Admin. This can be modified in the script. You can demo this object live by going to the **Shop** -> **Furniture** -> Search for **Smart Lights** (it will be under **API Docs Sample Projects** as creator)**.** ###### How to use:[​](#how-to-use "Direct link to How to use:") * Download the package using the link below * Import into your Sinespace project (Editor Pack required) * The project folder will be under **Sinespace Sample Projects -> Smart Lights** * There's a demo scene in the Scenes folder * To connect lights to the panel, make them children of the "**Lights**" object group * In the **Virtual Goods component**, press **Clear ID** and modify the component fields with your own info * Upload. [Download PersistentSmartLights16July2022.unitypackage](/assets/files/PersistentSmartLights16July2022-956af536b0479562f583a94b380fc9a4.unitypackage) Last Updated: 6/28/2022 --- ### Trivia Box This sample project is a box that when pressed will show a trivia question on screen and users will be able to attempt to answer the trivia question using local chat. This project demonstrates how to create a server script and how client-server communications can be made to create an interactive multiplayer object. It also shows how we can access and interact with the local chat messages through scripting. Creators can access and download the project (which is open-source) and do as they wish with it. Note: Control of the box is limited to Owner and Admin. This can be modified in the script. You can demo this object live by going to the **Shop** -> **Furniture** -> Search for **Trivia Box** (it will be under **API Docs Sample Projects** as creator)**.** ###### How to use:[​](#how-to-use "Direct link to How to use:") * Download the package using the link below * Import into your Sinespace project (Editor Pack required) * The project folder will be under **Sinespace Sample Projects -> Trivia Box** * There's a demo scene in the **Scenes** folder * In the **Virtual Goods component**, press **Clear ID** and modify the component fields with your own info. * In the **VG Trivia Box Server** object, edit the **Class ID** in the **Server Script** component. * In the **VG Trivia Box object**, edit the **Virtual Good ID** and **Class ID** in the **Require Server Script** component. * Modify the project and upload. --- ### Server Scripting API #### [πŸ—ƒLibrary](/scripting/server-scripting-api-reference/library.md) [1 item](/scripting/server-scripting-api-reference/library.md) --- ### Library Helper libraries available to server scripts, including math utilities. --- ### SMath #### Index[​](#index "Direct link to Index") ##### Static Functions Index[​](#static-functions-index "Direct link to Static Functions Index") | Function Name | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | static float [**Random** ](/scripting/server-scripting-api-reference/library/smath.md#random)() | | static float [**RandomRange** ](/scripting/server-scripting-api-reference/library/smath.md#randomrange)(float min, float max) | | static int [**RandomInteger** ](/scripting/server-scripting-api-reference/library/smath.md#randominteger)(int min, int max) | | static float [**Abs** ](smath#abs)(float v)
static int [**Abs** ](smath#abs)(int v) | | static float [**Acos** ](/scripting/server-scripting-api-reference/library/smath.md#acos)(float v) | | static bool [**Approximately** ](/scripting/server-scripting-api-reference/library/smath.md#approximately)(float a, float b) | | static float [**Asin** ](/scripting/server-scripting-api-reference/library/smath.md#asin)(float v) | | static float [**Atan** ](/scripting/server-scripting-api-reference/library/smath.md#atan)(float v) | | static float [**Atan2** ](/scripting/server-scripting-api-reference/library/smath.md#atan2)(float y, float x) | | static int [**Ceil** ](/scripting/server-scripting-api-reference/library/smath.md#ceil)(float v) | | static float [**Clamp** ](/scripting/server-scripting-api-reference/library/smath.md#clamp)(float v, float min, float max) | | static float [**Clamp01** ](/scripting/server-scripting-api-reference/library/smath.md#clamp01)(float v) | | static int [**ClosestPowerOfTwo** ](/scripting/server-scripting-api-reference/library/smath.md#closestpoweroftwo)(int v) | | static float [**Cos** ](/scripting/server-scripting-api-reference/library/smath.md#cos)(float v) | | static float [**DeltaAngle** ](/scripting/server-scripting-api-reference/library/smath.md#deltaangle)(float current, float target) | | static float [**Exp** ](/scripting/server-scripting-api-reference/library/smath.md#exp)(float v) | | static int [**Floor** ](/scripting/server-scripting-api-reference/library/smath.md#floor)(float v) | | static float [**GammaToLinearSpace** ](/scripting/server-scripting-api-reference/library/smath.md#gammatolinearspace)(float v) | | static float [**InverseLerp** ](/scripting/server-scripting-api-reference/library/smath.md#inverselerp)(float a, float b, float value) | | static bool [**IsPowerOfTwo** ](/scripting/server-scripting-api-reference/library/smath.md#ispoweroftwo)(int v) | | static float [**Lerp** ](/scripting/server-scripting-api-reference/library/smath.md#lerp)(float a, float b, float v) | | static float [**LerpAngle** ](/scripting/server-scripting-api-reference/library/smath.md#lerpangle)(float a, float b, float v) | | static float [**LerpUnclamped** ](/scripting/server-scripting-api-reference/library/smath.md#lerpunclamped)(float a, float b, float v) | | static float [**LinearToGammaSpace** ](/scripting/server-scripting-api-reference/library/smath.md#lineartogammaspace)(float v) | | static float [**Log** ](smath#log)(float v)
static float [Log ](smath#log)(float v, float p) | | static float [**Log10** ](/scripting/server-scripting-api-reference/library/smath.md#log10)(float v) | | static float [**Max** ](/scripting/server-scripting-api-reference/library/smath.md#max)(float a, float b) | | static float [**Min** ](/scripting/server-scripting-api-reference/library/smath.md#min)(float a, float b) | | static float [**MoveTowards** ](/scripting/server-scripting-api-reference/library/smath.md#movetowards)(float value, float target, float delta) | | static float [**MoveTowardsAngle** ](/scripting/server-scripting-api-reference/library/smath.md#movetowardsangle)(float value, float target, float delta) | | static int [**NextPowerOfTwo** ](/scripting/server-scripting-api-reference/library/smath.md#nextpoweroftwo)(int v) | | static float [**PerlinNoise** ](/scripting/server-scripting-api-reference/library/smath.md#perlinnoise)(float x, float y) | | static float [**PingPong** ](/scripting/server-scripting-api-reference/library/smath.md#pingpong)(float t, float length) | | static float [**Pow** ](/scripting/server-scripting-api-reference/library/smath.md#pow)(float value, float pow) | | static float [**Repeat** ](/scripting/server-scripting-api-reference/library/smath.md#repeat)(float value, float length) | | static int [**Round** ](/scripting/server-scripting-api-reference/library/smath.md#round)(float value) | | static float [**Sign** ](/scripting/server-scripting-api-reference/library/smath.md#sign)(float value) | | static float [**Sin** ](/scripting/server-scripting-api-reference/library/smath.md#sin)(float value) | | static float [**SmoothStep** ](/scripting/server-scripting-api-reference/library/smath.md#smoothstep)(float from, float to, float t) | | static float [**Sqrt** ](/scripting/server-scripting-api-reference/library/smath.md#sqrt)(float value) | | static float [**Tan** ](/scripting/server-scripting-api-reference/library/smath.md#tan)(float value) | ##### Static Attributes Index[​](#static-attributes-index "Direct link to Static Attributes Index") | Property Name | | ----------------------------------------------------------------------------------------------------- | | static readonly float [**Pi**](/scripting/server-scripting-api-reference/library/smath.md#pi)\*\*\*\* | #### Static Functions[​](#static-functions "Direct link to Static Functions") ##### Random[​](#random "Direct link to Random") static float **Random** () *Returns a random float between 0 and 1 (inclusive)* * Lua ```lua local randomNumber = Space.Math.Random(); Space.Log(randomNumber); -- prints 0.689094245433807 ``` ##### RandomRange[​](#randomrange "Direct link to RandomRange") static float **RandomRange** (float min, float max) *Returns a random float between min and max (inclusive)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local min = 100.0; local max = 500.0; local randomNumber = Space.Math.RandomRange(min, max ); Space.Log(randomNumber); -- prints 0206.659149169922 ``` ##### RandomInteger[​](#randominteger "Direct link to RandomInteger") static int **RandomInteger** (int min, int max) *Returns a random float between min (inclusive) and max (exclusive)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local min = 50; local max = 75; local randomInteger = Space.Math.RandomInteger(min, max); Space.Log(randomInteger); -- prints 52 ``` ##### Abs[​](#abs "Direct link to Abs") static float **Abs** (float v)
static int **Abs** (int v) *Returns the absolute value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = -4.2 local absoluteNum = Space.Math.Abs(value); Space.Log(absoluteNum); -- prints 4 [BUG] should be 4.2 ``` ##### Acos[​](#acos "Direct link to Acos") static float **Acos** (float v) *Returns the arc cosine value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 0.5; local arcCosine = Space.Math.Acos(value); Space.Log(arcCosine); -- prints 1.04719758033752 (radians) which is 60 degrees ``` ##### Approximately[​](#approximately "Direct link to Approximately") static bool **Approximately** (float a, float b) *True if the difference between a and b is less than epsilon* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local a = 5.0; local b = 5; local approx1 = Space.Math.Approximately(a, b); Space.Log(approx1); -- prints true local a = 5.01; local b = 5.0; local approx2 = Space.Math.Approximately(a, b); Space.Log(approx2); -- prints false local a = 5.01; local b = 5.0; local approx3 = Space.Math.Approximately(a, b); Space.Log(approx3); -- prints false ``` ##### Asin[​](#asin "Direct link to Asin") static float **Asin** (float v) *Returns the arc sine value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 0.5; local arcSine = Space.Math.Asin(value); Space.Log(arcSine); -- prints 0.523598790168762 (radians) which is 30 degrees ``` ##### Atan[​](#atan "Direct link to Atan") static float **Atan** (float v) *Returns the arc tangent value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 1.732050808; local arcTangent = Space.Math.Atan(value); Space.Log(arcTangent); -- prints 1.04719758033752 (radians) which is 60 degrees ``` ##### Atan2[​](#atan2 "Direct link to Atan2") static float **Atan2** (float y, float x) *Returns the arc tangent of y/x* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local x = 0.5; local y = 0.5; local arcTangent = Space.Math.Atan2(y, x); Space.Log(arcTangent); -- prints 0.785398185253143 ``` ##### Ceil[​](#ceil "Direct link to Ceil") static int **Ceil** (float v) *Returns the ceil value of 'val' as an integer* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Ceil(4.0)); -- prints 4 Space.Log(Space.Math.Ceil(4.2)); -- prints 5 Space.Log(Space.Math.Ceil(-4.2)); -- prints -4 ``` ##### Clamp[​](#clamp "Direct link to Clamp") static float **Clamp** (float v, float min, float max) *Clamps val between min and max, and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 100.0; local min = 20.0; local max = 82.0; local clampedValue = Space.Math.Clamp(value, min, max); Space.Log(clampedValue); -- prints 82 ``` ##### Clamp01[​](#clamp01 "Direct link to Clamp01") static float **Clamp01** (float v) *Clamps val between 0 and 1, and returns the result* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = -1.0; local clampedValue = Space.Math.Clamp01(value); Space.Log(clampedValue); -- prints 0 ``` ##### ClosestPowerOfTwo[​](#closestpoweroftwo "Direct link to ClosestPowerOfTwo") static int **ClosestPowerOfTwo** (int v) *Returns the closest power of two to val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local value = 33; local powerOfTwo = Space.Math.ClosestPowerOfTwo(value); Space.Log(powerOfTwo); -- prints 32 ``` ##### Cos[​](#cos "Direct link to Cos") static float **Cos** (float v) *Returns the cosine of val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local cosine = Space.Math.Cos(angle); Space.Log(cosine); -- prints 0.499999970197678 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local cosine2 = Space.Math.Cos(angle2); Space.Log(cosine2); -- prints 0.499999970197678 ``` ##### DeltaAngle[​](#deltaangle "Direct link to DeltaAngle") static float **DeltaAngle** (float current, float target) \_Returns the difference in degrees between two values (e.g. 350' and 17' returns 27') \_ | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.DeltaAngle(350.0, 17.0)); -- prints 27 ``` ##### Exp[​](#exp "Direct link to Exp") static float **Exp** (float v) *Returns e raised to val power.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Exp(3.0)); -- prints 20.0855369567871 ``` ##### Floor[​](#floor "Direct link to Floor") static int **Floor** (float v) *Returns floor of val, converted to an int* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Floor(4.0)); -- prints 4 Space.Log(Space.Math.Floor(4.2)); -- prints 4 Space.Log(Space.Math.Floor(-4.2)); -- prints -5 ``` ##### GammaToLinearSpace[​](#gammatolinearspace "Direct link to GammaToLinearSpace") static float **GammaToLinearSpace** (float v) *Converts a colour value from Gamma to Linear Space (Pow 2.2)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.GammaToLinearSpace(0.5)); -- prints 0.214041143655777 ``` ##### InverseLerp[​](#inverselerp "Direct link to InverseLerp") static float **InverseLerp** (float a, float b, float value) *Returns the percentage between a and b that 'val' is on a line (opposite of Lerp)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 0.0; local sliderStop = 100.0; local currentSliderPos = 75.0; local percentage = Space.Math.InverseLerp(sliderStart, sliderStop, currentSliderPos); Space.Log(percentage); -- prints 0.75 ``` ##### IsPowerOfTwo[​](#ispoweroftwo "Direct link to IsPowerOfTwo") static bool **IsPowerOfTwo** (int v) *Returns true if val is a power of two* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.IsPowerOfTwo(55)); -- prints False Space.Log(Space.Math.IsPowerOfTwo(32)); -- prints True ``` ##### Lerp[​](#lerp "Direct link to Lerp") static float **Lerp** (float a, float b, float v) *Interpolates between 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 0.0; local sliderStop = 100.0; local percentage = 0.75; local currentSliderPos = Space.Math.Lerp(sliderStart, sliderStop, percentage); Space.Log(currentSliderPos); -- prints 75 ``` ##### LerpAngle[​](#lerpangle "Direct link to LerpAngle") static float **LerpAngle** (float a, float b, float v) *Interpolates between angles 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStartAngle = 0.0; local sliderStopAngle = Space.Math.Pi;-- 180 degrees local percentage = 0.50; local currentSliderPos = Space.Math.LerpAngle(sliderStartAngle, sliderStopAngle, percentage); Space.Log(currentSliderPos); -- prints 1.57079637050629 (90 degrees) ``` ##### LerpUnclamped[​](#lerpunclamped "Direct link to LerpUnclamped") static float **LerpUnclamped** (float a, float b, float v) *Interpolates between 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1, but unbounded (allowing higher/lower values)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 0.0; local sliderStop = 100.0; local percentage = 2.0; local currentSliderPos = Space.Math.LerpUnclamped(sliderStart, sliderStop, percentage); Space.Log(currentSliderPos); -- prints 200 ``` ##### LinearToGammaSpace[​](#lineartogammaspace "Direct link to LinearToGammaSpace") static float **LinearToGammaSpace** (float v) *Converts a colour value from Linear to Gamma Space (Pow 1/2.2)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.LinearToGammaSpace(0.214041143655777)); -- prints 0.5 ``` ##### Log[​](#log "Direct link to Log") static float **Log** (float v)
static float **Log** (float v, float p) *Returns the natural logarithm for 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Log(30.0)); -- prints 3.40119743347168 Space.Log(Space.Math.Log(4.0, 2.0)); -- prints 2 ``` ##### Log10[​](#log10 "Direct link to Log10") static float **Log10** (float v) *Returns the Log10 value for 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Log10(100.0)); -- prints 2 ``` ##### Max[​](#max "Direct link to Max") static float **Max** (float a, float b) *Returns higher of 'a' or 'b'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Max(20.0, 100.0)); -- prints 100 ``` ##### Min[​](#min "Direct link to Min") static float **Min** (float a, float b) *Returns lower of 'a' or 'b'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Min(20.0, 100.0)); -- prints 20 ``` ##### MoveTowards[​](#movetowards "Direct link to MoveTowards") static float **MoveTowards** (float value, float target, float delta) *Move value to target, but by no more than delta* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStart = 5.0; local sliderStop = 10.0; local deltaChange = 1.0; local currentSliderPos = Space.Math.MoveTowards(sliderStart, sliderStop, deltaChange); Space.Log(currentSliderPos); -- prints 6 (moves forward 1) local sliderStart = 5.0; local sliderStop = 10.0; local deltaChange = 7.0; local currentSliderPos = Space.Math.MoveTowards(sliderStart, sliderStop, deltaChange); Space.Log(currentSliderPos); -- prints 10 (caps out at at the target value) -- NOTE: Use negative delta to move away from target. ``` ##### MoveTowardsAngle[​](#movetowardsangle "Direct link to MoveTowardsAngle") static float **MoveTowardsAngle** (float value, float target, float delta) *Move angle value to target, but by no more than delta* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local sliderStartAngle = Space.Math.Pi/2; -- 90 degrees local sliderStopAngle = Space.Math.Pi; -- 180 degrees local deltaChange = Space.Math.Pi/6; -- 30 degrees local currentSliderPos = Space.Math.MoveTowardsAngle(sliderStartAngle, sliderStopAngle, deltaChange); Space.Log(currentSliderPos); -- prints 2.09439516067505 (moves forward 30 degrees to 120 degrees) -- NOTE: Add 180 degrees (Space.Math.Pi) to move away from target. ``` ##### NextPowerOfTwo[​](#nextpoweroftwo "Direct link to NextPowerOfTwo") static int **NextPowerOfTwo** (int v) *Return the next power of two larger or equal to val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.NextPowerOfTwo(16)); -- prints 16 Space.Log(Space.Math.NextPowerOfTwo(17)); -- prints 32 ``` ##### PerlinNoise[​](#perlinnoise "Direct link to PerlinNoise") static float **PerlinNoise** (float x, float y) *Return 2D Perlin noise for coordinates x and y* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Lua Translation of Unity C# Documentation local ball = Space.Host.ExecutingObject; ball.SubscribeToEvents(); -- animates this object to move upwards on the y axis with slight random movement local animateBall = function() local heightScale = 0.1; -- controls speed of movement local xScale = 1.0; -- shifts x position on perlin noise plane local height = heightScale * Space.Math.PerlinNoise(Space.Time * xScale, 0.0); local pos = ball.LocalPosition; pos.y = pos.y + height; ball.LocalPosition = pos; Space.Log(pos.y); end ball.OnUpdate(animateBall); -- NOTE: If you need a guaranteed range of [0,1], make sure to clamp the value with Space.Math.Clamp01. ``` ##### PingPong[​](#pingpong "Direct link to PingPong") static float **PingPong** (float t, float length) *Return a value between 0 and length that oscillates upwards and back based on the position of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua --[[ In this example, if you traced the output of Space.Math.PingPong(value, length), the return values would cycle forward through the range [0,5] then cycle backwards through the range [5,0] in order. --]] local ball = Space.Host.ExecutingObject; local originalPos = ball.LocalPosition; ball.SubscribeToEvents(); -- The ball object oscillates back and forth on the x-axis. local animateBall = function() local value = Space.Time; local length = 5.0; local newPos = Vector.New(Space.Math.PingPong(value, length) + originalPos.x, originalPos.y, originalPos.z); ball.LocalPosition = newPos; end ball.OnUpdate(animateBall); ``` ##### Pow[​](#pow "Direct link to Pow") static float **Pow** (float value, float pow) *Return x raised to y power* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Pow(2, 4)); -- prints 16 ``` ##### Repeat[​](#repeat "Direct link to Repeat") static float **Repeat** (float value, float length) *Return a value between 0 and length that returns to 0 after exceeding length based on 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua --[[ In this example, if you traced the output of Space.Math.Repeat(value, length), the return values would cycle forward through the range [0,5]. The cycle is repeated again from 0.--]] local ball = Space.Host.ExecutingObject; local originalPos = ball.LocalPosition; ball.SubscribeToEvents(); -- The ball object moves forward on the x-axis. -- Then, it repeats the same motion again from the beginning. local animateBall = function() local value = Space.Time; local length = 5.0; local newPos = Vector.New(Space.Math.Repeat(value, length) + originalPos.x, originalPos.y, originalPos.z); ball.LocalPosition = newPos; end ball.OnUpdate(animateBall); ``` ##### Round[​](#round "Direct link to Round") static int **Round** (float value) *Returns the nearest integer value to val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Round(4.0)); -- prints 4 Space.Log(Space.Math.Round(4.2)); -- prints 4 Space.Log(Space.Math.Round(4.5)); -- prints 4 Space.Log(Space.Math.Round(4.55)); -- prints 5 Space.Log(Space.Math.Round(4.8)); -- prints 5 Space.Log(Space.Math.Round(-4.2)); -- prints -4 Space.Log(Space.Math.Round(-4.8)); -- prints -5 ``` ##### Sign[​](#sign "Direct link to Sign") static float **Sign** (float value) *Returns either 1 or -1 based on the sign of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Sign(4.2)); -- prints 1 Space.Log(Space.Math.Sign(-4.2)); -- prints -1 ``` ##### Sin[​](#sin "Direct link to Sin") static float **Sin** (float value) *Returns the sine of val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local sine = Space.Math.Sin(angle); Space.Log(sine); -- prints 0.866025447845459 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local sine2 = Space.Math.Sin(angle2); Space.Log(sine2); -- prints 0.866025447845459 ``` ##### SmoothStep[​](#smoothstep "Direct link to SmoothStep") static float **SmoothStep** (float from, float to, float t) *Similar to Lerp but moves slowly closer to the edges ('Spherical Lerp')* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua -- Lua Translation of Unity C# Documentation --[[ In this example, Space.Math.SmoothStep(min, max, time) returns values in the range [1,10] in order. As values approach 10, the interpolation slows down. --]] local ball = Space.Host.ExecutingObject; local originalPos = ball.LocalPosition; local min = 1.0; local max = 10.0; local duration = 5.0; --lower value to speed up; raise to slow down local startTime; ball.SubscribeToEvents(); local initStartTime = function() startTime = Space.Time; end -- The ball jumps to min + originalPos, then it moves towards -- max + originalPos while slowing down at the end. local animateBall = function() local time = (Space.Time - startTime) / duration; local newPos = Vector.New(Space.Math.SmoothStep(min, max, time) + originalPos.x, originalPos.y, originalPos.z); ball.LocalPosition = newPos; end ball.OnStart(initStartTime); ball.OnUpdate(animateBall); ``` ##### Sqrt[​](#sqrt "Direct link to Sqrt") static float **Sqrt** (float value) *Returns the square root of val* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log(Space.Math.Sqrt(16)); -- prints 4 Space.Log(Space.Math.Sqrt(-16)); -- prints NaN ``` ##### Tan[​](#tan "Direct link to Tan") static float **Tan** (float value) *Returns the tangent value of 'val'* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local angle = 1.04719758033752; -- converts to 60 degrees local tangent = Space.Math.Tan(angle); Space.Log(tangent); -- prints 1.73205089569092 local angle2 = Space.Math.Pi/3; -- converts to 60 degrees local tangent2 = Space.Math.Tan(angle2); Space.Log(tangent2); -- prints 1.73205089569092 ``` #### Static Attributes[​](#static-attributes "Direct link to Static Attributes") ##### Pi[​](#pi "Direct link to Pi") static readonly float **Pi** = 3.14159265358979f *Returns the constant value of Ξ .* * Lua ```lua Space.Log(Space.Math.Pi); -- prints 3.14159274101257 ``` --- ### Network Networking APIs for server scripts, covering shared data and outbound web requests. --- ### SShared #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | void [**SetGlobal** ](/scripting/server-scripting-api-reference/network/sshared.md#setglobal)(string ns, string key, DynValue value) | | DynValue [**GetGlobal** ](/scripting/server-scripting-api-reference/network/sshared.md#getglobal)(string ns, string key) | | void [**RegisterFunction** ](/scripting/server-scripting-api-reference/network/sshared.md#registerfunction)(string ns, string func, Closure reference) | | void [**RegisterBroadcastFunction** ](/scripting/server-scripting-api-reference/network/sshared.md#registerbroadcastfunction)(string ns, string func, Closure reference) | | void [**UnregisterBroadcastFunction** ](sshared#unregisterbroadcastfunction)(string ns, string func, Closure reference)
void **UnregisterBroadcastFunction** (string ns, string func) | | void [**CallFunction** ](/scripting/server-scripting-api-reference/network/sshared.md#callfunction)(string ns, string func, IEnumerable< DynValue > args) | | int [**CallBroadcastFunction** ](/scripting/server-scripting-api-reference/network/sshared.md#callbroadcastfunction)(string ns, string func, IEnumerable< DynValue > args) | #### Functions[​](#functions "Direct link to Functions") ##### SetGlobal[​](#setglobal "Direct link to SetGlobal") void **SetGlobal** (string ns, string key, DynValue value) *Sets a global key to a value. The value can be any object type.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Shared.SetGlobal("com.someNameHere.world", "version", "1.02"); ``` ##### GetGlobal[​](#getglobal "Direct link to GetGlobal") DynValue **GetGlobal** (string ns, string key) *Retrieves a previously set global variable, or returns nil.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua local versionValue = Space.Shared.GetGlobal("com.someNameHere.world", "version") ``` ##### RegisterFunction[​](#registerfunction "Direct link to RegisterFunction") void **RegisterFunction** (string ns, string func, Closure reference) *Makes func into a global function that can be accessed anywhere.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function someFunction(name) Space.Log("Hello " .. name); end Space.Shared.RegisterFunction("com.someNameHere.world", "func", someFunction); ``` ##### RegisterBroadcastFunction[​](#registerbroadcastfunction "Direct link to RegisterBroadcastFunction") void **RegisterBroadcastFunction** (string ns, string func, Closure reference) *Makes func into a global function that can be accessed anywhere.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua function someFunction(name) Space.Log("Hello " .. name); end Space.Shared.RegisterBroadcastFunction("com.someNameHere.world", "func", someFunction); ``` ##### UnregisterBroadcastFunction[​](#unregisterbroadcastfunction "Direct link to UnregisterBroadcastFunction") void **UnregisterBroadcastFunction** (string ns, string func, Closure reference)
void **UnregisterBroadcastFunction** (string ns, string func) *Unregister Broadcast Function.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` ##### CallFunction[​](#callfunction "Direct link to CallFunction") void **CallFunction** (string ns, string func, IEnumerable< DynValue > args) *Calls the registered function with the specified arguments.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Shared.CallFunction("com.someNameHere.world", "func",{"Smith"}); ``` ##### CallBroadcastFunction[​](#callbroadcastfunction "Direct link to CallBroadcastFunction") int **CallBroadcastFunction** (string ns, string func, IEnumerable< DynValue > args) *Calls every registered broadcast function with the specified arguments, and returns the number of calls queued.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` --- ### SWebservice #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Get** ](/scripting/server-scripting-api-reference/network/swebservice.md#get)(string url, Closure onComplete, Table headers=null) | | void [**Post** ](/scripting/server-scripting-api-reference/network/swebservice.md#post)(string url, string data, Closure onComplete, Table headers=null) | #### Functions[​](#functions "Direct link to Functions") ##### Get[​](#get "Direct link to Get") void **Get** (string url, Closure onComplete, Table headers=null) *Performs an HTTP\[S] GET. The callback receives two parameters: `success` (bool) and `response` (string).* | Parameter | Type | Description | | ---------- | ---------------- | --------------------------------------------------------------------------------------------------------- | | url | string | The absolute URL to request. | | onComplete | Closure | Callback `(bool success, string response)` invoked on completion. | | headers | Table (optional) | Supported keys: `Bearer` (maps to `Authorization: Bearer `), `Content-Type` (rarely used for GET). | * Lua ```lua -- Simple GET local url = "https://httpbin.org/get" Space.WebServices.Get(url, function(success, response) if success then Space.Log("OK: " .. response) else Space.Log("Request failed: " .. response) end end) ``` * Lua ```lua -- GET with Bearer auth local url = "https://api.example.com/me" local headers = { ["Bearer"] = "YOUR_ACCESS_TOKEN" } Space.WebServices.Get(url, function(success, response) if success then Space.Log(response) else Space.Log("Error: " .. response) end end, headers) ``` ##### Post[​](#post "Direct link to Post") void **Post** (string url, string data, Closure onComplete, Table headers=null) *Performs an HTTP\[S] POST. The callback receives two parameters: `success` (bool) and `response` (string).* | Parameter | Type | Description | | ---------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | url | string | The absolute URL to POST to. | | data | string | Request body string. For JSON, send a JSON string and set `Content-Type`. | | onComplete | Closure | Callback `(bool success, string response)` invoked on completion. | | headers | Table (optional) | Supported keys: `Content-Type` (defaults to `application/x-www-form-urlencoded`), `Bearer` (maps to `Authorization: Bearer `). | * Lua ```lua -- Form POST local url = "https://httpbin.org/post" local body = "x=1&y=2" Space.WebServices.Post(url, body, function(success, response) if success then Space.Log("OK: " .. response) else Space.Log("Error: " .. response) end end) ``` * Lua ```lua -- JSON POST with Bearer auth local url = "https://api.example.com/widgets" local body = '{"name":"Server Created Widget"}' local headers = { ["Content-Type"] = "application/json", ["Bearer"] = "YOUR_ACCESS_TOKEN" } Space.WebServices.Post(url, body, function(success, response) if success then Space.Log("Created: " .. response) else Space.Log("Error: " .. response) end end, headers) ``` Note: * Server requests automatically include: `X-Sinespace-Region-ID`, `X-Sinespace-Instance-ID`, `X-Sinespace-Script-ID`, `X-Sinespace-Runtime-Type`, and `X-Sinespace-In-Editor`. * There is no `timeout` parameter on server web requests. --- ### Scene APIs for the region from the server's perspective β€” scenes, parcels, cells, objects, and the avatars present within them. --- ### SAvatar #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ----------------------------------------------------------------------------------------------------- | | int [**ID**](/scripting/server-scripting-api-reference/region/savatar.md#id) `get` | | Vector3 [**Position** ](/scripting/server-scripting-api-reference/region/savatar.md#position)`get` | | Vector3 [**Velocity** ](/scripting/server-scripting-api-reference/region/savatar.md#velocity)`get` | | Quaternion [**Rotation** ](/scripting/server-scripting-api-reference/region/savatar.md#rotation)`get` | | string [**Username** ](/scripting/server-scripting-api-reference/region/savatar.md#username)`get` | | string [**Title** ](/scripting/server-scripting-api-reference/region/savatar.md#title)`get` | #### Properties[​](#properties "Direct link to Properties") ##### ID[​](#id "Direct link to ID") int **ID** `get` *Avatar's ID* * Lua ```lua ID = Space.Scene.Avatars[1].ID ``` * Lua ```lua --server script that prints a list of IDs of players online whenever someone joins function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars for num =1 , numOfAvatars, 1 do Space.Log(Space.Scene.Avatars[num].ID) end end ``` ##### Position[​](#position "Direct link to Position") Vector3 **Position** `get` *Avatar's position* * Lua ```lua ID = Space.Scene.Avatars[1].Position ``` * Lua ```lua --server script that prints a list of Positions of players online whenever someone joins function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars for num =1 , numOfAvatars, 1 do Space.Log(Space.Scene.Avatars[num].Position) end end ``` ##### Velocity[​](#velocity "Direct link to Velocity") Vector3 **Velocity** `get` *Avatar's Velocity* * Lua ```lua ID = Space.Scene.Avatars[1].Velocity ``` * Lua ```lua --server script that prints a list of Velocitys of players online whenever someone joins function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars for num =1 , numOfAvatars, 1 do Space.Log(Space.Scene.Avatars[num].Velocity) end end ``` ##### Rotation[​](#rotation "Direct link to Rotation") Quaternion **Rotation** `get` *Avatar's Rotation* * Lua ```lua ID = Space.Scene.Avatars[1].Quaternion ``` * Lua ```lua --server script that prints a list of Rotations of players online whenever someone joins function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars for num =1 , numOfAvatars, 1 do Space.Log(Space.Scene.Avatars[num].Rotation) end end ``` ##### Username[​](#username "Direct link to Username") string **Username** `get` *Avatar's Username* * Lua ```lua ID = Space.Scene.Avatars[1].Username ``` * Lua ```lua --server script that prints a list of Usernames of players online whenever someone joins function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars for num =1 , numOfAvatars, 1 do Space.Log(Space.Scene.Avatars[num].Username) end end ``` ##### Title[​](#title "Direct link to Title") string **Title** `get` *Avatar's Title* * Lua ```lua ID = Space.Scene.Avatars[1].Title ``` * Lua ```lua --server script that prints a list of Titles of players online whenever someone joins function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars for num =1 , numOfAvatars, 1 do Space.Log(Space.Scene.Avatars[num].Title) end end ``` --- ### SCell #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | -------------------------------------------------------------------------------------------------------- | | SObject [**GetObject** ](/scripting/server-scripting-api-reference/region/scell.md#getobject)(string id) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | -------------------------------------------------------------------------------------------- | | Table [**Objects** ](/scripting/server-scripting-api-reference/region/scell.md#objects)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetObject[​](#getobject "Direct link to GetObject") [SObject](/scripting/server-scripting-api-reference/region/sobject.md) **GetObject** (string id) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` #### Properties[​](#properties "Direct link to Properties") ##### Objects[​](#objects "Direct link to Objects") Table **Objects** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SObject #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ------------------------------------------------------------------------------------------------------------------------------- | | string [**GetProperty** ](/scripting/server-scripting-api-reference/region/sobject.md#getproperty)(string property) | | void [**SetProperty** ](/scripting/server-scripting-api-reference/region/sobject.md#setproperty)(string property, string value) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ----------------------------------------------------------------------------------------------------------- | | SCell [**Cell** ](/scripting/server-scripting-api-reference/region/sobject.md#cell)`get` | | string [**ID**](/scripting/server-scripting-api-reference/region/sobject.md#id) `get` | | string [**Floor** ](/scripting/server-scripting-api-reference/region/sobject.md#floor)`get` | | Vector3 [**Position** ](/scripting/server-scripting-api-reference/region/sobject.md#position)`get` `set` | | Quaternion [**Rotation** ](/scripting/server-scripting-api-reference/region/sobject.md#rotation)`get` `set` | | Vector3 [**Scale** ](/scripting/server-scripting-api-reference/region/sobject.md#scale)`get` `set` | | int [**Player** ](/scripting/server-scripting-api-reference/region/sobject.md#player)`get` | | int [**InventoryID** ](/scripting/server-scripting-api-reference/region/sobject.md#inventoryid)`get` | | int [**ItemID** ](/scripting/server-scripting-api-reference/region/sobject.md#itemid)`get` | | Bounds [**Bounds** ](/scripting/server-scripting-api-reference/region/sobject.md#bounds)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetProperty[​](#getproperty "Direct link to GetProperty") string **GetProperty** (string property) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### SetProperty[​](#setproperty "Direct link to SetProperty") void **SetProperty** (string property, string value) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` #### Properties[​](#properties "Direct link to Properties") ##### Cell[​](#cell "Direct link to Cell") SCell **Cell** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### ID[​](#id "Direct link to ID") string **ID** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Floor[​](#floor "Direct link to Floor") string **Floor** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Position[​](#position "Direct link to Position") Vector3 **Position** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Rotation[​](#rotation "Direct link to Rotation") Quaternion **Rotation** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Scale[​](#scale "Direct link to Scale") Vector3 **Scale** `get` `set` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Player[​](#player "Direct link to Player") int **Player** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### InventoryID[​](#inventoryid "Direct link to InventoryID") int **InventoryID** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### ItemID[​](#itemid "Direct link to ItemID") int **ItemID** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Bounds[​](#bounds "Direct link to Bounds") Bounds **Bounds** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SParcel #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ---------------------------------------------------------------------------------------------------------------- | | string [**ID**](/scripting/server-scripting-api-reference/region/sparcel.md#id) `get` | | string [**Name** ](/scripting/server-scripting-api-reference/region/sparcel.md#name)`get` | | string [**DescriptionName** ](/scripting/server-scripting-api-reference/region/sparcel.md#descriptionname)`get` | | bool [**ForSale** ](/scripting/server-scripting-api-reference/region/sparcel.md#forsale)`get` | | int [**GoldSalePrice** ](/scripting/server-scripting-api-reference/region/sparcel.md#goldsaleprice)`get` | | int [**SilverSalePrice** ](/scripting/server-scripting-api-reference/region/sparcel.md#silversaleprice)`get` | | int [**GoldRentalPrice** ](/scripting/server-scripting-api-reference/region/sparcel.md#goldrentalprice)`get` | | int [**SilverRentalPrice** ](/scripting/server-scripting-api-reference/region/sparcel.md#silverrentalprice)`get` | #### Properties[​](#properties "Direct link to Properties") ##### ID[​](#id "Direct link to ID") string **ID** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### Name[​](#name "Direct link to Name") string **Name** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### DescriptionName[​](#descriptionname "Direct link to DescriptionName") string **DescriptionName** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### ForSale[​](#forsale "Direct link to ForSale") bool **ForSale** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### GoldSalePrice[​](#goldsaleprice "Direct link to GoldSalePrice") int **GoldSalePrice** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### SilverSalePrice[​](#silversaleprice "Direct link to SilverSalePrice") int **SilverSalePrice** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### GoldRentalPrice[​](#goldrentalprice "Direct link to GoldRentalPrice") int **GoldRentalPrice** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` ##### SilverRentalPrice[​](#silverrentalprice "Direct link to SilverRentalPrice") int **SilverRentalPrice** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SParcelManager #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [SParcel](/scripting/server-scripting-api-reference/region/sparcel.md) [**GetParcel** ](/scripting/server-scripting-api-reference/region/sparcelmanager.md#getparcel)(string id) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ----------------------------------------------------------------------------------------------------------- | | Table [**AllParcels** ](/scripting/server-scripting-api-reference/region/sparcelmanager.md#allparcels)`get` | #### Functions[​](#functions "Direct link to Functions") ##### GetParcel[​](#getparcel "Direct link to GetParcel") SParcel **GetParcel** (string id) *Function Description* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` #### Properties[​](#properties "Direct link to Properties") ##### AllParcels[​](#allparcels "Direct link to AllParcels") Table **AllParcels** `get` *Property Description* * Lua ```lua example 1 ``` * Lua ```lua example 2 ``` --- ### SRegionScript #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**Log** ](/scripting/server-scripting-api-reference/region/sregionscript.md#log)(string message) | | void [**SubscribeToNetwork** ](/scripting/server-scripting-api-reference/region/sregionscript.md#subscribetonetwork)(string key) | | void [**UnsubscribeFromNetwork** ](/scripting/server-scripting-api-reference/region/sregionscript.md#unsubscribefromnetwork)(string key) | | void [**SendMessageToAllClientScripts** ](/scripting/server-scripting-api-reference/region/sregionscript.md#sendmessagetoallclientscripts)(string messageName, Table message) | | void [**SendMessageToClientScripts** ](/scripting/server-scripting-api-reference/region/sregionscript.md#sendmessagetoclientscripts)(ulong playerID, string messageName, Table message) | | void [**StartCoroutine** ](sregionscript#startcoroutine)(DynValue coroutine, DynValue parameter=default(DynValue))
void [**StartCoroutine** ](sregionscript#startcoroutine)(string name, DynValue parameter=default(DynValue)) | ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------------------------------ | | string [**ScriptID** ](/scripting/server-scripting-api-reference/region/sregionscript.md#scriptid)`get` | | uint [**InstanceID** ](/scripting/server-scripting-api-reference/region/sregionscript.md#instanceid)`get` | | ulong [**RegionID** ](/scripting/server-scripting-api-reference/region/sregionscript.md#regionid)`get` | | SScene [**Scene** ](/scripting/server-scripting-api-reference/region/sregionscript.md#scene)`get` | | SDatabase [**Database** ](/scripting/server-scripting-api-reference/region/sregionscript.md#database)`get` | | SMath [**Math** ](/scripting/server-scripting-api-reference/region/sregionscript.md#math)`get` | | SShared [**Shared** ](/scripting/server-scripting-api-reference/region/sregionscript.md#shared)`get` | | SWebservice [**WebServices** ](/scripting/server-scripting-api-reference/region/sregionscript.md#webservices)`get` | | string [**RuntimeType** ](/scripting/server-scripting-api-reference/region/sregionscript.md#runtimetype)`get` | | bool [**InEditor** ](/scripting/server-scripting-api-reference/region/sregionscript.md#ineditor)`get` | | float [**TimeSinceAwake** ](/scripting/server-scripting-api-reference/region/sregionscript.md#timesinceawake)`get` | | string [**DateTimeUTC** ](/scripting/server-scripting-api-reference/region/sregionscript.md#datetimeutc)`get` | | int [**LocalTimeUnix** ](/scripting/server-scripting-api-reference/region/sregionscript.md#localtimeunix)`get` | | int [**ServerTimeUnix** ](/scripting/server-scripting-api-reference/region/sregionscript.md#servertimeunix)`get` | ##### Events Index[​](#events-index "Direct link to Events Index") | Event | | -------------------------------------------------------------------------------------------------------------------------------------------- | | Action< int > [**OnAvatarJoin**](/scripting/server-scripting-api-reference/region/sregionscript.md#onavatarjoin) | | Action< int > [**OnAvatarLeave**](/scripting/server-scripting-api-reference/region/sregionscript.md#onavatarleave) | | Action< string, Table > [**OnScriptServerMessage**](/scripting/server-scripting-api-reference/region/sregionscript.md#onscriptservermessage) | #### Functions[​](#functions "Direct link to Functions") ##### Log[​](#log "Direct link to Log") void **Log** (string message) *Log a message to console. (only works on preview grid)* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.Log("Log") ``` * Lua ```lua --Clicking the object will make the server script log "Test Message" on all clients --server script function OnScriptServerMessage(key, table) if key == "testKey" then Space.Log("Message:" .. table[1]) end end --client script thisObject = Space.Host.ExecutingObject OnClickFunction = function() Space.Network.SendNetworkMessage("testKey",{"Test Message"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### SubscribeToNetwork[​](#subscribetonetwork "Direct link to SubscribeToNetwork") void **SubscribeToNetwork** (string key) *Subscribe to network messages on "key".* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.SubscribeToNetwork("thekey") ``` ##### UnsubscribeFromNetwork[​](#unsubscribefromnetwork "Direct link to UnsubscribeFromNetwork") void **UnsubscribeFromNetwork** (string key) *Unsubscribe from network messages on "key".* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.UnsubscribeFromNetwork("thekey") ``` ##### SendMessageToAllClientScripts[​](#sendmessagetoallclientscripts "Direct link to SendMessageToAllClientScripts") void **SendMessageToAllClientScripts** (string messageName, Table message) *Sends a network message to all client scripts.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.SendMessageToAllClientScripts("thekey",{"themessage"}) ``` * Lua ```lua --Clicking the object by a single client will send a message to the server which triggers a message response to all clients --server script-- function OnScriptServerMessage(key, table) if key == "testKey" then Space.SendMessageToAllClientScripts("ServerResponse",{"message response to all client scripts in region that are subscribed to this key"}) end end --client script-- thisObject = Space.Host.ExecutingObject OnClickFunction = function() Space.Network.SendNetworkMessage("testKey",{"Test Message"}) end OnReceiveFunction = function(SNetworkMessage) Space.Log(SNetworkMessage.Key) Space.Log(SNetworkMessage.Message[1]) end Space.Network.SubscribeToNetwork("ServerResponse", OnReceiveFunction) thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### SendMessageToClientScripts[​](#sendmessagetoclientscripts "Direct link to SendMessageToClientScripts") void **SendMessageToClientScripts** (ulong playerID, string messageName, Table message) *Sends a network message to a client script belonging to a specific player* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.SendMessageToClientScripts(playerID,"thekey",{"themessage"}) ``` * Lua ```lua --Clicking the object by a single client will send a message to the server which triggers... --a message response only to that specific client --server script-- function OnScriptServerMessage(key, table) if key == "testKey" then local sender = table[2] Space.SendMessageToClientScripts(sender,"ServerResponse",{"a message response to the clicker's client script in region that is subscribed to this key"}) end end --client script-- thisObject = Space.Host.ExecutingObject OnClickFunction = function() id = Space.Scene.PlayerAvatar.ID Space.Network.SendNetworkMessage("testKey",{"Test Message", id}) end OnReceiveFunction = function(SNetworkMessage) Space.Log(SNetworkMessage.Key) Space.Log(SNetworkMessage.Message[1]) end Space.Network.SubscribeToNetwork("ServerResponse", OnReceiveFunction) thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### StartCoroutine[​](#startcoroutine "Direct link to StartCoroutine") void **StartCoroutine** (DynValue coroutine, DynValue parameter=default(DynValue))
void **StartCoroutine** (string name, DynValue parameter=default(DynValue)) *Runs the given function as a coroutine. A parameter is optional.* | Parameter | Type | Description | | --------- | ---- | ----------- | | | | | * Lua ```lua Space.StartCoroutine(AFunctionName) ``` * Lua ```lua --Clicking the object on client will trigger a 3 second countdown on server script using coroutine --server script-- function OnScriptServerMessage(key, table) if key == "testKey" and table[1] == "Timer" then Space.StartCoroutine(TimerCoroutine) end end function TimerCoroutine() local time = 0 while time < 3 do Space.Log(3-time) time = time + 1 coroutine.yield(1) end end --client script-- thisObject = Space.Host.ExecutingObject function OnClickFunction() Space.Network.SendNetworkMessage("testKey",{"Timer"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` #### Properties[​](#properties "Direct link to Properties") ##### ScriptID[​](#scriptid "Direct link to ScriptID") string **ScriptID** `get` *Returns a unique identifier of this script runtime. (can be found in "/list\_scripts" window on preview.)* * Lua ```lua scriptID = Space.ScriptID ``` * Lua ```lua --Clicking the object on client will make the server script log it's ScriptID --server script-- function OnScriptServerMessage(key, table) if key == "testKey" and table[1] == "ScriptID" then Space.Log(Space.ScriptID) end end --client script-- thisObject = Space.Host.ExecutingObject function OnClickFunction() Space.Network.SendNetworkMessage("testKey",{"ScriptID"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### InstanceID[​](#instanceid "Direct link to InstanceID") uint **InstanceID** `get` *Returns a unique identifier for the instance of the region. Useful in the case of multiple shards/instances being used. InstanceID does not necessarily equal to the RegionID, even if there's only one instance running.* * Lua ```lua instance = Space.InstanceID ``` * Lua ```lua --Clicking the object on client will make the server script log only... --if it's instanceID matches with client's instanceID --server script-- function OnScriptServerMessage(key, table) local instanceID = Space.InstanceID if key == "testKey" and table[1] == "ScriptID" and table[2] == instanceID then Space.Log(instanceID) end end --client script-- thisObject = Space.Host.ExecutingObject function OnClickFunction() local instanceID = Space.Scene.InstanceID Space.Network.SendNetworkMessage("testKey",{"ScriptID", instanceID}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### RegionID[​](#regionid "Direct link to RegionID") ulong **RegionID** `get` *Returns a unique identifier for the region. (Same ID seen in curator)* * Lua ```lua region = Space.RegionID ``` * Lua ```lua --Clicking the object on client will make the server script log only... --if it's RegionID matches with client's RegionID --server script-- function OnScriptServerMessage(key, table) local RegionID = Space.RegionID if key == "testKey" and table[1] == "ScriptID" and table[2] == RegionID then Space.Log(RegionID) end end --client script-- thisObject = Space.Host.ExecutingObject function OnClickFunction() local RegionID = Space.Scene.RegionID Space.Network.SendNetworkMessage("testKey",{"ScriptID", RegionID}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### Scene[​](#scene "Direct link to Scene") [SScene](/scripting/server-scripting-api-reference/region/sscene.md) **Scene** `get` *Access to the SScene class methods and properties.* * Lua ```lua Space.Scene ``` ##### Database[​](#database "Direct link to Database") [SDatabase](/scripting/server-scripting-api-reference/storage/sdatabase.md) **Database** `get` *Access to the SDatabase class methods and properties.* * Lua ```lua Space.Database ``` ##### Math[​](#math "Direct link to Math") [SMath](/scripting/server-scripting-api-reference/library/smath.md) **Math** `get` *Access to the SMath class methods and properties.* * Lua ```lua Space.Math ``` ##### Shared[​](#shared "Direct link to Shared") [SShared](/scripting/server-scripting-api-reference/network/sshared.md) **Shared** `get` *Access to the SShared class methods and properties.* * Lua ```lua Space.Shared ``` ##### WebServices[​](#webservices "Direct link to WebServices") [SWebservice](/scripting/server-scripting-api-reference/network/swebservice.md) **WebServices** `get` *Access to the SWebservice class methods and properties.* * Lua ```lua Space.WebServices ``` ##### RuntimeType[​](#runtimetype "Direct link to RuntimeType") string **RuntimeType** `get` *Returns "Server" if this script is a Server script* * Lua ```lua type = Space.RuntimeType ``` ##### InEditor[​](#ineditor "Direct link to InEditor") bool **InEditor** `get` *Returns true if in Editor. (this will return false on server scripts)* * Lua ```lua IsInEditor = Space.InEditor ``` ##### TimeSinceAwake[​](#timesinceawake "Direct link to TimeSinceAwake") float **TimeSinceAwake** `get` *Time, in seconds, since this script runtime has been awake.* * Lua ```lua SecondsAwake = Space.TimeSinceAwake ``` * Lua ```lua --Clicking the object will make the server script log it's TimeSinceAwake on all clients --server script function OnScriptServerMessage(key, table) if key == "testKey" and table[1] == "TimeSinceAwake" then Space.Log(Space.TimeSinceAwake) end end --client script thisObject = Space.Host.ExecutingObject OnClickFunction = function() Space.Network.SendNetworkMessage("testKey",{"TimeSinceAwake"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### DateTimeUTC[​](#datetimeutc "Direct link to DateTimeUTC") string **DateTimeUTC** `get` *Returns a string of the current Date/Time in UTC* * Lua ```lua DateAndTime = Space.DateTimeUTC ``` * Lua ```lua --Clicking the object will make the server script log it's DateTimeUTC on all clients --server script function OnScriptServerMessage(key, table) if key == "testKey" and table[1] == "DateTimeUTC" then Space.Log(Space.DateTimeUTC) end end --client script thisObject = Space.Host.ExecutingObject OnClickFunction = function() Space.Network.SendNetworkMessage("testKey",{"DateTimeUTC"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### LocalTimeUnix[​](#localtimeunix "Direct link to LocalTimeUnix") int **LocalTimeUnix** `get` *Returns the current Unix time (in seconds) (same as ServerTimeUnix)* * Lua ```lua unixtime = Space.LocalTimeUnix ``` * Lua ```lua --Clicking the object will make the server script log it's LocalTimeUnix on all clients --server script function OnScriptServerMessage(key, table) if key == "testKey" and table[1] == "LocalTimeUnix" then Space.Log(Space.LocalTimeUnix) end end --client script thisObject = Space.Host.ExecutingObject OnClickFunction = function() Space.Network.SendNetworkMessage("testKey",{"LocalTimeUnix"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` ##### ServerTimeUnix[​](#servertimeunix "Direct link to ServerTimeUnix") int **ServerTimeUnix** `get` *Returns the current Unix time (in seconds) (same as LocalTimeUnix)* * Lua ```lua unixtime = Space.ServerTimeUnix ``` * Lua ```lua --Clicking the object will make the server script log it's ServerTimeUnix on all clients --server script function OnScriptServerMessage(key, table) if key == "testKey" and table[1] == "ServerTimeUnix" then Space.Log(Space.ServerTimeUnix) end end --client script thisObject = Space.Host.ExecutingObject OnClickFunction = function() Space.Network.SendNetworkMessage("testKey",{"ServerTimeUnix"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` #### Events[​](#events "Direct link to Events") ##### OnAvatarJoin[​](#onavatarjoin "Direct link to OnAvatarJoin") Action< int > **OnAvatarJoin** *An event function which will be called whenever an Avatar joins and will also contain the Avatar's ID as a parameter.* * Lua ```lua function OnAvatarJoin(playerID) end ``` * Lua ```lua function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars Space.Log("Avatar with ID " .. id .. "has joined") Space.Log("Number of avatars connected: " .. numOfAvatars) end ``` ##### OnAvatarLeave[​](#onavatarleave "Direct link to OnAvatarLeave") Action< int > **OnAvatarLeave** *An event function which will be called whenever an Avatar leaves and will also contain the Avatar's ID as a parameter.* * Lua ```lua function OnAvatarLeave(playerID) end ``` * Lua ```lua function OnAvatarLeave(id) local numOfAvatars = Space.Scene.ConnectedAvatars Space.Log("Avatar with ID " .. id .. "has left") Space.Log("Number of avatars connected: " .. numOfAvatars) end ``` ##### OnScriptServerMessage[​](#onscriptservermessage "Direct link to OnScriptServerMessage") Action< string, Table > **OnScriptServerMessage** *An event function which will be called whenever the server script receives a Network Message, and will contain the network message key String and message Table as a parameter.* * Lua ```lua function OnScriptServerMessage(key, table) theKeyString = key theSNetworkMessageTable = table end ``` * Lua ```lua --Clicking the object will make the server script log "Test Message" on all clients --server script function OnScriptServerMessage(key, table) if key == "testKey" then Space.Log("Message:" .. table[1]) end end --client script thisObject = Space.Host.ExecutingObject OnClickFunction = function() Space.Network.SendNetworkMessage("testKey",{"Test Message"}) end thisObject.AddClickable() thisObject.Clickable.OnClick(OnClickFunction) ``` --- ### SScene #### Index[​](#index "Direct link to Index") ##### Properties Index[​](#properties-index "Direct link to Properties Index") | Property | | ------------------------------------------------------------------------------------------------------------- | | int [**ConnectedAvatars** ](/scripting/server-scripting-api-reference/region/sscene.md#connectedavatars)`get` | | Table [**Avatars** ](/scripting/server-scripting-api-reference/region/sscene.md#avatars)`get` | | Table [**Cells** ](/scripting/server-scripting-api-reference/region/sscene.md#cells)`get` | | SParcelManager [**Parcels** ](/scripting/server-scripting-api-reference/region/sscene.md#parcels)`get` | #### Properties[​](#properties "Direct link to Properties") ##### ConnectedAvatars[​](#connectedavatars "Direct link to ConnectedAvatars") int **ConnectedAvatars** `get` *Returns the number of Avatars connected to the region.* * Lua ```lua numOfAvatars = Space.Scene.ConnectedAvatars ``` * Lua ```lua function OnAvatarJoin(id) local numOfAvatars = Space.Scene.ConnectedAvatars Space.Log("Avatar with ID " .. id .. "has joined") Space.Log("Number of avatars connected: " .. numOfAvatars) end ``` ##### Avatars[​](#avatars "Direct link to Avatars") Table **Avatars** `get` *Returns a table of SAvatar objects currently in the region* * Lua ```lua currentAvatars = Space.Scene.Avatars ``` ##### Cells[​](#cells "Direct link to Cells") Table **Cells** `get` *Returns a table of SCell objects. (Not all cells are available at all times, a client on this server must be within 384m of a cell in order for it to exist.)* * Lua ```lua cellsTable = Space.Scene.Cells ``` ##### Parcels[​](#parcels "Direct link to Parcels") [SParcelManager](/scripting/server-scripting-api-reference/region/sparcelmanager.md) **Parcels** `get` *Access to the SParcelManager class.* * Lua ```lua Space.Scene.Parcels ``` --- ### Storage Persistent server-side storage for your region, including the database API for saving and querying data. --- ### SDatabase #### Index[​](#index "Direct link to Index") ##### Functions Index[​](#functions-index "Direct link to Functions Index") | Function | | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | void [**GetRegionValue** ](/scripting/server-scripting-api-reference/storage/sdatabase.md#getregionvalue)(string key, Closure onResult) | | void [**SetRegionValue** ](/scripting/server-scripting-api-reference/storage/sdatabase.md#setregionvalue)(string key, string value, Closure onSave) | | void [**GetPlayerValue** ](/scripting/server-scripting-api-reference/storage/sdatabase.md#getplayervalue)(int player, string key, Closure onResult) | | void [**SetPlayerValue** ](/scripting/server-scripting-api-reference/storage/sdatabase.md#setplayervalue)(int player, string key, string value, Closure onSave) | #### Functions[​](#functions "Direct link to Functions") ##### GetRegionValue[​](#getregionvalue "Direct link to GetRegionValue") void **GetRegionValue** (string key, Closure onResult) *Get a value stored in the region database. (this does not access the same database as the SPersistence class)* | Parameter | Type | Description | | --------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | key | string | The "key" to access the record from the region database. | | onResult | Closure | The name of the function which will be called once the results are ready.
This function will be called with a string parameter containing the requested value. onResult(value) | * Lua ```lua function onResult(value) yourValue = value end Space.Database.GetRegionValue("testKey", onResult) ``` ##### SetRegionValue[​](#setregionvalue "Direct link to SetRegionValue") void **SetRegionValue** (string key, string value, Closure onSave) *Store a "value" in the region database. (this does not access the same database as the SPersistence class)* | Parameter | Type | Description | | --------- | ------- | ------------------------------------------------------------------------------------------------------ | | key | string | The "key" to access the record from the region database. | | value | string | The "value" that will be stored in the region database. | | onSave | Closure | The name of the function which will be called when the "value" has been stored in the region database. | * Lua ```lua function onSave() -- end Space.Database.SetRegionValue("testKey", "testValue", onSave) ``` ##### GetPlayerValue[​](#getplayervalue "Direct link to GetPlayerValue") void **GetPlayerValue** (int player, string key, Closure onResult) *Get a value stored in a player database. (this does not access the same database as the SPersistence class)* | Parameter | Type | Description | | --------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | player | int | The ID of the player's database in whose record we will access. | | key | string | The "key" to access the record from the region database. | | onResult | Closure | The name of the function which will be called once the results are ready.
This function will be called with a string parameter containing the requested value. onResult(value) | * Lua ```lua function onResult(value) yourValue = value end Space.Database.GetPlayerValue(aPlayerID,"testKey",onResult) ``` ##### SetPlayerValue[​](#setplayervalue "Direct link to SetPlayerValue") void **SetPlayerValue** (int player, string key, string value, Closure onSave) *Store a "value" in a player database. (this does not access the same database as the SPersistence class). (this does not access the same database as the SPersistence class)* | Parameter | Type | Description | | --------- | ------- | ------------------------------------------------------------------------------------------------------ | | player | int | The ID of the player's database in whose record we will access. | | key | string | The "key" to access the record from the region database. | | onSave | Closure | The name of the function which will be called when the "value" has been stored in the player database. | * Lua ```lua function onSave() -- end Space.Database.SetPlayerValue(aPlayerID,"testKey", "testValue",onSave) ``` --- ### Support #### [πŸ“„οΈReport An Issue](/scripting/support/report-an-issue.md) [How to report issues within the Sinespace Scripting Documentation](/scripting/support/report-an-issue.md) --- ### Report An Issue ##### How to report an issue with this documentation[​](#how-to-report-an-issue-with-this-documentation "Direct link to How to report an issue with this documentation") If you would like to report any issues with this documentation such as corrections, lack of documentation, or improvements in the quality, please use [this form ](https://form.asana.com/?k=foybfPQQIK5JpFVRRcPyJg\&d=634886966090241)and select **Scripting** as the type of documentation. --- ## Tips For Success ### TIPS FOR SUCCESS #### [πŸ“„οΈRegion Editor best practices](/tips-for-success/region-editor-best-practices.md) [Breakroom's Region Editor is intuitive and powerfulβ€”once you get the hang of it! Here you'll find tips and shortcuts collected from some of our most skilled Region designers.](/tips-for-success/region-editor-best-practices.md) --- ### Onboarding new users #### Overview[​](#overview "Direct link to Overview") Breakroom is designed to be simple to learn, so that users can log in and get straight to workβ€”whether that work consists of attending team meetings, pursuing professional education, or manning an exposition booth. Still, with a little extra planning, you can set your Breakroom users up for success. The following resources and best practice tips are designed to help you create the ideal events schedule, design user orientation programming, and clear potential logistical hurdles. Get your users on the platform, get them oriented, and watch them thrive in the Metaverse. #### Orienting first-time users [](#orienting-first-time-users)[​](#orienting-first-time-users- "Direct link to orienting-first-time-users-") The Breakroom Team recommends a three-step approach for getting users logged in and chatting with coworkers or fellow event attendees. 1. **Access the platform.** First, users need to get Breakroom running! Be sure to point them to information on [World Stream](/opening-the-doors/world-stream.md) and our [desktop viewers](/opening-the-doors/desktop-viewers.md) if they need help. 2. **Enter your email address.** Remind users that unless otherwise specified, they should log in using their work email address and provided password. For [Eventbrite ticketholders](/opening-the-doors/creating-and-managing-user-accounts/eventbrite-integration.md), their login will be their email address and their Eventbrite ticket number. 3. **Switch on your microphone.** Once users are logged in, they should test their ability to use [voice chat](/getting-started/using-the-conference-system.md#voice-chat). If they encounter issues, be sure to point them toward our [troubleshooting guides](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md). info For the best possible experience, we recommend that users access World Stream using Google Chrome. **Please also remind users to close any other open apps or programs on their computer, and to turn off their VPNs.** No other steps are necessary to join in the bustle of Breakroomβ€”but your users will definitely look forward to customizing their avatars, exploring your Regions, and connecting with other attendees. Here are some quick links to additional resources that can help. 1. [Getting Started](/getting-started.md): The first section of the Breakroom GitBook is written entirely from the user's perspective, and teaches new users how to: * Control their [avatar](/getting-started/controlling-your-avatar.md) and [camera](/getting-started/controlling-your-camera.md) * Pick a [starter avatar](/getting-started/customizing-your-avatar/choosing-a-starter-avatar.md) and make it their own using the [Outfit window](/getting-started/customizing-your-avatar/editing-avatars-in-the-outfit-window.md) and [Sinewave Shop](/getting-started/customizing-your-avatar/using-the-sinewave-shop.md) * Use the conference system to [chat](/getting-started/using-the-conference-system.md#voice-chat), share their [webcam](/getting-started/using-the-conference-system.md#webcam-streaming), and [ask questions](/getting-started/using-the-conference-system.md#submitting-questions) at events * Explore Breakroom using the Region [navigation tools](/exploring-breakroom/region-navigation-tools.md) and [Explore window](/exploring-breakroom/using-the-explore-window.md) * ...and more! 2. Videos: Breakroom offers a [video walkthrough](https://youtube.com/playlist?list=PLMmBhuOTME3VI-DyfTsLfBAAE9tQNrEsy\&feature=shared) for beginners. Each video in the playlist is designed to quickly answer common user questions. 3. Orientation Regions: When designing your World, you may want to create one or more [Orientation Regions](/building-new-worlds/default-landing-and-orientation-regions.md#orientation-regions) where first-time visitors can take advantage of an [interactive tutorial](/creating-custom-experiences/exploring-the-breakroom-toolkit/breakroom-orientation-quest.md). 4. Triage zones: You may also consider creating [triage zones](/running-your-event/customizing-the-conference-system-components/designating-triage-zones.md) staffed with team members who can help users troubleshoot common issues. #### Onboarding speakers and VIPs[​](#onboarding-speakers-and-vips "Direct link to Onboarding speakers and VIPs") Breakroom's Customer Success, Sales, and Marketing Teams bring a wealth of knowledge to the table when it comes to helping World Owners host virtual events. Here are some of their top tips. 1. **Speakers will need extra attention and orientation time.** Take time before the event to connect with each speaker individually and gauge their level of comfort with the platform. Some key things to ask them are: 1. Do you understand how to get around the Region? 2. Do you want to control your avatar yourself, or do you want a member of our team to move your avatar for you? 3. Do you want to take live questions from the audience, or do you want a moderator to take questions for you? 4. How do you want to leave the stage when you are done with your presentation? Do you want to click-teleport to a chair, walk off the stage, teleport to another area? 2. **Plan on at least 45 minutes of rehearsal and tech tests for each speaker.** Hold these rehearsals prior to the day of the event, so you have plenty of time to address any issues that arise. Use this time to run through every presentation slide and video and confirm that audio is working. 3. **After coming up with a stage management plan for each speaker and panel, draw up a comprehensive event schedule for the backstage coordinators.** Be sure to include any needed buffer time and special notes. info During rehearsals and tech tests, make sure that speakers log in and present from the computer they plan to use on the day of the event. You don't want to encounter any surprises on your big day! #### Device testing[​](#device-testing "Direct link to Device testing") As part of Breakroom's [conference system](/getting-started/using-the-conference-system.md), we offer built-in device testing. To access this service, all users need to do is click the **Device Options >** **Device Testing button** at the top of the screen. ![](/assets/images/Troubleshooting_001-65abac97cf062d48afbd94366587cf42.jpg) *Pictured: The troubleshooting tools available under Device Options.* This will open a dedicated testing panel. Here users can verify if their audio and video devices are working, see which devices are currently being used by Breakroom, test their speakers, and check their audio volume. You can learn more about these functions on our [device troubleshooting page](/getting-started/using-the-conference-system/troubleshooting-audio-and-video-issues.md). In addition to this resource, the following tips will help your users get the best possible experience. 1. If users are accessing Breakroom via the [desktop viewer](/opening-the-doors/desktop-viewers.md), we suggest that they shut down all other applications running on their computer. 2. If users are accessing Breakroom via [World Stream](/opening-the-doors/world-stream.md), they should shut down any applications other than their browser and close any unneeded browser tabs or windows. 3. **Headphones are strongly suggested**\*\*\*.\*\*\* Please ensure that your users and speakers are properly outfitted with headphones in order to avoid audio problems. 4. The balance option located within the computer sound settings can be used to cut down on unwanted audio feedback. On Windows 10 machines, you can locate this option by opening the **Settings** and searching for "**balance**." Please see our [World Stream section](/opening-the-doors/world-stream/troubleshooting-world-stream-issues-on-chrome.md) for more information about adjusting the audio balance on macOS. --- ### Region Editor best practices [YouTube video player](https://www.youtube.com/embed/YUBB-Gwc-pM) #### Using the desktop app [](#using-the-desktop-app)[​](#using-the-desktop-app- "Direct link to using-the-desktop-app-") For the best possible experience when positioning objects in your Regions, we recommend using the Breakroom [desktop viewer](/opening-the-doors/desktop-viewers.md). You *can* use Region Editor with [World Stream](/opening-the-doors/world-stream.md)β€”the functionality is the same. However, the desktop viewer offers faster feedback and is slightly smoother to use. #### Positioning your camera [](#positioning-your-camera)[​](#positioning-your-camera- "Direct link to positioning-your-camera-") ##### Region Editor avatar and camera commands [](#region-editor-avatar-and-camera-commands)[​](#region-editor-avatar-and-camera-commands- "Direct link to region-editor-avatar-and-camera-commands-") While using the Region Editor, you will most likely want to focus your camera on a particular object or area. When you open Region Editor, the camera will be in *object mode* by default. To instantly focus your camera on a particular object, **click on the item** in your [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window), then move your cursor to a scene area and press the **F key**. ![](/assets/images/Region_Editor_Best_001-973dff0fd88a102d562cdaac64587b20.png) *Highlighted: The location of the Avatar Move button.* Alternatively, you can click the [**Avatar Move button**](/creating-custom-experiences/using-the-region-editor.md#object-positioning-and-editing-tools) to switch to *avatar mode*. This gives you the ability to move your avatar through the Region while you work, with the camera following you. Click the button again to lock your avatar into place. ##### Fly cam [](#fly-cam)[​](#fly-cam- "Direct link to fly-cam-") Fly cam is another useful way to explore your surroundings. To enable it, hold down your **right mouse button (RMB)**. You can then use the **A and D keys** to pan from side, the **R and C keys** to pan up and down, and the **W and S keys** to zoom in and out. You can also orbit items in this mode by moving your mouse. The camera can be returned to its original, avatar-locked position by pressing the **Esc key** twice. ##### Latch cam [](#latch-cam)[​](#latch-cam- "Direct link to latch-cam-") Latch cam allows you to choose a specific object as your current focus point. You can then move the camera around it using the commands detailed above. To "latch" your camera onto an object, hold down the **Alt key** and click on the object with your **right mouse button (RMB)**. #### Undo and Redo buttons [](#undo-and-redo-buttons)[​](#undo-and-redo-buttons- "Direct link to undo-and-redo-buttons-") ![](/assets/images/Region_Editor_Best_002-981c1278390164511800a29ca0b53d77.png) *Highlighted: The location of the Undo and Redo buttons.* The Undo and Redo buttons in the Region Editor are comparable to the undo and redo buttons in a graphics editing application, and are designed to allow you to skip forwards and backwards in time for the current editing session. You can use the Undo button to correct mistakes in the momentβ€”for example, if you rotate an object and decide you don't like how it looks, click the **Undo button** to restore it to its previous position. You can also undo your last step by pressing **Ctrl + Z** on your keyboard. #### Selecting and editing multiple objects [](#selecting-and-editing-multiple-objects)[​](#selecting-and-editing-multiple-objects- "Direct link to selecting-and-editing-multiple-objects-") To select items within a Region for editing, you can either click on the item itself or click on its name in the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). To select multiple items at the same time, hold down the **Ctrl key** on your keyboard and click the items or item names you wish to edit. ![](/assets/images/Region_Editor_Best_003-324e4264059976f4c98d1858f53d9fc0.png) *Pictured: Two items selected at the same time by holding down the Ctrl key.* When two or more items are selected at once, you can edit their position as a group using the [Region Editor gizmos](/creating-custom-experiences/using-the-region-editor/editing-and-moving-objects.md). They will move, rotate, and scale together. You can also bulk-select items using the Objects window. To do so, **click the first item** in the series you would like to select. Then, while holding down the **Shift key**, c**lick the last item** in the series. This will highlight all of the objects at once. #### Changing object Display Names [](#changing-object-display-names)[​](#changing-object-display-names- "Direct link to changing-object-display-names-") If you add multiple copies of any object to your Region, you will notice that every copy is identified by the same *Display Name* in the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). By entering more descriptive object Display Names, you can make it easier to keep track of your items and locate them when needed. ![](/assets/images/Region_Editor_Best_004-1d8753b24b332058309eb9c5ec92ad07.png) *Pictured: A Region that contains three copies of the same item (Stretch Statue #1). The Display Name for one of these objects has been changed. By changing an object's Display Name, you can more efficiently locate and identify items.* To change the Display Name of an object, follow the steps below. 1. Open the [Region Editor](https://docs.breakroom.tech/customization/using-the-region-editor) by clicking the **Edit Region button** located in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 2. Click the **Objects Button** to launch the [Objects window](/creating-custom-experiences/using-the-region-editor.md#the-objects-window). 3. In the Objects window, locate the object you want to edit. (Tip: You can use the search field at the top of the window to search for a specific object.) Click on the **object name** to launch the Inspector window. 4. In the Inspector window, locate the **Display Name field**. Enter the **display name** you want to use. 5. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. warning You cannot change the Display Name of breakout area, voice zone, and voice zone furniture objects. #### Changing Region templates [](#changing-region-templates)[​](#changing-region-templates- "Direct link to changing-region-templates-") You can switch to another Region template from within the Region Editor. To do so, follow the instructions below. 1. Navigate to the Region you want to change. 2. Open the [Region Editor](https://docs.breakroom.tech/customization/using-the-region-editor) by clicking the **Edit Region button** located in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar). 3. Click the **Inventory button** to open the [Inventory window](/creating-custom-experiences/using-the-region-editor.md#the-inventory-window). 4. Along the left side of the Inventory window, you will see several category tabs. Click on the **Region category.** 5. Click on the **Region template item** that you would like to use. 6. Confirm the change by clicking the **Swap Template button**. 7. Click the **Save button** to store your changes, and the **Close button** to exit the Region Editor. danger When switching Region templates, all furniture objects you have set down and any custom changes you have made to the original Region will be erased. These lost changes cannot be recovered, so please consider this step carefully. #### Giving Region editing permissions to other users[​](#giving-region-editing-permissions-to-other-users "Direct link to Giving Region editing permissions to other users") By making another user a [Region Administrator](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md#administrator), you can grant limited in-world editing permissions. Region Administrators can access the [Region Editor](/creating-custom-experiences/using-the-region-editor.md) for their assigned Region, as well as the [moderator tools](/running-your-event/moderator-tools.md) and the [Region Information window](/building-new-worlds/region-settings.md). However, they will not be able to log in to your [Dashboard](/building-new-worlds/breakroom-dashboard-tour.md). Alternatively, you can appoint a [Region Developer](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md#developer) for any Region that you own. Region Developers have access to the Region Editor, and can decorate and modify the Region to which they are assigned. They do not occupy a [Developer seat](/opening-the-doors/seats-and-concurrency.md), and cannot upload content to your World. To grant these advanced [Region-level permissions](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md), follow the steps below. 1. Click on the mini map. (If not enabled, click on the **Minimap button** in the [top toolbar](/getting-started/ui-tour.md#the-top-toolbar).) This will open the Region Information window. 2. Click on the **Members tab**, and then the **Add Members button**. This will open the "Add new members" dialog box. 3. Use the **search field** to search for the user's name. When you find it, click the **Add button**. 4. Once the user is added to the Region members list, check the **box** next to their name and then click on the **Set Role drop-down menu**. From this menu, select the permissions level you'd like to assign the user. To revoke advanced Region-level permissions, follow steps 1-4 above, and select either the *Member* or *Guest* role. If you prefer, you can also [remove](/opening-the-doors/creating-and-managing-user-accounts/region-level-user-permissions.md#removing-region-members) the user from the members list entirely. warning You should only assign Administrator or Developer status to trusted individuals who understand how to use the Breakroom tools. Changes made in the Region Editor may not be easy to revert. ---