使用Unity开发Oculus Quest应用

Oculus开发以前没接触过,有些特殊的东西,这里记录一下。

Unity5.1之后的版本都自带了Oculus原生支持,捆版的插件就是OVRPlugin,只需要开启Unity的VR支持选Oculus即可。当启用VR支持后,没有render texture的相机都会自动渲染成立体模式。相机会自动应用位置和头部追踪,自动控制相机的transform。

unity会在应用启动的时候在相机的本地姿态的参考系中应用VR相机头部追踪(这句话翻译不好,有几个词不是很确定,原文是:Unity applies head tracking to the VR camera within the reference frame of the camera’s local pose when the application starts.)如果你使用OVRCameraRig,参考系就是TrackingSpace对象,也就是CenterEyeAnchor对象的父物体,且它含有Camera组件。

Unity的Game窗口不会应用镜头畸变(这也是为什么VR应用在开发的时候Unity编辑器中不会显示两个镜头效果的原因,运行的时候才显示两个镜头渲染的效果),对应左眼buffer的图片就是简单使用pan-and-scan逻辑进行宽高比纠正(感觉原文语法不对,原文:The image corresponds to the left eye buffer and uses simple pan-and-scan logic to correct the aspect ratio. 一般称画面宽度和高度比位Aspect Ratio,也就是长宽比,比如电影的2.35:1。pan & scan也是电影转换画面比例的用语,具体也不太了解。比如电影本是宽银幕,而DVD上标的是4:3全屏,拿基本说是用Pan & Scan方式制作的,就好像用4:3的摄像机对着宽银幕重新录制了一遍)。

你可以更新Unity Editor的Oculus OVRPlugin版本,安装最新的Oculus Utilities即可,它也是Oculus Intergration的一部分(就1.37来说,Unity Asset Store上的这个有很多bug,评分非常低)。Oculus Intergration主要是补充Unity内置的OculusVR支持的,包括提供额外的脚本、预制体和例子等。该包能够提供控制VR相机的功能,还提供了第一人称控制器预制体,以及一套统一的控制器输入API。另外还要高级渲染特性、物体抓握,Touch的触觉脚本及调试工具等(下载及简介:https://developer.oculus.com/downloads/package/unity-integration/)。Oculus Intergration组件和预制体等具体介绍在:

https://developer.oculus.com/documentation/quest/latest/concepts/unity-utilities-overview/#unity-utilities-ovrplugin

以上这部分翻译来自:

https://developer.oculus.com/documentation/quest/latest/concepts/book-unity-dg/

做这一步主要是想了解下Unity集成的Oculus到底做了什么功能。

下面准备进入正题,Oculus Quest的开发主要从这里开始:

https://developer.oculus.com/quest/

Quest是首个六自由度独立的VR头盔,且有Oculus Touch功能。因为用Unity开发,接着参考这个链接:

https://developer.oculus.com/documentation/quest/latest/concepts/book-unity-gsg/

然后引导至创建第一个VR应用的教程:

https://developer.oculus.com/documentation/quest/latest/concepts/unity-tutorial/

这里要求安装Unity和准备Oculus设备,然后要准备安卓开发环境(Quest就是基于安卓系统的):

https://developer.oculus.com/documentation/quest/latest/concepts/unity-mobileprep/

首先设置设备,到:

https://dashboard.oculus.com/

成为其开发者,创建自己的组织:

使用Unity开发Oculus Quest应用_第1张图片

然后开启Quest的开发者模式,这个通过手机的Oculus应用开启即可。为了输出调试信息,需要安装Oculus Go ADB(实际上,直接在命令行用adb logcat看就可以,不用安装这个的):

https://developer.oculus.com/downloads/package/oculus-go-adb-drivers/

接着添加应用ID:

该窗口通过Unity Editor的Oculus / Platform / Edit Settings打开,不过需要先导入前面提到的Oculus Integration。需要填写的值来自于:

https://dashboard.oculus.com/app/api/

网页端的提供了两种设备类型:

使用Unity开发Oculus Quest应用_第2张图片

虽然Quest不在其中,但是通过Unity中那个图就能看出来,Quest是和Go并列的,所以这里选择创建应用的平台为第二个。这样准备工作就完成了,下面准备创建一个简单的应用,该应用由一个地板和一些墙组成一个游戏区域,其中球上会添加控制脚本以便我们用键盘或者手柄控制。

后续的操作都不用其他链接介绍各种所需条件了,就是对一个球添加控制代码控制,编译到Quest上运行。这里我本来以为会有控制器的内容,实际却没有。这样看来,这个官方文档其实就没有什么内容,除了填写Oculus的ID的内容,其实甚至都用不到它那个Integration包。我研究Oculus的主要目的是将手柄用起来,原来开发的Cardboard应用都是Gaze触发事件的,等后面找到了用法再记录。

控制小球运动主要是下面几行代码:

    void Update()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 position = transform.position;
        position.x += moveHorizontal * speed * Time.deltaTime;
        position.z += moveVertical * speed * Time.deltaTime;

        transform.position = position;
    }

完成了上述设置,直接编译运行,记得勾选Unity的Oculus支持。然后发现该应用在Quest中启动了,不过没法控制。本来上面的控制代码在Unity中能默认直接WASD几个按键就能控制运动,而Quest的手柄则不行。所以为了用起来手柄,即使是上下左右这种简单的移动,也还是要单独设置一些东西的。

暂时不再开发Quest了,手柄等如何配置使用的问题就不继续研究了。

你可能感兴趣的:(Unity,Oculus,Unity)