Wskaźnik postępu — MRTK2
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ł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;
}
}