Indicador de progresso

Progress Indicators

Cena de exemplo

Exemplos de como usar indicadores de progresso podem ser encontrados na ProgressIndicatorExamples cena. Essa cena demonstra cada um dos pré-fabricados do indicador de progresso incluídos no SDK. Ele também demonstra como usar indicadores de progresso em conjunto com algumas tarefas assíncronas comuns, como o carregamento de cena.

Progress Indicator Examples 1

Exemplo: Abrir, atualizar & fechar um indicador de progresso

Indicadores de progresso implementam a IProgressIndicator interface. Essa interface pode ser recuperada de um GameObject usando GetComponent.

[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;

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

Os IProgressIndicator.OpenAsync() métodos e os IProgressIndicator.CloseAsync() métodos retornam Tarefas. É recomendável aguardar essas tarefas em um método assíncrono.

Os pré-fabricados do indicador de progresso padrão do MRTK devem estar inativos quando colocados em uma cena. Quando seus IProgressIndicator.OpenAsync() métodos forem chamados, os indicadores de progresso ativarão e desativarão seus gameobjects automaticamente. (Esse padrão não é um requisito da interface IProgressIndicator.)

Defina a propriedade do Progress indicador como um valor de 0 a 1 para atualizar seu progresso exibido. Defina sua Message propriedade para atualizar sua mensagem exibida. Diferentes implementações podem exibir esse conteúdo de maneiras diferentes.

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

Estados de indicador

A propriedade de State um indicador determina quais operações são válidas. Chamar um método inválido normalmente fará com que o indicador relate um erro e não tome nenhuma ação.

Estado Operações válidas
ProgressIndicatorState.Opening AwaitTransitionAsync()
ProgressIndicatorState.Open CloseAsync()
ProgressIndicatorState.Closing AwaitTransitionAsync()
ProgressIndicatorState.Closed OpenAsync()

AwaitTransitionAsync() pode ser usado para garantir que um indicador esteja totalmente aberto ou fechado antes de usá-lo.

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