Vuforia unity开发摄像头问题

项目一直在赶进度,写博的时间越来越少了从事Unity开发也快两个月了,AR方向 使用的是高通家的SDK Vuforia。。。从工程融合一直到对unity和Vuforia的深层次的开发,新东西,毕竟坑多。。国内做AR开发的没有自家的SDK一般都是用国外的SDK或则国内其他家的一些SDK吧~ 使用这些SDK做AR开发都有共同的一个特性,都喜欢在Unity里面做开发。Unity之前一直是游戏引擎,直到Unity5.0版本出来后Unity官方有一个方向转变,不仅仅是游戏引擎而且Unity可以做应用级别的开发,但是Unity应用级的开发是一个刚刚起步的开发,Unity里支持的东西不够全面,扩张性不够强,脚本语言的控制和原生设备的兼容性也不够,就是因为这些原因,有了工程融合,iOS、Android的工程和Unity的工程融合在一起开发,使得Unity的支持面更广,扩张性更强,很多Unity做不到的,或则难做的,就可以让原生来开发,这时候unity就是一个万金油


** 好了,本文主要讲解的是Unity对Vuforia的开发中在原生调用摄像头上遇到的坑Unity中调用设备摄像头打开或则关闭,或则开关扫描识别问题等等一些情况 下面先说说趟过的坑,再说说解决办法,或则目前没有解决的问题 **


先说说情况,移动端App的iOS的项目中有三个界面,其中一个就是扫描界面,扫面界面当让是Unity对Vuforia的开发导出的工程融合在原生的项目中的当我程序退出扫描界面后Unity和Vuforia应该处于暂停状态OnPause,笔者研究了一段时间,在iOS中使用UnityInterface.h中暴露的暂停接口根本就没有让扫描暂停如下图

笔者尝试了一次又一次的interface中的方法,相机就根本不能暂停,,原来童话里都是骗人的~可能 有人会想到暂停不了也没有什么大不了的 吧~ 我研究了一下国内的App,是有几款App没有暂停例如幻视,,问题又来了,,既然相机不能暂停就不让他暂停呗 可是我们的项目中有这样一个需求,见下图~

拍照功能~扫描界面不能暂停Camera,其他界面现在要调用Camera,,做过移动端开发的都知道,,Camera是实例化出来的,而且是单例,,如果再一次实例化这时候,程序 ~ 崩~

所以不把 摄像头暂停肯定不行~ 这时候笔者通过UnityInterface.h 的方法是Camera 暂停了,,这时候~ 新的问题又出来了,,通过这样的方法使Camera暂停了,可是Vuforia还是在继续调用摄像头再继续扫面,,,虽然Camera 是关闭了,界面上看不到,这时候其实Vuforia还是在调用摄像头继续扫面,这时候~ 笔者想到的唯一办法就是 通过Unity内部去控制Vuforia,再向原生暴露需要调用的接口~ 所以有了以下方法~

解决办法

// 关闭相机
public void CloseCameraDevice ()
{
CameraDevice.Instance.Stop();
CameraDevice.Instance.Deinit();
} // 打开相机
public void OpenCameraDevice ()
{
CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_DEFAULT);
CameraDevice.Instance.Start();
} // 关闭识别
public void CloseCloudReco ()
{
CloudRecoBehaviour cloudRecoBehaviour = GameObject.FindObjectOfType(typeof(CloudRecoBehaviour)) as CloudRecoBehaviour;
cloudRecoBehaviour.CloudRecoEnabled = false;
} // 打开识别
public void OpenCloudReco ()
{
CloudRecoBehaviour cloudRecoBehaviour = GameObject.FindObjectOfType(typeof(CloudRecoBehaviour)) as CloudRecoBehaviour;
cloudRecoBehaviour.CloudRecoEnabled = true;
}

上面这些方法是在Unity里面实现的,写在一个脚本里,挂在一个GameObject上供原生调用~

后来解决的坑~

Android在扫描界面打开闪关灯,因为扫描界面Unity调用了Camera,安坐的闪关灯是通过实例化相机来打开的这时候Android拿不到Camera,因为Unity把Camera暂用了,,在扫描界面不能打开闪关灯 解决方法~如下

public void OpenFlash () {
CameraDevice.Instance.SetFlashTorchMode (true);
} public void CloseFlash () {
CameraDevice.Instance.SetFlashTorchMode (false);
}

最新文章

  1. Spring Security控制权限
  2. Jquery实现文字向上逐条滚动
  3. ADO.NET防止字符串攻击方法
  4. 如何在Xcode6中添加空模板
  5. CentOS下SSH无密码登录的配置
  6. UIScrollview自动布局,UIScrollviewAutolayoutDemo
  7. 比较C++中的4种类型转换方式
  8. JVM——三个ClassLoader详解
  9. linux环境中 对tomcat配置java环境
  10. yii2 ./yii command : No such file or directory
  11. 百万程序员的苦恼-选择VB.NET还是C#
  12. 11.hibernate的连接查询
  13. Android Hal 分析
  14. Kafka性能测试实例
  15. hadoop配置项笔记 - streaming
  16. 14、JDBC-DbUtils-API
  17. .NET自动化测试工具:Selenium Grid
  18. 利用Go2Shell 实现 Mac Finder 直接shell端打开当前文件夹
  19. nagios系列(二)之nagios客户端的安装及配置
  20. Xml文件删除节点总是留有空标签

热门文章

  1. VS2012 2013 显示查找功能 无法具体定位 解决方法
  2. PHP基础知识之foreach
  3. Android四大组件--事务详解(转)
  4. 一图搞定【实战Java高并发程序设计】
  5. PHP ob_start() 函数介绍
  6. mac远程桌面连接windows 8.1 update,提示: 远程桌面连接无法验证您希望连接的计算机的身份
  7. 公司内部培训AlwaysOn PPT分享
  8. [.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)
  9. EF:The provider did not return a ProviderManifest instance
  10. 【requireJS源码学习01】了解整个requireJS的结构