本文用Unity的Daydream Preview GVR13版本开发同时兼容Daydream和Cardboard的Android应用,Android Studio版本为2.2.3。

  1. 下载最新Daydream Preview(版本:Unity Daydream Preview 5.4.2f2-GVR13 (64-bit))并安装。
  2. 下载最新的Google VR SDK for Unity,新建一个Unity项目,并将GoogleVRForUnity.unitypackage导入到项目里面。
  3. 在File -> Build Settings里面,Switch Platform为Android。
  4. 在Player Settings...里面,Android面板下,Other Settings里面,勾选Virtual Reality Supported,删掉Split Stereo Display(non head-mounted),如果有的话,并添加Cardboard和Daydream,而且Daydream必须在Cardboard之上,否则就会出现"Incompatible app

    This Cardboard application is not compatible with Daydream headsets."的错误。Minimum API Level选API level 19(Cardboard最低支持API level 19,Daydream最低支持API level 24)。

  5. GVR的VRModeEnabled在GVR13中被强制变成true,无法直接修改为false,只能通过UnityEngine.VR.VRSettings.enabled来切换VR模式,而在非VR模式下,则屏幕静止不动。
    VRModeEnabled
    
    Determine whether the scene renders in stereo or mono. 
    
    Supported only for versions of Unity without the GVR integration. VRModeEnabled will be a no-op for versions of Unity with the GVR integration. True means to render in stereo, and false means to render in mono. 
  6. 监听Daydream左上角的返回键,可参考GoogleVR Demos里面的Teleport.cs脚本:
       void LateUpdate() {
    GvrViewer.Instance.UpdateState();
    if (GvrViewer.Instance.BackButtonPressed) {
    // TODO do what you wanna do here
    }
    }

    写一个脚本,挂在场景里的某个GameObject上,并在LateUpdate()里面做逻辑处理。

  7. 可以直接拿GoogleVR Demos里面的GVRDemo场景中的DemoInputManager,GvrViewerMain,GvrControllerMain以及Player,直接添加到自己的场景中,则可以实现Daydream手机上Daydream Controller可见,而在Cardboard模式下(非Daydream手机运行时),则显示成视选圈。
  8. 事件监听,需要在EventSystem上添加GvrPointerInputModule,并确保GvrViewerMain上面挂有GvrPointerManager。如果是和3D GameObject交互,则确保Main Camera上挂GvrPointerPhysicsRaycaster脚本;如果是和UGUI交互,则需要确保Canvas的Render Mode是World Space,并挂上GvrPointerGraphicRaycaster脚本,以及UI上的Raycast Target勾选上。最后在UI上挂上实现IGvrGazeResponder接口的脚本,实现事件监听并处理相应的逻辑。
  9. 从Android应用的原生Activity调用UnityPlayerActivity启动Unity场景之后,调用UnityPlayer.UnitySendMessage()方法往Unity发送数据时,发现Unity场景在Daydream提示将手机放入Daydream头盔的动画过后,并没有收到数据。原因是在播放Daydream动画的时候还未加载Unity的第一个场景,在这个时机发送数据接收对象还不存在。解决的办法就是,在Unity场景启动之后,再发送一条请求,请求UnityPlayerActivity再发一次数据给Unity。

本文为原创,如果转载请注明出处

基于Daydream technical preview GVR13开发Daydream,Cardboard的Android应用的更多相关文章

  1. 基于Jquery WeUI的微信开发H5页面控件的经验总结(2)

    在微信开发H5页面的时候,往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发,由于本人喜欢在Asp.net的Web界面上使用JQuery,因此比较倾向于使用 jQuery WeUI ...

  2. 基于CkEditor实现.net在线开发之路(7)列表页面开发动作介绍

    一个列表页面不止是查询,它也包含了很多业务上功能的实现,这些业务功能的实现的逻辑我称之为动作.如触发单击按钮删除数据,更改业务表数据,调用webService,调用WCF接口,弹出新窗体新增.修改.查 ...

  3. 基于ionic+angulajs的混合开发实现地铁APP

    基于ionic+angulajs的混合开发实现地铁APP 注:本博文为博主原创,转载时请注明出处. 项目源码地址:https://github.com/zhangxy1035/SubwayMap 一. ...

  4. 基于ThinkPHP3的微信平台开发_1

    微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...

  5. Python黑帽编程1.2 基于VS Code构建Python开发环境

    Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...

  6. 基于CkEditor实现.net在线开发之路(1)

    我以前的公司使用office sharepoint designer为界面设计器,嵌套各种自定义控件,进行各种管理软件,工作流的开发,遇到比较复杂的逻辑,则采用本地写类库,生成DLL上传到服务器,通过 ...

  7. 基于Eclipse的Hadoop应用开发环境配置

    基于Eclipse的Hadoop应用开发环境配置 我的开发环境: 操作系统ubuntu11.10 单机模式 Hadoop版本:hadoop-0.20.1 Eclipse版本:eclipse-java- ...

  8. 基于ArcGIS Viewer for Flex开发的一款跨平台的应用程序

    特点: 1.基于ArcGIS Viewer for Flex开发的一款跨平台的应用程序: -(IBAction) showTOC:(id)sender { if (_tocViewController ...

  9. 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)

    1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...

随机推荐

  1. 同时运行ecstore1.2与ecstore2.0的解决方案

    解决方法: php.ini中 zend_loader.license_path指向一个目录,该目录下同时包含两个developer.zl文件,一个是1.2,一个是2.0的. 为了避免俩develope ...

  2. springMVC文件上传优化

    1. 新建web project 2. 填 jar,注意新加入两个上传文件的jar, commons-io, commons-fileupload 3. 改写web.xml <?xml vers ...

  3. GPRS优点介绍及GPRS上网相关知识(转)

    源:http://blog.chinaunix.net/uid-20745340-id-1878732.html 单片机微控制器以其体积小.功耗低.使用方便等特点,广泛应用于各种工业.民用的嵌入式系统 ...

  4. Java中的构造方法

    什么是构造方法:每一个类中至少有一个构造方法,它用于创建该类对象,这个和OC中的init有异曲同工之妙. 构造方法的格式:A:方法名与类名相同  B:没有返回值类型,没有void C:没有具体的返回值 ...

  5. CSS——z-index

    1.特性 ①z-index的值表示谁压着谁.值大的压住值小的. ②只有定位的元素才有z-index 值,也就是说,浮动不可以,相对定位,绝对定位,固定定位都可以. ③z-index值没有单位,是一个正 ...

  6. iOS多页面传值方式之单例传值singleton

    // 要实现单例传值,那就必须得新建一个类做为单例 提供创建该类对象的类方法(因为是要在alloc开辟内存空间后赋值).所有在.h文件中声明该方法 + (instancetype)defaultUII ...

  7. Mycat 安装配置

    下载https://github.com/MyCATApache/Mycat-download Mycat 需要jdk 环境,首先安装 jdk 安装完 jdk 环境以后 下载 mycat server ...

  8. jQuery.extend({...})分析

    作者:zccst 看一下是如何写的 jQuery.extend({ prop:"" method:function(){} }); 可以看出,这些方法是jQuery的静态属性和方法 ...

  9. iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输

    http://blog.csdn.net/worldzhy/article/details/49982491 将NSArray.NSDictionary转换为JSON格式进行网络传输,是经常用到的,但 ...

  10. 网络IO模型

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...