如何在 HoloLens 2 中将 SimpleITK 集成到 Unity for app 中

Posted

技术标签:

【中文标题】如何在 HoloLens 2 中将 SimpleITK 集成到 Unity for app 中【英文标题】:How to integrate SimpleITK in Unity for app in HoloLens 2 【发布时间】:2022-01-03 16:41:46 【问题描述】:

我正在 Unity 2020.3.3f1 中开发一个应用程序,以部署在 HoloLens 2 中。这个应用程序必须处理医学图像,因此我需要使用 SimpleITK 库。 我已经下载了 SimpleITK 源文件并在 Visual Studio 2017 中为 ARM64 架构编译它们,以匹配 HoloLens 2 ARM64 架构,遵循以下过程:https://blogs.windows.com/windowsdeveloper/2018/11/15/official-support-for-windows-10-on-arm-development/。 我在 Unity 项目的 Asset 文件夹中添加了本机和托管 .dll,并编写了一个使用 SimpleITK 的 c# 脚本。

在 Unity 编辑器中一切正常,没有错误,但是当我在 HoloLens 2 中部署应用程序时,没有任何效果。 在 Visual Studio 中启动解决方案的调试(调试 -> 开始调试),只要调用使用 SimpleITK 的脚本,这些行就会出现在输出窗口中:

'SpatialAwareness.exe' (Win32): Loaded 'U:\USERS\DefaultAccount\AppData\Local\DevelopmentFiles\BaseVS.Release_ARM64.Elena\SimpleITKCSharpNative.dll'. Module was built without symbols.
'SpatialAwareness.exe' (Win32): Unloaded 'U:\USERS\DefaultAccount\AppData\Local\DevelopmentFiles\BaseVS.Release_ARM64.Elena\SimpleITKCSharpNative.dll'
Exception thrown at 0x00007FFC1AAF39EC in SpatialAwareness.exe: Microsoft C++ exception: Il2CppExceptionWrapper at memory location 0x00000094365FE590.

如何解决错误?

【问题讨论】:

【参考方案1】:

您构建的 SimpleITK DLL 似乎缺少 Windows 运行时组件。

如果您将 C++ DLL 创建为 Win32 二进制文件,则在 HoloLens2 上运行时会引发异常,因为 Unity 在构建 WSA 项目时不会包含标准 Win32 二进制文件。因此,您需要将 Win32 DLL 重新创建为 UWP DLL 或将本机 win32 DLL 移植到 UWP DLL,请参阅此处的指导:To port a native DLL to the UWP without creating a new project

【讨论】:

以上是关于如何在 HoloLens 2 中将 SimpleITK 集成到 Unity for app 中的主要内容,如果未能解决你的问题,请参考以下文章

在 HoloLens 2 中用手在平面上绘制

HoloLens开发手记 - Unity之World Anchor空间锚

如何将HoloLens 2仿真器与本地UDP发送器连接

如何在 C# 中使用 HoloLens 2 在 2D UWP 应用程序中获取 Eye-gaze 位置

在 Unity 开发中使用 FileOpenPicker 应用程序合约 Hololens 2

如何在模拟器里体验微软HoloLens