VRService 负责处理 Roblox 和虚拟现实(VR)之间的交互。它的方法、属性和事件帮助您为寻求在 VR 设备上体验 Roblox 的最佳体验的用户提供最佳体验。
有关 VR 设备发布体验的更多信息,请参阅VR 指南。
代码示例
local VRService = game:GetService("VRService")
local part = workspace.Part
local handOffset = VRService:GetUserCFrame(Enum.UserCFrame.LeftHand)
-- Account for headscale
handOffset = handOffset.Rotation + handOffset.Position * workspace.CurrentCamera.HeadScale
part.CFrame = workspace.CurrentCamera.CFrame * handOffset
概要
属性
自动调整 VR 的缩放,以将玩家与他们的虚拟形象对齐。
当真的时候,一个 VR 玩家可以使用他们的控制器和头戴设备来动画他们的手和头。
当真的时,一个 VR 玩家的视图会在他们头部与对象碰撞时变黑。
描述在 VR 中输入的内容由 Enum.UserCFrame 负责。
描述用户是否使用虚拟现实设备。
方法
返回 VRTouchpadMode,表示指定的 VRTouchpad 的模式。
返回一个 CFrame 描述具体虚拟现实设备位置和方向为实体世界空间的 Offset 。
如果指定的 Enum.UserCFrame 可用于听取,返回 true。
将CFrame重新中心到用户使用的虚拟实境头set的当前位置。
使用指定的 CFrame 导航到具有视觉器棱镜的原始位置。
将指定的 Enum.VRTouchpad 设置为指定的 Enum.VRTouchpadMode 。
活动
从 VRService 请求导航时发射。
如果 Enum.VRTouchpadMode 的 Enum.VRTouchpad 发生了改变,则触发。
当 Enum.UserCFrame 发生变更时,它会发生。
当 Enum.UserCFrame 启用或禁用时,发射。
属性
AutomaticScaling
当设置为 Enum.VRScaling.World 时, Camera.HeadScale 会调整,使世界的尺寸从角色的视角看到。小型虚拟形象的玩家会感知周围的对象是大于角色的大小。
ControllerModels
GuiInputUserCFrame
此属性描述 Enum.UserCFrame 在 VR 中的输入负责。例实例,如果 VR 头戴式耳机负责,该值将为 Enum.UserCFrame.Head 。
要检查 Roblox 是否检测到任何 VR 设备,这将对 VR 的输入负责,您可以检查 VREnabled 属性。
代码示例
local VRService = game:GetService("VRService")
if VRService.VREnabled then
print(VRService.GuiInputUserCFrame.Name)
else
print("No VR device detected!")
end
LaserPointer
ThirdPersonFollowCamEnabled
VREnabled
此属性描述用户是否使用虚拟现实(VR)设备。
如果启用了 VR 设备,您可以通过方法 such as UserInputService:GetUserCFrame() 与其位置和移动进行交互。您还可以使用 UserInputService.UserCFrameChanged 事件来反应 VR 设备的移动。
local UserInputService = game:GetService("UserInputService")local isUsingVR = UserInputService.VREnabledif isUsingVR thenprint("User is using a VR headset!")elseprint("User is not using a VR headset!")end
此属性仅在 LocalScript 中使用。
还见
代码示例
local VRService = game:GetService("VRService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local function TrackHead(inputType, value)
if inputType == Enum.UserCFrame.Head then
head.CFrame = value
end
end
if VRService.VREnabled then
-- Set the initial CFrame
head.CFrame = VRService:GetUserCFrame(Enum.UserCFrame.Head)
-- Track VR headset movement and mirror for character's head
VRService.UserCFrameChanged:Connect(TrackHead)
end
方法
GetTouchpadMode
此方法返回 Enum.VRTouchpadMode 指示指定 Enum.VRTouchpad 的模式。 返回的模式表示用户与其触摸板玩游戏的方式。
这也可以与多个 UserInputService VR 方法和事件使用。
此方法仅在 LocalScript 中使用。
参数
指定的 VRTouchpad 。
返回
指定的 VRTouchpad 的模式。
代码示例
local VRService = game:GetService("VRService")
VRService:GetTouchpadMode(Enum.VRTouchpad.Left)
GetUserCFrame
此方法返回一个 CFrame 描述特定虚拟现实设备的位置和方向为实体世界空间的偏移。此方法应用于实现游戏中虚拟现实兼容性时使用,以获取并跟踪连接的虚拟现实设备的移动。
使用此方法,开发人员可以实现像重新位置相应的用户在游戏中角色的重新定位等功能。这可以通过更改用户在游戏中角色的 CFrame 来匹配指定的 VR 设备使用 CFrame 列表中的值。
VRService 还提供一个 UserCFrameChanged 事件,该事件会自动触发,当连接的 VR 设备的 CFrame 发生变更,即使它在 0> Class.LocalScript0> 中使用。
此方法仅在 LocalScript 中使用。
参数
指定的 UserCFrame 。
返回
代码示例
local Workspace = game:GetService("Workspace")
local VRService = game:GetService("VRService")
local camera = Workspace.CurrentCamera
local part = script.Parent.Part
local handOffset = VRService:GetUserCFrame(Enum.UserCFrame.LeftHand)
-- Account for headscale
handOffset = handOffset.Rotation + handOffset.Position * camera.HeadScale
part.CFrame = camera.CFrame * handOffset
GetUserCFrameEnabled
此方法返回 true 如果可用的虚拟现实设备 (VR) 可用于聆听。它可以用于确定是否要使用特定的 VR 设备,例如 Enum.UserCFrame,是否连接到用户的游戏。
这也可以与多个 UserInputService VR 方法和事件使用。
此方法仅在 LocalScript 中使用。
参数
指定的 VR 设备类型。
返回
一个指示是否启用指定的 VR 设备(true)或禁用(false)的Boolean。
代码示例
local VRService = game:GetService("VRService")
local isEnabled = VRService:GetUserCFrameEnabled(Enum.UserCFrame.Head)
if isEnabled then
print("VR device is enabled!")
else
print("VR device is disabled!")
end
RecenterUserHeadCFrame
此方法将CFrame用户的头重新中心到当前位置的 VR 头套的位置。它可以用于确保用户的游戏头部按照用户的 VR 头戴设备的位置放置。
这与 UserInputService:RecenterUserHeadCFrame() 相同。
此方法仅在 LocalScript 中使用。
返回
代码示例
local VRService = game:GetService("VRService")
VRService:RecenterUserHeadCFrame()
RequestNavigation
此方法使用指定的 CFrame 作为视图器 parabola 的起始位置,使用指定的 Enum.UserCFrame 作为导航路线从用户 VR 设备到目的地的视觉化方式。它可以用于将虚拟实境 (VR) 集成到您的游戏中,通过提供一个可以从用户 VR 设备的 VR 视图器到目的地导航路线的视觉化方式来实现此
VRService 有一个类似的事件,NavigationRequested,用于检测此类请求。这也可以与多个 UserInputService VR 方法和事件中使用。
此方法仅在 LocalScript 中使用。
参数
您所要求导航的 VR 设备。
返回
代码示例
local VRService = game:GetService("VRService")
local destination = workspace:FindFirstChild("NavigationDestination")
VRService:RequestNavigation(Enum.UserCFrame.Head, destination.CFrame)
SetTouchpadMode
此方法将指定的 Enum.VRTouchpad 的模式设置为指定的 Enum.VRTouchpadMode 。它可以用于改变用户的虚拟实境 (VR) 触摸板模式,以便用户使用触摸板与游戏交互。
这也可以与多个 UserInputService VR 方法和事件使用。
此方法仅在 LocalScript 中使用。
参数
您指定的 VRTouchpad 您想要设置模式。
您想要将指定的 VRTouchpad 设置到。
返回
代码示例
local VRService = game:GetService("VRService")
VRService:SetTouchpadMode(Enum.VRTouchpad.Left, Enum.VRTouchpadMode.Touch)
活动
NavigationRequested
当 Enum.UserCFrame 为指定的 CFrame VR 设备请求导航时,此事件会触发。它使用 1> Datatype.CFrame1> 坐标和指定的 4> Class.UserCFrame4> 来表示设备请求导航。
此事件可以与 UserInputService 服务事件和方法使用。
该事件只在本地触发,因此它只能在 LocalScript 中使用。
参数
指示您所需要的 VR 设备。
代码示例
local VRService = game:GetService("VRService")
VRService.TouchpadModeChanged:Connect(function(cframe, inputUserCFrame)
print(inputUserCFrame.Name .. " made request with CFrame: " .. cframe)
end)
TouchpadModeChanged
这个事件会触发,如果 Enum.VRTouchpadMode 的一个 Enum.VRTouchpad 发生了变更。您可以使用此事件来跟踪 VR 触摸板连接到用户客户端的状态。
此事件可以与 UserInputService 服务事件和方法使用。
该事件只在本地触发,因此它只能在 LocalScript 中使用。
参数
更改模式的触摸板。
新模式。
代码示例
local VRService = game:GetService("VRService")
VRService.NavigationRequested:Connect(function(pad, mode)
print(pad.Name .. " Touchpad changed to state: " .. mode.Name)
end)
UserCFrameChanged
此事件发生 when a Enum.UserCFrame 被改变,例如 when 用户移动连接的 VR 设备。它可以与 GetUserCFrame() 一起使用,以跟踪 VR 设备的 CFrame 坐标,并且改变/
该事件只在本地触发,因此它只能在 LocalScript 中使用。
参数
更改的 VR 设备类型。
代码示例
local VRService = game:GetService("VRService")
VRService.UserCFrameChanged:Connect(function(userCFrameType, cframeValue)
print(userCFrameType.Name .. " changed. Updated Frame: " .. tostring(cframeValue))
end)
UserCFrameEnabled
此事件发生,当 Enum.UserCFrame 启用或禁用时。它可以与 GetUserCFrameEnabled() 一起使用来跟踪是否启用指定的 UserCFrame 以及其状态的变化。
该事件只在本地触发,因此它只能在 LocalScript 中使用。
参数
UserCFrame|UserCFrame 已启用或禁用。
一个指示是否启用 UserCFrame 的Boolean ( true ) 或禁用 ( false ) 的Boolean。
代码示例
local VRService = game:GetService("VRService")
VRService.UserCFrameEnabled:Connect(function(type, enabled)
if enabled then
print(type.Name .. " got enabled!")
else
print(type.Name .. " got disabled!")
end
end)