Jelenetáttűnési szolgáltatás – MRTK2

Ez a bővítmény leegyszerűsíti a jelenet halványítását, a folyamatjelző megjelenítését, a jelenet betöltését, majd a visszahalványítást.

A jelenetműveleteket a SceneSystem szolgáltatás vezérli, de bármely feladatalapú művelet használható az áttűnések végrehajtására.

A bővítmény engedélyezése

A bővítmény engedélyezéséhez nyissa meg a RegisteredServiceProvider-profilját. Új konfiguráció hozzáadásához kattintson az Új szolgáltató regisztrálása elemre. Az Összetevő típusa mezőben válassza a SceneTransitionService lehetőséget. A Konfigurációs profil mezőben válassza ki a bővítményhez tartozó alapértelmezett jelenetáttűnési profilt.

Profilbeállítások

Alapértelmezett állapotjelző használata

Ha be van jelölve, akkor az alapértelmezett állapotjelző előfab lesz használva, ha nem ad meg állapotjelző objektumot a híváskor DoSceneTransition. : Ha állapotjelző objektum van megadva, a rendszer figyelmen kívül hagyja az alapértelmezett értéket.

Elhalványult szín használata

Ha be van jelölve, az áttűnési szolgáltatás halványítást alkalmaz az áttűnés során. Ez a beállítás futásidőben módosítható a szolgáltatás tulajdonságán UseFadeColor keresztül.

Elhalványuló szín

Szabályozza az elhalványulási effektus színét. Az alfa figyelmen kívül lesz hagyva. Ez a beállítás futásidőben módosítható a szolgáltatás tulajdonságán keresztüli áttűnés FadeColor előtt.

Célok elhalványítása

Szabályozza, hogy mely kamerákra lesz halványítási hatás. Ez a beállítás futásidőben módosítható a szolgáltatás tulajdonságán FadeTargets keresztül.

Beállítás Célzott kamerák
Elhalványulási effektust alkalmaz a fő kamerára.
Felhasználói felület Elhalványuló hatást alkalmaz a felhasználói felületi réteg kameráira. (Nincs hatással az átfedésben lévő felhasználói felületre)
Mind A fő és a felhasználói felületi kamerákra egyaránt vonatkozik.
Egyéni Az egyéni kamerakészletekre vonatkozik, SetCustomFadeTargetCameras

Idő elhalványítása / idő elhalványul

Az áttűnés be- és kilépésének időtartamára vonatkozó alapértelmezett beállítások. Ezek a beállítások futásidőben módosíthatók a szolgáltatás FadeOutTime és FadeInTime a tulajdonságok használatával.

Kamera fader típusa

Melyik ICameraFader osztályt kell használni a halványító hatás kamerákra való alkalmazásához. Az alapértelmezett CameraFaderQuad osztály egy négyszöget hoz létre átlátszó anyaggal a cél kamera előtt, közel a vágósíkhoz. Egy másik megközelítés lehet egy utólagos effektusok rendszer használata.

A bővítmény használata

Az áttűnési szolgáltatást úgy használhatja, hogy átadja azokat a feladatokat, amelyek a kamera elhalványulásakor futnak.

Jelenetrendszerfeladatok használata

A legtöbb esetben a SceneSystem szolgáltatás által biztosított feladatokat fogja használni:

private async void TransitionToScene()
{
    IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();
    ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();

    // Fades out
    // Runs LoadContent task
    // Fades back in
    await transition.DoSceneTransition(
            () => sceneSystem.LoadContent("TestScene1")
        );
}

Egyéni feladatok használata

Más esetekben előfordulhat, hogy jelenet tényleges betöltése nélkül szeretne áttűnést végrehajtani:

private async void TransitionToScene()
{
    ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();

    // Fades out
    // Resets scene
    // Fades back in
    await transition.DoSceneTransition(
            () => ResetScene()
        );
}

private async Task ResetScene()
{
    // Go through all enemies in the current scene and move them back to starting positions
}

Vagy a SceneSystem szolgáltatás használata nélkül is betölthet egy jelenetet:

private async void TransitionToScene()
{
    ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();

    // Fades out
    // Loads scene using Unity's scene manager
    // Fades back in
    await transition.DoSceneTransition(
            () => LoadScene("TestScene1")
        );
}

private async Task LoadScene(string sceneName)
{
    AsyncOperation asyncOp = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
    while (!asyncOp.isDone)
    {
        await Task.Yield();
    }
}

Több tevékenység használata

Több feladatot is megadhat, amelyek sorrendben lesznek végrehajtva:

private async void TransitionToScene()
{
    IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();
    ISceneTransitionService transition = MixedRealityToolkit.Instance.GetService<ISceneTransitionService>();

    // Fades out
    // Sets time scale to 0
    // Fades out audio to 0
    // Loads TestScene1
    // Fades in audio to 1
    // Sets time scale to 1
    // Fades back in
    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;
}

A folyamatjelző használata

A folyamatjelző minden, ami megvalósítja az interfészt IProgressIndicator . Ez lehet kezdőképernyő, 3D tagalong betöltési mutató, vagy bármi más, amely visszajelzést ad az átmenet előrehaladásáról.

Ha UseDefaultProgressIndicator be van jelölve a SceneTransitionService profilban, az áttűnés kezdetekor a rendszer elindít egy folyamatjelzőt. Az áttűnés időtartama alatt a mutató Progress és Message a tulajdonságok a szolgáltatás SetProgressValue és SetProgressMessage a metódusok használatával érhetők el.

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();
    }
}

Másik lehetőségként híváskor DoSceneTransition a választható progressIndicator argumentumon keresztül saját állapotjelzőt is megadhat. Ez felülbírálja az alapértelmezett folyamatjelzőt.