基于Daydream technical preview GVR13开发Daydream,Cardboard的Android应用
2024-10-14 14:52:14
本文用Unity的Daydream Preview GVR13版本开发同时兼容Daydream和Cardboard的Android应用,Android Studio版本为2.2.3。
- 下载最新Daydream Preview(版本:Unity Daydream Preview 5.4.2f2-GVR13 (64-bit))并安装。
- 下载最新的Google VR SDK for Unity,新建一个Unity项目,并将GoogleVRForUnity.unitypackage导入到项目里面。
- 在File -> Build Settings里面,Switch Platform为Android。
- 在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)。
- 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.
- 监听Daydream左上角的返回键,可参考GoogleVR Demos里面的Teleport.cs脚本:
void LateUpdate() {
GvrViewer.Instance.UpdateState();
if (GvrViewer.Instance.BackButtonPressed) {
// TODO do what you wanna do here
}
}写一个脚本,挂在场景里的某个GameObject上,并在LateUpdate()里面做逻辑处理。
- 可以直接拿GoogleVR Demos里面的GVRDemo场景中的DemoInputManager,GvrViewerMain,GvrControllerMain以及Player,直接添加到自己的场景中,则可以实现Daydream手机上Daydream Controller可见,而在Cardboard模式下(非Daydream手机运行时),则显示成视选圈。
- 事件监听,需要在EventSystem上添加GvrPointerInputModule,并确保GvrViewerMain上面挂有GvrPointerManager。如果是和3D GameObject交互,则确保Main Camera上挂GvrPointerPhysicsRaycaster脚本;如果是和UGUI交互,则需要确保Canvas的Render Mode是World Space,并挂上GvrPointerGraphicRaycaster脚本,以及UI上的Raycast Target勾选上。最后在UI上挂上实现IGvrGazeResponder接口的脚本,实现事件监听并处理相应的逻辑。
- 从Android应用的原生Activity调用UnityPlayerActivity启动Unity场景之后,调用UnityPlayer.UnitySendMessage()方法往Unity发送数据时,发现Unity场景在Daydream提示将手机放入Daydream头盔的动画过后,并没有收到数据。原因是在播放Daydream动画的时候还未加载Unity的第一个场景,在这个时机发送数据接收对象还不存在。解决的办法就是,在Unity场景启动之后,再发送一条请求,请求UnityPlayerActivity再发一次数据给Unity。
本文为原创,如果转载请注明出处
最新文章
- ROW_NUMBER over (order by **)
- DOM_01之树及遍历
- 快速入门系列--WCF--05事务
- reason: &#39;*** Collection <;__NSCFArray: 0x7ffa43528f70>; was mutated while being enumerated.&#39;
- linux 命令案例学习——文件搜索
- 1089-Duplicate Removal
- 决策树简单介绍(二) Accord.Net中决策树的实现和使用
- gridview获取当前行索引的方法
- android jni——helloworld
- 使用Git 本地代码提交到 GitHub
- Python编程核心内容之一——Function(函数)
- 【C#】使用bat文件安装卸载Window服务
- 任意输入一串字符串,求该字符串中字符的出现次数并打印出来,如输入“bcaba”输出:b 2 c 1 a 2
- 导航+左侧菜单+tab切换模板
- 好玩的Raft动画演示,原理秒懂
- Kali Linux渗透测试实战 2.1 DNS信息收集
- maven更换源
- C++的命名空间的使用
- BZOJ.2521.[SHOI2010]最小生成树(最小割ISAP/Dinic)
- asp.net 局域网中获取 client的机器名
热门文章
- Claris and XOR(模拟)
- Android网络开发之Volley--Volley基本用法ImageRequest(三)
- 我的git常用命令
- -linux删除大量文件----rm,rsync
- javascript技巧大全套
- Spring ---annotation (重点)--Resource, Component 重要!!!
- STM32 的加密实现(转)
- [Unity Socket]在Unity中如何实现异步Socket通信技术
- LPC1788的内部EEPROM使用
- python web开发基本概念