Udostępnij za pośrednictwem


Wskaźnik postępu — MRTK2

Wskaźniki postępu

Przykładowa scena

Przykłady użycia wskaźników postępu można znaleźć w scenie ProgressIndicatorExamples . W tej scenie przedstawiono poszczególne prefabryki wskaźnika postępu zawarte w zestawie SDK. Pokazuje również, jak używać wskaźników postępu w połączeniu z niektórymi typowymi zadaniami asynchronicznymi, takimi jak ładowanie sceny.

Przykłady wskaźnika postępu 1

Przykład: Otwieranie, aktualizowanie & zamykanie wskaźnika postępu

Wskaźniki postępu implementują IProgressIndicator interfejs. Ten interfejs można pobrać z obiektu GameObject przy użyciu polecenia GetComponent.

[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;

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

Metody IProgressIndicator.OpenAsync() i IProgressIndicator.CloseAsync() zwracają zadania. Zalecamy oczekiwanie na te zadania w metodzie asynchronicznej.

Domyślne prefabryki wskaźnika postępu zestawu narzędzi MRTK powinny być nieaktywne po umieszczeniu w scenie. Gdy ich IProgressIndicator.OpenAsync() metody są nazywane wskaźnikami postępu, zostaną aktywowane i automatycznie dezaktywowane ich obiekty gameobject. (Ten wzorzec nie jest wymaganiem interfejsu IProgressIndicator).

Ustaw właściwość wskaźnika Progress na wartość z zakresu od 0 do 1, aby zaktualizować wyświetlany postęp. Ustaw jej Message właściwość, aby zaktualizować wyświetlany komunikat. Różne implementacje mogą wyświetlać tę zawartość na różne sposoby.

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();
}

Stany wskaźnika

Właściwość wskaźnika State określa, które operacje są prawidłowe. Wywołanie nieprawidłowej metody zwykle spowoduje zgłoszenie błędu przez wskaźnik i podjęcie żadnych działań.

Stan Prawidłowe operacje
ProgressIndicatorState.Opening AwaitTransitionAsync()
ProgressIndicatorState.Open CloseAsync()
ProgressIndicatorState.Closing AwaitTransitionAsync()
ProgressIndicatorState.Closed OpenAsync()

AwaitTransitionAsync() Można użyć, aby upewnić się, że wskaźnik jest w pełni otwarty lub zamknięty przed jego użyciem.

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