Индикатор хода выполнения — MRTK2

Индикаторы хода выполнения

Пример сцены

Примеры использования индикаторов хода выполнения можно найти в сцене ProgressIndicatorExamples . Эта сцена демонстрирует все заготовки индикатора хода выполнения, включенные в пакет SDK. В нем также показано, как использовать индикаторы хода выполнения в сочетании с некоторыми распространенными асинхронными задачами, такими как загрузка сцены.

Примеры индикатора хода выполнения 1

Пример. Открытие, обновление & закрытие индикатора хода выполнения

Индикаторы хода выполнения реализуют 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;
        }
    }