Notifications
Article
Unity 2018.3中多平台VR功能
Published 9 months ago
383
0
面向多个VR平台进行发布,可以让你的应用拥有更多的用户。本文将为大家介绍Unity 2018.3中多平台VR功能,通过使用这些新功能,我们可以创建适用于桌面端和移动VR设备高效的应用,而无需为不同平台特别构建。
友情提醒:
  • 本文中介绍的新功能,我们将提供项目下载以供参考,请在文末查看下载地址。
  • 本文介绍的新功能适用于以下SDK:OpenVR、Oculus、WindowsMR、Daydream和GearVR,不适用于PSVR。

构建目标平台和VR SDK的选择

根据应用程序的构建设备的不同,我们可能需要修改目标构建平台并进行多次编译。
例如,如果目标设备为Oculus Rift,构建目标平台应为“PC, Mac, & Linux Standalone”;如果目标设备为Oculus Go,构建目标平台应为“Android”;如果想面向Oculus Rift和Oculus Go构建,需要为每个目标平台分别构建一次。
我们必须根据构建目标平台,使用正确的VR SDK。有时通过单个exe可执行文件就能面向多个SDK进行构建,有时则需要分别进行构建。
当设定为“PC, Mac, & Linux Standalone”时,我们可以面向Oculus和OpenVR虚拟现实SDK进行构建。当设定为“Android”时,我们必须分别为Daydream和Oculus VR SDK构建。我们需要充分了解项目的目标设备,从而确定合适的构建目标平台和VR SDK选择。

Tracked Pose Driver组件

Tracked Pose Driver组件可以根据VR设备的不同,调整Transform组件的Position和Rotation属性。
如下图所示,XR Rig使用了Tracked Pose Driver组件,其中XR Rig的“Main Camera”,“Left Hand”和“Right Hand”游戏对象各有一个TrackedPoseDriver组件,它会根据所设置的Device和Pose Source属性,修改游戏对象的Transform。
我们也可以使用VR Lightweight RP模板创建一个新项目,在该项目中调整XR Rig对象。

Input输入

我们可以像获取非VR控制器的输入一样从VR控制器获取输入。通过参考XR Input文档的输入信息表,我们可以参考触发器、控制棒、手柄按钮等输入信息。
如下图所示,为左侧触发轴设置Input输入信息。
如下图所示,为左侧主按钮设置Input输入信息。

XRNodes

如果需要更好地了解特定设备,我们可以使用InputTracking类中的功能。
InputTracking.GetNodeStates()可以提供XRNodeStates列表。XRNode类型包含多个抽象表示,例如:Head、LeftHand、RightHand、TrackingReference等。XRNodeStates会提供物理信息,例如:节点的位置和旋转、节点类型、节点是否正被跟踪,并提供唯一性标识。
InputTracking还提供在节点添加或移除时,以及在节点上的跟踪丢失或获取时触发的事件。

启用SDK特定信息

有时候用户体验要求实现SDK特定信息。
XRSettings提供了全局的XR相关设置,例如:构建的应用支持哪个VR SDK,哪个SDK处于活动状态。XRSettings.supportedDevices会列出构建时选择的VR SDK。XRSettings.loadedDeviceName会告诉我们目前哪个SDK在处理输入信息。
通过使用该设置,我们可以启用平台特定设置,例如:选择不同的输入来处理用户操作。
private static float m_FireTriggerThreshold = 0.75f;

public static bool FireControlActive(Handedness hand)
{
if (XRSettings.loadedDeviceName == "daydream")
{
if (hand == Handedness.LEFT)
return Input.GetButton("VR_PrimaryButton_Left");
else // right hand
return Input.GetButton("VR_PrimaryButton_Right");
}
else
{
if (hand == Handedness.LEFT)
return Input.GetAxis("VR_TriggerAxis_Left") > m_FireTriggerThreshold;
else // right hand
return Input.GetAxis("VR_TriggerAxis_Right") > m_FireTriggerThreshold;
}
}
通过结合使用XRSettings和XRNodes,我们可以控制所有VR SDK和相应设备的UX决策。

资源

想尝试本文中介绍的新功能,请下载以下项目。
Onslaught项目支持OpenVR、Oculus Desktop、Windows Mixed Reality Immersive Headsets、Oculus Mobile 和Daydream,请使用Unity 2018.3.0b3及更高版本。
下载地址:
https://github.com/Unity-Technologies/onslaught

XR Input Tests项目是一个多平台测试项目,Unity XR QA平时使用该项目来验证功能。
下载地址:
https://github.com/Unity-Technologies/XRInputTests

参考文档

如何修改构建目标平台
如何启用VR并为构建内容选取SDK
XR Input文档的输入信息表

小结

Unity 2018.3中多平台VR功能就介绍到这里,更多Unity最新功能介绍尽在Unity官方中文论坛(UnityChina.cn)!
Unity China
641
Comments