Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Diese Erweiterung vereinfacht das Ausblenden einer Szene, das Anzeigen einer Statusanzeige, das Laden einer Szene und das anschließende Wiederverblenden.
Szenenvorgänge werden vom SceneSystem-Dienst gesteuert, aber jeder taskbasierte Vorgang kann verwendet werden, um einen Übergang zu steuern.
Aktivieren der Erweiterung
Um die Erweiterung zu aktivieren, öffnen Sie Ihr RegisteredServiceProvider-Profil. Klicken Sie auf Neuen Dienstanbieter registrieren, um eine neue Konfiguration hinzuzufügen. Wählen Sie im Feld Komponententyp die Option SceneTransitionService aus. Wählen Sie im Feld Konfigurationsprofil das Standard-Szenenübergangsprofil aus, das in der Erweiterung enthalten ist.
Profiloptionen
Standardstatusanzeige verwenden
Wenn diese Option aktiviert ist, wird das Standard-Prefab für die Statusanzeige verwendet, wenn beim Aufrufen DoSceneTransition.
von If a progress indicator object is provided (Wenn ein Statusanzeigenobjekt bereitgestellt wird) kein Statusanzeigeobjekt bereitgestellt wird. Die Standardeinstellung wird ignoriert.
Verwenden der Einblendungsfarbe
Wenn diese Option aktiviert ist, wendet der Übergangsdienst während des Übergangs eine Einblendung an. Diese Einstellung kann zur Laufzeit über die -Eigenschaft des Diensts UseFadeColor
geändert werden.
Farbe ausblenden
Steuert die Farbe des Ausblendeffekts. Alpha wird ignoriert. Diese Einstellung kann zur Laufzeit vor einem Übergang über die -Eigenschaft des Diensts FadeColor
geändert werden.
Ziele ausblenden
Steuert, auf welche Kameras ein Einblendeffekt angewendet wird. Diese Einstellung kann zur Laufzeit über die -Eigenschaft des Diensts FadeTargets
geändert werden.
Einstellung | Zielkameras |
---|---|
Hauptsächlich | Wendet den Einblendungseffekt auf die Standard Kamera an. |
Benutzeroberfläche | Wendet den Einblendungseffekt auf Kameras auf der Ui-Ebene an. (Wirkt sich nicht auf die Überlagerungs-Benutzeroberfläche aus) |
Alle | Gilt sowohl für Standard- als auch für Benutzeroberflächenkameras. |
Benutzerdefiniert | Gilt für eine benutzerdefinierte Gruppe von Kameras, die über bereitgestellt werden SetCustomFadeTargetCameras |
Ausblendzeit/Einblenden in der Zeit
Standardeinstellungen für die Dauer einer Einblendung beim Eintreten/Beenden eines Übergangs. Diese Einstellungen können zur Laufzeit über die Eigenschaften und FadeInTime
des Diensts FadeOutTime
geändert werden.
Kamera-Fadertyp
Welche ICameraFader
Klasse zum Anwenden eines Ausblendeffekts auf Kameras verwendet werden soll. Die Standardklasse CameraFaderQuad
instanziiert ein Quad mit einem transparenten Material vor der Zielkamera in der Nähe der Clipebene. Ein anderer Ansatz könnte die Verwendung eines Post effects-Systems sein.
Verwenden der Erweiterung
Sie verwenden den Übergangsdienst, indem Sie Tasks übergeben, die ausgeführt werden, während die Kamera ausgeblendet ist.
Verwenden von Szenensystemaufgaben
In den meisten Fällen verwenden Sie Tasks, die vom SceneSystem-Dienst bereitgestellt werden:
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")
);
}
Verwenden von benutzerdefinierten Aufgaben
In anderen Fällen können Sie einen Übergang ausführen, ohne tatsächlich eine Szene zu laden:
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
}
Oder Sie möchten eine Szene laden, ohne den SceneSystem-Dienst zu verwenden:
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();
}
}
Verwenden mehrerer Aufgaben
Sie können auch mehrere Aufgaben angeben, die in der folgenden Reihenfolge ausgeführt werden:
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;
}
Verwenden der Statusanzeige
Eine Statusanzeige ist alles, was die IProgressIndicator
-Schnittstelle implementiert. Dies kann in Form eines Begrüßungsbildschirms, eines 3D-Tagalong-Ladeindikators oder anderer Elemente erfolgen, die Feedback zum Übergangsfortschritt geben.
Wenn UseDefaultProgressIndicator
im SceneTransitionService-Profil aktiviert ist, wird eine Statusanzeige instanziiert, wenn ein Übergang beginnt. Für die Dauer des Übergangs kann auf die Eigenschaften und Message
des Indikators Progress
über die Methoden und dieses SetProgressMessage
Diensts SetProgressValue
zugegriffen werden.
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();
}
}
Alternativ können Sie beim Aufrufen DoSceneTransition
eine eigene Statusanzeige über das optionale progressIndicator
Argument angeben. Dadurch wird die Standardstatusanzeige außer Kraft gesetzt.