Fortschrittsindikator – MRTK2

Statusindikatoren

Beispielszene

Beispiele für die Verwendung von Fortschrittsindikatoren finden Sie in der ProgressIndicatorExamples Szene. In dieser Szene werden die einzelnen Prefabs des Statusindikators veranschaulicht, die im SDK enthalten sind. Außerdem wird veranschaulicht, wie Fortschrittsindikatoren in Verbindung mit einigen gängigen asynchronen Aufgaben wie dem Laden von Szenen verwendet werden.

Statusindikatorbeispiele 1

Beispiel: Öffnen, Aktualisieren & Schließen eines Statusindikators

Fortschrittsindikatoren implementieren die IProgressIndicator Schnittstelle. Diese Schnittstelle kann mithilfe GetComponentvon aus einem GameObject abgerufen werden.

[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;

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

Die IProgressIndicator.OpenAsync() Methoden und IProgressIndicator.CloseAsync() geben Tasks zurück. Es wird empfohlen, diese Aufgaben in einer asynchronen Methode abzuwarten.

Die Standardmäßigen Statusanzeige-Prefabs des MRTK sollten inaktiv sein, wenn sie in einer Szene platziert werden. Wenn ihre IProgressIndicator.OpenAsync() Methoden aufgerufen werden, aktivieren und deaktivieren die Fortschrittsindikatoren ihre Spielobjekte automatisch. (Dieses Muster ist keine Anforderung der IProgressIndicator-Schnittstelle.)

Legen Sie die Eigenschaft des Indikators Progress auf einen Wert zwischen 0 und 1 fest, um den angezeigten Fortschritt zu aktualisieren. Legen Sie die Message -Eigenschaft fest, um die angezeigte Meldung zu aktualisieren. Verschiedene 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 State Indikators 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 ergreift.

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