API-интерфейсы WinRT с Unity для HoloLens
На этой странице описывается, как использовать API-интерфейсы WinRT в проекте Unity для HoloLens.
API Смешанная реальность
В проекции, совместимой с .NET Standard 2.0, доступное Смешанная реальность подмножество windows SDK, которое можно использовать в проекте без директив препроцессора. Большинство API в пространствах имен Windows.Perception и Windows.UI.Input.Spatial включены и в будущем могут быть расширены, чтобы включить дополнительные API. Проецируемые API можно использовать во время выполнения в редакторе, что позволяет использовать режим воспроизведения. Чтобы использовать эту проекцию, внесите следующие изменения в проект:
Добавьте ссылку на пакет UPM Смешанная реальность проекций WinRT с помощью средства Смешанная реальность Feature Tool.
Префикс ссылок на
Windows
пространство имен с помощьюMicrosoft.
:using namespace Microsoft.Windows.Perception.Spatial;
Примечание
Импорт этого пакета может привести к проблемам с разрешением пространств имен, если в проекте есть встроенные ссылки на какие-либо
Windows.*
пространства имен, при этом компилятор пытается разрешить для соответствующегоMicrosoft.Windows.*
пространства имен. В этом случае рекомендуется либо обновить эти ссылки для использованияglobal::Windows.*
, либо обновить эти скрипты для импорта конкретногоWindows.*
пространства имен в качестве инструкцииusing
.Замените собственные приведения указателей на
FromNativePtr
:var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
Условное включение вызовов API WinRT
Вы также можете использовать API-интерфейсы WinRT в проектах Unity, созданных для платформы универсальная платформа Windows и Xbox One, с помощью директив препроцессора. Любой код, который вы пишете в скриптах Unity, предназначенных для API WinRT, должен быть условно включен только для этих сборок.
Это можно сделать с помощью двух шагов в Unity:
- В параметрах проигрывателя должен быть установлен уровень совместимости API .NET 4.6 или .NET Standard 2.0 .
- Редактировать>Параметры> проектаИгрок>Конфигурации>Уровень совместимости API с .NET 4.6 или .NET Standard 2.0
- Директива препроцессора 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.