使用 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,这会允许使用播放模式。 若要使用此投影,请对项目进行以下修改:

  1. 使用混合现实功能工具添加对混合现实 WinRT 投影 UPM 包的引用。

    A listing of the Mixed Reality WinRT Projections package under the Platform Support header in the Mixed Reality Feature Tool.

  2. 通过 Microsoft. 添加对 Windows 命名空间的引用前缀:

    using namespace Microsoft.Windows.Perception.Spatial;
    

    注意

    如果项目具有对任何 Windows.* 命名空间的内联引用,并且编译器尝试针对相应的 Microsoft.Windows.* 命名空间进行解析,则导入此包可能会导致命名空间解析问题。 在这种情况下,建议更新这些引用以使用 global::Windows.*,或更新这些脚本以将特定的 Windows.* 命名空间作为 using 语句导入。

  3. 将本机指针强制转换替换为 FromNativePtr

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

有条件地包括 WinRT API 调用

还可通过使用预处理器指令,在为通用 Windows 平台和 Xbox One 平台构建的 Unity 项目中使用 WinRT API。 仅在这些生成中有条件地包含你在面向 WinRT API 的 Unity 脚本中编写的任何代码。

可在 Unity 中通过两个步骤完成此操作:

  1. 必须在播放器设置中将 API 兼容级别设置为“.NET 4.6”或“.NET Standard 2.0”
    • “编辑”>“项目设置”>“播放器”>“配置”>“API 兼容性级别”设为“.NET 4.6”或“.NET Standard 2.0”
  2. 预处理器指令 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 包装的代码。

另请参阅