Unity开发VR眼镜中文入门教程(2)

VR基础开发

 

按照前面所描述的安装后软硬件环境.并在Oculus Configuration Utility运行Demo Scene场景确保DK2的连接和配置正确.

创建第一个VR项目

 

我们现在开始创建一个VR测试项目,在场景中放置立方体便于查看运行效果,可以从资源商店里下载更精美的示例场景(https://www.assetstore.unity3d.com/#!/content/51519).

第一步: 打开Unity,新建个空项目.

第二步: 确保选择的PC, Mac & Linux Standalone 平台,在File > Build Settings设置.

1_build_settings

第三步: 创建一个立方体(Game Object > 3D Object > Cube)并用移动工具把它放在默认主相机的前方.

2_basic_cube_rotated

第四步:保存场景 (File > Save Scene).

第五步:到Edit > Project Settings > Player下选”Virtual Reality Supported”复选框.

3_enable_vr_-2

第六步,点击Play按钮进入播放模式

现在可以在DK2中看到你的场景.同样的你可以在Unity的Game视图看到相同的画面.

故障排除: 如果在DK2中看不到场景,可以试试下面的方法:

  • 在打开Unity项目之前确保DK2连接好电脑并且开启电源.
  • 在Oculus Configuration Utility查看Demo场景是否正常运行.
  • 更新你的显卡驱动.
  • 确保安装了Oculus Runtime 0.8(https://developer.oculus.com/downloads/)或更新版本.

如果仍旧没有解决需要在VR开发需要援助请查看Unity的VR论坛:forum.unity3d.com/forums/virtual-reality.80/

VR开发中一些重要信息

 

VR的开发与常规Unity开发非常相似,但还是有一些差异的.

编辑器中的帧率

 

如果在编辑器中运行VR项目,可能会遇到一些延迟和抖动,由于电脑要渲染两次相同的内容,Unity编辑器界面绘制也会消耗一定资源,所以最好要偶尔把项目编译出来直接运行它来检查效率.

相机的运动

 

在Unity中不能直接移动VR相机,如果你想改变它的位置和朝向,要确保相机有一个父物体,并去移动或旋转这个父物体.

4_cameracontainer

可以查看VR示例项目中的Flyer和Maze场景我们操作移动相机的方法.

相机节点

 

Unity中是不需要创建左右眼相机的.如果你想活的左右眼相机的位置,你只能用InputTracking(docs.unity3d.com/ScriptReference/VR.InputTracking.html)类.如果你想在场景中获得左右眼相机的位置或者用来测试之类,可以用下面的脚本附加到相机上来查看.

 

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 (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;
 }
 }
// 更新眼睛位置
 eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);
 eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);
 }
 }
}

 

VR的图像效果

 

在VR项目中很多图像效果都是很耗费性能的相当于同样的场景渲染两次,因为每只眼睛都要渲染一次,用图像效果(image effects)越多对帧率影响越大.

由于VR是虚拟现实中用户眼睛看到的景象,所以一些图像效果在VR中一般是没有意义的,例如景深,模糊,镜头眩光等等.因为现实中人眼是看不到它们的.如果未来VR设备支持眼球跟踪,那么可以用景深效果提高真实感.

一些图像效果是可以用的,如抗锯齿(特别是低分辨率的VR眼镜),Color Grading(blogs.unity3d.com/2015/05/12/color-grading-with-unity-and-the-asset-store/)和Bloom在一些游戏中可以用的,可以试着用用它们调整出更好的效果.

