Indicador de progresso — MRTK2

Indicadores de Progresso

Cenário de exemplo

Pode encontrar exemplos de como utilizar indicadores de progresso no ProgressIndicatorExamples cenário. Este cenário demonstra cada um dos pré-fabricados dos indicadores de progresso incluídos no SDK. Também demonstra como utilizar indicadores de progresso em conjunto com algumas tarefas assíncronas comuns, como o carregamento de cenas.

Exemplos de Indicadores de Progresso 1

Exemplo: Abrir, atualizar & fechar um indicador de progresso

Os indicadores de progresso implementam a IProgressIndicator interface. Esta interface pode ser obtida a partir de um GameObject com GetComponent.

[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;

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

Os IProgressIndicator.OpenAsync() métodos e IProgressIndicator.CloseAsync() devolvem Tarefas. Recomendamos que aguarde estas Tarefas num método assíncrono.

Os pré-fabricados do indicador de progresso predefinido do MRTK devem estar inativos quando colocados num cenário. Quando os respetivos IProgressIndicator.OpenAsync() métodos são chamados, os indicadores de progresso serão ativados e desativarão automaticamente os respetivos gameobjects. (Este padrão não é um requisito da interface IProgressIndicator.)

Defina a propriedade do Progress indicador para um valor de 0 a 1 para atualizar o progresso apresentado. Message Defina a respetiva propriedade para atualizar a mensagem apresentada. Implementações diferentes podem apresentar este conteúdo de formas 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 do indicador

A propriedade de State um indicador determina que operações são válidas. Normalmente, chamar um método inválido fará com que o indicador comunique 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 utilizado para se certificar de que um indicador está totalmente aberto ou fechado antes de o utilizar.

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