Share via


Platformmód áthelyezése a Unityben

A mozgó platform mód lehetővé teszi, hogy HoloLens 2 megfelelően működjön a mozgó platformokon, például hajókon, olajplatformokon és más járműveken.

További információ a platformmód áthelyezéséről

Fogalmi áttekintés

Ahhoz, hogy a vegyes valósági rendszerek megfelelően működjenek, a headsetet a környezethez viszonyítva kell nyomon követni. Ez a relatív nyomon követés lehetővé teszi, hogy a grafikus elemek úgy jelenjenek meg a headset felhasználója számára, hogy szilárdan zárolva legyenek a környezetben. A nyomon követés általában olyan pózok kombinálásával érhető el, amelyeket külső kamerákkal és az inerciális mértékegységből (IMU) származó mérések alapján számítunk ki. Ez a módszer akkor működik jól, ha a környezet a referencia inerciális keretében van. A kis hatások, mint a bolygó mozgása, általában figyelmen kívül hagyják.

Ha a környezet nem szerepel az inerciális referenciakeretben, a normál fejkövető rendszer meghibásodik. A Mozgóplatform mód funkció úgy oldja meg ezt a problémát, hogy a környezetnek az inerciális kerethez viszonyított mozgását számolja. Így a Platform módban HoloLens 2 a környezethez rögzítettnek tűnő hologramokat renderelhet, még akkor is, ha a környezet lurching hajó!

Hogyan aktiválhatom a Mozgóplatform üzemmódot?

A használati esetek széles körének engedélyezéséhez különböző módszereket biztosítottunk a mozgóplatform-üzemmód aktiválásához. Fontos, hogy alaposan gondolja át, melyik módszert válassza. A legfontosabb kérdés a következő: Ki tudja, hogy a HoloLens 2 jelenleg egy mozgó platformon belül van-e? Példaként tekintse meg az alábbi táblázatot:

Ki tudja, hogy a HL2 egy mozgó platformon van-e A platformmód áthelyezésének legjobb módja Előnyök Költségek
Rendszergazda Mobileszköz-kezelés A felhasználót nem kell bevonni. Minden alkalmazás módosítás nélkül működik. Az eszköz védhető a helytelen módba való belépéstől. A felhasználó és az alkalmazások nem módosíthatják a módot.
Végfelhasználó A Beállítások alkalmazás A felhasználó gyakran a legérthetőbb azzal kapcsolatban, hogy mikor és hol használja az eszközt. Minden alkalmazás módosítás nélkül működik. Előfordulhat, hogy a felhasználó nem tudja, hogy a mód létezik.
Az alkalmazás Használja a cikkben ismertetett SDK-t. A használati esetspecifikus jelzésekkel felcserélhető a mód, ha a környezet nem ismert előre. Eltávolítja azt a követelményt, hogy a felhasználónak meg kell hoznia ezt a döntést, és módosítania kell az üzemmódot a beállításokban. A rosszul megtervezett alkalmazások nagyon rossz élményt nyújthatnak, és váratlan módban hagyhatják az eszközt.

Ajánlott eljárások a platformmód áthelyezéséhez

Rendszerbiztonsági tag Description
A felhasználó választásának tiszteletben tartása Mielőtt módosítaná a módot, meg kell adnia a felhasználónak a választást, és továbbra is tiszteletben kell tartania ezt a választási lehetőséget az alkalmazás futtatókörnyezete tekintetében.
Figyelmeztetés küldése a felhasználónak Kerülje a mód azonnali módosítását az alkalmazás indításakor/folytatásakor. Ez gyenge felhasználói élményt jelent, mivel előfordulhat, hogy a felhasználó nem tudja, miért veszíti el az eszköz nyomon követését.
A módváltás minimalizálása A Platform üzemmód beállításainak módosításakor az eszköz elveszíti a nyomon követést, ami negatív felhasználói élményt okoz. Ezért javasoljuk, hogy minimálisra csökkentse az üzemmód módosításának gyakoriságát. Ideális esetben a mód csak akkor változna meg, ha az eszköz álló környezetből mozgó környezetbe váltana, vagy fordítva.
Ha bizonytalan a környezettel kapcsolatban, használja a Platform mód áthelyezése lehetőséget A platformmód áthelyezése a helyhez kötött környezetekben és a mozgó környezetekben is működik. A normál követési algoritmusok csak helyhez kötött környezetekben működnek, így ha bizonytalan abban, hogy a környezet mozog-e, a Platform mód áthelyezése lehet a biztonságosabb választás.
Ne használjon Mozgóplatform üzemmódot ismert helyhez kötött környezetekben A Mozgóplatform mód kevésbé teljesít jól, mint a hagyományos üzemmód a helyhez kötött környezetekben. Ez egy kis teljesítménycsökkenés, bár a legtöbb felhasználó számára észrevehető lesz.
Gondolja át, hogy milyen módban hagyja az eszközt Ez az SDK lehetővé teszi, hogy a fejlesztők olyan élményeket tervezhessenek, amelyek robusztusak az eszköz rendszerindítása során. Fontolja meg, hogy az eszköz a következő indításkor egy mozgó platformon lesz-e, és hagyja az eszközt a megfelelő módban.

Hol szerezhetem be az SDK-t?

A Mozgóplatform SDK támogatja a C# és a C++nyelv nyelvi leképezéseit, így a fejlesztők alkalmazásokat fejleszthetnek Win32- vagy UWP-platformokhoz. Töltse le és telepítse az SDK-t a Mixed Reality Funkció eszközzel.

