• vuforia 中摄像机的开启与关闭


    本文主要讲解的是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,再向原生暴露需要调用的接口~ 所以有了以下方法~

    解决办法

    [C#] 纯文本查看 复制代码
     
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 关闭相机
    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上供原生调用~

    后来解决的坑~

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

    [C#] 纯文本查看 复制代码
     
    1
    2
    3
    4
    5
    6
    public void OpenFlash () {
        CameraDevice.Instance.SetFlashTorchMode (true);
    }
     
    public void CloseFlash () {
        CameraDevice.Instance.SetFlashTorchMode (false);
    }

     

  • 相关阅读:
    【BZOJ4300】绝世好题
    codeforce1051F
    【BZOJ3329】Xorequ
    codeforce739c
    【UVA11825】
    codeforce6E
    CF 1023D Array Restoration
    BZOJ 1911 [APIO2010] 特别行动队
    POJ 3709 K-Anonymous Sequence
    BZOJ 2726 [SDOI2012] 任务安排
  • 原文地址:https://www.cnblogs.com/shenlaiyaoshi/p/8414197.html
Copyright © 2020-2023  润新知