使用 Unity for HoloLens 的 WinRT API
本页介绍如何在面向 HoloLens 的 Unity 项目中使用 WinRT API。
混合现实 API
在与 .NET Standard 2.0 兼容的投影中提供了以混合现实为核心的 Windows SDK 子集,无需预处理器指令即可在项目中使用它。 包含 Windows.Perception 和 Windows.UI.Input.Spatial 命名空间中的大多数 API,将来可能会扩展以包含其他 API。 在编辑器中运行时可以使用投影的 API,这会允许使用播放模式。 若要使用此投影,请对项目进行以下修改:
使用混合现实功能工具添加对混合现实 WinRT 投影 UPM 包的引用。
通过
Microsoft.
添加对Windows
命名空间的引用前缀:using namespace Microsoft.Windows.Perception.Spatial;
注意
如果项目具有对任何
Windows.*
命名空间的内联引用,并且编译器尝试针对相应的Microsoft.Windows.*
命名空间进行解析,则导入此包可能会导致命名空间解析问题。 在这种情况下,建议更新这些引用以使用global::Windows.*
,或更新这些脚本以将特定的Windows.*
命名空间作为using
语句导入。将本机指针强制转换替换为
FromNativePtr
:var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
有条件地包括 WinRT API 调用
还可通过使用预处理器指令,在为通用 Windows 平台和 Xbox One 平台构建的 Unity 项目中使用 WinRT API。 仅在这些生成中有条件地包含你在面向 WinRT API 的 Unity 脚本中编写的任何代码。
可在 Unity 中通过两个步骤完成此操作:
- 必须在播放器设置中将 API 兼容级别设置为“.NET 4.6”或“.NET Standard 2.0”
- “编辑”>“项目设置”>“播放器”>“配置”>“API 兼容性级别”设为“.NET 4.6”或“.NET Standard 2.0”
- 预处理器指令 ENABLE_WINMD_SUPPORT 必须包装在任何利用 WinRT 的代码周围
以下代码片段来自 Unity 手册中关于通用 Windows 平台:C# 脚本中的 WinRT API 的页面。 在此示例中,返回了广告 ID,但仅在 UWP 和 Xbox One 版本中发挥:
using UnityEngine;
public class WinRTAPI : MonoBehaviour {
void Update() {
auto adId = GetAdvertisingId();
// ...
}
string GetAdvertisingId() {
#if ENABLE_WINMD_SUPPORT
return Windows.System.UserProfile.AdvertisingManager.AdvertisingId;
#else
return "";
#endif
}
}
在 Unity C# 项目中编辑脚本
在 Unity 编辑器中双击脚本时,默认将在编辑器项目中启动脚本。 WinRT API 看起来未知,因为 Visual Studio 项目不引用 Windows 运行时。 未定义 ENABLE_WINMD_SUPPORT 指令,在将项目生成到 UWP Visual Studio 解决方案之前,将忽略任何已用 #if 包装的代码。