Vuforia用在安卓设备中外接USB摄像头(二)

一、前言

上一篇Vuforia用在安卓设备中外接USB摄像头(一)主要介绍的是纯安卓上使用Vuforia+UVC Camera,本篇介绍在Unity中开发Vuforia+UVCCamera。有了上一篇配置的环境和生成的SO文件基础,本篇才可以顺利的完成在Unity中使用Vuforia+UVCCamera。

二、开发过程

1、unity中环境搭建:首先,在unity中新建Plugins/Android/libs文件夹,然后将上一篇生成的samples\UVCDriver\build\bin\Android文件夹里的文件都拖入到刚刚在unity中建立的libs文件夹中,最后在unity中如图2.1所示:

Vuforia用在安卓设备中外接USB摄像头(二)_第1张图片 图2.1 在unity的lib文件夹中拖入UVC驱动摄像头的so文件

2、勾选Player Settings/XR Settings的Vuforia Augmented Reality Support,如图2.2所示unity在勾选之后会自动导入开发Vuforia相关的文

Vuforia用在安卓设备中外接USB摄像头(二)_第2张图片 图2.2 Vuforia的开发设置

件,在unity2019.2.11中勾选完会有提示不能使用vuforia,需要删掉Graphics APIs中的其他选项,只保留OpenGLES3,,如图2.3所示

Vuforia用在安卓设备中外接USB摄像头(二)_第3张图片 图2.3  去掉Graphis的其他不需要选项

3、新建一个Scene,添加ARCamera和ImageTarget,搭建一个简易的AR单图识别场景,并配置好ARCamera中的Key

4、新建一个脚本命名为UVCManager,该脚本为呼出对话框设置UVC调用摄像头的权限,并自动将驱动进行设置,以便Vuforia的引擎在初始化的时候采用的是外接的USB摄像头,完整的代码为:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class UVCManager : MonoBehaviour
{
    private void Awake()
    {
#if UNITY_ANDROID
        bool driverLibrarySet = false;
        driverLibrarySet = VuforiaUnity.SetDriverLibrary("libUVCDriver.so");

        if (driverLibrarySet)
        {
            // Load your applications scene here 
            // InitAndLoadScene(VUFORIA_DRIVER_CAMERA_SCENE_INDEX);

            // The application needs to ask for USB permissions to run the USB camera
            // this is done after the driver is loaded. We call a method in the UVC driver
            // Java code to request permissions, passing in the Unity app's activity.
            AndroidJavaClass unityJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject unityActivity = unityJC.GetStatic("currentActivity");

            AndroidJavaClass usbControllerJC = new AndroidJavaClass("com.vuforia.samples.uvcDriver.USBController");
            usbControllerJC.CallStatic("requestUSBPermission", unityActivity);
        }
        else
        {
            Debug.Log("Failed to initialize the UVC driver - defaulting to the standard scene");

            // Fall back to the in-built camera
        }
#endif
    }
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

将该脚本随便拖入到一个场景的物体中。

5、打包发布APK

三、总结

1、使用unity2019.2.11发布的APK可以成功使用,但是在unity2018.4.12中发布的APK就出现初始化失败的界面,尚还不知道具体原因是什么;

你可能感兴趣的:(Android,Unity,Shader)