Portera HoloLens-appar (första generationen) till HoloLens 2
Den här guiden är skräddarsydd för att hjälpa utvecklare med ett befintligt Unity-program för HoloLens (1:a generationen) att porta sitt program till HoloLens 2-enheten. Det finns fyra viktiga steg för att portera ett HoloLens-program (första generationen) till HoloLens 2.
Avsnitten nedan beskriver information för varje steg:
Steg 1 | Step 2 | Step 3 | Step 4 |
---|---|---|---|
Ladda ned de senaste verktygen | Uppdatera Unity-projekt | Kompilera för ARM | Migrera till MRTK v2 |
Förutsättningar
Vi rekommenderar starkt att du använder källkontroll för att spara en ögonblicksbild av programmets ursprungliga tillstånd innan du startar portningsprocessen. Vi rekommenderar också att du sparar kontrollpunktstillstånd vid olika tidpunkter under processen. Det kan vara bra att ha en annan instans av det ursprungliga programmet öppet i Unity så att du kan jämföra sida vid sida under portningsprocessen.
Kommentar
Innan du porterar kontrollerar du att du har de senaste verktygen installerade för Windows Mixed Reality-utveckling. För de flesta befintliga HoloLens-utvecklare innebär detta att uppdatera till den senaste versionen av Visual Studio 2019 och installera lämplig Windows SDK. Innehållet som följer går vidare till olika Unity-versioner och Mixed Reality Toolkit (MRTK) version 2.
Mer information finns i Installera verktygen.
Migrera projektet till den senaste versionen av Unity
Om du använder MRTK v2 rekommenderar vi att du uppdaterar till MRTK 2.7 innan du uppgraderar projektet till Unity 2020.3 LTS. MRTK 2.7 stöder Unity 2018, 2019 och 2020, så att du kan se till att projektet är klart för Unity 2020 även innan du uppgraderar Unity. Utvärdera eventuella plugin-beroenden som för närvarande finns i projektet och avgöra om dessa DLL:er kan skapas för ARM64. För projekt med ett hårt ARM-beroende plugin-program kan du behöva fortsätta att skapa din app för ARM.
Uppdatera scen-/projektinställningar i Unity
När du har uppdaterat till Unity 2020.3 LTS rekommenderar vi att du uppdaterar vissa inställningar i Unity för optimala resultat på enheten. De här inställningarna beskrivs i detalj under rekommenderade inställningar för Unity.
För att upprepa är .NET-skriptets serverdel inaktuell i Unity 2018 och tas bort från och med Unity 2019. Du bör starkt överväga att byta projekt till IL2CPP.
Kommentar
IL2CPP-skriptserverdelen kan orsaka längre byggtider från Unity till Visual Studio. Utvecklare bör konfigurera sin utvecklardator för att optimera IL2CPP-byggtider. Du kan också ha nytta av att konfigurera en cacheserver, särskilt för Unity-projekt med en stor mängd tillgångar (exklusive skriptfiler) eller ständigt föränderliga scener och tillgångar. När du öppnar ett projekt lagrar Unity kvalificerade tillgångar i ett internt cacheformat på utvecklardatorn. Objekt måste importeras på nytt och bearbetas igen när de ändras. Den här processen kan göras en gång, sparas på en cacheserver och sedan delas med andra utvecklare för att spara tid, i motsats till varje utvecklare som bearbetar återimporten av nya ändringar lokalt.
När du har tagit itu med eventuella icke-bakåtkompatibla ändringar som beror på att du flyttar till den uppdaterade Unity-versionen skapar och testar du dina aktuella program på HoloLens (första generationen). Det här är ett bra tillfälle att skapa och spara en incheckning i källkontrollen.
Kompilera beroenden/plugin-program för ARM-processor
HoloLens (första generationen) kör program på en x86-processor. HoloLens 2 använder en ARM-processor. Befintliga HoloLens-program måste portas över för att stödja ARM. Som tidigare nämnts stöder Unity 2018 LTS kompilering av ARM32-appar medan Unity 2019 och senare stöder kompilering av ARM32- och ARM64-appar. Utveckling för ARM64-program är att föredra eftersom det finns en väsentlig skillnad i prestanda. Detta kräver dock att alla plugin-beroenden också skapas för ARM64.
Granska alla DLL-beroenden i ditt program. Vi rekommenderar att du tar bort beroenden som inte längre behövs för projektet. För återstående plugin-program som krävs matar du in respektive ARM32- eller ARM64-binärfiler i ditt Unity-projekt.
När du har matat in relevanta DLL:er skapar du en Visual Studio-lösning från Unity och kompilerar en AppX för ARM i Visual Studio för att verifiera att ditt program kan skapas för ARM-processorer. Vi rekommenderar att du sparar programmet som en incheckning i källkontrolllösningen.
Viktigt!
Program som använder MRTK v1 kan köras på HoloLens 2 efter att byggmålet har ändrats till ARM, förutsatt att alla andra krav uppfylls. Detta omfattar att se till att du har ARM-versioner av alla dina plugin-program. Din app har dock inte åtkomst till HoloLens 2-specifika funktioner som artikulerad hand- och ögonspårning. MRTK v1 och MRTK v2 har olika namnområden som gör att båda versionerna kan finnas i samma projekt, vilket är användbart för övergång från en till en annan.
Uppdatera till MRTK version 2
MRTK Version 2 är den nya verktygslådan ovanpå Unity som stöder både HoloLens (första generationen) och HoloLens 2. Det är också där alla nya HoloLens 2-funktioner har lagts till, till exempel handinteraktioner och ögonspårning.
Kolla in följande resurser för mer information om hur du använder MRTK version 2:
Förbereda för migreringen
Innan du matar in de nya *.unitypackage-filerna för MRTK v2 rekommenderar vi att du inventerar (1) all anpassad kod som integreras med MRTK v1 och (2) all anpassad kod för indatainteraktioner eller UX-komponenter. Den vanligaste och vanligaste konflikten för en utvecklare med mixad verklighet som matar in MRTK v2 omfattar indata och interaktioner. Vi rekommenderar att du granskar MRTK v2-indatamodellen.
Slutligen har den nya MRTK v2 övergått från en modell med skript och in-scene manager-objekt till en konfigurations- och tjänsteleverantörsarkitektur. Detta resulterar i en renare scenhierarki och arkitekturmodell, men kräver en inlärningskurva för att förstå de nya konfigurationsprofilerna. Läs konfigurationsguiden för Mixed Reality Toolkit för att börja bekanta dig med de viktiga inställningar och profiler som du måste anpassa efter programmets behov.
Migrera projektet
När du har importerat MRTK v2 har unity-projektet troligtvis många kompilatorrelaterade fel. Dessa är vanliga på grund av den nya namnområdesstrukturen och komponentnamnen. Fortsätt att lösa dessa fel genom att ändra skripten till de nya namnrymderna och komponenterna.
Information om de specifika API-skillnaderna mellan HTK/MRTK och MRTK v2 finns i portningsguiden på WIKI:en för MRTK version 2.
Bästa praxis
- Ge i förväg till MRTK-standardskuggaren.
- Arbeta med en icke-bakåtkompatibel ändringstyp i taget (exempel: IFocusable to IMixedRealityFocusHandler).
- Testa efter varje ändring och använd källkontroll.
- Använd standard-MRTK UX (knappar, skiffer och så vidare) när det är möjligt.
- Avstå från att ändra MRTK-filer direkt. skapa omslutning runt MRTK-komponenter.
- Den här åtgärden underlättar framtida MRTK-inmatning och uppdateringar.
- Granska och utforska exempelscener som tillhandahålls i MRTK, särskilt HandInteractionExamples.scene.
- Återskapa arbetsytebaserat användargränssnitt med quads, colliders och TextMeshPro-text.
- Aktivera delning av djupbuffert eller ange fokuspunkt. Använd en 16-bitars djupbuffert för bättre prestanda. Se till att du även återger djup när du återger färg. Unity skriver vanligtvis inte djup för transparenta spel och textspelobjekt.
- Välj Enstaka passinstansåtergivning.
- Använda HoloLens 2-konfigurationsprofilen för MRTK
Testa ditt program
I MRTK version 2 kan du simulera handinteraktioner direkt i Unity och utveckla med de nya API:erna för handinteraktioner och ögonspårning. HoloLens 2-enheten krävs för att skapa en tillfredsställande användarupplevelse. Vi rekommenderar att du studerar dokumentationen och verktygen för bättre förståelse. MRTK v2 stöder utveckling på HoloLens (första generationen) och traditionella indatamodeller som "select via air-tap" kan testas på HoloLens (första generationen).
Uppdatera din interaktionsmodell för HoloLens 2
Varning
Om projektet använder någon av XR:erna. WSA-API:er, observera att dessa fasas ut till förmån för Unitys nya XR-indata-API:er i framtida Unity-versioner. Mer information om XR-indata-API:er finns här.
När programmet har porterats och förberetts för HoloLens 2 är du redo att överväga att uppdatera interaktionsmodellen och hologramdesignplaceringarna. I HoloLens (1:a generationen) har ditt program förmodligen en modell för blick och incheckning med hologram relativt långt borta för att passa in i synfältet.
Så här uppdaterar du programdesignen så att den passar bäst för HoloLens 2:
- MRTK-komponenter: Om du har lagt till MRTK v2 i förarbetet finns det olika komponenter/skript som har utformats och optimerats för HoloLens 2.
- Interaktionsmodell: Överväg att uppdatera din interaktionsmodell. I de flesta scenarier rekommenderar vi att du växlar från blick och checkar in till händer. Vissa av dina hologram kan vara utom räckhåll, och om du byter till händer resulterar det i långt interaktion som pekar på strålar och griper gester.
- Hologramplacering: När du har växlat till en interaktionsmodell för händer bör du överväga att flytta några hologram närmare så att användarna kan interagera direkt med dem genom att använda gester med nästan interaktionsgrepp med händerna. De typer av hologram som ska flyttas närmare direkt hämtar eller interagerar med är:
- små målmenyer
- kontroller
- Knappar
- mindre hologram som, när de hämtas och inspekteras, passar i holoLens 2-fältet.
Program och scenarier varierar; Vi fortsätter att förfina och publicera designvägledning baserat på feedback och fortsatta lärdomar.
Ytterligare tips om hur du flyttar program från x86 till ARM
Enkla Unity-program är enkla eftersom du kan skapa ett ARM-programpaket eller distribuera direkt till enheten så att paketet kan köras. Vissa interna Unity-plugin-program kan innebära vissa utvecklingsutmaningar. Därför måste du uppgradera alla unity-inbyggda plugin-program till Visual Studio 2019 och sedan återskapa för ARM.
Ett program använde plugin-programmet Unity AudioKinetic Wwise. Unity-versionen som används hade inte något UWP ARM-plugin-program, och det gjordes stora ansträngningar för att omarbeta ljudfunktionerna i programmet i fråga för att köras på ARM. Se till att alla nödvändiga plugin-program för dina utvecklingsplaner är installerade och tillgängliga i Unity.
I vissa fall kanske det inte finns något UWP/ARM-plugin-program för plugin-program som krävs, vilket blockerar möjligheten att porta programmet och köra det på HoloLens 2. Kontakta plugin-providern för att lösa problemet och ge stöd för ARM.
Minfloat (och varianter som min16float, minint och så vidare) i skuggningar kan bete sig annorlunda på HoloLens 2 än på HoloLens (första generationen). Mer specifikt garanterar dessa att minst det angivna antalet bitar används. På Intel/Nvidia GPU:er behandlas minfloats till stor del som 32 bitar. På ARM följs faktiskt antalet angivna bitar. I praktiken kan dessa tal ha mindre precision eller intervall på HoloLens 2 än de gjorde på HoloLens (första generationen).
De _asm instruktionerna verkar inte fungera på ARM, vilket innebär att all kod som använder _asm instruktioner måste skrivas om.
ARM stöder inte SIMD-instruktionsuppsättningen eftersom olika rubriker, till exempel xmmintrin.h, emmintrin.h, tmmintrin.h och immintrin.h, inte är tillgängliga på ARM.
Skuggningskompileraren på ARM körs under det första anropet efter att skuggningen har lästs in eller något som skuggningen förlitar sig på har ändrats, inte vid skuggningsbelastning. Påverkan på framerate kan märkas, beroende på hur många skuggningar som behöver kompileras, med konsekvenser för hur skuggningar ska hanteras, paketeras och uppdateras på olika sätt på HoloLens 2 vs HoloLens (första generationen).