Implementera 3D-appstartare (UWP-appar)

Anteckning

Den här funktionen lades till som en del av 2017 Fall Creators Update (RS3) för integrerande headset och stöds av HoloLens med uppdateringen från Windows 10 april 2018. Kontrollera att programmet har en version av Windows SDK som är större än eller lika med 10.0.16299 på integrerande headset och 10.0.17125 på HoloLens. Du hittar den senaste Windows SDK :en här.

Den Windows Mixed Reality hem är startpunkten där användarna landar innan de startar program. När du skapar ett UWP-program för Windows Mixed Reality startas som standard appar som 2D-skiffer med appens logotyp. När du utvecklar upplevelser för Windows Mixed Reality kan en 3D-startare definieras för att åsidosätta 2D-startprogrammets standardstartprogram. I allmänhet rekommenderas 3D-startprogram för att starta integrerande program som tar användare från Windows Mixed Reality hem. Standardstartprogrammet för 2D är att föredra när appen aktiveras på plats. Du kan också skapa en 3D-djuplänk (secondaryTile) som ett 3D-startprogram till innehåll i en 2D UWP-app.

Skapandeprocess för 3D-appstartare

Det finns tre steg för att skapa en 3D-appstartare:

  1. Design och koncept
  2. Modellering och export
  3. Integrera den i ditt program (den här artikeln)

3D-tillgångar som ska användas som startprogram för ditt program bör skapas med hjälp av Windows Mixed Reality redigeringsriktlinjer för att säkerställa kompatibilitet. Tillgångar som inte uppfyller den här redigeringsspecifikationen återges inte i Windows Mixed Reality hem.

Konfigurera 3D-startprogrammet

När du skapar ett nytt projekt i Visual Studio skapas en enkel standardpanel som visar appens namn och logotyp. Om du vill ersätta den här 2D-representationen med en anpassad 3D-modell redigerar du programmets appmanifest så att det inkluderar elementet "MixedRealityModel" som en del av standarddefinitionen för panelen. Om du vill återgå till 2D-startprogrammet tar du bara bort MixedRealityModel-definitionen från manifestet.

XML

Leta först upp appaketmanifestet i det aktuella projektet. Manifestet får som standard namnet Package.appxmanifest. Om du använder Visual Studio högerklickar du på manifestet i lösningsvisaren och väljer Visa källa för att öppna XML-filen för redigering.

Överst i manifestet lägger du till uap5-schemat och inkluderar det som ett okunnigt namnområde:

<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 
         xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
         xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
         xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
         IgnorableNamespaces="uap uap2 uap5 mp"
         xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

Ange sedan "MixedRealityModel" i standardpanelen för ditt program:

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="ExampleApp.App">
      <uap:VisualElements
        DisplayName="ExampleApp"
        Square150x150Logo="Assets\Logo.png"
        Square44x44Logo="Assets\SmallLogo.png"
        Description="ExampleApp"
        BackgroundColor="#464646">
        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb" />
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
    </Application>
</Applications>

MixedRealityModel-elementet accepterar en filsökväg som pekar på en 3D-tillgång som lagras i appaketet. För närvarande stöds endast 3D-modeller som levereras med filformatet .glb och som skapats mot Windows Mixed Reality 3D-tillgångsredigeringsinstruktioner. Tillgångar måste lagras i appaketet och animering stöds inte för närvarande. Om parametern "Path" lämnas tom visar Windows 2D-skiffern i stället för 3D-startprogrammet. Obs! .glb-tillgången måste markeras som "Innehåll" i dina bygginställningar innan du skapar och kör appen.

Välj .glb i Lösningsutforskaren och använd egenskapsavsnittet för att markera det som
Välj .glb i Lösningsutforskaren och använd egenskapsavsnittet för att markera det som "Innehåll" i bygginställningarna

Markeringsramen

En avgränsningsruta kan användas för att lägga till ett extra buffertområde runt objektet om du vill. Avgränsningsrutan anges med hjälp av en mittpunkt och utrymmen, som anger avståndet från mitten av avgränsningsrutan till dess kanter längs varje axel. Enheter för avgränsningsrutan kan mappas till 1 enhet = 1 meter. Om det inte finns någon avgränsningsruta monteras en automatiskt på objektets nät. Om den angivna avgränsningsrutan är mindre än modellen ändras storleksstorleken så att den passar nätet.

Stöd för attributet för avgränsningsrutan kommer med Windows RS4-uppdateringen som en egenskap för elementet MixedRealityModel. Om du vill definiera en avgränsningsruta först överst i appmanifestet lägger du till uap6-schemat och inkluderar det som okunniga namnområden:

<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 
         xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
         xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
         xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
         xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6"
         IgnorableNamespaces="uap uap2 uap5 uap6 mp"
         xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

I MixedRealityModel anger du sedan egenskapen SpatialBoundingBox för att definiera avgränsningsrutan:

        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb">
              <uap6:SpatialBoundingBox  Center=”1,-2,3” Extents=”1,2,3” />
          </uap5:MixedRealityModel>
        </uap:DefaultTile>

Använda Unity

När du arbetar med Unity måste projektet skapas och öppnas i Visual Studio innan appmanifestet kan redigeras.

Anteckning

3D-startprogrammet måste definieras om i manifestet när du skapar och distribuerar en ny Visual Studio-lösning från Unity.

Anteckning

