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 |
---|---|
Fő | 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.