基础

开始用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] view plain copy
 
  1. <span style="font-family:SimSun;font-size:14px;">using UnityEngine;  
  2. using UnityEngine.VR;  
  3.   
  4. public class UpdateEyeAnchors : MonoBehaviour  
  5. {  
  6.     GameObject[] eyes = new GameObject[2];  
  7.     string[] eyeAnchorNames ={ "LeftEyeAnchor""RightEyeAnchor" };void Update()  
  8.     {  
  9.         for (int i = 0; i < 2; ++i)  
  10.         {  
  11.             // If the eye anchor is no longer a child of us, don't use it  
  12.             if (eyes[i] != null && eyes[i].transform.parent != transform)  
  13.             {  
  14.                 eyes[i] = null;  
  15.             }  
  16.   
  17.             // If we don't have an eye anchor, try to find one or create one  
  18.             if (eyes[i] == null)  
  19.             {  
  20.                 Transform t = transform.Find(eyeAnchorNames[i]);  
  21.                 if (t)  
  22.                     eyes[i] = t.gameObject;  
  23.   
  24.                 if (eyes[i] == null)  
  25.                 {  
  26.                     eyes[i] = new GameObject(eyeAnchorNames[i]);  
  27.                     eyes[i].transform.parent = gameObject.transform;  
  28.                 }  
  29.             }  
  30.   
  31.             // Update the eye transform  
  32.             eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);  
  33.             eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);  
  34.         }  
  35.     }  
  36. }</span>  

VR中的滤镜特效

VR项目中,很多图像滤镜效果都很消耗资源。由于渲染了两次场景,每只眼一次,大多数滤镜都会对帧数和性能有很大影响而没有使用。

由于VR是 把眼睛放在虚拟场景中来展示画面的,一些图像滤镜并没有什么意义。举例说明,景深,模糊,镜头光晕,基本上没有什么用,因为他们也不会在真实世界中看到。如果VR 头戴设备最终支持了眼球追踪,那景深就有道理了。

有一些可以使用的滤镜:抗锯齿会很有用(特别是在低画质的时候),颜色分级 也是当然需要的(查看实用的Unity 博客获取更多信息),然后Bloom滤镜在某些游戏里会有效果,所以比较好的想法是去试验看看具体什么滤镜在游戏中有用。

Unity提供了一些合适的图像滤镜来给你使用(Assets > Import Package > Effects),Asset Store 中也有很多很棒的图像滤镜,例如ColorfulChromaticaAmplify Color 和 其他

 

渲染比例(render scale)

根据正在运行的VR场景的复杂度,可能需要调整渲染尺寸。这会影响纹理:镜头前的像素比例修正,意味着我们会牺牲更多的性能和锐度。

这个只能通过代码来设置, 参考文档:http://docs.Unity3D.com/ScriptReference/VR.VRSettings.html,按照如下的代码设置比较容易:

[csharp] view plain copy
 
  1. <span style="font-family:SimSun;font-size:14px;">using UnityEngine;  
  2. using System.Collections;  
  3. using UnityEngine.VR;  
  4.   
  5. namespace VRStandardAssets.Examples  
  6. {   
  7.     public class ExampleRenderScale : MonoBehaviour  
  8.     {  
  9.         [SerializeField] private float m_RenderScale = 1f;              //The render scale. Higher numbers = better quality, but trades performance  
  10.   
  11.         void Start ()  
  12.         {  
  13.             VRSettings.renderScale = m_RenderScale;  
  14.         }  
  15.     }  
  16. }</span>  

我们的VR演示项目里有个基础的例子,在Scenes/Examples/RenderScale 场景中。在MainMenu场景中也用到了。

修改渲染比例示例:Unity中默认的渲染比例是1.0:

泰课在线

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

泰课在线

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

泰课在线

根据场景的运行状况,有可能需要降低渲染尺寸来增进显示性能,或者增加渲染比例来提高显示的锐利度。

现在你已经对Unity中的基础VR集成更熟悉了。下一篇文章,VR中的交互,会学习如何在VR中与物体交互。