Unity提供了很多图像效果供你使用(Assets > Import Package > Effects),在资源商店中也有很多不错的图像效果,如Colorful(https://www.assetstore.unity3d.com/en/#!/content/44845), Chromatica(https://www.assetstore.unity3d.com/en/#!/content/20743), Amplify Color(https://www.assetstore.unity3d.com/en/#!/content/20743), 其它等等(https://www.assetstore.unity3d.com/en/#!/search/page=1/sortby=popularity/query=category:148).

渲染比例

 

根据VR场景和使用的VR硬件,我们可能要改变渲染比例,控制镜头中图像与像素的比例.这意味着图像表现锐度会被改变.

这必须要通过代码,具体看这里: http://docs.unity3d.com/ScriptReference/VR.VRSettings-renderScale.html. 可以用下面这个脚本很容易的实现:

 

using UnityEngine;
using System.Collections;
using UnityEngine.VR;

namespace VRStandardAssets.Examples
{ 
 public class ExampleRenderScale : MonoBehaviour
 {
 [SerializeField] private float m_RenderScale = 1f; //这个渲染比,数值越高画质越好但是性能越低

void Start ()
 {
 VRSettings.renderScale = m_RenderScale;
 }
 }
}

可以在VR示例的Scenes/Examples/RenderScale中看到相关基本例子,它同样可以用在主菜单场景.

更改渲染比例的例子:Unity中默认渲染比是1.0:

5_renderscale-1x

如果我们增加到1.5,可以看到画面更清晰.

6_renderscale-1.5x

最后,我们降低渲染比例到0.5,我们会看到画面损失了:

7_renderscale-0.5x

根据实际运行测试,我们或降低渲染比例以提高性能,或提高渲染比例增加视觉清晰度.


原文:http://unity3d.com/learn/tutorials/topics/virtual-reality

由 四角钱 (XK) 翻译,转载请注明来自 http://blog.1vr.cn

Unity开发VR眼镜中文入门教程(1)

原文:http://unity3d.com/learn/tutorials/topics/virtual-reality

由 四角钱 (XK) 翻译,转载请注明来自 http://blog.1vr.cn


VR示例项目文件下载: https://www.assetstore.unity3d.com/en/#!/content/51519

Unity开发VR介绍

 

Unity对一些VR设备(docs.unity3d.com/ScriptReference/VR.VRDeviceType.html)做了内建支持,这篇教程将重点讲解Oculus眼镜.尤其是Oculus Rift Development Kit 2(简称DK2)和Gear VR消费者版(它需要三星Galaxy S6,S6 Edge, S6 Edge+,或Note 5).老版本的Gear VR支持S4,不过S4不会作为重点,但教程里会尽可能的让VR程序能在S4上运行以便有S4的开发者可以测试开发.

Unity同样支持其它一些VR头戴显示设备(简称HMDs),如HTC Vive,后期我们会更新这个教程讲解它的开发.

在Unity项目中开启VR支持

 

请确保安装了Unity5.3或更新的版本以及Oculus runtime 0.8,

我们到菜单Edit > Project Settings> Player > Other Settings > Rendering下:

 

1_enable_vr

然后勾选“Virtual Reality Supported”选择框.

2_enable_vr

 

 

在运行时,可以在代码中使用UnityEngine.VR.VRSettings.enabled(docs.unity3d.com/ScriptReference/VR.VRSettings-enabled.html)切换这个设置,代码如下:

 

using UnityEngine;
 using UnityEngine.VR;
 public class ToggleVR : MonoBehaviour
 {
 //VRSettings设置示例
 private void Update ()
 {
 //如果按下V键,则启用VRSettings.enabled VRSettings.enabled
 if (Input.GetKeyDown(KeyCode.V))
 {
 VRSettings.enabled = !VRSettings.enabled;
 Debug.Log("Changed VRSettings.enabled to:"+VRSettings.enabled);
 }
 }
 }

Unity中预览VR效果

当DK2与电脑连接好后,启用Unity编辑器的VR支持选项,进入播放模式就可以在DK2显示实际VR游戏画面,编辑器的游戏窗口也将正常显示VR游戏画面,可以随时预览随时修改VR游戏,比以往”左右双画面”的方式更好用.

3_enable_vr_cube

这里我们要注意,没必要为左右眼分别创建独立的相机,所有相机都会自动的以VR模式渲染,除了场景中用到Render Texture的相机.有关Render Texture更多信息可以查看手册.同样的Unity也会对VR模式下的相机机型渲染的优化,如虽然双眼有两个相机,但裁切和阴影渲染只运算一次.

关于VR的其它文档可以查看Unity使用手册(docs.unity3d.com/Manual/VROverview.html)及Unity脚本手册(docs.unity3d.com/ScriptReference/30_search.html?q=VR).

使用Unity开发VR游戏的软硬件建议

 

因为VR是一个非常新的媒介,在开发时会有些软硬件的限制:

硬件:

 

实现HMD中所需的帧率是很有必要的需求,这将带来很好的虚拟现实体验,比如在DK2中必须达到75fps,Gear VR必须达到60fps.如果帧率低于VR头盔最低需求,用户会有明显的感觉到,导致恶心,眩晕等.

运行VR程序的电脑显卡也要有能力输出VR眼镜需要的分辨率,如DK2是需要75hz下的1920×1080,如果你打算开发将来商业发布的Oculus Rift CV1,将要求你的电脑能输出2160×1200的分辨率.

如果你使用DK2,请确保你的电脑能支持VR硬件所需要的刷新率和分辨率,许多笔记本是独立与集成的双显卡,而这些显卡芯片通常不能输出75hz的1920×1080分辨率,请参阅Oculus文档(https://support.oculus.com/hc/en-us/articles/201835987-Oculus-Rift-Development-Kit-2-FAQ)中有关电脑硬件的推荐指南(https://www.oculus.com/en-us/oculus-ready-pcs/).

软件:

 

OS X: 现在我们可以用OSX 10.9+和Oculus 0.0.5 runtime来开发因为Oculus暂停了OS X的开发(https://www.oculus.com/en-us/blog/powering-the-rift/),所以我们推荐用Windows进行VR原生开发.

Windows: Windows 7, 8, 8.1和Windows 10都可以.

Android: 我们推荐Android OS Lollipop 5.1或更新版本..

显卡驱动: 请确保你的显卡驱动是最新版本,旧版本的显卡驱动可能不支持,如遇到不兼容的问题可打开Oculus Configuration Utility 查看显卡错误信息.

Oculus Runtime: 要在Unity5.3中启用VR支持,请使用Oculus Runtime 0.8或更高版本(https://developer.oculus.com/downloads/).

VR示例项目

 

我们在资源商店提供了一套VR示例项目.这套示例项目可以运行在DK2和Gear VR上,我们将关注Oculus及其它VR设备厂商的版本迭代并更新示例项目,请关注Unity博客.

可以从资源商店下载源文件:”https://www.assetstore.unity3d.com/#!/content/51519”.

示例场景

示例场景主要包括:

  • Intro: 介绍基本的使用
  • Menu: 通过菜单选择要玩的游戏
  • Flyer:一个屏幕飞行游戏
  • Maze: 一个桌面迷宫游戏.
  • Target Gallery:原地180°射击游戏
  • Target Arena: 原地360°射击游戏

另外也有一些场景:

  • InteractiveItem: 在VR中展示物体的基本方式
  • RenderScale: 如果使用渲染比例效果优化画质.
  • Reticle: 在VR中划线用准星引导的例子
  • Rotation: 显示一个能响应头部运动的物体.
  • Touchpad: 如何使用Gear VR的触控板.

涵盖了一下概念:

  • 俯瞰的桌游游戏风格
  • 沉浸的星际飞行风格
  • 第一视角射击风格
  • 原地360°防守射击风格
  • 在VR中使用Unity的UI
  • 空间中的UI界面
  • 在VR世界中对象触发基本框架,凝视物体等.
  • 基于准星的移动,缩放和在表面法线方向上绘制
  • 基于头部转动的运动
  • 使用Gear VR的触控板,包括单击,双击和滑动或者基于键盘和鼠标使用DK2.
  • 发布到Gear VR 和 DK2的条件
  • 当绕着一个点旋转相机时如何避免头晕恶心.
  • 相机淡出效果
  • 相机淡出切换位置效果
  • 对象池

虽然这个示例项目主要用来说明VR中的各种概念,并带你入门VR开发,但它也包括了一些很有用的例子给任何VR游戏开发人员使用:

  • 相机淡出效果
  • 相机淡出切换位置效果
  • VR中游戏对象交互框架
  • 保持动作以确认命令
  • 准星移动和缩放
  • 实现特定指向的UI箭头
  • 移动UI元素让它们始终面向相机
  • 与UI对象上色交互

需要Unity5.3.0下才能运行这些项目,并且硬件和软件满足上述的标准,有DK2(https://support.oculus.com/hc/en-us/articles/202741283-Get-Started-)(Oculus Runtime 0.8或更高(https://developer.oculus.com/downloads/))或含有兼容手机(www.samsung.com/global/galaxy/wearables/gear-vr/)的Gear VR(https://developer.oculus.com/documentation/mobilesdk/latest/)用于开发.

OCULUS UNITY 实例

 

根据你需要开发的功能,可以下载 Oculus Unity Utilities(https://developer.oculus.com/downloads/), 它包含了一些很有用的脚本和VR项目预设.如能够正确的改变瞳距(两眼之间的距离(https://developer.oculus.com/documentation/intro-vr/latest/concepts/bp_app_imaging/)),和可视化的渲染范围.

而我们这篇教程侧重于用Unity内建的VR支持,所以请到Oculus网站(https://developer.oculus.com/downloads/game-engines/0.1.3.0-beta/Oculus_Utilities_for_Unity_5/)查看哪种方式更适合开发你需求的VR项目.

你现在应该了解VR开发的软硬件需求以及如何在你项目中使用哪种技术实现VR功能.


 

原文:http://unity3d.com/learn/tutorials/topics/virtual-reality

由 四角钱 (XK) 翻译,转载请注明来自 http://blog.1vr.cn

 

Unity3d中制作Loading场景进度条所遇到的问题

背景

通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长。为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景。因为Loading场景包含的资源较少,所以加载速度快。在加载主场景的时候一般会在Loading界面中显示一个进度条来告知玩家当前加载的进度。在Unity中可以通过调用Application.LoadLevelAsync函数来异步加载游戏场景,通过查询AsyncOperation.progress的值来得到场景加载的进度。

尝试——遇到问题

第一步当加载完Loading场景后,调用如下的LoadGame函数开始加载游戏场景,使用异步加载的方式加载场景1(Loading场景为0,主场景为1),通过Unity提供的Coroutine机制,我们可以方便的在每一帧结束后调用SetLoadingPercentage函数来更新界面中显示的进度条的数值。 继续阅读

四毛寻车记

原来住西直门, 是一楼, 车放在楼后方, 一个四轮无法进去的地方, 自己也装了监控, 平时就锁个无声的碟锁罩上车罩, 没任何问题. 去年十月假期因为这老小区要进行改造, 就搬到了大兴瀛海, 同样停在了楼下, 在汽车停车位的旁边, 还是只锁了无声碟锁, 也没用带警报的锁, 我怕有风之类的造成报警锁误触发扰民. 结果五天后的晚上三点多, 车上的防盗器报警呼叫我的手机, 当时睡的正香, 迷迷糊糊的起床隔窗往楼下摩托那看, 好像空了, 当时马上就精神了, 找手电筒再次往下看, 靠, 哈雷不见了!我马上喊我爱人说车丢了, 然后我打开电脑查车上的GPS轨迹, 由于没经历过这种事, 很慌乱, 加上新搬到那里, 路不熟, 看到行车轨迹也没马上判断出距离远近, 耽误了宝贵时间, 虽然随车的报警器被触发后唤醒有几分钟延迟, 但当时如果马上追出去, 加上路线熟悉, 应该可以追到盗窃者的. 让我爱人报警, 我穿衣下楼准备去追车, 这时候距离知道车被触动大约是过了五分多钟, 随车的GPS位置到了五环的旧忠桥并且提示设备电源断开了, 我和弟弟骑车到旧忠桥, 什么也没发现, 也没有找到拆掉的GPS防盗器.
GPS位置也停止在了旧忠桥上, 没有新的信息, 我们只有返回, 这时候片警已经来了, 看了车行驶本之类就去小区的监控室调阅监控, 因为知道准确的时间点所以很快找到了相关录像, 但是监控质量及角度等问题无法看到车具体被偷走的过程, 后来我通过分析还原了这个过程: 一辆遮挡号牌的金杯海狮车从小区北小门下来一人, 走到停车的位置确定车在无异常, 金杯车从西大门(门口栏杆晚上之间竖起, 门楼保安睡觉, 无人监管进出车辆)开进来直接停靠在摩托车边上并调头熄火, 然后至少三个人用了三分钟左右的时间将我的哈雷抬上金杯车开出小区. 车刚走不到一分钟就是我拿了手电筒往下照的时候. 去派出所做了个笔录, 片警说提交给刑警, 并说天亮后刑侦会来人勘查现场, 可第二天又说大兴区的规定, 摩托车无论价值都只由派出所侦查, 不能移交刑警, 刑侦的人也没有来, 说现场也没什么可采集的. 我便找他们和自己找关系查沿途监控, 结果是监控没启用及只是违章拍照探头, 没有全时录像. 加上感觉片警不尽责, 事实上他们就是什么也没干. 我就自己想办法找沿途监控和投诉. 折腾了几天后无任何新线索, 再过了将近一个月派出所才把案子立了, 给摩托车作价了七万五. 朋友土豆建议我把网上所有丢车信息全部清除, 现阶段只能等我的车再次出现了, 所以我进行了清理. 也想过买辆车, 套用丢的这套车手续, 毕竟购置税等等费用也要不少钱, 结果快年底的时候派出所那边象征性的做了回访说案子没有被遗忘, 他们因业务不熟后来才慢慢的把车上了盗抢网, 我也就放弃了套手续的想法, 京A摩托车牌照价格走势也算良好, 那时已经逼近八万了, 车虽然丢了, 但是牌照一年后能补回, 换算一下损失没有超过十万, 也算自我安慰了, 慢慢的梳理了情绪, 习惯了丢车的事实. 也经常关注各交易网试图发现车的踪迹, 无果. 继续阅读

Unity在 Web平台的未来

最近,我们收到很多开发者的咨询,大家最担心的问题就是网页游戏未来的发展,尤其是谷歌浏览器(Google Chrome)对Unity Web Player的支持,所以我们发表本文来帮助大家作出解答。

Google在2013年秋季宣布,计划在2014年年底,Chrome将停止对NPAPI的支持(http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html)。NPAPI是可提供本地代码在Chrome中正常运行的API,也是Unity Web Player运行的基础。
继续阅读

Unity 2D入门基础教程

写在前面的话:转载肯定会留原文链接,作者的署名,这是毋庸置疑的.而我的习惯是翻译完文字后会通知到原作者并分享给原作者翻译后的版本,比如像我做EZGUI的帮助文档的时候,作者特意将其帮助文档的”源工程”给我发来了.NGUI的作者也开心的把我的译文链接放到了他官网做为NGUI中文版教程,我们都是做着开心的事,而这个2D教程原作者偏偏要我把博客上这篇教程删除掉,说不授权给除了他们自己网站外的第三方网站发表,要是愿意的话也可以加入他们的翻译组,加入后才可以把我翻译的这个教程放到他们的网站上,仅此而已.虽然老外版权意识浓厚,但我还是觉得他们这是很蛋疼的行为,我决定选择无视他,并且保留这篇教程,退一步讲惹急了我把截图都换成我自己的,改一改文字,干脆变成原创教程好了…..呵呵呵….

==================================华丽的分割线==================================

如果用以前版本的Unity做2D游戏,虽然能做,但是要费很多周折.
比如你可以将一张纹理赋予一个”面片”网格,然后用脚本控制它的动画调整它的位移.如果你要使用物理引擎,那么还要将这个Obeject处理3D的,所以你还要确保你的Object要有足够的深度以确保他们在其它轴向上不起冲突.或者你选用一个第三方插件,如2D Toolkit或者Orthello 2D Framework,他们有着强大的功能,但同样需要你去做一些约束工作.
当上面这些你仍然可以选用上面这些方法的时候,Unity4.3增加了原生的2D开发环境,让我们一探究竟吧.

overview_pic

这个教程将带你探索Unity的2D工具,教程将引导你做一个主题为僵尸的iOS游戏.教程重点在于一个新的资源类型-“Sprite”,你将学到所有关于Sprite知识,在后续的教程里你将学会如何通过Unity的动画系统控制动画,以及用到Untiy的2D物理引擎的支持.

继续阅读

编程能力与编程年龄

程序员这个职业究竟可以干多少年,在中国这片神奇的土地上,很多人都说只能干到30岁,然后就需要转型,就像《程序员技术练级攻略》这篇文章很多人回复到这种玩法会玩死人的一样。我在很多面试中,问到应聘者未来的规划都能听到好些应聘都说程序员是个青春饭。因为,大多数程序员都认为,编程这个事只能干到30岁,最多35岁吧。每每我听到这样的言论,都让我感到相当的无语,大家都希望能像《21天速成C++》那样速成,好多时候超级有想和他们争论的冲动,但后来想想算了,因为你无法帮助那些只想呆在井底思维封闭而且想走捷径速成的人

继续阅读

夕阳无限好-Unity for Flash落幕

Unity CEO大卫在官网博客上发了一篇博文:

Unity要选定一个新的平台支持要进行很艰难的调研才能决定.往往要猜测瞬息万变的游戏环境,将来会什么样的发展,是否有明确的发展路线.有时候,事情并不能像预期的那样发展.

今天起,Unity将停止销售Flash的授权,整个4.x周期中,将继续给现有买了Flash授权的客户进行支持.

在18个月前Unity开始计划支持Flash发布,当时他们对未来Flash在游戏平台发展有很高的期望,早期Flashplayer版本性能也非常好的,同时Adobe似乎也在努力让它完善.

而现在,Unity看不到Adobe坚定的发展Flash意向,从Adobe最近的”路线图”(http://www.adobe.com/devnet/flashplatform/whitepapers/roadmap.html)以及对其它项目的用功可以看出这一点.

Adobe从引进然后又放弃收入的分成模式,Adobe辜负了开发者的信任.无法感受到Flash是一个可靠的,持续发展的平台.

开发者正在离开Flash,而且发布为Flash的才具有的影响力已经变小,Unity网页播放器插件在最近几个月进行着前所未有的增长(目前装机量已超200M台电脑,在所有Facebook游戏玩家中,占有率1/3).

Unity知道有些人针对Flash开发投入了巨资,Unity也将尽他们所能支持这些开发者.将在Unity4.x这个版本周期中保存目前的Flash部署功能,将来4.x的更新也会包括Bug的修复.但是现在Unity并没有打算进一步投入大量人力物力进行Flash平台部署的开发.

有关任何有关Unity for Flash许可的问题或者担心都可以联系support@unity3d.com或相关客户经理.

虽然Unity淘汰了for Flash部署,但是Unity依旧继续取得新的突破,让他更好!

鉴于现在Facebook游戏玩家增长,Facebook新的功能以及Unity网页插件的装机量成倍增长,我们预计未来一年将保持这个良好的增长趋势,而且新的Unity网页发布很快就要到来,更多细节稍后发布.

原文:http://blogs.unity3d.com/2013/04/23/sunsetting-flash/
转载请注明来自1vr.cn