不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列2
创始人
2025-01-27 19:30:36
0次

[[163670]]

筑基

为了准备好学习使用Unity开发VR应用,我们首先要检查下自己的电脑硬件和软件配置是否满足要求。简单来说,显卡要NVIDIA GTX970或AMD290以上,CPU要Intel i5-459以上,内存8GB以上,要有两个USB3.0接口,一个USB2.0接口,一个HDMI 1.3接口。

操作系统比较坑爹,不支持Mac,也不支持Linux。支持Win7,Win8,Win10。

当然,还要把自己的显卡驱动升级到***版本。

Oculus官方的检测地址:oculus.us5.list-manage.com

关于电脑配置的相关信息,可以参考:Oculus Rift明天开启预订,你的电脑配置够不?(新增官方检测工具地址)

一旦完成了这种烧钱的工作,就该安装Unity了。注意在打开Unity前要把DK2连接好并开启。 在继续之前,打开Oculus Configuration Utility应用,并检查Demo Scene可以正常运行。注意在运行Demo Scene之前看可能需要在Oculus Configuration Utility中设置一个新用户。

创建***个VR项目

接下来我们将使用Unity创建一个简单的VR项目demo,其效果是在VR头盔中观察一个立方体。如果你想研究更多VR示例,不妨下载我们在上一篇教程中提到的VR示例项目(Asset Store)。

Step 1.

打开Unity,创建一个新的空项目。

说明一下,我当前用的Unity版本是5.3.1f1,可能你看到这篇教程的时候又已经升级换代了。

Step 2.

在Unity的菜单中选择Fiel- Build Settings,并选中PC,Mac& Linux Standalone

Step 3.

在场景中创建一个新的立方体,从菜单中选择Game Object - 3D Object -Cube ,通过Translate工具把立方体放到默认的Main Camera 前面,类似下面。

Step 4.

保存界面(File- Save Scene,或是使用快捷键)。

Step 5.

在菜单中选择Edit- Project Settings - Player,在”Other Settings“部分勾选”Virtual Reality Supported”

Step 6.

点击Unity界面上的Play按钮进入Play模式。

如果之前的设置没有问题,现在你应该可以通过DK2看到这个场景,四处看看,Unity中的摄像机将自动根据DK2的位置和旋转变化反应。

出错了怎么办?

如果你没有在DK2中看到期望的场景,那么检查以下的事项:

  1. 确保你在打开Unity项目前就已经把DK2接好并且开启了。
  2. 打开Oculus自带的Oculus Configuration Utility,看看Demo Scene是不是可以正常运作
  3. 更新你的显卡驱动到***版本
  4. 确保你在电脑上装了***的Oculus Runtime 0.8,或更高版本。

当然,如果还是有问题,可以到论坛里面参与讨论。Virtual Reality

关于VR开发的一些有用信息:

虽然VR应用开发和标准Unity应用开发很相似,不过还是有些区别需要注意的。

1、编辑器中显示的帧速(Frame rate)

当你通过编辑器查看项目时,注意体验上可能有些延迟,因为电脑需要将同样的内容渲染两次。所以在实际测试项目的时候,***创建一个可执行版本,在测试设备上实际体验。

2、摄像机的移动

注意,我们不能在Unity中直接移动VR摄像机。如果你希望调整摄像机的位置和旋转,需要确保将它设置为其它游戏物体GameObject的子物体,然后通过所依附的物体进行移动。

关于这一点,可以查看VR Samples项目中的Flyer和Maze场景。

3、相机节点

左眼和右眼的摄像机并不是由Unity创建的。如果你在开发中需要获取这些节点的位置,则必须使用InputTracking类。

如果你想要获取场景中眼睛的不同位置(比如测试时),请使用下面的示例脚本,并将其attach到摄像机上。

4、C#脚本

  1. using UnityEngine; 
  2. using UnityEngine.VR; 
  3. public class UpdateEyeAnchors : MonoBehaviour 
  4. { 
  5.     GameObject[] eyes = new GameObject[2]; 
  6.     string[] eyeAnchorNames ={ "LeftEyeAnchor", "RightEyeAnchor" }; 
  7.     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.         // If we don't have an eye anchor, try to find one or create one             
  17.         if (eyes[i] == null)             
  18.         {                 
  19.             Transform t = transform.Find(eyeAnchorNames[i]);                 
  20.             if (t)                    
  21.                 eyes[i] = t.gameObject; 
  22.             if (eyes[i] == null)                             
  23.             {                     
  24.                 eyes[i] = new GameObject(eyeAnchorNames[i]); 
  25.                 eyes[i].transform.parent = gameObject.transform;                 
  26.             }             
  27.         }             
  28.         // Update the eye transform             
  29.         eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i); 
  30.         eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);         
  31.     } 

5、VR中的图像效果(Image Effect)

在VR项目中使用众多图像效果是很奢侈的事情。考虑到你需要两次渲染同一个场景(每只眼睛一次),因此很多当前经常使用的图像效果对VR应用来说会很浪费,会严重影响游戏的运行帧速。

因为VR将用户的眼睛置入一个虚拟的空间,因此部分图像效果对VR来说没有任何意义。举例来说,深度视角、模糊效应和镜头光晕效果对VR来说没有任何意义,因为在现实世界中我们是看不到这些效果的。不过如果以后VR头戴设备可以支持眼动跟踪,那么深度视角可能会有意义。

不过有些效果还是可以考虑使用的:比如抗锯齿是有用的(特别是考虑到某些头戴设备的低分辨率),色彩分级也很有用(关于这一点可以查看这个链接:Color Grading with Unity and the Asset Store),对有些游戏来说Bloom会有用。

不过在使用任何效果之前,***先在游戏中实际测试下有没有用。

Unity自身提供了很多图像效果(Assets-Import Package-Effects),此外Asset Store里面也提供了很多效果,比如Colorful,Chromatica,Amplify Color,还有更多。

6、Render Scale

根据VR互动应用场景的复杂度和所运行的硬件环境,你可能需要更改render scale设置。通过此项设置可以调整镜头校正前texel:pixel的比率,这样可以牺牲游戏性能来换取画面的清晰度。

这项设置应该通过代码进行,可以参考这里:http://unity3d.com/cn

通过使用以下代码可以改变render scale的设置:

  1. using UnityEngine; 
  2. using System.Collections; 
  3. using UnityEngine.VR; 
  4. namespace VRStandardAssets.Examples 
  5. { 
  6.     public class ExampleRenderScale : MonoBehaviour 
  7.     {         
  8.         [SerializeField] private float m_RenderScale = 1f; 
  9.         //The render scale. Higher numbers = better quality, but trades performance 
  10.         void Start () 
  11.         { 
  12.             VRSettings.renderScale = m_RenderScale; 
  13.         } 
  14.     } 
  15. } 

关于这项设置,可以参考我们的VR Samples,具体示例是

Scenes/Examples/RenderScale场景。此外在MainMenu场景中也有该项设置的应用。

更改render scale的效果示例如下:Unity的默认render scale是1.0,效果如下:

如果将render scale设置成1.5,可以看到显示效果更锐利:

接下来把renderscale设置成0.5,可以看到像素化很严重:

根据游戏场景的不同,可以考虑降低render scale来提升游戏运行性能,或者通过增加render scale的数值让画面效果更锐利,但会以牺牲游戏运行性能作为代价。

好了,看到这里,你应该知道如何在Unity项目中整合VR,如何设置游戏中摄像机的移动,以及和非VR游戏相比应该如何使用图像效果。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...