API-интерфейсы WinRT с Unity для HoloLens

На этой странице описывается, как использовать API-интерфейсы WinRT в проекте Unity для HoloLens.

API Смешанная реальность

В проекции, совместимой с .NET Standard 2.0, доступное Смешанная реальность подмножество windows SDK, которое можно использовать в проекте без директив препроцессора. Большинство API в пространствах имен Windows.Perception и Windows.UI.Input.Spatial включены и в будущем могут быть расширены, чтобы включить дополнительные API. Проецируемые API можно использовать во время выполнения в редакторе, что позволяет использовать режим воспроизведения. Чтобы использовать эту проекцию, внесите следующие изменения в проект:

  1. Добавьте ссылку на пакет UPM Смешанная реальность проекций WinRT с помощью средства Смешанная реальность Feature Tool.

    Список пакета Смешанная реальность проекций WinRT в заголовке Поддержка платформы в средстве Смешанная реальность компонентов.

  2. Префикс ссылок на Windows пространство имен с помощью Microsoft.:

    using namespace Microsoft.Windows.Perception.Spatial;
    

    Примечание

    Импорт этого пакета может привести к проблемам с разрешением пространств имен, если в проекте есть встроенные ссылки на какие-либо Windows.* пространства имен, при этом компилятор пытается разрешить для соответствующего Microsoft.Windows.* пространства имен. В этом случае рекомендуется либо обновить эти ссылки для использования global::Windows.* , либо обновить эти скрипты для импорта конкретного Windows.* пространства имен в качестве инструкции using .

  3. Замените собственные приведения указателей на FromNativePtr:

    var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
    

Условное включение вызовов API WinRT

Вы также можете использовать API-интерфейсы WinRT в проектах Unity, созданных для платформы универсальная платформа Windows и Xbox One, с помощью директив препроцессора. Любой код, который вы пишете в скриптах Unity, предназначенных для API WinRT, должен быть условно включен только для этих сборок.

Это можно сделать с помощью двух шагов в 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: API WinRT в скриптах C#. В этом примере возвращается идентификатор рекламы, но только в сборках 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, он по умолчанию запустит скрипт в проекте редактора. API-интерфейсы WinRT будут неизвестны, так как проект Visual Studio не ссылается на среда выполнения Windows. Директива ENABLE_WINMD_SUPPORT не определена, и любой #if упакованный код игнорируется до тех пор, пока вы не встроите проект в решение UWP Visual Studio.

См. также раздел