Hogyan használja ezt az SDK-t

Az SDK telepítése után a következő módon állíthatja be a szkriptet a MovingPlatformManger használatára:

// Top of file
using Microsoft.MixedReality.MovingPlatform;
// Code body
m_movingPlatformManager = new MovingPlatformManager();

Az aktuális mód beolvasása

A mód aktuális értéke a következőképpen olvasható:

MovingPlatformMode currentMode = m_movingPlatformManager.Mode;

A MovingPlatformMode egy szám, amely a következőképpen van definiálva:

public enum MovingPlatformMode
{
    Standard,                // The legacy mode that devices use out-of-the-box.
    MovingPlatformOptimized  // Allows tracking on moving platforms.
}

Azok az eszközök, amelyekhez nem érhető el mozgóplatform mód, például VR-eszközök és HoloLens 1, mindig "Standard" értéket ad vissza.

A mód beállítása

A Mozgóplatform mód értékét az alábbiak szerint állíthatja be:

bool success = m_movingPlatformManager.TrySetMode(MovingPlatformMode.MovingPlatformOptimized);

A TrySetMode igaz értéket ad vissza, ha az eszköz üzemmódja most már megfelel a kért módnak. Ha a mód már a kívánt állapotban van, nem történik semmi, és az eszköz nem veszíti el a nyomkövetést.

Visszahívás módváltás esetén

Időnként hasznos lehet tudni, hogy egy másik alkalmazás vagy felhasználó módosította-e a Mozgóplatform mód értékét. Ezt a következőképpen teheti meg.

// Code Body
m_movingPlatformManager.ModeChanged += CallbackOnMPMChanged;
...
void CallbackOnMPMChanged(object sender, MovingPlatformEventArgs args)
{
    movingPlatformModeChanged = true;
    movingPlatformModeValue = args.ModeEntered;
}
...
void Update()
{
    // It's not reccomended to do work in the callback.
    if (movingPlatformModeChanged)
    {
        movingPlatformModeChanged = false;
        // Do some work
    }
}

Annak ellenőrzése, hogy a mód beállítható-e

Néha hasznos tudni, hogy a mód beállítható-e, mielőtt megkísérli módosítani. Ha például tudni szeretné, hogy van-e érték a felhasználó preferenciájának megadásában. Az IsSetModeSupported függvénnyel megállapíthatja, hogy a platformmód áthelyezése beállítható-e:

bool supported = m_movingPlatformManager.IsSetModeSupported();

Ez a függvény igaz értéket ad vissza, ha az eszköz módosíthatja a módokat, és hamis értéket, ha ez nem lehetséges. Ez a függvény figyelembe veszi a Mobile Eszközkezelés (MDM) szabályzatokat. Ha például az MDM a MovingPlatformMode paramétert "Be" értékre kényszeríti, akkor ez a függvény hamis értéket ad vissza.

Bemutató szkript

Ez a szkript az SDK összes fontos elemét egy helyen jeleníti meg. A példa nem követi a fent bemutatott ajánlott eljárásokat.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.MovingPlatform;
using System;

public class MovingPlatformDemo : MonoBehaviour
{
    public GameObject cube; // A simple cube to display colors.
    private MovingPlatformManager m_movingPlatformManager;
    private Renderer cubeRenderer;
    private bool movingPlatformModeChanged;
    private MovingPlatformMode movingPlatformModeValue;

    // Start is called before the first frame update
    void Start()
    {
        m_movingPlatformManager = new MovingPlatformManager();
        cubeRenderer = cube.GetComponent<Renderer>();

        // Get initial value of mode, 
        // Just this mechanism would be adequate if a one time check is acceptable. 
        MovingPlatformMode initialMovingPlatformMode = m_movingPlatformManager.Mode;

        // Find if It's possible to change the mode. 
        bool isSettable = m_movingPlatformManager.IsSetModeSupported();

        // Here you would add some use case specific logic using initialMovingPlatformMode and isSettable
        // to decide if you should ask the user if they want to change the mode. 

        // To set the mode.
        bool success = m_movingPlatformManager.TrySetMode(MovingPlatformMode.MovingPlatformOptimized);

        // Visual indicator of current state: Green = Moving Platform Optimized, Red = Regular.
        SetColourFromState(m_movingPlatformManager.Mode, cubeRenderer);

        // We set a callback to be notified if there's a change in mode. This is typically optional.
        m_movingPlatformManager.ModeChanged += CallbackOnMPMChanged;
        movingPlatformModeChanged = false;
    }

    // Update is called once per frame
    void Update()
    {
        // This must be done in the UI thread.
        if (movingPlatformModeChanged)
        {
            movingPlatformModeChanged = false;
            SetColourFromState(movingPlatformModeValue, cubeRenderer);
        }
    }

    // Sets renderer to:
    // Green = Moving Platform Mode Enabled
    // Red = Moving Platform Mode Disabled
    void SetColourFromState(MovingPlatformMode mode, Renderer thisRend)
    {
        if (mode == MovingPlatformMode.MovingPlatformOptimized)
        {
            thisRend.material.color = new Color(0f, 1f, 0f, 1f);
        }
        else
        {
            thisRend.material.color = new Color(1f, 0f, 0f, 1f);
        }
    }

    void CallbackOnMPMChanged(object sender, MovingPlatformEventArgs args)
    {
        movingPlatformModeChanged = true;
        movingPlatformModeValue = args.ModeEntered;
    }
}

Lásd még