15 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

VRService

Inherits from: Instance → Object

VRService is responsible for handling interactions between Roblox and Virtual Reality (VR). Its methods, properties, and events help you provide the best experience for end users seeking to experience Roblox on VR devices.

See VR Guidelines for more information on publishing an experience for VR devices.

Inherits from: Instance

Memory category: Instances

Tags: NotCreatable, Service

Code samples: View on Creator Hub (VRService).

Properties

NameType / ReturnsDescription
VRService.AutomaticScalingVRScalingAutomatically adjusts scaling in VR to align the player with their avatar.
VRService.AvatarGesturesbooleanWhen true, a VR player will be able to animate their hands and head using their controllers and headset.
VRService.ControllerModelsVRControllerModelModeControls whether and how the player's VR hand controllers are rendered in the experience.
VRService.FadeOutViewOnCollisionbooleanWhen true, a VR player's view will fade to black when their head collides with an object.
VRService.GuiInputUserCFrameUserCFrameDescribes what UserCFrame is responsible for input in VR.
VRService.LaserPointerVRLaserPointerModeControls whether and how the VR laser pointer used to interact with the user interface is displayed.
VRService.ThirdPersonFollowCamEnabledbooleanIndicates whether the third-person follow camera is enabled for the VR user.
VRService.VREnabledbooleanDescribes whether the user is using a virtual reality device.

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring

VRService.AutomaticScaling

When set to VRScaling.World, Camera.HeadScale adjusts so that the scale of the world is seen from the avatar's perspective. A player with a small avatar will perceive the objects around them as larger than a player with a large avatar will.

FieldValue
typeVRScaling
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryBehavior
serialization{"can_load":true,"can_save":true}
capabilities["Input"]

VRService.AvatarGestures

When set to true, a VR player will be able to animate their hands and head using their controllers and headset. Set this to false for experiences where VR hand and head tracking conflicts with custom game mechanics, such as bespoke avatar rigs or weapon systems incompatible with IK-driven gestures.

This property must be set on the server.

FieldValue
typeboolean
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryBehavior
serialization{"can_load":true,"can_save":true}
capabilities["Input"]

VRService.ControllerModels

Controls how the models representing the player's VR hand controllers are displayed (VRControllerModelMode). When set to Transparent, the controller models are shown with transparency; when set to Disabled, the controller models are not rendered.

Defaults to Transparent.

FieldValue
typeVRControllerModelMode
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryBehavior
serialization{"can_load":true,"can_save":true}
capabilities["Input"]

VRService.FadeOutViewOnCollision

When true, a VR player's view fades to black when their head collides with an object. This property prevents players from being able to see through walls while in VR. The default value is true.

FieldValue
typeboolean
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryBehavior
serialization{"can_load":true,"can_save":true}
capabilities["Input"]

VRService.GuiInputUserCFrame

This property describes what UserCFrame is responsible for input in VR. For instance, if a VR headset is responsible, the value of this property will be UserCFrame.Head.

To check if Roblox detects any VR devices, which would be responsible for input in VR, you can check the VREnabled property.

