进度指示器 - MRTK2
示例场景
可以在 ProgressIndicatorExamples
场景中找到有关如何使用进度指示器的示例。 此场景演示了 SDK 中包含的每个进度指示器预制件。 它还演示了如何将进度指示器与一些常见异步任务(例如场景加载)结合使用。
示例:打开、更新和关闭进度指示器
进度指示器实现 IProgressIndicator
接口。 可以使用 GetComponent
从 GameObject 检索此接口。
[SerializedField]
private GameObject indicatorObject;
private IProgressIndicator indicator;
private void Start()
{
indicator = indicatorObject.GetComponent<IProgressIndicator>();
}
IProgressIndicator.OpenAsync()
和 IProgressIndicator.CloseAsync()
方法返回任务。 建议在异步方法中等待这些任务。
MRTK 的默认进度指示器预制件在放入场景中时应处于非活动状态。 调用进度指示器的 IProgressIndicator.OpenAsync()
方法时,进度指示器将自动激活,并停用它们的 GameObject。 (此模式不是 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
属性确定哪些操作有效。 调用无效的方法通常会导致指示器报告错误且不执行任何操作。
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;
}
}