Statusindikator — MRTK2

Progress Indicators

Beispielszene

Beispiele für die Verwendung von Statusindikatoren finden Sie in der ProgressIndicatorExamples Szene. In dieser Szene wird jede der im SDK enthaltenen Statusanzeige-Prefabs veranschaulicht. Außerdem wird veranschaulicht, wie Statusindikatoren in Verbindung mit einigen gängigen asynchronen Aufgaben wie dem Laden von Szenen verwendet werden.

Progress Indicator Examples 1

Beispiel: Öffnen, Aktualisieren & eines Statusindikators

Statusindikatoren implementieren die IProgressIndicator Schnittstelle. Diese Schnittstelle kann über ein GameObject GetComponentabgerufen werden.

[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;

private void Start()
{
    indicator = indicatorObject.GetComponent<IProgressIndicator>();
}

Die IProgressIndicator.OpenAsync() Und IProgressIndicator.CloseAsync() Methoden geben "Tasks" zurück. Wir empfehlen, auf diese Aufgaben in einer asynchronen Methode zu warten.

Die Standardstatusanzeige des MRTK sollte bei der Platzierung in einer Szene inaktiv sein. Wenn ihre IProgressIndicator.OpenAsync() Methoden als Statusindikatoren bezeichnet werden, werden ihre Spielobjekte automatisch aktiviert und deaktiviert. (Dieses Muster ist keine Anforderung der IProgressIndicator-Schnittstelle.)

Legen Sie die Eigenschaft des Indikators Progress auf einen Wert von 0 bis 1 fest, um den angezeigten Fortschritt zu aktualisieren. Legen Sie die Message Eigenschaft fest, um die angezeigte Nachricht zu aktualisieren. Unterschiedliche Implementierungen können diesen Inhalt auf unterschiedliche Weise anzeigen.

private async void OpenProgressIndicator()
{
    await indicator.OpenAsync();

    float progress = 0;
    while (progress < 1)
    {
        progress += Time.deltaTime;
        indicator.Message = "Loading...";
        indicator.Progress = progress;
        await Task.Yield();
    }

    await indicator.CloseAsync();
}

Indikatorzustände

Die Eigenschaft eines Indikators State bestimmt, welche Vorgänge gültig sind. Das Aufrufen einer ungültigen Methode führt in der Regel dazu, dass der Indikator einen Fehler meldet und keine Aktion ausgeführt wird.

State Gültige Vorgänge
ProgressIndicatorState.Opening AwaitTransitionAsync()
ProgressIndicatorState.Open CloseAsync()
ProgressIndicatorState.Closing AwaitTransitionAsync()
ProgressIndicatorState.Closed OpenAsync()

AwaitTransitionAsync() kann verwendet werden, um sicherzustellen, dass ein Indikator vollständig geöffnet oder geschlossen ist, bevor es verwendet wird.

private async void ToggleIndicator(IProgressIndicator indicator)
{
    await indicator.AwaitTransitionAsync();

    switch (indicator.State)
    {
        case ProgressIndicatorState.Closed:
            await indicator.OpenAsync();
            break;

        case ProgressIndicatorState.Open:
            await indicator.CloseAsync();
            break;
        }
    }