FieldValue
typeUserCFrame
tags["NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryBehavior
serialization{"can_load":false,"can_save":false}
capabilities["Input"]

Code samples: View on Creator Hub (VRService-GuiInputUserCFrame).

VRService.LaserPointer

Controls the mode of the laser pointer that a VR player uses to point at and interact with the user interface (VRLaserPointerMode). Set it to Disabled to hide the laser pointer, Pointer to show a single pointer, or DualPointer to show a pointer for each hand.

Defaults to Pointer.

FieldValue
typeVRLaserPointerMode
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryBehavior
serialization{"can_load":true,"can_save":true}
capabilities["Input"]

VRService.ThirdPersonFollowCamEnabled

Read-only. Indicates whether the third-person follow camera is enabled for the VR user. Its value mirrors the user's VR comfort setting and updates automatically whenever the user changes that setting, firing a changed signal so that scripts can respond. It cannot be set from a script.

FieldValue
typeboolean
tags["ReadOnly","NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryData
serialization{"can_load":false,"can_save":false}
capabilities["Input"]

VRService.VREnabled

This property describes whether the user is using a virtual reality (VR) device.

If a VR device is enabled, you can interact with its location and movement through methods such as UserInputService:GetUserCFrame(). You can also react to VR device movement using the UserInputService.UserCFrameChanged event.

local UserInputService = game:GetService("UserInputService")

local isUsingVR = UserInputService.VREnabled
if isUsingVR then
	print("User is using a VR headset!")
else
	print("User is not using a VR headset!")
end

This property can only be used in a LocalScript.

See Also

FieldValue
typeboolean
tags["ReadOnly","NotReplicated"]
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryData
serialization{"can_load":false,"can_save":false}
capabilities["Input"]

Code samples: View on Creator Hub (UserInputService-UserCFrameChanged).

Methods

NameType / ReturnsDescription
VRService:GetTouchpadModeVRTouchpadModeReturns the VRTouchpadMode indicating the mode of a specified VRTouchpad.
VRService:GetUserCFrameCFrameReturns a CFrame describing the position & orientation of a specified virtual reality device as an offset from a point in real world space.
VRService:GetUserCFrameEnabledbooleanReturns true if the specified UserCFrame is available to be listened to.
VRService:RecenterUserHeadCFrame()Re-centers the CFrame to the current location of the VR headset being worn by the user.
VRService:RequestNavigation()Requests navigation to the specified CFrame using the specified UserCFrame as the origin for the visualizer parabola.
VRService:SetTouchpadMode()Sets the mode of the specified VRTouchpad to the specified VRTouchpadMode.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

VRService:GetTouchpadMode

This method returns the VRTouchpadMode indicating the mode of a specified VRTouchpad. The returned mode indicates how the user interacts with their touchpad to play the game.

This can also be used alongside the several UserInputService VR methods and events.

This method will only work when used in a LocalScript.

Parameters

NameTypeDefaultDescription
padVRTouchpadThe specified VRTouchpad.

Returns

TypeDescription
VRTouchpadModeThe mode of the specified VRTouchpad.
FieldValue
securityNone
thread safetyUnsafe
capabilities["Input"]

Code samples: View on Creator Hub (VRService-GetTouchpadMode).

VRService:GetUserCFrame

This method returns a CFrame describing the position and orientation of a specified virtual reality (VR) device as an offset from a point in real world space. This method should be used when implementing VR compatibility into a game to obtain and track the movement of a connected VR device.

By using the method, developers can implement features such as re-positioning the user's in-game character corresponding to the location of a connected VR device. This can be done by changing the CFrame of the user's in-game character to match the CFrame of the specified VR device using the UserCFrame enum and CFrame value arguments passed by the event.

VRService also provides a UserCFrameChanged event that automatically fires when the CFrame of connected VR device changes, so long it is used in a LocalScript.

This method will only work when used in a LocalScript.

Parameters

NameTypeDefaultDescription
typeUserCFrameThe specified UserCFrame.

Returns

TypeDescription
CFrameA CFrame describing the position and orientation of the specified VR device as an offset from a point in real-world space.
FieldValue
securityNone
thread safetyUnsafe
capabilities["Input"]

Code samples: View on Creator Hub (VRService-GetUserCFrame).

VRService:GetUserCFrameEnabled

This method returns true if the specified UserCFrame virtual reality device (VR) is available to be listened to. It can be used to determine whether a specified VR device, such as UserCFrame.Head, is connected to the user's game.

This can also be used alongside the several UserInputService VR methods and events.

This method will only work when used in a LocalScript.

Parameters

NameTypeDefaultDescription
typeUserCFrameThe specified type of VR device.

Returns

TypeDescription
booleanA boolean indicating whether the specified VR device is enabled (true) or disabled (false).
FieldValue
securityNone
thread safetyUnsafe
capabilities["Input"]

Code samples: View on Creator Hub (VRService-GetUserCFrameEnabled).

VRService:RecenterUserHeadCFrame

This method re-centers the CFrame of the user's head to the current location of the VR headset being worn by the user. It can be used to ensure that the user's in-game head is positioned according to the location of the user's VR headset.

This behaves identically to UserInputService:RecenterUserHeadCFrame().

This method will only work when used in a LocalScript.

Returns

TypeDescription
()
FieldValue
securityNone
thread safetyUnsafe
capabilities["Input"]

Code samples: View on Creator Hub (VRService-RecenterUserHeadCFrame).

VRService:RequestNavigation

This method requests navigation to the specified CFrame using the specified UserCFrame as the origin for the visualizer parabola. It can be used to incorporate virtual reality (VR) into your game by providing a means to visualize a navigation path from the user's VR device to a destination.

VRService has a similar event, NavigationRequested, used to detect such requests. This can also be used alongside the several UserInputService VR methods and events.

This method will only work when used in a LocalScript.

Parameters

NameTypeDefaultDescription
cframeCFrameThe specified CFrame coordinates.
inputUserCFrameUserCFrameThe VR device for which the navigation is requested.

Returns

TypeDescription
()
FieldValue
securityNone
thread safetyUnsafe
capabilities["Input"]

Code samples: View on Creator Hub (VRService-RequestNavigation).

VRService:SetTouchpadMode

This method sets the mode of the specified VRTouchpad to the specified VRTouchpadMode. It can be used to change the user's virtual reality (VR) touchpad mode so that the user interacts with the game differently using the touchpad.

This can also be used alongside the several UserInputService VR methods and events.

This method will only work when used in a LocalScript.

Parameters

NameTypeDefaultDescription
padVRTouchpadThe specified VRTouchpad you want to set the mode of.
modeVRTouchpadModeThe mode you want to set the specified VRTouchpad to.

Returns

TypeDescription
()
FieldValue
securityNone
thread safetyUnsafe
capabilities["Input"]

Code samples: View on Creator Hub (VRService-SetTouchpadMode).

Events

NameType / ReturnsDescription
VRService.NavigationRequestedFired when navigation is requested from VRService.
VRService.TouchpadModeChangedFires if the VRTouchpadMode of a VRTouchpad is changed.
VRService.UserCFrameChangedFires when a UserCFrame is changed.
VRService.UserCFrameEnabledFires when a UserCFrame is enabled or disabled.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.

VRService.NavigationRequested

This event fires when navigation is requested from VRService for a specified UserCFrame VR device. It fires with a CFrame coordinate and the specified UserCFrame indicating the device requesting the navigation.

This event can be used alongside UserInputService service events and methods.

Since this event fires locally, it can only be used in a LocalScript.

Parameters

NameTypeDefaultDescription
cframeCFrameThe requested CFrame coordinates.
inputUserCFrameUserCFrameIndicates the VR device for which navigation is requested.
FieldValue
securityNone
capabilities["Input"]

Code samples: View on Creator Hub (VRService-NavigationRequested).

VRService.TouchpadModeChanged

This event fires if the VRTouchpadMode of a VRTouchpad is changed. You can use this event to track the states of VR touchpads connected via the user's client.

This event can be used alongside UserInputService service events and methods.

Since this event fires locally, it can only be used in a LocalScript.

Parameters

NameTypeDefaultDescription
padVRTouchpadThe touchpad that changed mode.
modeVRTouchpadModeThe new mode.
FieldValue
securityNone
capabilities["Input"]

Code samples: View on Creator Hub (VRService-TouchpadModeChanged).

VRService.UserCFrameChanged

This event fires when a UserCFrame is changed, for instance when the user moves a connected VR device. It can be used alongside GetUserCFrame() to track the CFrame coordinates of a VR device, and when it changes/moves. It can also be used alongside UserInputService service events and methods.

Since this event fires locally, it can only be used in a LocalScript.

Parameters

NameTypeDefaultDescription
typeUserCFrameThe type of VR device that changed.
valueCFrameThe updated CFrame coordinates of the VR device after the change.
FieldValue
securityNone
capabilities["Input"]

Code samples: View on Creator Hub (VRService-UserCFrameChanged).

VRService.UserCFrameEnabled

This event fires when a UserCFrame is enabled or disabled. It can be used alongside GetUserCFrameEnabled() to track whether a specified UserCFrame is enabled, and when its state changes. It can also be used alongside UserInputService service events and methods.

Since this event fires locally, it can only be used in a LocalScript.

Parameters

NameTypeDefaultDescription
typeUserCFrameThe UserCFrame getting enabled or disabled.
enabledbooleanA boolean indicating whether the UserCFrame is enabled (true) or disabled (false).
FieldValue
securityNone
capabilities["Input"]

Code samples: View on Creator Hub (VRService-UserCFrameEnabled).