unity 不能调用台式机摄像头
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 不能调用台式机摄像头相关的知识,希望对你有一定的参考价值。
参考技术A 自制的unityAR相机,适配安卓和iOS。Unity3D自制AR相机手机摄像头+陀螺仪相机2017年11月22日22:45:51时,自制的unityAR相机,适配安卓和ios,不需要任何外部插件。打开手机摄像头、陀螺仪相机,完美运行。
台式机,是一种独立相分离的计算机,完完全全跟其它部件无联系,相对于笔记本和上网本来说,体积较大,主机、显示器等设备一般都是相对独立的,一般需要放置在电脑桌或者专门的工作台上。
Vuforia unity开发摄像头问题
参考技术A 原文地址 : http://www.cnblogs.com/Erma-king/p/5646968.htmlVuforia 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,再向原生暴露需要调用的接口~ 所以有了以下方法~
解决办法
// 关闭相机publicvoidCloseCameraDevice() CameraDevice.Instance.Stop(); CameraDevice.Instance.Deinit();// 打开相机publicvoidOpenCameraDevice() CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_DEFAULT); CameraDevice.Instance.Start();// 关闭识别publicvoidCloseCloudReco() CloudRecoBehaviour cloudRecoBehaviour = GameObject.FindObjectOfType(typeof(CloudRecoBehaviour))asCloudRecoBehaviour; cloudRecoBehaviour.CloudRecoEnabled =false;// 打开识别publicvoidOpenCloudReco() CloudRecoBehaviour cloudRecoBehaviour = GameObject.FindObjectOfType(typeof(CloudRecoBehaviour))asCloudRecoBehaviour; cloudRecoBehaviour.CloudRecoEnabled =true;
上面这些方法是在Unity里面实现的,写在一个脚本里,挂在一个GameObject上供原生调用~
后来解决的坑~
Android在扫描界面打开闪关灯,因为扫描界面Unity调用了Camera,安坐的闪关灯是通过实例化相机来打开的~这时候Android拿不到Camera,因为Unity把Camera暂用了,,在扫描界面不能打开闪关灯~ 解决方法~如下
publicvoidOpenFlash() CameraDevice.Instance.SetFlashTorchMode (true);publicvoidCloseFlash() CameraDevice.Instance.SetFlashTorchMode (false);
人与人斗,其乐无穷。人与天斗——人定胜天!!!
以上是关于unity 不能调用台式机摄像头的主要内容,如果未能解决你的问题,请参考以下文章
同一个ubuntu镜像文件在不同电脑安装后桌面显示为啥不一样,一个左边有一排快速启动栏的那种(台式机)
Python简直无所不能!在电脑上如何调用手机摄像头?教你轻松搞定
每日随笔毕业论文答辩 ③ ( 线上答辩注意点 | 答辩 PPT 准备 | 答辩通过的因素 )
每日随笔毕业论文答辩 ③ ( 线上答辩注意点 | 答辩 PPT 准备 | 答辩通过的因素 )