Unity5.3官方VR教程重磅登场-系列2
链接:https://zhuanlan.zhihu.com/p/20485529
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
欢迎继续我们的学习。
北京时间2016年1月7日凌晨,Oculus正式开放对首款消费版Rift产品CV1的预订。599刀的价格让很多VR粉丝心头一紧,不过想想第一代iPhone的价格也是这样,只能期待后续的版本降价了。
筑基
为了准备好学习使用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.com/track/click?u=88dbd06829e35d5cbf84bbc2e&id=b436d0da47&e=86f0296884
关于电脑配置的相关信息,可以参考:
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到摄像机上。
C#脚本
using UnityEngine;
using UnityEngine.VR;
public class 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);
}
}
}
4.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,还有更多。
5.Render Scale
根据VR互动应用场景的复杂度和所运行的硬件环境,你可能需要更改render scale设置。通过此项设置可以调整镜头校正前texel:pixel的比率,这样可以牺牲游戏性能来换取画面的清晰度。
这项设置应该通过代码进行,可以参考这里:
http://unity3d.com/cn/VRSettings.renderScale
通过使用以下代码可以改变render scale的设置:
using UnityEngine;
using System.Collections;
using UnityEngine.VR;
namespace VRStandardAssets.Examples
{
public class ExampleRenderScale : MonoBehaviour
{
[SerializeField] private float m_RenderScale = 1f;
//The render scale. Higher numbers = better quality, but trades performance
void Start ()
{
VRSettings.renderScale = m_RenderScale;
}
}
}
关于这项设置,可以参考我们的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游戏相比应该如何使用图像效果。
在下一篇教程中,我们将学习如何跟场景中的物体进行交互,敬请期待~
Unity5.3官方VR教程重磅登场-系列2的更多相关文章
- Unity5.3官方VR教程-系列1
如果你不是VR游戏或应用的开发者,可以选择无视下面的内容,这不是给普通用户看的~ 如果你之前曾经为Oculus Rift DK2或者Gear VR开发过,那么心里面一定曾经有千万个草泥马来回奔跑过.虽 ...
- struts2官方 中文教程 系列十四:主题Theme
介绍 当您使用一个Struts 2标签时,例如 <s:select ..../> 在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...
- struts2官方 中文教程 系列十三:利用通配符选择方法
介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...
- struts2官方 中文教程 系列十二:控制标签
介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...
- struts2官方 中文教程 系列十一:使用XML进行表单验证
在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...
- struts2官方 中文教程 系列十:Form标签
介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...
- struts2官方 中文教程 系列九:Debugging Struts
介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截 ...
- struts2官方 中文教程 系列八:异常处理
在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴 ...
- struts2官方 中文教程 系列七:消息资源文件
介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...
随机推荐
- SQL Server 存储过程(转载)
SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...
- JAVA的名词释义
JDK : Java Development Toolkit (java 开发工具包). JDK是整个JAVA的核心,包括了java运行环境(Java Runtime Envirnmet),一堆jav ...
- iOS—最全的真机测试教程
准备 开发者账号 自从Xcode7 出来之后,一般的真机测试不需要开发者账号,也就不需要看这篇教程,只有app具有“推送”等功能的时候,要真机测试就必须要开发者账号和设置证书.苹果只是让你体验一下它的 ...
- DataTable或者DataRow转换对象
public static IEnumerable<T> ConvertObject<T>(DataTable dt) where T : new() { var v = ty ...
- MSChart使用
制作报表的时候结果出现画红线处的信息太散, 如果没必要全部显示出来,我们可以使用这种效果: 注意和前面的区分,这个功能叫做Collect Pie Slices(收集分区) 要实现此功能,应先了解相关信 ...
- 遇到问题-----JS中设置window.location.href跳转无效(在a标签里或这form表单里)
问题情况 JS中设置window.location.href跳转无效 代码如下: ? 1 2 3 4 5 6 7 8 <script type="text/javascript&quo ...
- Quartz实用二三事
注意:本文项目使用的Quartz版本为2.2.1 一.关于Trigger Trigger tg = newTrigger().withIdentity("tg3", "g ...
- can not find UIAutomationClient
'ClientApp.vshost.exe' (CLR v4.0.30319: ClientApp.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\asse ...
- @SuppressWarnings—注解用法详解
一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...
- Linux链接库一(动态库,静态库,库放在什么路径下)
http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http ...