Unity 2021中Hololens 2使用FFmpegInteropX的依赖冲突问题
Unity 2021 + HoloLens 2 使用FFmpegInteropX解决WinRT依赖冲突方案
针对你遇到的WinRT.Runtime依赖缺失、与MRTK冲突问题,以下是亲测有效的解决步骤:
1. 重新编译FFmpegInteropX,规避WinRT直接依赖
- 编译时选择仅针对UWP平台的.NET Standard 2.0兼容版本,禁用
USE_WINRT_API等相关编译选项,改用纯.NET Standard API实现解码逻辑,避免直接绑定WinRT.Runtime。 - 确保编译产物只包含FFmpegInteropX核心DLL和对应的ARM64原生FFmpeg库,不要附带任何WinRT相关的依赖文件。
2. 修正Unity插件的导入与平台设置
- 将编译好的DLL和原生库放在
Assets/Plugins/WSA/ARM64目录下,严格限定仅ARM64架构加载。 - 在Unity Inspector中配置插件属性:
- 仅勾选
WSAPlayer平台,取消其他平台的勾选 - CPU架构选择
ARM64 - 取消非必要选项(如
Load on Startup,除非你的解码逻辑需要启动即加载)
- 仅勾选
- 关键:绝对不要手动添加WinRT.Runtime.dll或Microsoft.Windows.SDK.NET.dll到Plugins文件夹,这些属于UWP系统级库,Unity构建UWP包时会自动从系统引用,手动添加必然触发冲突。
3. 隔离WinRT代码,优化预处理逻辑
- 保留
ENABLE_WINMD_SUPPORT预处理指令,但确保WinRT相关代码仅在UWP构建时生效,且通过Unity封装的Windows命名空间间接调用(比如Windows.Media相关API),不要直接引用WinRT.Runtime的原生类型。 - 如果必须用到FFmpegInteropX的WinRT特性,单独创建UWP WinMD适配层:用Visual Studio编写一个WinMD组件封装FFmpegInteropX的WinRT调用,然后在Unity中通过.NET Standard接口调用这个适配层,实现依赖隔离。
4. 解决MRTK冲突的细节调整
- 确保使用与Unity 2021兼容的MRTK 2.8.x及以上版本,这类版本对UWP WinRT依赖的处理更完善。
- 在Unity Player Settings中,进入
UWP > Other Settings:- 设置
Scripting Runtime Version为.NET 4.x Equivalent - 设置
API Compatibility Level为.NET Standard 2.0
- 设置
- 若仍有冲突,在
Assets/Plugins/WSA下创建link.xml文件,告诉Unity构建时排除重复依赖的系统库:<linker> <assembly fullname="Microsoft.Windows.SDK.NET" preserve="none" /> <assembly fullname="WinRT.Runtime" preserve="none" /> </linker>
5. 验证构建流程
- 先清理Unity的
Library和Temp文件夹,重新导入插件,避免缓存的旧依赖干扰。 - 构建UWP包时选择
ARM64架构,取消Unity C# Projects勾选,减少冗余项目文件的影响。 - 若构建后仍有问题,打开生成的UWP解决方案,检查NuGet包引用,确保没有重复安装WinRT相关包,Unity会自动处理系统级依赖。
内容的提问来源于stack exchange,提问作者CocoaMilka
相关产品推荐
相关产品推荐

