Share via


Indicatore di avanzamento - MRTK2

Indicatori di stato

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.

Esempi di indicatore di stato 1

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