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。 |
取消 | 取消正在运行的进度指示器,并调用与该任务关联的取消回调。 |
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 | 暂停正在运行的进度指示器,并调用其任务的暂停回调。 |
RegisterCancelCallback | 注册一个回调,该回调在用户请求取消正在运行的进度指示器关联的任务时被调用。 |
RegisterPauseCallback | 注册一个回调,该回调在用户请求暂停或恢复正在运行的进度指示器的任务时被调用。 |
Remove | 完成并删除活动进度指示器。 |
Report | 报告正在运行的进度指示器的当前状态。 |
Resume | 恢复已暂停的进度指示器,并调用与该任务关联的暂停回调。 |
SetDescription | 设置进度指示器的描述。要清除描述,请传递 null。 |
SetPriority | 设置进度指示器的优先级。 |
SetRemainingTime | 设置进度指示器剩余的时间(以秒为单位)。 |
SetStepLabel | 设置显示进度指示器步骤的标签。 |
SetTimeDisplayMode | 设置进度指示器的计时模式。 |
ShowDetails | 打开后台任务的进度窗口。 |
Start | 此方法启动一个新的进度指示器。 |
UnregisterCancelCallback | 注销先前注册的进度取消回调。 |
UnregisterPauseCallback | 注销先前注册的进度暂停回调。 |