基础

开始用unity进行基础VR开发之前,先确认硬件和软件已经按照前一篇文章进行了设置。
配置好并且安装好unity以后,在打开unity之前,保证DK2已经连接好,并且已经启动。在进行接下来的操作之前,先检查一下Oculus的 配置工具是否正常工作。可能需要先设置一个新用户来运行Demo场景。
创建你的第一个VR项目
先创建一个测试项目,然后创建一个能在VR中观察的立方体作为开始。如果你打算研究更详细的现成的VR示例,可以下载在概述中提到的VR示例项目
步骤1:在Unity启动时跳出的对话框中,创建一个空工程。
步骤2:平台选择里,选择PC, Mac & Linux Standalone。在最上面的菜单栏里选 File > Build Settings。

泰课在线
步骤3:在新建的空场景中,创建一个立方体(Game Object > 3D Object > Cube) 然后用移动工具把它的位置调整到默认的住摄像机前。


步骤4:保存当前场景(File > Save Scene)。
步骤5:Edit > Project Settings >Player 打开Player 设置面板,检查是否已经勾选了“Virtual Reality Supported" 。


步骤6:点击界面上方的Play按钮,进入Play模式
现在应该可以在DK2上看到这个场景了,同时电脑屏幕的Game窗口里有摄像机的镜像。在DK2中向周围看一下,在Unity中会改变同样的位置或者旋转。
解决故障:如果你不能在DK2中看到场景, 一下的几个提示可能会有帮助:
·确认DK2在打开Unity 项目之前,已经正确的介入,并且已经打开。
·检查Occulus Configuration Utility(Occulus 配置程序)中的Demo Scene(示例场景) 是不是能够正常查看。
·升级显卡驱动
·确认已经安装了Oculus Runtime 0.8或者更高。
更多VR方面的援助,请到Unity VR Forum(Unity VR 官方论坛)
VR开发的实用信息
VR开发和标准Unity开发时很相似的,但是有一些需要注意的区别。
Editor中的(Frame Rate)帧数
在editor中查看项目时,需要注意因为渲染了两次同样的内容,可能觉得有一些延迟和抖动。渲染Unity IDE 同样会有一些复旦,所以最好是时常build一下项目,然后直接运行,来测试项目在设备上的性能。
摄像机移动
你不能直接在Unity中移动VR摄像机。如果希望移动或者旋转摄像机,需要把摄像机放到另一个GameObject下面成为子对象,然后对父对象进行进行操作。


比方说这个例子,VR Samples 项目中的Flayer and Maze。如果你希望获取这些节点的位置,需要使用InputTracking 类。
摄像机节点
左眼右眼并不是在Unity中创建的,如果需要获取场景中各个眼睛所在的位置,使用以下的脚本,然后添加到摄像机上。
[csharp]
<span style="font-family:SimSun;font-size:14px;">using UnityEngine;  
using UnityEngine.VR;  
publicclass UpdateEyeAnchors : MonoBehaviour  
{  
    GameObject[] eyes = new GameObject[2];  
    string[] eyeAnchorNames ={ "LeftEyeAnchor", "RightEyeAnchor" };void Update()  
    {  
        for (int i = 0; i < 2; ++i)  
        {  
            // If the eye anchor is no longer a child of us, don't use it
            if (eyes[i] != null && eyes[i].transform.parent != transform)  
            {  
                eyes[i] = null;  
            }  

            // If we don't have an eye anchor, try to find one or create one
            if (eyes[i] == null)  
            {  
                Transform t = transform.Find(eyeAnchorNames[i]);  
                if (t)  
                    eyes[i] = t.gameObject;  

                if (eyes[i] == null)  
                {  
                    eyes[i] = new GameObject(eyeAnchorNames[i]);  
                    eyes[i].transform.parent = gameObject.transform;  
                }  
            }  

            // Update the eye transform
            eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);  
            eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);  
        }  
    }  
}</span>  
VR中的滤镜特效
VR项目中,很多图像滤镜效果都很消耗资源。由于渲染了两次场景,每只眼一次,大多数滤镜都会对帧数和性能有很大影响而没有使用。
由于VR是 把眼睛放在虚拟场景中来展示画面的,一些图像滤镜并没有什么意义。举例说明,景深,模糊,镜头光晕,基本上没有什么用,因为他们也不会在真实世界中看到。如果VR 头戴设备最终支持了眼球追踪,那景深就有道理了。
有一些可以使用的滤镜:抗锯齿会很有用(特别是在低画质的时候),颜色分级 也是当然需要的(查看实用的Unity 博客获取更多信息),然后Bloom滤镜在某些游戏里会有效果,所以比较好的想法是去试验看看具体什么滤镜在游戏中有用。
Unity提供了一些合适的图像滤镜来给你使用(Assets > Import Package > Effects),Asset Store 中也有很多很棒的图像滤镜,例如Colorful,Chromatica,Amplify Color 和 其他。
渲染比例(render scale)
根据正在运行的VR场景的复杂度,可能需要调整渲染尺寸。这会影响纹理:镜头前的像素比例修正,意味着我们会牺牲更多的性能和锐度。
这个只能通过代码来设置, 参考文档:http://docs.Unity3D.com/ScriptReference/VR.VRSettings.html,按照如下的代码设置比较容易:
[csharp]
<span style="font-family:SimSun;font-size:14px;">using UnityEngine;  
using System.Collections;  
using UnityEngine.VR;  
namespace VRStandardAssets.Examples  
{   
    publicclass ExampleRenderScale : MonoBehaviour  
    {  
        [SerializeField] privatefloat m_RenderScale = 1f;              //The render scale. Higher numbers = better quality, but trades performance

        void Start ()  
        {  
            VRSettings.renderScale = m_RenderScale;  
        }  
    }  
}</span>  

我们的VR演示项目里有个基础的例子,在Scenes/Examples/RenderScale 场景中。在MainMenu场景中也用到了。
修改渲染比例示例:Unity中默认的渲染比例是1.0:


如果把渲染比例调整到1.5,模型看起来更清晰:


最后,如果把渲染比例调整到0.5,图像看起来更像素化:


根据场景的运行状况,有可能需要降低渲染尺寸来增进显示性能,或者增加渲染比例来提高显示的锐利度。
现在你已经对Unity中的基础VR集成更熟悉了。下一篇文章,VR中的交互,会学习如何在VR中与物体交互。