请选择 进入手机版 | 继续访问电脑版

查看: 523|回复: 0

[技术] Unity 2018.3中多平台VR功能

[复制链接]

1214

主题

1918

帖子

2万

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
25200
QQ
发表于 2018-11-27 04:00:00 | 显示全部楼层 |阅读模式
面向多个VR平台进行发布,可以让你的应用拥有更多的用户。本文将为大家介绍Unity 2018.3中多平台VR功能,通过使用这些新功能,我们可以创建适用于桌面端和移动VR设备高效的应用,而无需为不同平台特别构建。

VR.jpg


友情提醒:
1、本文中介绍的新功能,我们将提供项目下载以供参考,请在文末查看下载地址。
2、本文介绍的新功能适用于以下SDK:OpenVR、Oculus、WindowsMR、Daydream和GearVR,不适用于PSVR。

构建目标平台和VR SDK的选择
根据应用程序的构建设备的不同,我们可能需要修改目标构建平台并进行多次编译。

例如,如果目标设备为Oculus Rift,构建目标平台应为“PC, Mac, & Linux Standalone”;如果目标设备为Oculus Go,构建目标平台应为“Android”;如果想面向Oculus Rift和Oculus Go构建,需要为每个目标平台分别构建一次。

01.png


我们必须根据构建目标平台,使用正确的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。

02.png


我们也可以使用VR Lightweight RP模板创建一个新项目,在该项目中调整XR Rig对象。

03.png


Input输入
我们可以像获取非VR控制器的输入一样从VR控制器获取输入。通过参考XR Input文档的输入信息表,我们可以参考触发器、控制棒、手柄按钮等输入信息。

如下图所示,为左侧触发轴设置Input输入信息。

04.png


如下图所示,为左侧主按钮设置Input输入信息。

05.png

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在处理输入信息。

通过使用该设置,我们可以启用平台特定设置,例如:选择不同的输入来处理用户操作。
[C#] 纯文本查看 复制代码
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

参考文档
如何修改构建目标平台:
https://docs.unity3d.com/Manual/BuildSettings.html

如何启用VR并为构建内容选取SDK:
https://docs.unity3d.com/Manual/VROverview.html

XR Input文档的输入信息表:
https://docs.unity3d.com/2018.3/ ... anual/xr_input.html

小结
Unity 2018.3中多平台VR功能就介绍到这里,更多Unity最新功能介绍尽在Unity官方中文论坛(UnityChina.cn)!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表