mrtk_developmentreleases/2.0.0releases/2.1.0releases/2.2.0
  • 指南
  • API 文档
  • 指南

    Show / Hide Table of Contents

    Scene Transition Service (场景过渡服务)

    该扩展简化了淡出场景,显示进度指示器,加载场景然后淡入的业务。

    场景操作由SceneSystem服务驱动,但是任何基于任务的操作都可以用来驱动过渡操作。

    Enabling the extension (启用扩展)

    要启用扩展,请打开您的RegisteredServiceProvider配置文件。单击注册新服务提供者(Register a new Service Provider)以添加新配置。在“Component Type”字段中,选择“ SceneTransitionService”。在“Configuration Profile”字段中,选择default scene transition profile included with the extension。

    配置文件选项

    Use Default Progress Indicator (使用默认进度指示器)

    如果选中,则在调用DoSceneTransition时未提供任何进度指示器对象时,将使用默认进度指示器预制体。如果提供了进度指示器对象,则默认设置将被忽略。

    Use Fade Color (使用淡入淡出)

    如果选中,过渡服务将在过渡期间应用淡入淡出。可以在运行时通过服务的UseFadeColor 属性更改此设置。

    Fade Color (淡入淡出颜色 )

    控制淡入淡出效果的颜色。Alpha被忽略。可以在在运行时且过渡之前通过服务的FadeColor属性更改此设置。

    Fade Targets (淡入淡出目标)

    控制将对它们应用淡入淡出效果的摄像机。可以在运行时通过服务的FadeTargets 属性更改此设置。

    设置 目标相机
    Main 对主相机应用淡入淡出效果。
    UI 将淡入淡出效果应用于UI层上的相机。(不影响覆盖UI)
    All 适用于主摄像机和UI摄像机。
    Custom 适用于通过SetCustomFadeTargetCameras提供的一组自定义摄像机

    Fade Out Time / Fade In Time (淡出时间/淡入时间 )

    进入/退出过渡时淡入淡出持续时间的默认设置。可以在运行时通过服务的FadeOutTime 和FadeInTime 属性更改这些设置

    Camera Fader Type (相机淡入淡出类型)

    使用哪个ICameraFader类用于向相机应用淡入淡出效果。默认的CameraFaderQuad 类实例化一个quad,该quad在目标摄影机前面靠近剪切平面的位置使用透明材质。另一种方法可能是使用post effects系统。

    Using the Extension (使用扩展)

    您可以通过传递相机淡出时运行的任务来使用转换服务。

    Using Scene System Tasks (使用场景系统任务)

    在大多数情况下,您将使用SceneSystem服务提供的任务:

    private async void TransitionToScene()
    {
        IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();
        ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();
    
        //淡出
        //运行LoadContent任务
        //淡入
        await transition.DoSceneTransition(
                () => sceneSystem.LoadContent("TestScene1")
            );
    }
    

    使用自定义任务

    在其他情况下,您可能想要执行淡入淡出而没有实际加载场景:

    private async void TransitionToScene()
    {
        ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();
    
        //淡出
        //重置场景
        //淡入
        await transition.DoSceneTransition(
                () => ResetScene()
            );
    }
    
    private async Task ResetScene()
    {
          //遍历当前场景中的所有敌人并将它们移回起始位置
    }
    

    或者,您可能想加载场景而不使用SceneSystem服务:

    private async void TransitionToScene()
    {
        ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();
    
       //淡出
        //使用Unity的场景管理器加载场景
        //淡入
        await transition.DoSceneTransition(
                () => LoadScene("TestScene1")
            );
    }
    
    private async Task LoadScene(string sceneName)
    {
        AsyncOperation asyncOp = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
        while (!asyncOp.isDone)
        {
            await Task.Yield();
        }
    }
    

    使用多个任务

    You can also supply multiple tasks, which will be executed in order:

    private async void TransitionToScene()
    {
        IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();
        ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();
    
    
        //淡出
        //将时间刻度设置为0
        //将音频淡入0
        //加载TestScene1
        //音频衰减为1
        //将时间刻度设置为1
        //淡入
    
        await transition.DoSceneTransition(
                () => SetTimescale(0f),
                () => FadeAudio(0f, 1f),
                () => sceneSystem.LoadContent("TestScene1"),
                () => FadeAudio(1f, 1f),
                () => SetTimescale(1f)
            );
    }
    
    private async Task SetTimescale(float targetTime)
    {
        Time.timeScale = targetTime;
        await Task.Yield();
    }
    
    private async Task FadeAudio(float targetVolume, float duration)
    {
        float startTime = Time.realtimeSinceStartup;
        float startVolume = AudioListener.volume;
        while (Time.realtimeSinceStartup < startTime + duration)
        {
            AudioListener.volume = Mathf.Lerp(startVolume, targetVolume, Time.realtimeSinceStartup - startTime / duration);
            await Task.Yield();
           }
           AudioListener.volume = targetVolume;
    }
    

    Using the Progress Indicator (使用进度指示器)

    如果在SceneTransitionService配置文件中选中UseDefaultProgressIndicator ,则过渡开始时将实例化进度指示器。在过渡期间,可以通过该服务的SetProgressValue 和SetProgressMessage 方法访问该指标的Progress 和Message 属性。

    private async void TransitionToScene()
    {
        IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();
        ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();
    
        ListenToSceneTransition(sceneSystem, transition);
    
        await transition.DoSceneTransition(
                () => sceneSystem.LoadContent("TestScene1")
            );
    }
    
    private async void ListenToSceneTransition(IMixedRealitySceneSystem sceneSystem, ISceneTransitionService transition)
    {
        transition.SetProgressMessage("Starting transition...");
    
        while (transition.TransitionInProgress)
        {
            if (sceneSystem.SceneOperationInProgress)
            {
                transition.SetProgressMessage("Loading scene...");
                transition.SetProgressValue(sceneSystem.SceneOperationProgress);
            }
            else
            {
                transition.SetProgressMessage("Finished loading scene...");
                transition.SetProgressValue(1);
            }
    
            await Task.Yield();
        }
    }
    

    或者,在调用DoSceneTransition 时,您可以通过可选的progressIndicator 参数提供自己的进度指示器。这将覆盖默认进度指示器。

    • Improve this Doc
    In This Article
    • Enabling the extension (启用扩展)
    • 配置文件选项
      • Use Default Progress Indicator (使用默认进度指示器)
      • Use Fade Color (使用淡入淡出)
      • Fade Color (淡入淡出颜色 )
      • Fade Targets (淡入淡出目标)
      • Fade Out Time / Fade In Time (淡出时间/淡入时间 )
      • Camera Fader Type (相机淡入淡出类型)
    • Using the Extension (使用扩展)
      • Using Scene System Tasks (使用场景系统任务)
      • 使用自定义任务
      • 使用多个任务
    • Using the Progress Indicator (使用进度指示器)
    Back to top Generated by DocFX