Indikátor průběhu – MRTK2
Příklad scény
Příklady použití indikátorů průběhu najdete ve scéně ProgressIndicatorExamples
. Tato scéna ukazuje všechny prefaby indikátoru průběhu, které jsou součástí sady SDK. Také ukazuje, jak používat indikátory průběhu ve spojení s některými běžnými asynchronními úlohami, jako je načítání scény.
Příklad: Otevření, aktualizace & zavření indikátoru průběhu
Indikátory průběhu implementují IProgressIndicator
rozhraní. Toto rozhraní lze načíst z GameObject pomocí GetComponent
.
[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;
private void Start()
{
indicator = indicatorObject.GetComponent<IProgressIndicator>();
}
Metody IProgressIndicator.OpenAsync()
a IProgressIndicator.CloseAsync()
vrací úkoly. Doporučujeme počkat na tyto úlohy v asynchronní metodě.
Výchozí prefaby indikátoru průběhu MRTK by při umístění do scény měly být neaktivní. Když se jejich IProgressIndicator.OpenAsync()
metody nazývají indikátory průběhu automaticky aktivují a deaktivují jejich herní objekty. (Tento vzor není požadavkem rozhraní IProgressIndicator.)
Nastavte vlastnost ukazatele Progress
na hodnotu od 0 do 1, aby se aktualizoval zobrazený průběh. Nastavte jeho Message
vlastnost tak, aby se aktualizovala zobrazená zpráva. Různé implementace mohou tento obsah zobrazit různými způsoby.
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();
}
Stavy indikátorů
Vlastnost ukazatele State
určuje, které operace jsou platné. Volání neplatné metody obvykle způsobí, že indikátor nahlásí chybu a neprovedou žádnou akci.
Stav | Platné operace |
---|---|
ProgressIndicatorState.Opening |
AwaitTransitionAsync() |
ProgressIndicatorState.Open |
CloseAsync() |
ProgressIndicatorState.Closing |
AwaitTransitionAsync() |
ProgressIndicatorState.Closed |
OpenAsync() |
AwaitTransitionAsync()
lze použít k tomu, abyste se ujistili, že je indikátor před použitím zcela otevřen nebo zavřený.
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;
}
}