Unity中文件驱动程序示例的构建和使用

文件驱动程序示例演示了如何实现一个驱动程序,该驱动程序使用外部相机和外部设备跟踪分别为Vuforia Engine相机帧和设备姿势提供数据。将Vuforia文件驱动程序导入Unity,以便在设备上播放视频序列。

前提条件

文件驱动程序示例可以从开发人员门户。文件驱动程序配置为加载使用SessionRecorder API录制的MP4文件。嵌入在录音中的设备跟踪姿势与视频轨迹中的摄像机帧一起输入Vuforia Engine。

文件驱动程序示例包括两组示例记录:使用宇航员图像目标和Unity序列。

或者,使用会话记录器API将自己的序列创建为MP4文件,请参阅会话记录器API录音和放音了解详细信息。

构建驱动程序

请参阅在作为包的一部分的README.md文件中构建文件驱动程序示例的步骤。确保在Unity中针对您的构建平台构建库。

请参见在本机中使用文件驱动程序示例有关使用本机IDE(如Android Studio、Xcode或Visual Studio)的实现步骤。

 

添加文件驱动程序

为所需平台构建文件驱动程序后,可以将输出库导入Unity。

注意:此示例应与设备存储器中可用的会话录制MP4文件一起使用。

注意:Unity中的播放模式不会加载从驱动程序初始化的Vuforia引擎。相反,在Unity Editor中播放会话录制,请参见录音和放音.

  1. 将编译后的二进制文件从build/bin/[platform]复制到:
    • 安卓: 资产/插件/安卓系统/
    • 超宽带: 资产/插件/WindowsStoreApps/[x64,ARM64]
    • iOS操作系统: 资产/插件/iOS/
  1. 将会话录制添加到Unity项目中。复制您的MP4(MP4)录制到资产/流资产文件夹。这确保它包含在应用程序构建中并存储在设备存储中。

  1. Vuforia配置窗口,启用延迟初始化以允许使用代码中的文件驱动程序进行其他配置和显式初始化。请参见Vuforia发动机生命周期了解详细信息。

  2. 此外,请确保添加许可证密钥,因为没有它,文件驱动程序将无法工作。

  1. 然后可以从任何应用程序级脚本设置驱动程序库,例如在开始()方法。之后,可以初始化Vuforia引擎:
Vuforia应用程序。实例。初始化(driverName,userData);

注:The 用户数据可以替换为国际贸易协定。如果不需要用户定义的数据。

注:在构建到iOS平台时,确保文件驱动程序框架作为嵌入式框架包含在Xcode项目中。请参阅中与链接库相关的步骤在iOS部分构建和使用本机文件驱动程序.

从文件驱动程序序列启动Vuforia的示例脚本。图像序列应该循环播放,而不是使用设备摄像头。

使用系统;使用系统。信息作战;使用系统。运行时。InteropServices;使用UnityEngine;使用UnityEngine。网络;使用Vuforia;公共类LoadDriver:MonoBehaviour{结构文件驱动程序用户数据{公共字符串序列DirectoryAbsolutePath;}静态FileDriverUserData sUserData;静态IntPtr sUserDataPtr=IntPtr。零;无效开始(){#如果UNITY_WSA||UNITY_IOSvar recordingPath=路径。合并(Application.streamingAssetsPath,“myRecording.mp4”);#其他var recordingPath=“资产://myRecording.mp4“;//相对于StreamingAssets的文件名#结尾sUserData=new FileDriverUserData{sequenceDirectoryAbsolutePath=recordingPath};sUserDataPtr=元帅。AllocHGlobal(Marshal.SizeOf(类型(FileDriverUserData));元帅。StructureToPtr(sUserData,sUserDataPtr,false);var驱动器名称=“”;#如果UNITY_ANDROIDdriverName=“libFileDriver.so”;#elif UNITY_WSA(机组_WSA)driverName=“FileDriver.dll”;#elif UNITY_IOS公司driverName=“FileDriver.framework”;#结尾Vuforia应用程序。实例。初始化(driverName,sUserDataPtr);Vuforia应用程序。实例。OnVuforiaDeinitialized+=OnVuForiaDeinitalized;}静态void OnVuforiaDeinitialized(){//在整个Vuforia生命周期中保留指向用户数据的指针元帅。FreeHGlobal(sUserDataPtr);}}