Индикатор хода выполнения — MRTK2
Пример сцены
Примеры использования индикаторов хода выполнения можно найти в сцене ProgressIndicatorExamples
. Эта сцена демонстрирует все заготовки индикатора хода выполнения, включенные в пакет SDK. В нем также показано, как использовать индикаторы хода выполнения в сочетании с некоторыми распространенными асинхронными задачами, такими как загрузка сцены.
Пример. Открытие, обновление & закрытие индикатора хода выполнения
Индикаторы хода выполнения реализуют IProgressIndicator
интерфейс . Этот интерфейс можно получить из GameObject с помощью GetComponent
.
[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;
private void Start()
{
indicator = indicatorObject.GetComponent<IProgressIndicator>();
}
Методы IProgressIndicator.OpenAsync()
и IProgressIndicator.CloseAsync()
возвращают Tasks. Мы рекомендуем дождаться выполнения этих задач в асинхронном методе.
Заготовки индикатора хода выполнения MRTK по умолчанию должны быть неактивными при размещении в сцене. При вызове методов IProgressIndicator.OpenAsync()
индикаторы хода выполнения автоматически активируют и деактивируют их игровые объекты. (Этот шаблон не является обязательным требованием интерфейса IProgressIndicator.)
Присвойте свойству индикатора Progress
значение от 0 до 1, чтобы обновить отображаемый ход выполнения. Задайте свойство Message
, чтобы обновить отображаемое сообщение. В разных реализациях это содержимое может отображаться по-разному.
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();
}
Состояния индикатора
Свойство индикатора State
определяет, какие операции являются допустимыми. Вызов недопустимого метода обычно приводит к тому, что индикатор сообщит об ошибке и не выполняет никаких действий.
Состояние | Допустимые операции |
---|---|
ProgressIndicatorState.Opening |
AwaitTransitionAsync() |
ProgressIndicatorState.Open |
CloseAsync() |
ProgressIndicatorState.Closing |
AwaitTransitionAsync() |
ProgressIndicatorState.Closed |
OpenAsync() |
AwaitTransitionAsync()
можно использовать, чтобы убедиться, что индикатор полностью открыт или закрыт перед его использованием.
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;
}
}