Cardboard开发教程:使用Unity制作Cardboard全景图片浏览器
这两年,虚拟现实(VR)领域很火,很多人认为这将会是下一个手机般改变人们生活的技术。目前全球最领先的还是Facebook旗下的Oculus,HTC VIVE,以及最流行的Cardboard。国内多家厂商也在此领域发力,暴风魔镜就是其中的翘楚。今天这篇文章,就将从Cardboard入手,结合Google Cardboard for Unity SDK,在Unity中开发一个最简单的全景图片浏览器。
首先,能让我在今天动手写下这么多的文字,要感谢以下几篇文章,阅读了这些文章作者的经验之后,对我受益匪浅。以下是相关文章:
http://blog.csdn.net/column/details/cardboardvr.html
http://www.cnblogs.com/donghua/p/5060969.html
接下来进入正题,我将以Cardboard自带的案例为基础,在Unity中开发一个全景图片浏览器。
要开发Cardboard,需要先去下载Android SDK,Cardboard SDK和Unity。Unity版本5.2.1之后并且能够开发安卓平台的游戏即可。目前由于Google推出了Daydream平台,一些内容和我当初开发的时候已经有一些不同了。下面是引导网址:
API Guide: https://developers.google.com/vr/unity/get-started-android
Cardboard SDK可以使用git下载:
git clone https://github.com/googlevr/gvr-unity-sdk.git
导入资源:菜单栏上Assets->Import Package->Custom Package,将SDK和Demo都导入进来,导入时点击import即可。

导入后,从Project窗口中打开DemoScene:
在根目录下,即Assets,创建一个文件夹photo用来存放照片。Create->Folder:

同理创建Scripts用来存放脚本。
将照片拖入Photo文件夹中。导入完毕后,分别点击每一幅照片,在右边导航栏选择texture type为texture:

删除Hierarchy窗口中左边红框范围内的几个物体。
再在Hierarchy窗口中新建两个Sphere,分别命名为sphereleft和sphereright,代表左右眼看到的东西。右边调整参数,将Rotation的Y值设为270度,这样打开后看到的是正面的图片,否则是侧面的。
在Inspector窗口中的Layer那里点击,选择add,添加图层left和right,添加后,将sphere的图层一一对应。

将photo中的照片分别拖动到sphere上,会自动生成materials文件夹。在Inspector窗口中设置sphere的shader属性为cardboard/UnlitTexteture。

或者进入Materials文件夹,分别点击照片,修改Shader为Cardboard/UnlitTexture。
分别点击main camera left 和 right,设置cardboard eye属性中,toggle culling mask。这个属性的意思是遮盖。因此,如图,左眼应把右眼的图层遮盖看不见,所以左眼选择right,同理,右眼选择left。
主屏幕上,注意2D不要勾选,否则不太好调试。
现在,点击播放按钮,就可以看看效果了。

在Project窗口中,找到前面创建的Scripts文件夹,点击Create创建一个C# Script。命名为ChangePhoto,用来控制更新照片。

输入代码如下:
public class ChangePhoto:MonoBehaviour
{
public Material[] m_material=new Material[5];
int photoID=0; public void PhotoAdd()// Next photo
{
if (photoID+1<=m_material.Length)
{
this.GetComponent<Renderer>().material=m_material[++photoID];
}
} public void PhotoMinus()// Last photo
{
if(photoID-1>=0)
{
this.GetComponent<Renderer>().material=m_material[--photoID];
}
}
}
修改Hierarchy窗口中的按钮,保留两个,修改。分别点击text,修改文字,再修改Inspector窗口中的position,将Y值修改到合适的数字。

将写好的脚本分别拖动到sphereleft和sphereright上右边如果Inspector窗口出现了ChangePhoto这个函数,说明成功。

分别设置两个Sphere里的ChangePhoto函数,Material的size为照片数目,再将AssetsàPhotoàMaterials文件夹里的材质依次拖动到Element里即可。

选择Hierarchy窗口中的按钮,看Inspector,有On Click()函数,点击+,添加一个对象,分别将sphereleft和sphereright拖动到下面,将按钮和物体关联,设置右边的函数为相应的函数,即ChangePhotoàPhotoAdd
如果一切设置完毕,点击播放按钮,看看效果。

