WinRT-API:er med Unity för HoloLens
Den här sidan beskriver hur du använder WinRT-API:er i ditt Unity-projekt för HoloLens.
Mixed Reality API:er
En Mixed Reality fokuserad delmängd av Windows SDK har gjorts tillgänglig i en .NET Standard 2.0-kompatibel projektion, som du kan använda i projektet utan preprocessor-direktiv. De flesta API:er i Windows.Perception och Windows.UI.Input.Spatial-namnrymder ingår och kan utökas till att omfatta ytterligare API:er i framtiden. De projicerade API:erna kan användas när de körs i redigeraren, vilket möjliggör användning av uppspelningsläge. Om du vill använda den här projektionen gör du följande ändringar i projektet:
Lägg till en referens till UPM-paketet Mixed Reality WinRT Projections med hjälp av Mixed Reality-funktionsverktyget.
Prefixreferenser till
Windows
namnområdet medMicrosoft.
:using namespace Microsoft.Windows.Perception.Spatial;
Anteckning
Om du importerar det här paketet kan det orsaka problem med namnområdesmatchning om projektet har infogade referenser till några
Windows.*
namnområden, där kompilatorn försöker matcha mot ett motsvarandeMicrosoft.Windows.*
namnområde. I det här fallet rekommenderar vi att du antingen uppdaterar dessa referenser för att användaglobal::Windows.*
eller uppdatera skripten för att importera det specifikaWindows.*
namnområdet som enusing
instruktion.Ersätt inbyggda pekare med
FromNativePtr
:var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
Inkludera WinRT API-anrop villkorligt
Du kan också använda WinRT-API:er i Unity-projekt som skapats för Universell Windows-plattform- och Xbox One-plattformen med hjälp av preprocessor-direktiv. All kod som du skriver i Unity-skript som riktar in sig på WinRT-API:er måste inkluderas villkorsstyrt endast för dessa versioner.
Detta kan göras via två steg i Unity:
- API-kompatibilitetsnivån måste anges till .NET 4.6 eller .NET Standard 2.0 i spelarinställningarna
- Redigera>Projektinställningar>Spelare>Konfiguration>Api-kompatibilitetsnivå till .NET 4.6 eller .NET Standard 2.0
- Preprocessor-direktivet ENABLE_WINMD_SUPPORT måste omslutas med all WinRT-utnyttjad kod
Följande kodfragment kommer från unity-sidan för Universell Windows-plattform: WinRT API i C#-skript. I det här exemplet returneras ett annonserings-ID, men endast på UWP- och Xbox One-versioner:
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
}
}
Redigera dina skript i ett Unity C#-projekt
När du dubbelklickar på ett skript i Unity-redigeraren startar det som standard skriptet i ett redigeringsprojekt. WinRT-API:erna verkar vara okända eftersom Visual Studio-projektet inte refererar till Windows Runtime. ENABLE_WINMD_SUPPORT-direktivet är odefinierat och all #if omsluten kod ignoreras tills du skapar projektet i en UWP Visual Studio-lösning.