Verfolgbarkeitsverlust in Unity

Wenn sich das Gerät nicht in der Welt finden kann, tritt für die App "Tracking-Verlust" auf. Standardmäßig hält Unity die Updateschleife an und zeigt dem Benutzer bei jedem Verlust der Nachverfolgung ein Begrüßungsbild an. Sobald die Nachverfolgung wieder aktiviert wurde, verschwindet das Begrüßungsbild, und die Updateschleife wird fortgesetzt.

Alternativ kann der Benutzer diesen Übergang manuell verarbeiten, indem er die Einstellung deaktiviert. Alle Inhalte scheinen während des Nachverfolgungsverlusts gesperrt zu werden, wenn nichts unternommen wird, um ihn zu behandeln.

Standardbehandlung

Die Updateschleife und alle Meldungen und Ereignisse werden standardmäßig für die Dauer der Nachverfolgung des Verlusts beendet. Gleichzeitig wird dem Benutzer ein Bild angezeigt. Sie können dieses Bild anpassen, indem Sie zu Edit-Settings-Player>> wechseln, auf Begrüßungsbild klicken und das Bild Holographic Tracking Loss festlegen.

Manuelle Behandlung

Um den Verlust der Nachverfolgung manuell zu behandeln, müssen Sie zur RegisterkarteProjekteinstellungen>>bearbeiten>wechseln Universelle Windows-Plattform Registerkarte "Einstellungen">Begrüßungsbild>Windows Holographic, und deaktivieren Sie "On Tracking Loss Pause and Show Image". Danach müssen Sie die Nachverfolgung von Änderungen mit den unten angegebenen APIs verarbeiten.

Namespace:UnityEngine.XR.WSA
Typ:WorldManager

  • World Manager macht ein Ereignis verfügbar, um verlorene/gewonnene Nachverfolgung (WorldManager.OnPositionalLocatorStateChanged) und eine Eigenschaft zum Abfragen des aktuellen Zustands (WorldManager.state) zu erkennen.
  • Wenn der Überwachungszustand nicht aktiv ist, scheint die Kamera nicht in die virtuelle Welt zu übersetzen, auch wenn der Benutzer übersetzt. Objekte entsprechen keinem physischen Speicherort mehr, und alle werden als gesperrt angezeigt.

Wenn Sie Änderungen selbst verarbeiten, müssen Sie entweder die Statuseigenschaft für jeden Frame abfragen oder das OnPositionalLocatorStateChanged-Ereignis behandeln.

Abruf

Der wichtigste Status ist PositionalLocatorState.Active, was bedeutet, dass die Nachverfolgung voll funktionsfähig ist. Jeder andere Zustand führt nur zu Rotationsdelta für die Standard Kamera. Beispiel:

void Update()
{
    switch (UnityEngine.XR.WSA.WorldManager.state)
    {
        case PositionalLocatorState.Active:
            // handle active
            break;
        case PositionalLocatorState.Activating:
        case PositionalLocatorState.Inhibited:
        case PositionalLocatorState.OrientationOnly:
        case PositionalLocatorState.Unavailable:
        default:
            // only rotational information is available
            break;
    }
}

Behandeln des OnPositionalLocatorStateChanged-Ereignisses

Bequemer können Sie auch OnPositionalLocatorStateChanged abonnieren, um die Übergänge zu verarbeiten:

void Start()
{
    UnityEngine.XR.WSA.WorldManager.OnPositionalLocatorStateChanged += WorldManager_OnPositionalLocatorStateChanged;
}

private void WorldManager_OnPositionalLocatorStateChanged(PositionalLocatorState oldState, PositionalLocatorState newState)
{
    if (newState == PositionalLocatorState.Active)
    {
        // Handle becoming active
    }
    else
    {
        // Handle becoming rotational only
    }
}

Weitere Informationen