最后是打包成apk。点击File,选择Build Settings,在跳出来的窗口中选择Android,并选择Player Settings,在Inspector窗口中可以设置company name和product name。接着在下方找到Identification,修改Bundle Identifier,把Company和ProductName修改了。这个必须修改。设置好了就可以点击Build输出了~

Cardboard开发教程:使用Unity制作Cardboard全景图片浏览器的更多相关文章
- windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放
http://blog.csdn.net/wangrenzhu2011/article/details/7732907 (转) 实现方法: 对Manipulation进行抽象化 使不同容器可共用多点缩 ...
- Hello,Cardboard!!-如何开发一个最简单的Cardboard虚拟现实应用(一)
[原创文章,转载请注明出处,谢谢 !] 温馨提醒,本篇第一节主要介绍cardboard虚拟现实系统的组成,如果只想看如何开发的具体步骤请直接跳到第二节^_^ 前述:恕我啰嗦一下,主要照顾对cardbo ...
- Unity多玩家网络游戏开发教程1章Unity带有网络功能
Unity网络多玩家游戏开发教程第1章Unity自带网络功能 Unity拥有大量的第三方插件.专门提供了对网络功能的支持. 可是.大部分开发人员第一次接触到的还是Unity自带的网络功能.也就是大家常 ...
- Hands-On Unity 2018 x 移动游戏开发教程
Hands-On Unity 2018 x Game Development for Mobile 使用Unity 2018.2创建具有出色游戏功能的精彩游戏 想学习在Unity制作游戏,但不知道 ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
- Unity 2D游戏开发教程之摄像头追踪功能
Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机
Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机 Unity中制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大:当不再按下的时候,会慢慢缩小成原来的视图.游戏中时常出现的 ...
- Unity 2D游戏开发教程之游戏精灵的开火状态
Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...
随机推荐
- DWR实现扫一扫登录功能
前言 <DWR实现后台推送消息到Web页面>一文中已对DWR作了简介,并列出了集成步骤.本文中再一次使用到DWR,用以实现扫一扫登录功能. 业务场景 web端首页点击"登陆&qu ...
- Python学习【第三篇】Python变量
变量 声明变量 #!/usr/bin/env python name = "Bourbon" 上述代码声明了一个变量,变量名为:name,变量的值为:"Bourbon&q ...
- java8 学习系列--NIO学习笔记
近期有点时间,决定学习下java8相关的内容: 当然了不止java8中新增的功能点,整个JDK都需要自己研究的,不过这是个漫长的过程吧,以自己的惰性来看: 不过开发中不是有时候讲究模块化开发么,那么我 ...
- PythonNote01_HTML标签
>头标签<head> >>位置 头标签要放在头部之间 >>种类 <title> : 指定整个网页的标题,在浏览器最上方显示. <meta&g ...
- how-to-install-siege-on-centos-7
https://www.joedog.org/siege-home/ https://roastahost.com/how-to-install-siege-on-centos-7/ (Works!) ...
- mysqlbinlog 查看binlog时报错unknown variable 'default-character-set=utf8'
mysqlbinlog --no-defaults mysql-bin.000003 > /home/3.sql 下侧文字转自 http://www.cnblogs.com/cobbliu/p/ ...
- AVD之PANIC: Could not open
1 原因一:因为我们采用的是绝对路径定位,也就是说在环境变量里面把路径写死了,所以安装都不同,路径读不出来. 解决办法:①在环境变量中创建变量名:ANDROID_SDK_HOME,变量值:你当时安装S ...
- MWeb 2.0 测试版可以下载啦,这次是公开测试,感兴趣的朋友可以试试
2.0 版是 MWeb 发布以来,最重要的一个版本.MWeb 自去年一月份发布以来,获得了很多朋友的建议,在此非常感谢!没有你们,2.0 版可能就不能出来!然后再次感谢 Producter: http ...
- GMap.NET二次开发库
GMap.NET的出现,解决了传统的依赖于地图引擎的代价高昂的解决方案,而且使用传统地图引擎,无法迁移,就连我们的地图放大缩小这样常规的方法,都是紧紧绑定在这些令人恶心的地图引擎开发包提供的SDK接口 ...
- csuoj 1117: 网格中的三角形
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1117 1117: 网格中的三角形 Time Limit: 3 Sec Memory Limit: ...