Progress
класс в UnityEditor
Описание
Вспомогательный класс Progress сообщает Unity о ходе выполнения асинхронных задач.
Вспомогательный класс Progress позволяет сообщать о ходе выполнения асинхронных задач несколькими способами. Вот пример задачи, которая выполняется в EditorApplication.update цикла и отчетов о ходе работы:
using System.Collections; using UnityEditor;
class ProgressReport_EditorUpdate { static IEnumerator s_CurrentEnumerator;
[MenuItem("Examples/ProgressReport/EditorUpdate")] static void RunEditorUpdate() { if (s_CurrentEnumerator == null) { s_CurrentEnumerator = RunTaskWithReport(); } EditorApplication.update -= RunTaskOnUpdate; EditorApplication.update += RunTaskOnUpdate; }
static void RunTaskOnUpdate() { if (s_CurrentEnumerator == null) { return; }
// Execute one step of the task var atEnd = !s_CurrentEnumerator.MoveNext();
// If there is nothing more to do, remove the update callback if (atEnd) { s_CurrentEnumerator = null; EditorApplication.update -= RunTaskOnUpdate; } }
static IEnumerator RunTaskWithReport() { // Create a new progress indicator int progressId = Progress.Start("Running one task");
// Report the progress status at anytime for (int frame = 0; frame <= 1000; ++frame) { string description; if (frame < 250) description = "First part of the task"; else if (frame < 750) description = "Second part of the task"; else description = "Last part of the task"; Progress.Report(progressId, frame / 1000.0f, description);
// Do your computation that you want to report progress on // ... yield return null; }
// The task is finished. Remove the associated progress indicator. Progress.Remove(progressId); } }
Вот еще один пример задания, которое выполняется в отдельном потоке и сообщает о ходе выполнения:
using System.Threading; using System.Threading.Tasks; using UnityEditor;
class ProgressReport_Threaded { [MenuItem("Examples/ProgressReport/Threaded")] static void RunThreaded() { Task.Run(RunTaskWithReport); }
static void RunTaskWithReport() { // Create a new progress indicator int progressId = Progress.Start("Running one task");
// Report the progress status at anytime for (int frame = 0; frame <= 1000; ++frame) { string description; if (frame < 250) description = "First part of the task"; else if (frame < 750) description = "Second part of the task"; else description = "Last part of the task"; Progress.Report(progressId, frame / 1000.0f, description);
// Do your computation that you want to report progress on ComputeSlowStep(); }
// The task is finished. Remove the associated progress indicator. Progress.Remove(progressId); }
static void ComputeSlowStep() { // Simulate a slow computation with a 1 millisecond sleep Thread.Sleep(1); } }
Статические свойства
| Свойство | Описание |
|---|---|
| globalProgress | Возвращает глобальный средний прогресс всех запущенных заданий. |
| globalRemainingTime | Возвращает максимальное время, оставшееся для всех выполняемых индикаторов прогресса. |
| running | Возвращает true, если есть хотя бы один работающий индикатор прогресса, false в противном случае. |
Статические методы
| Метод | Описание |
|---|---|
| Cancel | Отменяет работающий индикатор прогресса и вызывает обратный вызов cancel для связанной задачи. |
| ClearRemainingTime | Сброс вычисления оставшегося времени для индикатора прогресса. |
| EnumerateItems | Возвращает перечислитель для цикла по всем показателям прогресса. |
| Exists | Проверяет наличие индикатора прогресса с указанным ID. |
| Finish | Помечает показатель прогресса как завершенный. |
| GetCount | Получает число доступных показателей прогресса. |
| GetCountPerStatus | Для каждого доступного состояния получает число показателей прогресса с этим состоянием. |
| GetCurrentStep | Получает текущий шаг для показателя прогресса. |
| GetDescription | Получить описание индикатора прогресса. |
| GetEndDateTime | Получает метку времени завершения работы индикатора прогресса. |
| GetId | Находит уникальный ID индикатора прогресса, используя его индекс в наборе всех доступных индикаторов прогресса. |
| GetName | Получает имя индикатора прогресса. |
| GetOptions | Получает параметры, указанные при запуске индикатора прогресса. |
| GetParentId | Получает уникальный ID родительского индикатора прогресса, если таковой существует. |
| GetPriority | Получает приоритет индикатора прогресса. |
| GetProgress | Получает прогресс индикатора прогресса. |
| GetProgressById | Получает сведения об индикаторе прогресса. |
| GetRemainingTime | Получает оставшееся время индикатора прогресса в секундах. |
| GetRunningProgressCount | Получает число активных или запущенных индикаторов прогресса. |
| GetStartDateTime | Получает метку времени, когда был запущен индикатор прогресса. |
| GetStatus | Получает состояние индикатора прогресса. |
| GetStepLabel | Получить метку, отображающую шаги индикатора прогресса. |
| GetTimeDisplayMode | Получить режим отображения времени индикатора прогресса. |
| GetTotalSteps | Получает общее число шагов от начала до конца для показателя прогресса. |
| GetUpdateDateTime | Получает время последнего изменения или завершения индикатора прогресса. |
| IsCancellable | Указывает, можно ли отменить задачу, связанную с индикатором выполнения. |
| IsPausable | Указывает, можно ли приостановить выполнение задачи индикатора прогресса. |
| Pause | Приостанавливает работающий индикатор прогресса и вызывает обратный вызов pause для его задачи. |
| RegisterCancelCallback | Регистрирует обратный вызов, который вызывается, когда пользователь запрашивает отмену связанной задачи выполняемого индикатора прогресса. |
| RegisterPauseCallback | Регистрирует обратный вызов, который вызывается, когда пользователь запрашивает приостановку или возобновление выполняемой задачи индикатора прогресса. |
| Remove | Завершение и удаление активного индикатора прогресса. |
| Report | Отчет о текущем состоянии выполняемого индикатора прогресса. |
| Resume | Возобновляет приостановленный индикатор прогресса и вызывает обратный вызов паузы для связанной задачи. |
| SetDescription | Задает описание индикатора прогресса. Чтобы очистить описание, передайте null. |
| SetPriority | Задает приоритет индикатора прогресса. |
| SetRemainingTime | Задает оставшееся время для индикатора прогресса в секундах. |
| SetStepLabel | Задает метку, отображающую шаги индикатора прогресса. |
| SetTimeDisplayMode | Устанавливает режим отображения времени индикатора прогресса. |
| ShowDetails | Открывает окно прогресса фоновых задач. |
| Start | Этот метод запускает новый показатель прогресса. |
| UnregisterCancelCallback | Отменяет регистрацию ранее зарегистрированного обратного вызова отмены прогресса. |
| UnregisterPauseCallback | Отменяет регистрацию ранее зарегистрированного обратного вызова паузы прогресса. |
Мероприятия
| Мероприятие | Описание |
|---|---|
| added | Событие, возникающее при запуске нового показателя прогресса. |
| removed | Событие, возникающее при удалении показателя прогресса. |
| updated | Событие, возникающее при обновлении состояния индикатора прогресса. |