From 1d14dea0e5a31b6a5c5e6a6554e6c771e9a57f48 Mon Sep 17 00:00:00 2001 From: "rbx-open-source-docs[bot]" <138828531+rbx-open-source-docs[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 20:02:52 +0000 Subject: [PATCH] update Open Source Docs from Roblox internal teams --- .../data-stores/error-codes-and-limits.md | 15 +++- content/en-us/effects/beams.md | 10 +-- content/en-us/effects/highlighting.md | 34 ++++---- content/en-us/effects/index.md | 12 +-- content/en-us/effects/light-sources.md | 44 +++++----- content/en-us/effects/trails.md | 4 +- content/en-us/parts/materials.md | 24 +++--- content/en-us/parts/meshes.md | 18 ++--- content/en-us/parts/models.md | 10 +-- content/en-us/parts/textures-decals.md | 38 ++++----- .../en-us/physics/adaptive-timestepping.md | 17 ++-- content/en-us/physics/assemblies.md | 16 ++-- .../en-us/physics/character-controllers.md | 18 ++--- content/en-us/physics/index.md | 6 +- .../en-us/physics/mechanical-constraints.md | 18 ++--- content/en-us/physics/mover-constraints.md | 28 +++---- content/en-us/reference/cloud/cloud.docs.json | 81 +++++++++++++++++-- .../reference/engine/classes/DataStore.yaml | 39 +++++++++ content/en-us/workspace/camera.md | 4 +- tools/checks/utils/allowedHttpLinks.txt | 2 +- 20 files changed, 279 insertions(+), 159 deletions(-) diff --git a/content/en-us/cloud-services/data-stores/error-codes-and-limits.md b/content/en-us/cloud-services/data-stores/error-codes-and-limits.md index 0af97ea3f..3c7659d61 100644 --- a/content/en-us/cloud-services/data-stores/error-codes-and-limits.md +++ b/content/en-us/cloud-services/data-stores/error-codes-and-limits.md @@ -209,6 +209,12 @@ Requests you make to data stores can fail due to poor connectivity or other issu `GetVersionAsync` request dropped. Request was throttled. `Class.DataStore:GetVersionAsync()|GetVersionAsync()` request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput. + + + `GetVersionAtTimeAsyncThrottle` + `GetVersionAtTimeAsync` request dropped. Request was throttled. + `Class.DataStore:GetVersionAtTimeAsync()|GetVersionAtTimeAsync()` request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput. + `ListDataStoresAsyncThrottle` @@ -234,6 +240,13 @@ Requests you make to data stores can fail due to poor connectivity or other issu `Class.DataStore:RemoveVersionAsync()|RemoveVersionAsync()` request has exceeded the maximum queue size and Roblox is unable to process the requests at the current throughput. + + + `InvalidTimestamp` + Timestamp must be positive and not more than ten minutes in the future. + The timestamp provided to `Class.DataStore:GetVersionAtTimeAsync()|GetVersionAtTimeAsync()` was not valid. + + @@ -339,7 +352,7 @@ Each server is allowed a certain number of data store requests based on the requ Get Version - `Class.DataStore:GetVersionAsync()|GetVersionAsync()` + `Class.DataStore:GetVersionAsync()|GetVersionAsync()`

`Class.DataStore:GetVersionAtTimeAsync()|GetVersionAtTimeAsync()` 5 + numPlayers × 2 diff --git a/content/en-us/effects/beams.md b/content/en-us/effects/beams.md index 6631012ad..6941b27be 100644 --- a/content/en-us/effects/beams.md +++ b/content/en-us/effects/beams.md @@ -70,11 +70,11 @@ The visual quality of your beams can change depending on the graphics settings o The `Class.Beam.Texture|Texture` property renders that texture across the length of the beam. You can set a beam's `Class.Beam.Texture|Texture` property to any asset ID. For more information, including how to add or upload your own textures, see [Importing Assets](../projects/assets/manager.md#importing-assets). - +A texture of dark gray circles against a grey background emits between two attachments. A beam renders its texture using two triangles drawn between `Class.Beam.Segments|Segments`, and the segments are laid out between the two attachment points' orientation. When you rotate attachment points in different directions, segments also rotate. - +The same texture from the previous image is now curved because the attachments are in different orientations. ### Color @@ -89,7 +89,7 @@ The `Class.Beam.Color|Color` property tints the beam's texture to either a speci 1. Click on the color square to open the **Colors** pop-up window and select a color. 2. Input three numbers into the RGB color value field. - + @@ -175,7 +175,7 @@ You can set the beam's width in studs at each endpoint by configuring the The beam below has a `Class.Beam.Width0|Width0` value of **0.5** and a `Class.Beam.Width1|Width1` value of **3**. - +A texture emits between two attachments. The texture starts with a small width and ends with a large width. ### Texture Length/Mode @@ -211,4 +211,4 @@ Beams are configured to use a cubic Bézier curve formed by four control points. Beam curvature diagram - + diff --git a/content/en-us/effects/highlighting.md b/content/en-us/effects/highlighting.md index c3f9c4497..6ff62b0d6 100644 --- a/content/en-us/effects/highlighting.md +++ b/content/en-us/effects/highlighting.md @@ -8,15 +8,15 @@ The `Class.Highlight` instance is a visual effect which you can use to call atte
- + A tree mesh against a grey background.
Base object
- + The same tree mesh with a yellow outline and a black highlight interior.
Yellow outline and black interior
- + The same tree mesh with a black outline and a yellow highlight interior.
Black outline and yellow interior
@@ -40,7 +40,7 @@ To add a highlight effect to an object, you can parent a new `Class.Highlight` d 1. In the [Explorer](../studio/explorer.md) window, hover over either a `Class.Model` or a `Class.BasePart`, then click the ⊕ button. A contextual menu displays. 2. From the menu, insert a **Highlight**. The highlight displays on the object with its default property values that create a white outline and a red tint overlay. - + ### Setting the Adornee @@ -56,15 +56,15 @@ The `Class.Highlight.OutlineColor|OutlineColor` property sets the `Datatype.Colo
- + A tree mesh with red outline.
OutlineColor = [255, 100, 50]
- + A tree mesh with green outline.
OutlineColor = [0, 255, 125]
- + A tree mesh with blue outline.
OutlineColor = [75, 150, 255]
@@ -75,11 +75,11 @@ The `Class.Highlight.OutlineTransparency|OutlineTransparency` property sets the
- + A tree mesh with black opaque outline.
OutlineTransparency = 0
- + A tree mesh with transparent outline.
OutlineTransparency = 1
@@ -90,15 +90,15 @@ The `Class.Highlight.FillColor|FillColor` property sets the `Datatype.Color3` va
- + A tree mesh with a red fill.
FillColor = [255, 100, 50]
- + A tree mesh with a red fill.
FillColor = [0, 255, 125]
- + A tree mesh with a blue fill.
FillColor = [75, 150, 255]
@@ -109,15 +109,15 @@ The `Class.Highlight.FillTransparency|FillTransparency` property sets the visibi
- + A tree mesh with an opaque black fill.
FillTransparency = 0
- + A tree mesh with an semi-transparent black fill.
FillTransparency = 0.5
- + A tree mesh with a transparent black fill.
FillTransparency = 1
@@ -132,10 +132,10 @@ The `Class.Highlight.DepthMode|DepthMode` property controls how the effect displ - +Two objects are behind pillars, but because their AlwayOnTop property is set to true, you can still see the objects and their highlight. - +Two objects are behind pillars, but because their Occuluded property is set to true, you can only see the objects and their highlight in areas where they are unobstructed. diff --git a/content/en-us/effects/index.md b/content/en-us/effects/index.md index 675ed7dc2..26c01c003 100644 --- a/content/en-us/effects/index.md +++ b/content/en-us/effects/index.md @@ -23,15 +23,15 @@ are three types of light sources:
- +
Point Lights
- +
Spotlights
- +
Surface Lights
@@ -75,15 +75,15 @@ width="100%">
- + A tree mesh against a grey background.
Base object
- + The same tree mesh with a white outline and a red highlight interior.
White outline, 50% red interior
- + The same tree mesh with a yellow outline and a black highlight interior.
Yellow outline, black interior
diff --git a/content/en-us/effects/light-sources.md b/content/en-us/effects/light-sources.md index 9cc81254c..12c2d6750 100644 --- a/content/en-us/effects/light-sources.md +++ b/content/en-us/effects/light-sources.md @@ -9,7 +9,7 @@ light sources instead of just general global lighting through the `Class.Lightin service, you can create immersive environments such as cyberpunk cities, traditional light festivals, and moody detective scenes. - +A far out view of a diner bulding in the middle of a nighttime city. The diner is utilizing several local light sources. The `Class.Lighting.Technology|Technology` property, modifiable only in the [Properties](../studio/properties.md) window for the global `Class.Lighting` object, sets your experience's lighting technology and affects the visual appearance of light sources. For more information, see [Technology](../environment/lighting.md#technology). @@ -31,18 +31,18 @@ A point light's `Class.PointLight.Range|Range` property defines the radial dista
- + A street lamp point light with a small range.
Range = 8
- + The same street lamp point light with a larger range.
Range = 12
To create a `Class.PointLight` in Studio: -1. In the [Explorer](../studio/explorer.md) window, hover over an `Class.Attachment` or a `Class.BasePart` and click the ⊕ button (`Class.Attachment` is recommended for point‑specific light emission). +1. In the **Explorer** window, hover over an `Class.Attachment` or a `Class.BasePart` and click the ⊕ button (`Class.Attachment` is recommended for point‑specific light emission). 1. From the menu, insert a `Class.PointLight`. 1. Adjust the light's `Class.PointLight.Range|Range` as well as [shared properties](#shared-properties) like `Class.PointLight.Brightness|Brightness` and `Class.PointLight.Color|Color`. @@ -55,11 +55,11 @@ as shown from the following streetlamp's glowing light part:
- + A street lamp spotlight that emits light from its bottom face.
Face = Bottom
- + A street lamp spotlight that emits light from its left face.
Face = Left
@@ -68,18 +68,18 @@ A spotlight's `Class.SpotLight.Angle|Angle` property defines the angle of light
- + A street lamp spotlight with a 30 degree angle of emission.
Angle = 30
- + The same street lamp spotlight with a 75 degree angle of emission.
Angle = 75
To create a `Class.SpotLight` in Studio: -1. In the [Explorer](../studio/explorer.md) window, hover over an `Class.Attachment` or a `Class.BasePart` and click the ⊕ button. +1. In the **Explorer** window, hover over an `Class.Attachment` or a `Class.BasePart` and click the ⊕ button. 1. From the menu, insert a `Class.SpotLight`. 1. Set the light's `Class.SpotLight.Face|Face` property to specify which direction light emits from. 1. Adjust the light's `Class.SpotLight.Angle|Angle` and `Class.SpotLight.Range|Range`, as well as [shared properties](#shared-properties) like `Class.SpotLight.Brightness|Brightness` and `Class.SpotLight.Color|Color`. @@ -92,11 +92,11 @@ A surface light's `Class.SurfaceLight.Face|Face` property determines the face of
- + A sign surface light that emits light from its bottom face.
Face = Bottom
- + A sign surface light that emits light from its right face.
Face = Right
@@ -105,18 +105,18 @@ A surface light's `Class.SurfaceLight.Angle|Angle` property defines the angle of
- + A sign surface light with a 0 degree angle of emission.
Angle = 0
- + A sign surface light with a 60 degree angle of emission.
Angle = 60
To create a `Class.SurfaceLight` in Studio: -1. In the [Explorer](../studio/explorer.md) window, hover over a `Class.BasePart` and click the ⊕ button. +1. In the **Explorer** window, hover over a `Class.BasePart` and click the ⊕ button. 1. From the menu, insert a `Class.SurfaceLight`. 1. Set the light's `Class.SurfaceLight.Face|Face` property to specify which surface light emits from. 1. Adjust the light's `Class.SurfaceLight.Angle|Angle` and `Class.SurfaceLight.Range|Range`, as well as [shared properties](#shared-properties) like `Class.SurfaceLight.Brightness|Brightness` and `Class.SurfaceLight.Color|Color`. @@ -131,15 +131,15 @@ The `Class.Light.Color|Color` property sets the `Datatype.Color3` value of the e
- + A torch that emits red light.
Color = [255, 100, 50]
- + A torch that emits green light.
Color = [0, 255, 125]
- + A torch that emits blue light.
Color = [75, 150, 255]
@@ -150,15 +150,15 @@ The `Class.Light.Brightness|Brightness` property sets the light's brightness wit
- + A torch that emits low light.
Brightness = 2
- + A torch that emits medium light.
Brightness = 10
- + A torch that emits bright light.
Brightness = 50
@@ -169,11 +169,11 @@ The `Class.Light.Shadows|Shadows` property projects shadows where light is block
- + A corner view of the diner with shadows enabled.
Shadows = Enabled
- + A corner view of the diner with shadows disabled.
Shadows = Disabled
diff --git a/content/en-us/effects/trails.md b/content/en-us/effects/trails.md index 5c2bcea1c..cef898e72 100644 --- a/content/en-us/effects/trails.md +++ b/content/en-us/effects/trails.md @@ -34,7 +34,7 @@ To create a trail on a part: 1. Hover over the part and click the **⊕** button. A contextual menu displays. 2. From the menu, insert two **Attachments** and one **Trail**. - + 2. Select the new **Trail** object and assign its attachments. Ensure you assign each attachment property to a different `Class.Attachment` object. @@ -79,7 +79,7 @@ The `Class.Trail.Color|Color` property tints the trail's texture to either a spe 1. Click on the color square to open the **Colors** pop-up window and select a color. 2. Input three numbers into the RGB color value field. - +
diff --git a/content/en-us/parts/materials.md b/content/en-us/parts/materials.md index 76defd18e..06f7ee486 100644 --- a/content/en-us/parts/materials.md +++ b/content/en-us/parts/materials.md @@ -19,7 +19,7 @@ You can quickly apply materials to [parts](../parts/index.md) through the [Mater The **Material** widget is accessible from either the [Home](../studio/home-tab.md) or [Model](../studio/model-tab.md) tabs. Clicking the small dropdown arrow reveals a material picker. -Studio's Model tab with the Material widget's picker. +Studio's Model tab with the Material widget's picker highlighted. By default, clicking the overall **Material** button applies the chosen material to any **selected** parts. If you prefer a fill/paint workflow instead, toggle on **Material Action as Tool** and then click parts in the 3D viewport to apply the chosen material. @@ -77,15 +77,15 @@ To create a custom material in the [Material Manager](#material-manager): 1. Click the **base material** from which your custom material will inherit [physical properties](#physical-properties). If you skip this step, the base material will be **Plastic**, but you can change it later. - Base material selected in Material Manager + A Base material of Asphalt that's selected in the Material Manager. 2. In the top-left corner, click **Create Material Variant**. - Create Material Variant button indicated in Material Manager + Create Material Variant button indicated in Material Manager. A new variant appears in the palette with an icon in the bottom-right corner, indicating it's a custom material. - New MaterialVariant tile in Material Manager with icon to indicate a custom material + New MaterialVariant tile in Material Manager with icon to indicate a custom material. 3. In the inspector, rename your custom material to describe its purpose. You can change the name later, but if you do so **after** applying the material to parts, you'll need to re-apply it to those parts. 4. For each **texture map** option such as **Color** or **Normal**, paste an asset ID or import a new texture from your computer. Square textures work best. If you don't specify an asset for a texture map, that texture remains blank. @@ -101,7 +101,7 @@ For [parts](../parts/index.md), you can use a custom material just like any othe You can also apply the new material to a part by setting its **MaterialVariant** property in the [Properties](../studio/properties.md) window. In this case, Studio automatically sets its **Material** property to the base material you chose when creating the material. -Material and MaterialVariant properties set in the Properties window +Material and MaterialVariant properties set in the Properties window. Note that if you rename a custom material **after** applying it to parts, those parts will not automatically use the custom material with the new name. This behavior allows for [Adaptive Materials](#adaptive-materials). If you want parts to continue using a custom material after you rename it, you'll need to re-apply the custom material. @@ -124,11 +124,11 @@ To set a custom material as a material override in the [Material Manager](#mater 1. Click the custom material that you want to set as an override. 1. In the inspector, scroll down to **Overrides** and enable **Set as Override**. - + . The new override appears as a property of **MaterialService** in the [Properties](../studio/properties.md) window. - + #### Terrain Details @@ -139,15 +139,15 @@ To customize the faces of terrain using a custom material: 1. In the palette of the [Material Manager](#material-manager), click the custom material. 1. In the inspector, confirm that its **Set as Override** toggle is enabled. - + 1. In the **Terrain Details** section, click **Create** for each face you want to customize. - + 1. For each face you enable, expand the arrow to access and edit details such as its name, texture maps, studs per tile, and pattern. - + #### Disabling Overrides @@ -158,13 +158,13 @@ You can disable an entire material override and all base materials that it's cur 1. In the palette of the [Material Manager](#material-manager), click a **custom material** that's being used as an override. 1. In the inspector, scroll down to **Overrides** and disable **Set as Override**. - + 1. In the palette of the [Material Manager](#material-manager), click a **base material** which is being overridden by a custom material. 2. In the inspector, scroll down to **Material Override** and select **None** from the menu. - + diff --git a/content/en-us/parts/meshes.md b/content/en-us/parts/meshes.md index a246c0a55..e48564f3b 100644 --- a/content/en-us/parts/meshes.md +++ b/content/en-us/parts/meshes.md @@ -11,15 +11,15 @@ Roblox supports many types of meshes, as long as they adhere to the [general mes
- + A tree mesh object without a texture.
A mesh object sets the shape and geometry of the 3D object
- + The texture image map for the leaves of the tree in the previous image.
A texture image map applies a surface appearance and color
- + A tree mesh object with the leaves texture applied.
The mesh and texture combine to make a unique custom 3D object
@@ -56,8 +56,8 @@ Unlike basic parts, meshes have more customization options that you can adjust f Studio supports four PBR texture maps, each corresponding to a visual characteristic of an object's surface appearance. Combining multiple texture maps can more accurately simulate color, roughness, and reflectivity in any lighting environment, and enhance the visual elements of your assets and environment. For more information on PBR textures and the texture maps, see [PBR Textures](../art/modeling/surface-appearance.md). - - + + You can apply PBR textures using one of the following objects: @@ -106,17 +106,17 @@ You can dynamically control a mesh's level of detail using its `Enum.RenderFidel Less than 250 studs Highest - + A potion mesh object that is rendered in the highest level of detail. 250-500 studs Medium - + A potion mesh object that is rendered in a medium level of detail. Its edges are more jagged than the previous image. 500 or more studs Lowest - + A potion mesh object that is rendered in the lowest level of detail. Its edges are more jagged than the previous image, and the liquid is no longer shiny. @@ -152,7 +152,7 @@ You can dynamically control a mesh's level of detail using its `Enum.RenderFidel To view collision fidelity in Studio, toggle on **Collision fidelity** from the [Visualization Options](../studio/ui-overview.md#visualization-options) widget in the upper‑right corner of the 3D viewport. -For more information on the performance impact of collision fidelity options and how to mitigate them, see [Performance Optimization](../performance-optimization/improving.md#physics-computation). For an in-depth walkthrough on how to choose a collision fidelity option that balances your precision and performance requirements, see [Set Physics and Rendering Parameters](../tutorials/environmental-art/assemble-an-asset-library.md#collisionfidelity). +For more information on the performance impact of collision fidelity options and how to mitigate them, see [Performance Optimization](../performance-optimization/improving.md#physics-computation). For an in-depth walkthrough on how to choose a collision fidelity option that balances your precision and performance requirements, see [Set Physics and Rendering Parameters](../tutorials/curriculums/environmental-art/optimize-your-experience.md#review-physics-and-rendering-parameters). ## Rigging and Skinning Meshes diff --git a/content/en-us/parts/models.md b/content/en-us/parts/models.md index e2cf39ea1..e06261b76 100644 --- a/content/en-us/parts/models.md +++ b/content/en-us/parts/models.md @@ -9,11 +9,11 @@ Characters, such as avatars or NPCs, are a single `Class.Model` containing the a
- Model named Octavia + An example character model of a humanoid monster girl in a dark purple dress.
A model named Octavia
- The groupings which comprise the Octavia model in Studio's Explorer window + The groupings which comprise the Octavia model in Studio's Explorer window.
The groupings that comprise the model
@@ -25,7 +25,7 @@ When you **group** objects together, they automatically become a `Class.Model` o 1. In the 3D viewport or the [Explorer](../studio/explorer.md) window, select every object that you want to group into a model. 1. Right-click on one of the objects and select **Group**, or press CtrlG on Windows or G on Mac. A new `Class.Model` object displays with all of the objects that make up the model nested underneath. - Three basic objects grouped into a Model object + A close up view of the Explorer window. A Model object is highlighted with three nested children. To completely ungroup a model back to its original objects, right-click it and select **Ungroup**, or press CtrlU on Windows or U on Mac. @@ -45,7 +45,7 @@ To set a primary part: As you hover over models in the viewport, they are outlined to indicate their potential selection. You can select an outlined model by clicking it, or you can select multiple models by holding Shift, Ctrl, or as you hover over and click them. -Multiple models selected in 3D viewport +A warehouse view in the 3D viewport. Multiple models are selected and highlighted with a light blue outline. As models typically contain multiple child [parts](../parts/index.md) or [meshes](../parts/meshes.md), some children may be hidden from view. To select a specific child without moving the camera around or locating the child in the [Explorer](../studio/explorer.md) hierarchy, click while holding Alt on Windows or on Mac to perform [selection cycling](../studio/ui-overview.md#selection-cycling). @@ -94,7 +94,7 @@ While models act similarly to `Class.Folder` objects for most purposes in your e When a `Class.Humanoid` is present inside a model that contains a `Class.Part` named **Head**, Roblox displays a name and/or health bar above that part. For more information, see [Character Name/Health Display](../characters/name-health-display.md). -Character display information above an in-experience avatar +Character display information above an in-experience avatar. ### Destroy Height diff --git a/content/en-us/parts/textures-decals.md b/content/en-us/parts/textures-decals.md index 8f5363499..e3754ec28 100644 --- a/content/en-us/parts/textures-decals.md +++ b/content/en-us/parts/textures-decals.md @@ -23,22 +23,22 @@ can:
- + An example texture image of a light blue hexagon on top of a dark blue background.
Texture image
- + The same blue texture repeated eight times on a block part.
Texture applied to a part (repeating)
- + An example decal image of a light purple hexagon on top of a dark purple background.
Decal image
- + The same purple decal stretched on the top face of a block part.
Decal applied to a part (stretched)
@@ -69,15 +69,15 @@ To add a texture or decal to a part or union: 4. **(Optional)** Set a color tint by clicking the small box to the left of the **Color3** property or by entering a RGB color code. - - + A close of view of the Color3 property with the small color box highlighted. + A close of view of the Color3 property with the RGB code highlighted.
- + A block part with a repeating blue hexagon texture on its top face.
Default
- + The same block part with a repeating hexagon texture on its top face, but the hexagons are pink against on dark purple background.
Color3 = [255, 0, 100]
@@ -86,11 +86,11 @@ To add a texture or decal to a part or union:
- + A block part with a repeating blue hexagon texture on its top face.
Default
- + The same block part with a repeating hexagon texture on its top face, but the hexagons are semi-transparent.
Transparency = 0.6
@@ -101,11 +101,11 @@ A **face** is a surface on a part/union that displays a texture or decal: **Top*
- + A block part with a texture that displays on the block's front face. The Show Orientation Indicator highlights the block's front face orientation.
Front
- + A block part with a texture that displays on the block's top face. The Show Orientation Indicator highlights the block's front face orientation.
Top
@@ -114,7 +114,7 @@ To choose a face: 1. **(Optional)** To assist in choosing the correct face, right-click the part/union and select **Show Orientation Indicator**. This displays a blue circle with an **F** and a line attached to the object's **Front** face, and a green arrow that points in the direction of the object's **Top** face. - + 2. Select a texture or decal that is a child of the part or union. @@ -132,15 +132,15 @@ The `Class.Texture.StudsPerTileU|StudsPerTileU` and `Class.Texture.StudsPerTileV
- + An example texture image of a light blue hexagon on top of a dark blue background.
Texture Image
- + The same texture on a surface of 8x6 studs with size of each tile in 2x2.
Surface of 8×6 Studs
- + The same texture on a surface of 8x6 studs with size of each tile in 4x4.
Surface of 8×6 Studs
@@ -157,15 +157,15 @@ If you want more control over a texture's position, offset the texture by adjust
- + An example texture image of a light blue hexagon on top of a dark blue background.
Texture Image
- + The same texture on a surface of 8x6 studs with an offset of 1 stud.
Surface of 8×6 Studs
- + The same texture on a surface of 8x6 studs with an offset of 1.5 studs.
Surface of 8×6 Studs
diff --git a/content/en-us/physics/adaptive-timestepping.md b/content/en-us/physics/adaptive-timestepping.md index 8cb6cdc52..55323bc23 100644 --- a/content/en-us/physics/adaptive-timestepping.md +++ b/content/en-us/physics/adaptive-timestepping.md @@ -7,7 +7,7 @@ The Roblox physics engine simulates all parts inside the 3D workspace through Ne By default, Roblox simulates physics at 240 Hz. Given cycles of approximately 60 frames per second, around 4 worldsteps are advanced per frame. With **adaptive timestepping**, the physics engine automatically assigns parts to three "solver islands" by varying their simulation timestep, with an emphasis on 60 Hz for best performance. However, parts that are "harder" to solve will use a faster timestep like 240 Hz to ensure physical stability. - + Assignment criterions are subject to change, but parts assigned to the 240 Hz island include [assemblies](../physics/assemblies.md) with high velocity values, high acceleration values, and complex mechanisms that are hard to solve. @@ -17,24 +17,21 @@ To enable adaptive timestepping in Studio: 1. In the **Explorer** window, select the **Workspace** object. - + 2. In the **Properties** window, locate **PhysicsSteppingMethod** and select **Adaptive**. - + To observe the timestepping process in action, you can open the Studio **Microprofiler** (CtrlF6; F6). Once the experience is running, press CtrlP (P) to pause at the current frame. Under the scope named **physicsStepped**, observe that the scope name of **worldStep** now reads **worldStep - Adaptive**. - + Hovering your cursor above **LDLPGSSolver::solve** will reveal the status of how many islands belong in each frequency bucket; **1dt Islands** (240 Hz), **2dt Islands** (120 Hz) and **4dt Islands** (60 Hz). - + ## Debugging Visualization @@ -43,11 +40,11 @@ During testing, it may be useful to visualize frequencies for simulated parts. T 1. Open the Studio settings window (**File** ⟩ **Studio Settings**). 2. From the **Physics** tab, enable **Are Timesteps Shown**. - + Once enabled, simulated parts will be outlined by their current simulation rate. If a part stops being simulated, either via the [sleep system](../physics/sleep-system.md) or a network ownership change, the part will no longer be outlined. - +
diff --git a/content/en-us/physics/assemblies.md b/content/en-us/physics/assemblies.md index 7e0fceb0d..4f225767a 100644 --- a/content/en-us/physics/assemblies.md +++ b/content/en-us/physics/assemblies.md @@ -7,15 +7,15 @@ An **assembly** is one or more [parts](../parts/index.md) welded by a rigid `Cla - + A light blue cube against a dark blue background that represents an assembly of 1 part.
1 assembly; 1 part
- + A humanoid character model against a dark blue background that represents an assembly of 18 parts.
1 assembly; 18 parts
- + A pirate that represents an assemble of 179 parts.
1 assembly; 179 parts
@@ -73,25 +73,25 @@ Every assembly has a **root part** indicated by its `Class.BasePart.Assembl You cannot explicitly set the root part, but the following factors affect probability from highest to lowest: - + An `Class.BasePart.Anchored|Anchored` part will always be assigned as the root part. - + Parts with `Class.BasePart.Massless|Massless` set to **false** (default) take precedence. - + Higher `Class.BasePart.RootPriority|RootPriority` values take precedence. - + Precedence based on the part's size, with multipliers for parts with specific names. @@ -112,7 +112,7 @@ When one of an assembly's parts is anchored, that part becomes the root part and
-
Anchored part (left) becomes the new root part
+
Anchored part (as indicated with an anchor icon) becomes the new root part
3. If more than one part is anchored, the assembly will **split**. Below, both the left and top parts are anchored, so the original assembly splits into two assemblies as shown by the colored outlines. Also, the `Class.WeldConstraint` between the two assemblies deactivates, since you cannot have an active weld between two anchored assemblies. diff --git a/content/en-us/physics/character-controllers.md b/content/en-us/physics/character-controllers.md index ed5afb859..95b2e43fc 100644 --- a/content/en-us/physics/character-controllers.md +++ b/content/en-us/physics/character-controllers.md @@ -13,7 +13,7 @@ The `Class.ControllerManager` instance manages simulated motion control for its 2. Group the part as a `Class.Model` instance for organization along with the other components. 3. Add a `Class.ControllerManager` instance to the model. If **ControllerManager** doesn't initially appear in the object insertion menu, **uncheck** "Show only recommended objects" in the menu's [insertion settings](../studio/explorer.md#inserting-and-parenting). - ControllerManager and RootPart inside model + ControllerManager and RootPart inside a model. ### Sensor Setup @@ -22,12 +22,12 @@ A `Class.ControllerPartSensor` detects parts with the same code the `Class.Human 1. Insert a `Class.ControllerPartSensor` as a child of **RootPart** and rename it **GroundSensor** for easier identification of its purpose. Then, in the [Properties](../studio/properties.md) window, set its `Class.ControllerPartSensor.SearchDistance|SearchDistance` property to **2** but leave its `Class.ControllerPartSensor.SensorMode|SensorMode` as **Floor**. GroundSensor as child of RootPart
- GroundSensor properties + 2. Insert another `Class.ControllerPartSensor` as a child of **RootPart** and rename it **ClimbSensor**. Then, in the [Properties](../studio/properties.md) window, set its `Class.ControllerPartSensor.SearchDistance|SearchDistance` property to **1** and its `Class.ControllerPartSensor.SensorMode|SensorMode` to **Ladder**. ClimbSensor as child of RootPart
- ClimbSensor properties + ### Controller Setup @@ -35,11 +35,11 @@ Controller instances like `Class.GroundController` and `Class.ClimbController` t 1. Insert both a `Class.GroundController` and `Class.ClimbController` as children of the `Class.ControllerManager`. - GroundController and ClimbController as children of ControllerManager + GroundController and ClimbController as children of ControllerManager. 2. Select the new `Class.GroundController` instance and then, in the [Properties](../studio/properties.md) window, set its `Class.GroundController.GroundOffset|GroundOffset` property to a value at which the managed part should "levitate" above the ground. It's important that this value is **less** than the value of `Class.ControllerPartSensor.SearchDistance|SearchDistance` for the [GroundSensor](#sensor-setup), since that sensor will deactivate if it loses sense of the ground and effectively stop its forces on the part. - GroundController properties + ### Linking References @@ -47,7 +47,7 @@ To complete the core setup, you'll need to link various properties of the `Class 1. Select the `Class.ControllerManager` instance. - ControllerManager selected in Explorer window + ControllerManager selected in Explorer window. 1. In the [Properties](../studio/properties.md) window, click each of the following properties and then, back in the [Explorer](../studio/explorer.md) window, click the respective instance to complete the link. @@ -68,20 +68,20 @@ With [sensors](#sensor-setup) and [controllers](#controller-setup) in place, and 2. **RootPart** should levitate above the ground at the `Class.GroundController.GroundOffset` value you set in [Adding Controllers](#controller-setup). It should also rotate to align with the `Class.ControllerManager.FacingDirection` vector. - Character levitating above ground at GroundOffset, facing in direction of FacingDirection vector + Character levitating above ground at GroundOffset, facing in direction of FacingDirection vector. 3. Experiment with different movement and facing directions by changing the `Class.ControllerManager.MovingDirection|MovingDirection` and `Class.ControllerManager.FacingDirection|FacingDirection` vectors of the `Class.ControllerManager` during runtime. Also experiment with different properties of the `Class.GroundController` instance such as `Class.GroundController.AccelerationTime|AccelerationTime`, `Class.GroundController.DecelerationTime|DecelerationTime`, and `Class.GroundController.GroundOffset|GroundOffset`.
- ControllerManager properties for moving and facing direction + ControllerManager properties for moving and facing direction are highlighted.
ControllerManager
- GroundController properties for acceleration, deceleration, and ground offset + GroundController properties for acceleration, deceleration, and ground offset are highlighted.
GroundController
diff --git a/content/en-us/physics/index.md b/content/en-us/physics/index.md index 2936ab225..ffd6d221a 100644 --- a/content/en-us/physics/index.md +++ b/content/en-us/physics/index.md @@ -11,15 +11,15 @@ An [assembly](../physics/assemblies.md) is one or more `Class.BasePart|BaseParts - + A light blue cube against a dark blue background that represents an assembly of 1 part.
1 assembly; 1 part
- + A humanoid character model against a dark blue background that represents an assembly of 18 parts.
1 assembly; 18 parts
- + A pirate that represents an assemble of 179 parts.
1 assembly; 179 parts
diff --git a/content/en-us/physics/mechanical-constraints.md b/content/en-us/physics/mechanical-constraints.md index 6a5f2cac1..ab929ff14 100644 --- a/content/en-us/physics/mechanical-constraints.md +++ b/content/en-us/physics/mechanical-constraints.md @@ -140,15 +140,15 @@ To accurately visualize constraints in Studio, you can use the following options Constraints tools indicated in Model tab - +

**Show Welds** — Show `Class.WeldConstraint|WeldConstraints`, separately from the visualization of other constraints.

- +

**Constraint Details** — Show complete visual details of non-weld constraints.

- +

**Scale** — Relative scale of visualizations.

@@ -174,7 +174,7 @@ To create a mechanical constraint, you can use either the **Create** tool or the 3. Most mechanical constraints require a **secondary** attachment in their functionality, so the tool will typically prompt you to repeat the previous step on another `Class.Part`, `Class.MeshPart`, `Class.Attachment`, or `Class.Bone`.
- SpringConstraint connecting two attachments + SpringConstraint connecting two attachments on separate blocks. One block is green and the other is blue.
Completed [SpringConstraint](../physics/constraints/spring.md) connecting two attachments
@@ -186,11 +186,11 @@ Note that [WeldConstraint](../physics/constraints/weld.md) and [NoCollisionConst 1. In the [Explorer](../studio/explorer.md) hierarchy, hover over the intended parent, click the **⊕** button, and insert the desired constraint from the drop‑down menu, such as a [SpringConstraint](../physics/constraints/spring.md). - New SpringConstraint in Explorer hierarchy + New SpringConstraint in Explorer hierarchy. 1. With the new constraint selected, locate its currently empty **Attachment0** property in the [Properties](../studio/properties.md) window. - Constraint's Attachment0 property highlighted in Properties window + Constraint's Attachment0 property highlighted in the Properties window. 1. Link the **Attachment0** property to an `Class.Attachment` or `Class.Bone` in two consecutive steps: @@ -200,10 +200,10 @@ Note that [WeldConstraint](../physics/constraints/weld.md) and [NoCollisionConst - Mouse pointer hovering over Attachment0 property in Properties window + Mouse pointer hovering over Attachment0 property in the Properties window. - Target attachment indicated in Explorer hierarchy + Target attachment indicated in Explorer hierarchy. @@ -217,4 +217,4 @@ Note that [WeldConstraint](../physics/constraints/weld.md) and [NoCollisionConst To simulate physics while [moving](../parts/index.md#moving) or [rotating](../parts/index.md#rotating) parts, you can switch to **Physical** mode in the [Model](../studio/model-tab.md) tab, effectively forcing parts to obey physical limitations. For example, if two parts are attached by a [RopeConstraint](../physics/constraints/rope.md) and you drag one part around the scene, the other part will follow as the rope becomes taut. - + diff --git a/content/en-us/physics/mover-constraints.md b/content/en-us/physics/mover-constraints.md index 8d6c99580..5ca3df10f 100644 --- a/content/en-us/physics/mover-constraints.md +++ b/content/en-us/physics/mover-constraints.md @@ -86,15 +86,15 @@ To accurately visualize constraints in Studio, you can use the following options Constraints tools indicated in Model tab - +

**Show Welds** — Show `Class.WeldConstraint|WeldConstraints`, separately from the visualization of other constraints.

- +

**Constraint Details** — Show complete visual details of non-weld constraints.

- +

**Scale** — Relative scale of visualizations.

@@ -111,7 +111,7 @@ To create a mover constraint, you can use either the **Create** tool or the [Exp -1. In the [Model](../studio/model-tab.md) tab, access the **Create** button's picker menu and select the desired constraint type, for example **Angular Velocity**. +1. In the Model tab, access the **Create** button's picker menu and select the desired constraint type, for example **Angular Velocity**. Constraint picker indicated in Studio toolbar @@ -133,30 +133,30 @@ To create a mover constraint, you can use either the **Create** tool or the [Exp -1. In the [Explorer](../studio/explorer.md) hierarchy, hover over the intended parent, click the **⊕** button, and insert the desired constraint from the drop‑down menu, such as a [LinearVelocity](../physics/constraints/linear-velocity.md). +1. In the **Explorer** window, hover over the intended parent, click the **⊕** button, and insert the desired constraint from the drop‑down menu, such as a [LinearVelocity](../physics/constraints/linear-velocity.md) constraint. - New LinearVelocity in Explorer hierarchy + New LinearVelocity in Explorer window. -1. With the new constraint selected, locate its currently empty **Attachment0** property in the [Properties](../studio/properties.md) window. +1. With the new constraint selected, locate its currently empty **Attachment0** property in the **Properties** window. - Constraint's Attachment0 property highlighted in Properties window + Constraint's Attachment0 property highlighted in Properties window. 1. Link the **Attachment0** property to an `Class.Attachment` or `Class.Bone` in two consecutive steps: - 1. In the [Properties](../studio/properties.md) window, click in the **Attachment0** row to reveal the selection cursor. + 1. In the v window, click in the **Attachment0** row to reveal the selection cursor. - 2. In the [Explorer](../studio/explorer.md) hierarchy, click on the target `Class.Attachment` or `Class.Bone`. + 2. In the **Explorer** window, click on the target `Class.Attachment` or `Class.Bone`. - Mouse pointer hovering over Attachment0 property in Properties window + Mouse pointer hovering over Attachment0 property in Properties window. - Target attachment indicated in Explorer hierarchy + Target attachment indicated in Explorer window. -1. Some mover constraints use or support a **secondary** `Class.Attachment` or `Class.Bone` in their functionality. If necessary, repeat the previous step on the **Attachment1** property in the [Properties](../studio/properties.md) window. For instance: +1. Some mover constraints use or support a **secondary** `Class.Attachment` or `Class.Bone` in their functionality. If necessary, repeat the previous step on the **Attachment1** property in the **Properties** window. For instance: - By default, [AlignPosition](../physics/constraints/align-position.md) and [AlignOrientation](../physics/constraints/align-orientation.md) align their primary attachment (**Attachment0**) with a secondary attachment (**Attachment1**). - [LineForce](../physics/constraints/line-force.md) **requires** two attachments to apply force along the theoretical line connecting them. @@ -168,4 +168,4 @@ To create a mover constraint, you can use either the **Create** tool or the [Exp To simulate physics while [moving](../parts/index.md#moving) or [rotating](../parts/index.md#rotating) parts, you can switch to **Physical** mode in the [Model](../studio/model-tab.md) tab, effectively forcing parts to obey physical limitations. For example, if you drag one part around the scene and it collides with another part, it will physically push that part out of the way. - + diff --git a/content/en-us/reference/cloud/cloud.docs.json b/content/en-us/reference/cloud/cloud.docs.json index 45364857f..70d64d919 100644 --- a/content/en-us/reference/cloud/cloud.docs.json +++ b/content/en-us/reference/cloud/cloud.docs.json @@ -7,7 +7,7 @@ }, "servers": [ { - "url": "https://apis.roblox.com/cloud" + "url": "https://apis.roblox.com" } ], "paths": { @@ -16,6 +16,7 @@ "tags": [ "Cloud" ], + "summary": "Create Creator Store Product", "description": "Add a Creator Store product.", "operationId": "Cloud_CreateCreatorStoreProduct", "requestBody": { @@ -61,6 +62,7 @@ "tags": [ "Cloud" ], + "summary": "Get Creator Store Product", "description": "Get a Creator Store product.", "operationId": "Cloud_GetCreatorStoreProduct", "parameters": [ @@ -105,6 +107,7 @@ "tags": [ "Cloud" ], + "summary": "Update Creator Store Product", "description": "Update a Creator Store product.", "operationId": "Cloud_UpdateCreatorStoreProduct", "parameters": [ @@ -183,6 +186,7 @@ "tags": [ "Cloud" ], + "summary": "Get Group", "description": "Gets the specified group.", "operationId": "Cloud_GetGroup", "parameters": [ @@ -227,6 +231,7 @@ "tags": [ "Cloud" ], + "summary": "List Group Join Requests", "description": "List join requests under a group.", "operationId": "Cloud_ListGroupJoinRequests", "parameters": [ @@ -310,6 +315,7 @@ "tags": [ "Cloud" ], + "summary": "Accept Group Join Request", "description": "Accepts a join request.", "operationId": "Cloud_AcceptGroupJoinRequest", "parameters": [ @@ -369,6 +375,7 @@ "tags": [ "Cloud" ], + "summary": "Decline Group Join Request", "description": "Declines a join request.", "operationId": "Cloud_DeclineGroupJoinRequest", "parameters": [ @@ -428,6 +435,7 @@ "tags": [ "Cloud" ], + "summary": "List Group Memberships", "description": "List group members in a group.", "operationId": "Cloud_ListGroupMemberships", "parameters": [ @@ -509,6 +517,7 @@ "tags": [ "Cloud" ], + "summary": "Update Group Membership", "description": "Updates the group membership for a particular group member. This action\n requires the requester to be able to manage lower ranked members. Guest or\n Owner ranks cannot be assigned, and a requester cannot change their own\n rank.", "operationId": "Cloud_UpdateGroupMembership", "parameters": [ @@ -574,6 +583,7 @@ "tags": [ "Cloud" ], + "summary": "List Group Roles", "description": "List roles in a group.\n\n The permissions field for roles is viewable based on the requester's access\n and scopes.\n\n Permissions for the guest role are always visible - a scope is not needed.\n\n If the requester is a member of the group and has the `group:read` scope,\n permissions in their role are visible.\n\n If the requester is the owner of the group and has the `group:read` scope,\n permissions in all roles are visible.", "operationId": "Cloud_ListGroupRoles", "parameters": [ @@ -647,7 +657,8 @@ "tags": [ "Cloud" ], - "description": "Gets the group role.", + "summary": "Get Group Role", + "description": "Get the group role", "operationId": "Cloud_GetGroupRole", "parameters": [ { @@ -700,6 +711,7 @@ "tags": [ "Cloud" ], + "summary": "Get Group Shout", "description": "Gets the group shout.\n\n If a guest can view the group shout, this is always retrievable.\n\n If a guest cannot, a member who has the permissions to view the group\n shout, along with the `group:read` scope, will be able to read the group\n shout.", "operationId": "Cloud_GetGroupShout", "parameters": [ @@ -744,6 +756,7 @@ "tags": [ "Cloud" ], + "summary": "Get Universe", "description": "Gets the specified universe.", "operationId": "Cloud_GetUniverse", "parameters": [ @@ -786,6 +799,7 @@ "tags": [ "Cloud" ], + "summary": "Update Universe", "description": "Updates the specified universe.\n\n This method is guaranteed to return all updated fields.\n This method may additionally return the full resource.", "operationId": "Cloud_UpdateUniverse", "parameters": [ @@ -851,6 +865,7 @@ "tags": [ "Cloud" ], + "summary": "List Data Stores", "description": "Returns a list of data stores.", "operationId": "Cloud_ListDataStores", "parameters": [ @@ -934,6 +949,7 @@ "tags": [ "Cloud" ], + "summary": "List Data Store Entries", "description": "Returns a list of entries from a data store.\n\n Only the `path` and `id` fields are populated; use `GetDataStoreEntry`\n to retrieve other fields.\n\n Specify the wildcard scope (`-`) to list entries from all scopes.", "operationId": "Cloud_ListDataStoreEntries", "parameters": [ @@ -1037,6 +1053,7 @@ "tags": [ "Cloud" ], + "summary": "Create Data Store Entry", "description": "Creates an entry with the provided ID and value.\n\n Returns a 400 Bad Request if the entry exists.", "operationId": "Cloud_CreateDataStoreEntry", "parameters": [ @@ -1122,7 +1139,8 @@ "tags": [ "Cloud" ], - "description": "Gets the specified entry.\n\n To get the entry at a specific revision, add `@` to the end of\n the path.\n\n For example, to get `my-entry` at the revision ID\n `08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my-entry@08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`.\n\n If your entry ID contains one or more `@` characters, and you want to get\n the latest version rather than at any specific revision, append the special\n revision ID `@latest` to the end of the path. Otherwise, the segment of the\n entry ID after the last `@` will be interpreted as a revision ID.\n\n For example, to get the latest revision of `my-entry`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my@entry@latest`.", + "summary": "Get Data Store Entry", + "description": "Gets the specified entry.\n\n To get the entry at a specific revision, add `@` to the end of\n the path.\n\n For example, to get `my-entry` at the revision ID\n `08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my-entry@08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`.\n\n If your entry ID contains one or more `@` characters, and you want to get\n the latest version rather than at any specific revision, append the special\n revision ID `@latest` to the end of the path. Otherwise, the segment of the\n entry ID after the last `@` will be interpreted as a revision ID.\n\n For example, to get the latest revision of `my-entry`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my@entry@latest`.\n\n To get the entry that was current at a specific time, add\n `@latest:` to the end of the path, where `` is\n RFC-3339 formatted. The given timestamp must be after\n the Unix epoch (1/1/1970) and not more than ten minutes in the future.\n\n For example, to get the revision of `my-entry` that was current on\n 12/2/2024 at 06:00 UTC, use the path\n `/v2/universes/1234/data-stores/5678/entries/my-entry@latest:2024-12-02T06:00:00Z`.", "operationId": "Cloud_GetDataStoreEntry", "parameters": [ { @@ -1184,6 +1202,7 @@ "tags": [ "Cloud" ], + "summary": "Delete Data Store Entry", "description": "Marks the specified entry for deletion.\n\n Entries are not be deleted immediately; instead, the `state` field will\n be set to `DELETED`. Permanent deletion occurs after 30 days.\n\n On success, returns 200 OK. If the entry doesn't exist, returns\n 404 Not Found.", "operationId": "Cloud_DeleteDataStoreEntry", "parameters": [ @@ -1240,6 +1259,7 @@ "tags": [ "Cloud" ], + "summary": "Update Data Store Entry", "description": "Updates the value, attributes, and users of an entry.\n\n Updating specific revisions of the entry is **unsupported**. If you specify\n a revision ID in the path and `allow_missing` is `true`, the update request\n will instead create a new entry with the `@` suffix as part of\n the key.\n\n Partial update is **unsupported**. If attributes or users are not\n provided when updating the value, they will be cleared. Value must always\n be provided when updating an entry.", "operationId": "Cloud_UpdateDataStoreEntry", "parameters": [ @@ -1327,6 +1347,7 @@ "tags": [ "Cloud" ], + "summary": "Increment Data Store Entry", "description": "Increments the value of the specified entry. Both the existing value and\n the increment amount must be integers.\n\n If the entry doesn't exist, creates an entry with the specified value.\n\n Incrementing specific revisions of the entry is **unsupported**. If you\n specify a revision ID in the path, the increment request will create a new\n entry with the `@` suffix as part of the key.\n\n Known issue: the value may be incremented past the valid range of values.\n When this happens, the returned value will be clamped to the valid range,\n but the backend may persist the original value. This behavior is maintained\n for backwards compatibility reasons, but may change in a future version of\n this API.", "operationId": "Cloud_IncrementDataStoreEntry", "parameters": [ @@ -1402,6 +1423,7 @@ "tags": [ "Cloud" ], + "summary": "List Data Store Entry Revisions", "description": "List revisions of the data store entry.\n\n This method returns partial data store entries.\n\n In particular, only the `path`, `id`, `createTime`, `revisionCreateTime`,\n `revisionId`, `etag`, and `state` fields are populated. Both the `path` and\n `id` fields will have an `@` suffix.\n\n In order to get the full entry at a revision, you can use the provided\n `path` field with the `GetDataStoreEntry` method, i.e. `GET\n /v1/universes/1234/data-stores/5678/entries/my-entry@`.", "operationId": "Cloud_ListDataStoreEntryRevisions", "parameters": [ @@ -1503,6 +1525,7 @@ "tags": [ "Cloud" ], + "summary": "List Data Store Entries", "description": "Returns a list of entries from a data store.\n\n Only the `path` and `id` fields are populated; use `GetDataStoreEntry`\n to retrieve other fields.\n\n Specify the wildcard scope (`-`) to list entries from all scopes.", "operationId": "Cloud_ListDataStoreEntries", "parameters": [ @@ -1615,6 +1638,7 @@ "tags": [ "Cloud" ], + "summary": "Create Data Store Entry", "description": "Creates an entry with the provided ID and value.\n\n Returns a 400 Bad Request if the entry exists.", "operationId": "Cloud_CreateDataStoreEntry", "parameters": [ @@ -1709,7 +1733,8 @@ "tags": [ "Cloud" ], - "description": "Gets the specified entry.\n\n To get the entry at a specific revision, add `@` to the end of\n the path.\n\n For example, to get `my-entry` at the revision ID\n `08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my-entry@08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`.\n\n If your entry ID contains one or more `@` characters, and you want to get\n the latest version rather than at any specific revision, append the special\n revision ID `@latest` to the end of the path. Otherwise, the segment of the\n entry ID after the last `@` will be interpreted as a revision ID.\n\n For example, to get the latest revision of `my-entry`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my@entry@latest`.", + "summary": "Get Data Store Entry", + "description": "Gets the specified entry.\n\n To get the entry at a specific revision, add `@` to the end of\n the path.\n\n For example, to get `my-entry` at the revision ID\n `08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my-entry@08DC3D3F43F9FCC1.0000000001.08DC3D3F43F9FCC1.01`.\n\n If your entry ID contains one or more `@` characters, and you want to get\n the latest version rather than at any specific revision, append the special\n revision ID `@latest` to the end of the path. Otherwise, the segment of the\n entry ID after the last `@` will be interpreted as a revision ID.\n\n For example, to get the latest revision of `my-entry`, use the path\n `/v2/universes/1234/data-stores/5678/entries/my@entry@latest`.\n\n To get the entry that was current at a specific time, add\n `@latest:` to the end of the path, where `` is\n RFC-3339 formatted. The given timestamp must be after\n the Unix epoch (1/1/1970) and not more than ten minutes in the future.\n\n For example, to get the revision of `my-entry` that was current on\n 12/2/2024 at 06:00 UTC, use the path\n `/v2/universes/1234/data-stores/5678/entries/my-entry@latest:2024-12-02T06:00:00Z`.", "operationId": "Cloud_GetDataStoreEntry", "parameters": [ { @@ -1780,6 +1805,7 @@ "tags": [ "Cloud" ], + "summary": "Delete Data Store Entry", "description": "Marks the specified entry for deletion.\n\n Entries are not be deleted immediately; instead, the `state` field will\n be set to `DELETED`. Permanent deletion occurs after 30 days.\n\n On success, returns 200 OK. If the entry doesn't exist, returns\n 404 Not Found.", "operationId": "Cloud_DeleteDataStoreEntry", "parameters": [ @@ -1845,6 +1871,7 @@ "tags": [ "Cloud" ], + "summary": "Update Data Store Entry", "description": "Updates the value, attributes, and users of an entry.\n\n Updating specific revisions of the entry is **unsupported**. If you specify\n a revision ID in the path and `allow_missing` is `true`, the update request\n will instead create a new entry with the `@` suffix as part of\n the key.\n\n Partial update is **unsupported**. If attributes or users are not\n provided when updating the value, they will be cleared. Value must always\n be provided when updating an entry.", "operationId": "Cloud_UpdateDataStoreEntry", "parameters": [ @@ -1941,6 +1968,7 @@ "tags": [ "Cloud" ], + "summary": "Increment Data Store Entry", "description": "Increments the value of the specified entry. Both the existing value and\n the increment amount must be integers.\n\n If the entry doesn't exist, creates an entry with the specified value.\n\n Incrementing specific revisions of the entry is **unsupported**. If you\n specify a revision ID in the path, the increment request will create a new\n entry with the `@` suffix as part of the key.\n\n Known issue: the value may be incremented past the valid range of values.\n When this happens, the returned value will be clamped to the valid range,\n but the backend may persist the original value. This behavior is maintained\n for backwards compatibility reasons, but may change in a future version of\n this API.", "operationId": "Cloud_IncrementDataStoreEntry", "parameters": [ @@ -2025,6 +2053,7 @@ "tags": [ "Cloud" ], + "summary": "List Data Store Entry Revisions", "description": "List revisions of the data store entry.\n\n This method returns partial data store entries.\n\n In particular, only the `path`, `id`, `createTime`, `revisionCreateTime`,\n `revisionId`, `etag`, and `state` fields are populated. Both the `path` and\n `id` fields will have an `@` suffix.\n\n In order to get the full entry at a revision, you can use the provided\n `path` field with the `GetDataStoreEntry` method, i.e. `GET\n /v1/universes/1234/data-stores/5678/entries/my-entry@`.", "operationId": "Cloud_ListDataStoreEntryRevisions", "parameters": [ @@ -2135,6 +2164,7 @@ "tags": [ "Cloud" ], + "summary": "Snapshot Data Stores", "description": "Takes a new snapshot of the data stores in an experience.\n\n After a snapshot, the next write to every key in the experience will\n create a versioned backup of the previous data, regardless of the time of\n the last write.\n\n In effect, all data current at the time of the snapshot is guaranteed to be\n available as a versioned backup for at least 30 days.\n\n Snapshots can be taken once per UTC day, per experience. If the latest\n snapshot was taken within the same UTC day, this operation is a no-op and\n the time of the latest snapshot will be returned.\n\n For more information on using snapshots, see the [Data\n Stores](https://create.roblox.com/docs/cloud-services/data-stores#snapshots)\n Engine guide.", "operationId": "Cloud_SnapshotDataStores", "parameters": [ @@ -2191,6 +2221,7 @@ "tags": [ "Cloud" ], + "summary": "Create Memory Store Queue Item", "description": "Creates a new queue item.\n\n If `ttl` is set, the item will automatically be removed from the queue\n after the time interval specified.\n\n If a numerical `priority` is set, the item will be inserted into the queue\n based on the priority value. The higher the value, the closer to the front\n of the queue the item will be. If priority values are the same then the\n item will be inserted after existing values with the same priority.", "operationId": "Cloud_CreateMemoryStoreQueueItem", "parameters": [ @@ -2256,6 +2287,7 @@ "tags": [ "Cloud" ], + "summary": "Discard Memory Store Queue Items", "description": "Discards read items from the front of the queue.\n\n Takes a `readId` from a previous `Read` operation.", "operationId": "Cloud_DiscardMemoryStoreQueueItems", "parameters": [ @@ -2315,6 +2347,7 @@ "tags": [ "Cloud" ], + "summary": "Read Memory Store Queue Items", "description": "Returns the specified number of items at the front of the queue.", "operationId": "Cloud_ReadMemoryStoreQueueItems", "parameters": [ @@ -2408,6 +2441,7 @@ "tags": [ "Cloud" ], + "summary": "List Memory Store Sorted Map Items", "description": "Gets and returns items in the map with a given order and filter.", "operationId": "Cloud_ListMemoryStoreSortedMapItems", "parameters": [ @@ -2506,6 +2540,7 @@ "tags": [ "Cloud" ], + "summary": "Create Memory Store Sorted Map Item", "description": "Creates the specified map item if it doesn't exist.", "operationId": "Cloud_CreateMemoryStoreSortedMapItem", "parameters": [ @@ -2592,6 +2627,7 @@ "tags": [ "Cloud" ], + "summary": "Get Memory Store Sorted Map Item", "description": "Gets and returns the value of the given key in the map.", "operationId": "Cloud_GetMemoryStoreSortedMapItem", "parameters": [ @@ -2654,6 +2690,7 @@ "tags": [ "Cloud" ], + "summary": "Delete Memory Store Sorted Map Item", "description": "Deletes the specified item from the map.", "operationId": "Cloud_DeleteMemoryStoreSortedMapItem", "parameters": [ @@ -2710,6 +2747,7 @@ "tags": [ "Cloud" ], + "summary": "Update Memory Store Sorted Map Item", "description": "Updates the specified map item.", "operationId": "Cloud_UpdateMemoryStoreSortedMapItem", "parameters": [ @@ -2797,6 +2835,7 @@ "tags": [ "Cloud" ], + "summary": "Flush Memory Store", "description": "Asynchronously flush all data structures in the universe.", "operationId": "Cloud_FlushMemoryStore", "parameters": [ @@ -2869,6 +2908,7 @@ "tags": [ "Cloud" ], + "summary": "List Ordered Data Store Entries", "description": "Returns a list of entries from an ordered data store.", "operationId": "Cloud_ListOrderedDataStoreEntries", "parameters": [ @@ -2976,6 +3016,7 @@ "tags": [ "Cloud" ], + "summary": "Create Ordered Data Store Entry", "description": "Creates an entry with the provided ID and value.\n\n Returns a 400 Bad Request if the entry exists.", "operationId": "Cloud_CreateOrderedDataStoreEntry", "parameters": [ @@ -3070,6 +3111,7 @@ "tags": [ "Cloud" ], + "summary": "Get Ordered Data Store Entry", "description": "Gets the specified entry.", "operationId": "Cloud_GetOrderedDataStoreEntry", "parameters": [ @@ -3141,6 +3183,7 @@ "tags": [ "Cloud" ], + "summary": "Delete Ordered Data Store Entry", "description": "Deletes the specified entry.\n\n On success, returns 200 OK. If the entry doesn't exist, returns\n 404 Not Found.", "operationId": "Cloud_DeleteOrderedDataStoreEntry", "parameters": [ @@ -3206,6 +3249,7 @@ "tags": [ "Cloud" ], + "summary": "Update Ordered Data Store Entry", "description": "Updates the value of an entry.", "operationId": "Cloud_UpdateOrderedDataStoreEntry", "parameters": [ @@ -3302,6 +3346,7 @@ "tags": [ "Cloud" ], + "summary": "Increment Ordered Data Store Entry", "description": "Increments the value of the specified entry. Both the existing value and\n the increment amount must be integers.\n\n If the entry doesn't exist, creates an entry with the specified value.\n\n Known issue: the value may be incremented past the valid range of values.\n When this happens, the returned value will be clamped to the valid range,\n but the backend may persist the original value. This behavior is maintained\n for backwards compatibility reasons, but may change in a future version of\n this API.", "operationId": "Cloud_IncrementOrderedDataStoreEntry", "parameters": [ @@ -3385,6 +3430,7 @@ "tags": [ "Cloud" ], + "summary": "Get Place", "description": "Gets the specified place.", "operationId": "Cloud_GetPlace", "parameters": [ @@ -3436,6 +3482,7 @@ "tags": [ "Cloud" ], + "summary": "Update Place", "description": "Updates the specified place.", "operationId": "Cloud_UpdatePlace", "parameters": [ @@ -3510,6 +3557,7 @@ "tags": [ "Cloud" ], + "summary": "Get Instance", "description": "Gets an instance and its property data.\n\n The maximum supported response data size is 500,000 bytes. If this limit is\n exceeded, the returned `Operation` will be completed with an error result\n that has an error code of `422`.", "operationId": "Cloud_GetInstance", "parameters": [ @@ -3588,6 +3636,7 @@ "tags": [ "Cloud" ], + "summary": "Update Instance", "description": "Updates an instance's property data.\n\n When updating a `Script` instance's source property, the maximum supported\n property size is 200,000 bytes after UTF-8 encoding.", "operationId": "Cloud_UpdateInstance", "parameters": [ @@ -3687,6 +3736,7 @@ "tags": [ "Cloud" ], + "summary": "List Instance Children", "description": "Lists an instance's children.\n\n The maximum supported response data size is 500,000 bytes. If this limit is\n exceeded, the returned `Operation` will be completed with an error result\n that has an error code of `422`.", "operationId": "Cloud_ListInstanceChildren", "parameters": [ @@ -3796,6 +3846,7 @@ "tags": [ "Cloud" ], + "summary": "Create Luau Execution Session Task", "description": "Creates a task but does not wait for the task to complete.\n\n To check whether a task has\n completed, call the `GetLuauExecutionSessionTask` method and inspect the\n `state` field of the returned resource.\n\n Quotas:\n * 5 calls per minute per API key owner\n * 45 calls per minute per IP address", "operationId": "Cloud_CreateLuauExecutionSessionTask", "parameters": [ @@ -3861,6 +3912,7 @@ "tags": [ "Cloud" ], + "summary": "List Luau Execution Session Task Logs", "description": "Lists log chunks generated by a `LuauExecutionSessionTask`.\n\n Quotas:\n * 45 calls per minute per API key owner or IP address", "operationId": "Cloud_ListLuauExecutionSessionTaskLogs", "parameters": [ @@ -3955,6 +4007,7 @@ "tags": [ "Cloud" ], + "summary": "Get Luau Execution Session Task", "description": "Gets information about a task.\n\n Quotas:\n * 45 calls per minute per API key owner or IP address", "operationId": "Cloud_GetLuauExecutionSessionTask", "parameters": [ @@ -4049,6 +4102,7 @@ "tags": [ "Cloud" ], + "summary": "List Luau Execution Session Task Logs", "description": "Lists log chunks generated by a `LuauExecutionSessionTask`.\n\n Quotas:\n * 45 calls per minute per API key owner or IP address", "operationId": "Cloud_ListLuauExecutionSessionTaskLogs", "parameters": [ @@ -4152,6 +4206,7 @@ "tags": [ "Cloud" ], + "summary": "List User Restrictions", "description": "List user restrictions for users that have ever been banned in either a\n universe or a specific place.", "operationId": "Cloud_ListUserRestrictions", "parameters": [ @@ -4244,6 +4299,7 @@ "tags": [ "Cloud" ], + "summary": "Get User Restriction", "description": "Get the user restriction.", "operationId": "Cloud_GetUserRestriction", "parameters": [ @@ -4306,6 +4362,7 @@ "tags": [ "Cloud" ], + "summary": "Update User Restriction", "description": "Update the user restriction.", "operationId": "Cloud_UpdateUserRestriction", "parameters": [ @@ -4412,6 +4469,7 @@ "tags": [ "Cloud" ], + "summary": "Create Luau Execution Session Task", "description": "Creates a task but does not wait for the task to complete.\n\n To check whether a task has\n completed, call the `GetLuauExecutionSessionTask` method and inspect the\n `state` field of the returned resource.\n\n Quotas:\n * 5 calls per minute per API key owner\n * 45 calls per minute per IP address", "operationId": "Cloud_CreateLuauExecutionSessionTask", "parameters": [ @@ -4486,6 +4544,7 @@ "tags": [ "Cloud" ], + "summary": "List Luau Execution Session Task Logs", "description": "Lists log chunks generated by a `LuauExecutionSessionTask`.\n\n Quotas:\n * 45 calls per minute per API key owner or IP address", "operationId": "Cloud_ListLuauExecutionSessionTaskLogs", "parameters": [ @@ -4589,6 +4648,7 @@ "tags": [ "Cloud" ], + "summary": "Get Luau Execution Session Task", "description": "Gets information about a task.\n\n Quotas:\n * 45 calls per minute per API key owner or IP address", "operationId": "Cloud_GetLuauExecutionSessionTask", "parameters": [ @@ -4692,6 +4752,7 @@ "tags": [ "Cloud" ], + "summary": "List Luau Execution Session Task Logs", "description": "Lists log chunks generated by a `LuauExecutionSessionTask`.\n\n Quotas:\n * 45 calls per minute per API key owner or IP address", "operationId": "Cloud_ListLuauExecutionSessionTaskLogs", "parameters": [ @@ -4804,6 +4865,7 @@ "tags": [ "Cloud" ], + "summary": "Get Subscription", "description": "Get the subscription.\n\n The `universe.subscription-product.subscription:read` scope only allows\n you to get your own subscriptions—or rather, the subscription ID must\n match the user ID that makes the request—so its best use case is with\n OAuth 2.0 authentication rather than an API key. To read all\n subscriptions for a universe, use the `universe:write` scope.", "operationId": "Cloud_GetSubscription", "parameters": [ @@ -4889,6 +4951,7 @@ "tags": [ "Cloud" ], + "summary": "List User Restrictions", "description": "List user restrictions for users that have ever been banned in either a\n universe or a specific place.", "operationId": "Cloud_ListUserRestrictions", "parameters": [ @@ -4972,6 +5035,7 @@ "tags": [ "Cloud" ], + "summary": "Get User Restriction", "description": "Get the user restriction.", "operationId": "Cloud_GetUserRestriction", "parameters": [ @@ -5025,6 +5089,7 @@ "tags": [ "Cloud" ], + "summary": "Update User Restriction", "description": "Update the user restriction.", "operationId": "Cloud_UpdateUserRestriction", "parameters": [ @@ -5122,6 +5187,7 @@ "tags": [ "Cloud" ], + "summary": "List User Restriction Logs", "description": "List changes to UserRestriction resources within a given universe.\n This includes both universe-level and place-level restrictions.\n\n For universe-level restriction logs, the `place` field will be empty.", "operationId": "Cloud_ListUserRestrictionLogs", "parameters": [ @@ -5205,6 +5271,7 @@ "tags": [ "Cloud" ], + "summary": "Restart Universe Servers", "description": "Restarts all active servers for a specific universe if and only if a new\n version of the experience has been published. Used for releasing experience\n updates.", "operationId": "Cloud_RestartUniverseServers", "parameters": [ @@ -5261,6 +5328,7 @@ "tags": [ "Cloud" ], + "summary": "Get User", "description": "Gets a user's basic and advanced information.\n\n To access a user's public information, no additional scopes are required.\n\n To access a user's verification status, you need the following scopes:\n * user.advanced.read\n\n To access a user's social account information, you need the following\n scopes:\n * user.social.read", "operationId": "Cloud_GetUser", "parameters": [ @@ -5305,6 +5373,7 @@ "tags": [ "Cloud" ], + "summary": "List Inventory Items", "description": "List the inventory items in a user's inventory.\n\n The inventory items returned depend on the target user’s choice under\n **Settings > Privacy > Who can see my inventory?**:\n * If the user granted inventory visibility to \"Everyone,\" then any API key\n or OAuth2 token can be used to view the target’s inventory, no matter what\n scopes it has or who created it.\n * If the user has not granted inventory visibility to \"Everyone\":\n * Their inventory can still be viewed with an API key created by the\n target user with **Inventory: Read** permission.\n * Their inventory can still be viewed with an OAuth2 token if the target\n user authorizes an app requesting permissions for the\n `user.inventory-item:read` scope.", "operationId": "Cloud_ListInventoryItems", "parameters": [ @@ -5386,6 +5455,7 @@ "tags": [ "Cloud" ], + "summary": "Create User Notification", "description": "Sends a notification to a user.", "operationId": "Cloud_CreateUserNotification", "parameters": [ @@ -5442,6 +5512,7 @@ "tags": [ "Cloud" ], + "summary": "Generate User Thumbnail", "description": "Generates and returns the URL for the user's avatar thumbnail.", "operationId": "Cloud_GenerateUserThumbnail", "parameters": [ @@ -7099,7 +7170,7 @@ "description": "Present when the task execution succeeds. Contains the output of the\n execution." } }, - "description": "A `LuauExecutionSessionTask` (\"task\" for short) executes a given Luau script\n in the context of a specific version of a place.\n\n In a task, physics simulation does not run. Server and local scripts within\n the place also do not automatically run.\n\n The script may access and update the data model of the place, including\n invoking any module scripts. However, data model changes are local to the\n task and cannot be persisted.\n\n The script can also invoke engine APIs that read and/or modify data stored in\n the cloud, such as those for DataStores. Exercise caution when using these\n APIs.\n\n Scripts can be up to 4 MB in size and run for up to 30 seconds. Scripts that\n run for longer than 30 seconds terminate with an error.\n\n Scripts are executed as-is and do not need to be wrapped in a function.\n\n Scripts can return values (using the Luau `return` keyword). Return values\n are serialized to JSON and can be retrieved with the `Get\n LuauExecutionSessionTask` API after the task completes. The total size of the\n return values after JSON serialization must not exceed 4 MB. If the limit is\n exceeded, the task terminates with an error.\n\n If the script raises an unhandled error, the task terminates. The error\n information can be retrieved with the `GetLuauExecutionSessionTask` API.\n\n Standard output (generated by the Luau `print` function) can be retrieved\n with the `ListLuauExecutionSessionTaskLogs` method after the task completes.\n A maximum of 450 KB of logs are retained. If the amount of logs exceeds the\n limit, older logs are discarded.\n\n Information about a task is retained for 24 hours after task completion.\n\n At most ten incomplete tasks are allowed per place. Attempting to create more\n tasks while the first ten are incomplete results in a HTTP 429 response.", + "description": "A `LuauExecutionSessionTask` (\"task\" for short) executes a given Luau script\n in the context of a specific version of a place.\n\n In a task, physics simulation does not run. Server and local scripts within\n the place also do not automatically run.\n\n The script may access and update the data model of the place, including\n invoking any module scripts. However, data model changes are local to the\n task and cannot be persisted.\n\n The script can also invoke engine APIs that read and/or modify data stored in\n the cloud, such as those for DataStores. Exercise caution when using such\n APIs.\n\n Scripts can be up to 4 MB in size and run for up to 30 seconds. Scripts that\n run for longer than 30 seconds terminate with an error.\n\n Scripts are executed as-is and do not need to be wrapped in a function.\n\n Scripts can return values (using the Luau `return` keyword). Return values\n are serialized to JSON and can be retrieved with the `Get\n LuauExecutionSessionTask` API after the task completes. The total size of the\n return values after JSON serialization must not exceed 4 MB. If the limit is\n exceeded, the task terminates with an error.\n\n If the script raises an unhandled error, the task terminates. The error\n information can be retrieved with the `GetLuauExecutionSessionTask` API.\n\n Standard output (generated by the Luau `print` function) can be retrieved\n with the `ListLuauExecutionSessionTaskLogs` method after the task completes.\n A maximum of 450 KB of logs are retained. If the amount of logs exceeds the\n limit, older logs are discarded.\n\n Information about a task is retained for 24 hours after task completion.\n\n At most ten incomplete tasks are allowed per place. Attempting to create more\n tasks while the first ten are incomplete results in a HTTP 429 response.", "x-resource": true, "x-oneOf": { "result": [ diff --git a/content/en-us/reference/engine/classes/DataStore.yaml b/content/en-us/reference/engine/classes/DataStore.yaml index 04b731bb8..6dc60dd44 100644 --- a/content/en-us/reference/engine/classes/DataStore.yaml +++ b/content/en-us/reference/engine/classes/DataStore.yaml @@ -51,6 +51,45 @@ methods: thread_safety: Unsafe capabilities: [] writeCapabilities: [] + - name: DataStore:GetVersionAtTimeAsync + summary: | + Retrieves the key version that was current at a given time. + description: | + This function retrieves the key version that was current at a given time + as well as a `Class.DataStoreKeyInfo` instance. + code_samples: + - retrieving-datastore-versions-by-time + parameters: + - name: key + type: string + default: + summary: | + Key name for which the version info is requested. If + `Class.DataStoreOptions.AllScopes` was set to true when accessing the + data store through `Class.DataStoreService:GetDataStore()`, this key + name must be prepended with the original scope as in "scope/key". + - name: timestamp + type: int64 + default: + summary: | + Unix timestamp in milliseconds for which the requested version was + current. Must be greater than zero. Must not be more then ten minutes + in the future. + returns: + - type: Tuple + summary: | + The value of the key that was current at the specified time and a + `Class.DataStoreKeyInfo` instance that includes the version number, + date and time the version was created, and functions to retrieve + `Class.Player.UserId|UserIds` and metadata. `nil` if no available + version was current at the requested time. + tags: + - Yields + deprecation_message: '' + security: None + thread_safety: Unsafe + capabilities: [] + writeCapabilities: [] - name: DataStore:ListKeysAsync summary: | Returns a `Class.DataStoreKeyPages` object for enumerating through keys of diff --git a/content/en-us/workspace/camera.md b/content/en-us/workspace/camera.md index 2903f13bb..c5616d4e8 100644 --- a/content/en-us/workspace/camera.md +++ b/content/en-us/workspace/camera.md @@ -9,11 +9,11 @@ Roblox's built-in camera powers a default **third person** mode and an optional You can configure common camera settings directly within Studio's `Class.StarterPlayer` object. These settings include [zoom distance](#zoom-distance) and various [camera](#camera-mode), [occlusion](#occlusion-mode), and [movement](#movement-mode) modes. -1. In the [Explorer](../studio/explorer.md) window, select the **StarterPlayer** object. +1. In the **Explorer** window, select the **StarterPlayer** object. StarterPlayer in Explorer -1. In the [Properties](../studio/properties.md) window, scroll down to locate the **Camera** section. You can configure the following properties directly or through a script. +1. In the **Properties** window, scroll down to locate the **Camera** section. You can configure the following properties directly or through a script. Camera properties on StarterPlayer in Properties Window diff --git a/tools/checks/utils/allowedHttpLinks.txt b/tools/checks/utils/allowedHttpLinks.txt index 2924d0932..9a316e1c4 100644 --- a/tools/checks/utils/allowedHttpLinks.txt +++ b/tools/checks/utils/allowedHttpLinks.txt @@ -78,7 +78,7 @@ https://drobotscompany.com/technology-and-coding-stem-camps-kids-summer-camps-fo https://dushanbe.alg.academy/ https://edmo.org/ https://empirecode.co/ -https://era-it-center.ru/roblox-studio +https://era-it-center.ru/roblox-studio/ https://en.wikipedia.org/wiki/American_Craftsman https://en.wikipedia.org/wiki/B%C3%A9zier_curve https://en.wikipedia.org/wiki/Creative_Commons