Freigeben über


Verfolgbarkeitsverlust in Unity

Wenn sich das Gerät nicht in der Welt finden kann, wird der "Tracking-Verlust" der App angezeigt. Standardmäßig hält Unity die Updateschleife an und zeigt dem Benutzer jederzeit ein Begrüßungsbild an, wenn die Nachverfolgung verloren geht. Sobald die Nachverfolgung wiedererlangt wird, wird das Begrüßungsbild entfernt, und die Updateschleife wird fortgesetzt.

Alternativ kann der Benutzer diesen Übergang manuell behandeln, indem er die Einstellung abwählen kann. Alle Inhalte scheinen während des Tracking-Verlusts zu "body locked" zu werden, wenn nichts getan wird, um ihn zu behandeln.

Standardbehandlung

Die Aktualisierungsschleife und alle Nachrichten und Ereignisse werden standardmäßig für die Dauer des Nachverfolgens von Verlusten 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 Holografische Tracking Loss-Bild festlegen.

Manuelle Handhabung

Um den Nachverfolgungsverlust manuell zu behandeln, müssen Sie zur Registerkarte "Projekteinstellungen-Player>> bearbeiten>" wechseln Universelle Windows-Plattform Registerkarte>"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 behandeln.

Namespace: UnityEngine.XR.WSA
Typ: WorldManager

  • World Manager macht ein Ereignis verfügbar, um die Nachverfolgung verloren/gewonnen (WorldManager.OnPositionalLocatorStateChanged) und eine Eigenschaft zum Abfragen des aktuellen Zustands (WorldManager.state) zu erkennen.
  • Wenn der Nachverfolgungsstatus nicht aktiv ist, scheint die Kamera nicht in der virtuellen Welt zu übersetzen, auch wenn der Benutzer übersetzt. Objekte entsprechen nicht mehr physischen Speicherorten, und alle werden als textkörper gesperrt angezeigt.

Bei der Behandlung von Nachverfolgungsänderungen müssen Sie entweder die Statuseigenschaft für jeden Frame abfragen oder das OnPositionalLocatorStateChanged-Ereignis behandeln.

Abruf

Der wichtigste Zustand ist PositionalLocatorState.Active, was bedeutet, dass die Nachverfolgung voll funktionsfähig ist. Jeder andere Zustand führt nur zu Rotationsdelta zur Hauptkamera. Zum 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 behandeln:

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
    }
}

Siehe auch