Den här funktionen lades till som en del av 2017 Fall Creators Update (RS3) för integrerande (VR) headset och som en del av april 2018-uppdateringen (RS4) för HoloLens. Kontrollera att programmet har en version av Windows SDK som är större än eller lika med 10.0.16299 på integrerande (VR)-headset och 10.0.17125 på HoloLens. Du hittar den senaste Windows SDK :en här.

Viktigt

3D-djuplänkar (secondaryTiles) fungerar bara med 2D UWP-appar. Du kan dock skapa en 3D-appstartare för att starta en exklusiv app från Windows Mixed Reality hem.

Dina 2D-program kan förbättras för Windows Mixed Reality genom att lägga till möjligheten att placera 3D-modeller från din app i Windows Mixed Reality hem som djuplänkar till innehåll i din 2D-app, precis som sekundära 2D-paneler på Start-menyn i Windows. Du kan till exempel skapa 360°-fotosfärer som länkar direkt till en 360°-bildvisningsapp, eller låta användare placera 3D-innehåll från en samling tillgångar som öppnar en informationssida om författaren. Det här är bara några sätt att utöka funktionerna i ditt 2D-program med 3D-innehåll.

Skapa en 3D-"secondaryTile"

Du kan placera 3D-innehåll från ditt program med hjälp av "secondaryTiles" genom att definiera en modell för mixad verklighet när den skapas. Modeller för mixad verklighet skapas genom att referera till en 3D-tillgång i ditt apppaket och om du vill definiera en avgränsningsruta.

Anteckning

Det går för närvarande inte att skapa "secondaryTiles" från en exklusiv vy.

using Windows.UI.StartScreen;
using Windows.Foundation.Numerics;
using Windows.Perception.Spatial;

// Initialize the tile
SecondaryTile tile = new SecondaryTile("myTileId")
{
    DisplayName = "My Tile",
    Arguments = "myArgs"
};

tile.VisualElements.Square150x150Logo = new Uri("ms-appx:///Assets/MyTile/Square150x150Logo.png");

//Assign 3D model (only ms-appx and ms-appdata are allowed)
TileMixedRealityModel model = tile.VisualElements.MixedRealityModel;
model.Uri = new Uri("ms-appx:///Assets/MyTile/MixedRealityModel.glb");
model.ActivationBehavior = TileMixedRealityModelActivationBehavior.Default;
model.BoundingBox = new SpatialBoundingBox
{
    Center = new Vector3 { X = 1, Y = 0, Z = 0 },
    Extents = new Vector3 { X = 3, Y = 5, Z = 4 }
};

// And place it
await tile.RequestCreateAsync();

Markeringsramen

En avgränsningsruta kan användas för att lägga till ett extra buffertområde runt objektet. Avgränsningsrutan anges med hjälp av en mittpunkt och utrymmen, som anger avståndet från mitten av avgränsningsrutan till dess kanter längs varje axel. Enheter för avgränsningsrutan kan mappas till 1 enhet = 1 meter. Om det inte finns någon avgränsningsruta monteras en automatiskt på objektets nät. Om den angivna avgränsningsrutan är mindre än modellen ändras storleksstorleken så att den passar nätet.

Aktiveringsbeteende

Anteckning

Den här funktionen stöds från och med Windows RS4-uppdateringen. Kontrollera att programmet har en version av Windows SDK som är större än eller lika med 10.0.17125 om du planerar att använda den här funktionen

Du kan definiera aktiveringsbeteendet för en 3D secondaryTile för att styra hur den reagerar när en användare väljer den. Detta kan användas för att placera 3D-objekt i Mixed Reality hem som är rent informativa eller dekorativa. Följande typer av aktiveringsbeteenden stöds:

  1. Standard: När en användare väljer 3D secondaryTile aktiveras appen
  2. Ingen: När användaren väljer 3D secondaryTile händer ingenting och appen inte aktiveras.

Hämta och uppdatera en befintlig "secondaryTile"

Utvecklare kan få tillbaka en lista över sina befintliga sekundära paneler, som innehåller de egenskaper som de tidigare har angett. De kan också uppdatera egenskaperna genom att ändra värdet och sedan anropa UpdateAsync().

// Grab the existing secondary tile
SecondaryTile tile = (await SecondaryTile.FindAllAsync()).First();

Uri updatedUri = new Uri("ms-appdata:///local/MixedRealityUpdated.glb");

// See if the model needs updating
if (!tile.VisualElements.MixedRealityModel.Uri.Equals(updatedUri))
{
    // Update it
    tile.VisualElements.MixedRealityModel.Uri = updatedUri;

    // And apply the changes
    await tile.UpdateAsync();
}

Kontrollera att användaren är i Windows Mixed Reality

3D-djuplänkar (secondaryTiles) kan bara skapas när vyn visas i ett Windows Mixed Reality headset. När din vy inte visas i ett Windows Mixed Reality headset rekommenderar vi att du hanterar detta på ett smidigt sätt genom att antingen dölja startpunkten eller visa ett felmeddelande. Du kan kontrollera detta genom att fråga IsCurrentViewPresentedOnHolographic().

Panelmeddelanden

Panelmeddelanden stöder för närvarande inte att skicka en uppdatering med en 3D-tillgång. Det innebär att utvecklare inte kan göra följande:

  • Push-meddelanden
  • Periodisk avsökning
  • Schemalagda meddelanden

Mer information om de andra panelfunktionerna och attributen och hur de används för 2D-paneler finns i dokumentationen paneler för UWP-appar.

Se även