Unity-UWP部署HoloLens 2+Azure Kinect DK应用遇k4a.dll加载失败
k4a DLL加载失败问题 问题描述
开发适配HoloLens 2的应用,借助Azure Kinect DK实现步行手势等人体追踪功能,通过Holographic Remoting在Unity编辑器中测试顺畅,但部署到设备后出现以下错误:
DllNotFoundException: Unable to load DLL 'k4a'. Tried the load the following dynamic libraries: Unable to load dynamic library 'k4a' because of 'Failed to open the requested dynamic library (0x06000000) - The specified module could not be found. (WinError: 0000007e)
已尝试的无效操作:
- 将Azure Kinect的dll放入Unity生成的Visual Studio UWP项目
build\bin\ARM64\Release目录 - 将Azure Kinect的dll放入Unity项目
Assets\Plugins目录
补充背景:使用Unity资源商店的Azure Kinect Examples for Unity集成,传感器dll位于Assets\AzureKinectExamples\SDK\Kinect4AzureSDK\Plugins,人体追踪SDK的dll从Azure Kinect Body Tracking SDK安装路径复制到项目根目录,该配置在Unity编辑器及Windows、Mac、Linux平台可用,但不适用于HoloLens 2部署场景。
核心原因
HoloLens 2是ARM64架构的UWP设备,需要对应架构的UWP版本DLL,而非桌面版DLL;同时必须正确配置Unity的插件导入规则,确保打包时DLL被自动包含到UWP安装包中,手动复制到VS项目目录的方式无法保证DLL被正确签名和打包进appx。
解决步骤
1. 获取ARM64 UWP版Azure Kinect DLL及模型文件
- 下载官方UWP版本的Azure Kinect传感器SDK和人体追踪SDK(注意区分桌面版)
- 解压后提取ARM64架构的文件:
- 传感器相关:
k4a.dll、k4arecord.dll、k4a.lib - 人体追踪相关:
k4abt.dll、k4abt.lib、dnn_model_2_0_op11.onnx(模型文件必须随应用部署)
- 传感器相关:
2. 配置Unity插件导入设置
- 在Unity项目中创建
Assets\Plugins\UWP\ARM64目录 - 将提取到的ARM64 UWP版
k4a.dll、k4arecord.dll、k4abt.dll放入该目录 - 选中每个DLL,在Inspector面板设置:
- 平台设置:仅勾选
UWP,取消其他平台选项 - CPU架构:仅勾选
ARM64 - 加载类型:设置为
Load on Startup - 包含在构建中:确保勾选
- 平台设置:仅勾选
3. 处理人体追踪模型文件
将dnn_model_2_0_op11.onnx放入Assets\StreamingAssets目录,这样打包时模型会被自动包含到UWP应用的安装目录中。代码中加载模型时,使用Application.streamingAssetsPath获取正确路径。
4. 清理冲突文件
- 删除之前放入
Assets\Plugins根目录、AzureKinectExamples插件目录中的桌面版DLL,避免打包时出现架构冲突 - 清空Unity的
Library目录,重新生成UWP项目
5. 检查Visual Studio打包配置
- 打开生成的UWP项目,确认平台目标设置为
ARM64 - 在项目属性的
链接器 -> 输入中,添加k4a.lib和k4abt.lib的引用(如果代码中有静态调用需求) - 打开
Package.appxmanifest,确保已添加webcam、microphone、spatialPerception权限(Azure Kinect功能依赖这些权限)
验证方式
部署到HoloLens 2后,通过设备的Device Portal进入应用安装目录(路径为LocalAppData\<你的应用ID>\LocalState或Assets),确认k4a.dll、k4abt.dll和模型文件都已正确部署。
内容的提问来源于stack exchange,提问作者Chí Hào Hà

