筑基

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

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

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

  Oculus官方的检测地址:

   http://oculus.us5.list-manage.co ... d0da47&e=86f0296884

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

  创建第一个VR项目

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

  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: http://forum.unity3d.com/forums/virtual-reality.80/ )

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

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

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

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

   2、摄像机的移动

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

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

   3、相机节点

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

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

  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” };void Update()
  7.   {
  8.   for (int i = 0; i < 2; ++i)
  9.   {
  10.   // If the eye anchor is no longer a child of us, don’t use it
  11.   if (eyes[i] != null && eyes[i]。transform.parent != transform)
  12.   {
  13.   eyes[i] = null;
  14.   }
  15.   // If we don’t have an eye anchor, try to find one or create one
  16.   if (eyes[i] == null)
  17.   {
  18.   Transform t = transform.Find(eyeAnchorNames[i]);
  19.   if (t)
  20.   eyes[i] = t.gameObject;
  21.   if (eyes[i] == null)
  22.   {
  23.   eyes[i] = new GameObject(eyeAnchorNames[i]);
  24.   eyes[i]。transform.parent = gameObject.transform;
  25.   }
  26.   }
  27.   // Update the eye transform
  28.   eyes[i]。transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);
  29.   eyes[i]。transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);
  30.   }
  31.   }
  32.   }

复制代码

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

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

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

  不过有些效果还是可以考虑使用的:比如抗锯齿是有用的(特别是考虑到某些头戴设备的低分辨率),色彩分级也很有用(关于这一点可以查看这个链接:Color Grading with Unity and the Asset Store: http://blogs.unity3d.com/2015/05 ... nd-the-asset-store/ ),对有些游戏来说Bloom会有用。不过在使用任何效果之前,最好先在游戏中实际测试下有没有用。

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

   5、Render Scale

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

  这项设置应该通过代码进行,可以参考这里:

   http://unity3d.com/cn/VRSettings.renderScale

  通过使用以下代码可以改变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,效果如下:

  关于这项设置,可以参考我们的VR Samples,具体示例是Scenes/Examples/RenderScale场景。此外在MainMenu场景中也有该项设置的应用。

  更改render scale的效果示例如下:

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

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

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

VR游戏开发干货教程:如何创建一个VR项目相关推荐

  1. Unity VR游戏开发干货教程:优化VR体验

    简介 对于VR应用来说,如果想要让用户获得好的用户体验,特别是免除恶心眩晕的困扰,在VR开发中进行优化是必不可少的,惟其如此才能达到我们期望的游戏运行帧速.和其它平台上的开发不同,对VR应用的优化应该 ...

  2. Unity VR游戏开发干货教程:VR中的交互方式

    原文:http://www.gameres.com/495107.html 在VR项目中,我们需要在用户"凝视"某个物体时将其激活.在VRSamples中,我们构建了一个简单的,可 ...

  3. 虚幻引擎VR游戏开发基础教程

    虚幻引擎VR游戏开发基础教程 了解如何使用 Oculus Quest 2 的蓝图在虚幻引擎 4 中从头开始构建基本的 VR 机制 课程英文名:Unreal Engine VR Development ...

  4. 第 1 天|基于 AI 进行游戏开发:5 天创建一个农场游戏!

    欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用各种 AI 工具,在 5 天内创建一个功能完备的农场游戏.到本系列结束时,你将了解到如何将多种 AI 工具整合到游戏开发流程中.本系列文章将向你展 ...

  5. Unity 创建2D平台游戏开发学习教程

    了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建 ...

  6. unity2d游戏开发系列教程:四、一个2D游戏所需要的主要功能(游戏框架)

    目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 unity2d游戏开发系列教程:三.场景布置,增加怪物和机关 原文下载 ...

  7. Unity关于Oculus Quest2 基于XR Interaction Toolkit 基础开发 003-抓取功能-制作一个VR保龄球游戏

    学习目标: 制作一个VR保龄球游戏 学习内容: 1.创建一个Plane作为地板 2.创建XR Origin 3.手柄操作方式更改 4.创建保龄球和保龄球底座(Socket) 5.完善场景和玩法 6.打 ...

  8. 100天学会VR游戏开发

    最近看了一篇关于VR的文章,没事干就在翻译,希望对其他人有所帮助. 第一次翻译,不足的地方还请包含和纠正. 原文链接: https://medium.com/@skynite/100-days-of- ...

  9. 从零开始丨使用Unity3D进行VIVE VR游戏开发

    从零开始丨使用Unity3D进行VIVE VR游戏开发 SteamVR插件的导入 使用Unity3D进行VR游戏的开发,首先需要具备以下条件 1 拥有一台显卡不低于GTX960性能的主机 2 拥有一部 ...

  10. UE4蓝图无代码编程游戏开发技能学习教程

    在虚幻引擎4中创建.设计和开发自己的游戏,无需编码 你会学到什么 虚幻引擎4中使用蓝图的游戏开发(无代码编程) 使用行业标准方法的游戏设计 使用Maya进行三维设计 在本课程中创建您的第一个游戏 Ga ...

最新文章

  1. 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
  2. 【词汇】preci-词根、ap-前缀、de-前缀、ous-后缀、ify-后缀、ise-后缀
  3. ffmpeg添加libx265
  4. 将 gitblog 的博客内容搬迁到 CSDN
  5. invalid signature_php,微信开发JSSDK遇到的问题 config:invalid signature
  6. 流浪不是我的初衷 ... ...
  7. C++之Boost准标准库配置
  8. Linux下rcS文件中sleep用法,对busybox工具rcS脚本中exec执行﹑后台执行和nohup执行的理解...
  9. 线程的生命周期图(附多线程)
  10. Android 开发未来的出路何在? | 技术头条
  11. springboot 静态资源访问
  12. 调用 ogc_area 时参数个数或类型错误_Python10函数参数
  13. Dojo学习2 dojo快速安装
  14. C# 网上收集的一些所谓的开源项目
  15. UG 10.0打开装配图不产生零件图
  16. ldaptemplate 分页_长图片如何分页打印?3秒搞定|360浏览器|chrome浏览器
  17. Google VR 学习小结
  18. SQL中的PRIMARY KEY(PK)(主键)和Foreign Key (FK)(外键解析
  19. java毕业设计翻转课堂微视频管理系统Mybatis+系统+数据库+调试部署
  20. 愿天下团圆,愿天下再无团圆

热门文章

  1. 2022-2028全球硅胶线行业调研及趋势分析报告
  2. 微信小程序红包 php,微信小程序实现红包功能(后端PHP实现逻辑)
  3. 牛顿二项式定理(广义二项式定理)
  4. 清华校友、香港科技大学准博士ICCV顶会论文被爆公然抄袭!去年CVPR也是抄的...
  5. 戴尔卡耐基《人性的弱点》
  6. 根据经纬度查询地理位置API
  7. 自制APP连接远程服务器
  8. 中国风?古典系?AI中文绘图创作尝鲜!⛵
  9. android 百度地图大头针,百度地图API 地理位置获取和大头针显示当前位置
  10. ping服务器地址显示TTL传输中过期,ping公网固定IP出现: TTL 传输中过期,怎么处理?...