Indicador de progresso — MRTK2
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.
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;
}
}