Indicatore di avanzamento - MRTK2
Scena di esempio
Esempi di come usare gli indicatori di avanzamento sono disponibili nella ProgressIndicatorExamples
scena. Questa scena illustra ogni prefab dell'indicatore di stato incluso nell'SDK. Illustra anche come usare gli indicatori di avanzamento in combinazione con alcune attività asincrone comuni come il caricamento della scena.
Esempio: Aprire, aggiornare & chiudere un indicatore di stato
Gli indicatori di avanzamento implementano l'interfaccia IProgressIndicator
. Questa interfaccia può essere recuperata da un GameObject usando GetComponent
.
[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;
private void Start()
{
indicator = indicatorObject.GetComponent<IProgressIndicator>();
}
I IProgressIndicator.OpenAsync()
metodi e IProgressIndicator.CloseAsync()
restituiscono Attività. È consigliabile attendere queste attività in un metodo asincrono.
Il prefab di stato predefinito di MRTK deve essere inattivo quando posizionato in una scena. Quando i loro IProgressIndicator.OpenAsync()
metodi vengono chiamati indicatori di stato attivano e disattivano automaticamente i loro oggetti gioco. Questo modello non è un requisito dell'interfaccia IProgressIndicator.
Impostare la proprietà dell'indicatore Progress
su un valore compreso tra 0 e 1 per aggiornarne lo stato visualizzato. Impostare la proprietà Message
per aggiornare il messaggio visualizzato. Le diverse implementazioni possono visualizzare questo contenuto in modi diversi.
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();
}
Stati indicatore
La proprietà di State
un indicatore determina quali operazioni sono valide. La chiamata di un metodo non valido causa in genere l'indicatore di segnalare un errore e non esegue alcuna azione.
State | Operazioni valide |
---|---|
ProgressIndicatorState.Opening |
AwaitTransitionAsync() |
ProgressIndicatorState.Open |
CloseAsync() |
ProgressIndicatorState.Closing |
AwaitTransitionAsync() |
ProgressIndicatorState.Closed |
OpenAsync() |
AwaitTransitionAsync()
può essere usato per assicurarsi che un indicatore sia completamente aperto o chiuso prima di usarlo.
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;
}
}