Im Spiel ermöglicht Instanz-Streaming der Roblox-Engine, 3D-Inhalte und verwandte Instanzen im Workspace dynamisch zu laden und zu entladen. Dies kann das Gesamterlebnis der Spieler auf verschiedene Weise verbessern, einschließlich:
- Schnellere Beitrittszeiten— Spieler können in einem Teil der Welt spielen, während mehr von der Welt im Hintergrund geladen wird.
- Speichereffizienz— Spiele können auf Geräten mit weniger Speicher gespielt werden, da Inhalte dynamisch ein- und ausgegeben werden. Immersivere und detailliertere Welten können auf einer breiteren Palette von Geräten gespielt werden.
- Verbesserte Leistung— Bessere Bildraten und Leistung, da der Server weniger Zeit und Bandbreite damit verbringen kann, Änderungen zwischen der Welt und den Spielern darin zu synchronisieren. Clients verbringen weniger Zeit mit der Aktualisierung von Instanzen, die für den Spieler derzeit nicht relevant sind.
- Detailgrad— Wenn konfiguriert, bleiben entfernte Modelle, Plattform-Avatare und Terrain sichtbar, auch wenn sie nicht an Clients gestreamt werden, wodurch das Spiel optimiert bleibt, ohne die Hintergrundgrafik vollständig zu opfern. SLIM bietet den Detailgrad mit der höchsten Genauigkeit für sowohl Modelle als auch Avatare.
Instanz-Streaming wird über die Workspace.StreamingEnabled-Eigenschaft gesteuert, die standardmäßig für neue Orte, die im Studio erstellt werden, aktiviert ist. Diese Eigenschaft kann nicht in einem Skript festgelegt werden.

Technisches Verhalten
Umfang
Die Streaming-Logik und -Funktionen gelten ausschließlich für Instanzen, die Nachkommen von Workspace sind, während Instanzen, die in anderen Containern wie ReplicatedStorage und ReplicatedFirst gespeichert sind, nicht für das Streaming in Frage kommen. Zum Beispiel garantiert das Platzieren eines atomaren Modells unter ReplicatedStorage keine atomare Replikation.
Stream in
Wenn ein Spieler einem Spiel mit aktiviertem Instanz-Streaming beitritt:
Instanzen im Workspace werden an den Client repliziert außer den folgenden:

Models, die auf Atomic, Persistent oder PersistentPerPlayer gesetzt sind; siehe pro-Modell-Streaming-Kontrollen

Models, die auf Nonatomic (Standard) gesetzt sind, wenn Workspace.ModelStreamingBehavior auf Improved gesetzt ist

Nachkommen der oben genannten Instanzen
Während des Spiels kann der Server Instanzen aus den oben genannten aufgeschobenen Kategorien an den Client streamen, basierend auf den Streaming-Eigenschaften des Spiels, der Spielerposition, der Leistung des Client-Geräts und anderen Bedingungen.
Stream out
Während des Spiels kann ein Client Regionen von BaseParts aus dem Workspace des Spielers basierend auf dem Verhalten, das durch Workspace.StreamOutBehavior festgelegt ist, entfernen. Der Prozess beginnt mit den Regionen, die am weitesten von den Replikationsfoki entfernt sind, und bewegt sich näher, falls erforderlich. Regionen innerhalb des Bereichs von Workspace.StreamingMinRadius werden niemals gestreamt.
Beachten Sie, dass ein Model ohne BasePart-Nachkommen, wie eines, das lediglich als "Container" für nicht-BasePart-Instanzen wie Skripte verwendet wird, von dem Streaming ausgeschlossen ist es sei denn, es wird ein Nachkomme eines BasePart.
Baugruppen
Physikalische Baugruppen werden in als vollständige Einheiten gestreamt, einschließlich ihrer zugehörigen Constraints und Attachments, was hilft, konsistente physikalische Updates auf Clients sicherzustellen. Die einzige Ausnahme ist, wenn die Baugruppe verankert ist, in diesem Fall werden nur die BaseParts innerhalb des Streaming-Radius zusammen mit ihren zugehörigen Constraints und Attachments gestreamt.
Baugruppen werden nicht aus gestreamt, bis alle ihre BaseParts für das Streaming in Frage kommen.
Streaming-Eigenschaften
Die folgenden Eigenschaften steuern, wie das Instanz-Streaming auf Ihr Spiel angewendet wird. Alle diese Eigenschaften sind nicht skriptfähig und müssen auf dem Workspace-Objekt im Studio festgelegt werden.

| Eigenschaft | Beschreibung |
|---|---|
| EnableSLIMAvatars | Steuert, ob ein SLIM Modell für Avatar-Charaktere im Spiel generiert wird. Wenn aktiviert, werden Avatare mit SLIM gerendert, ähnlich wie die Einstellung Model.LevelOfDetail auf SLIM für andere Modelle funktioniert. Siehe SLIM für Details. |
| ModelStreamingBehavior | Steuert, wie Nonatomic (Standard) Modelle ein- und ausgegeben werden. EMPFOHLEN Verwenden Sie Improved, um das effizienteste Streaming für Models mit BasePart-Nachkommen zu aktivieren. |
| PredictiveStreamingMode | Aktiviert das prädiktive Streaming, das Enginesignale verwendet, um proaktiv Bereiche zu streamen, die ein Spieler wahrscheinlich bald benötigt, wie Respawn-Standorte oder Regionen, die der Spieler kürzlich über eine CFrame-Änderung verlassen hat. Vorhersagen sind additiv, verfallen nach kurzer Zeit, wenn sie nicht verwendet werden, und werden auf ressourcenbeschränkten Clients übersprungen. |
| StreamingIntegrityMode | Das Spiel kann sich auf unerwartete Weise verhalten, wenn ein Spieler in eine Region der Welt zieht, die ihm nicht gestreamt wurde. Diese Eigenschaft bietet eine Möglichkeit, diese potenziell problematischen Situationen zu vermeiden. EMPFOHLEN Verwenden Sie PauseOutsideLoadedArea, um die Integrität des Gameplays zu wahren, ohne unnötig oder zu oft zu pausieren. Sie können auch den Pausebildschirm anpassen. |
| StreamingMinRadius | Diese Eigenschaft gibt den Radius um die Replikationsfoki an, in dem Instanzen mit höchster Priorität gestreamt werden. Vorsicht ist geboten, wenn der Standardwert erhöht wird, da dies mehr Speicher und mehr Serverbandbreite auf Kosten anderer Komponenten erfordert. EMPFOHLEN Verwenden Sie den Standardwert von 64, um zu maximieren, wie viel die Engine das Spiel für Geräte mit niedriger Leistung skalieren kann. |
| StreamingTargetRadius | Diese Eigenschaft steuert die maximale Entfernung von den Replikationsfoki, in der Instanzen gestreamt werden. Beachten Sie, dass die Engine berechtigt ist, zuvor geladene Instanzen über den Zielradius hinaus beizubehalten, sofern der Speicher dies zulässt. Ein kleinerer StreamingTargetRadius reduziert die Serverlast, da der Server keine zusätzlichen Instanzen über den festgelegten Wert hinaus streamt. Der Zielradius ist jedoch auch die maximale Entfernung, in der Spieler die vollständige Detailgenauigkeit Ihres Spiels sehen können, sodass Sie einen Wert wählen sollten, der ein gutes Gleichgewicht zwischen diesen beiden Aspekten schafft. EMPFOHLEN Verwenden Sie den Standardwert von 1024, um ein gutes Gleichgewicht zwischen Sichtbarkeit für Spieler auf Hochleistungsgeräten und einem angemessenen Speicherbedarf zu erreichen. |
| StreamOutBehavior | Diese Eigenschaft legt das Verhalten des Streamens gemäß dem Wert von Enum.StreamOutBehavior fest. Wenn auf LowMemory (Standard) gesetzt, streamt der Client nur Regionen außerhalb des Mindestradius in einer Situation mit niedrigem Speicher. Wenn auf Opportunistic gesetzt, können Regionen außerhalb des StreamingTargetRadius auf dem Client entfernt werden, selbst wenn kein Speicherdruck besteht (in diesem Modus entfernt der Client niemals Instanzen, die sich innerhalb des Zielradius befinden, es sei denn, es gibt eine Situation mit niedrigem Speicher). EMPFOHLEN Verwenden Sie Opportunistic, um dem Client zu ermöglichen, aggressiv Inhalte zu bereinigen, was den Speicherverbrauch erheblich reduziert und hilft, Abstürze aufgrund von Speichermangel zu verhindern. |
Replikationsfokus
Standardmäßig erfolgt das Streaming um den PrimaryPart des lokalen Spielercharakters, obwohl Sie einen anderen Replikationsfokuspunkt über Player.ReplicationFocus angeben können.
Sie können auch zusätzliche Replikationsfoki über Player:AddReplicationFocus() und Player:RemoveReplicationFocus() hinzufügen und entfernen, um das Streaming in mehreren Bereichen des Spiels dynamisch zu aktivieren.
Die clientseitige Physiksimulation, einschließlich Vorhersage und Neusimulationen, wenn Serverautorisierung implementiert ist, erfolgt nur in gestreamten Bereichen, selbst für lokal erstellte Instanzen und für Persistent Instanzen. Wenn Sie Instanzen haben, die Sie auch dann simulieren möchten, wenn sie weit vom Charakter entfernt sind, erstellen Sie einen zusätzlichen Replikationsfokus in der Nähe dieser Instanzen.
Prädiktives Streaming
Prädiktives Streaming ist eine optionale Funktion, die Enginesignale verwendet, um die Bewegung des Spielers vorherzusagen und proaktiv Bereiche zu streamen, die der Spieler wahrscheinlich bald benötigt. Wenn aktiviert, indem PredictiveStreamingMode auf Enabled gesetzt wird, kann es Streaming-Pausen und visuelles Pop-In ohne Codeänderungen reduzieren.
Prädiktives Streaming ist additiv. Es erstellt kleine, temporäre Streaming-Foki zusätzlich zu Ihren vorhandenen Replikationsfoki, streamt eine kleine Menge zusätzlicher Inhalte und ändert nicht Ihre Spiel-Logik oder Streaming-Verträge. Wenn eine Vorhersage nicht benötigt wird, verfällt der vorhergesagte Bereich nach kurzer Zeit und die Engine entlädt den Inhalt. Die Engine berücksichtigt auch den Speicher und die Leistung des Clients und überspringt Vorhersagen auf ressourcenbeschränkten Geräten.
Wenn PredictiveStreamingMode auf Enabled gesetzt ist, sind die folgenden prädiktiven Funktionen aktiv:
| Funktion | Beschreibung |
|---|---|
| Spawn-Vorab-Laden | Wenn ein Spieler stirbt, erstellt die Engine kleine, temporäre Streaming-Foki an möglichen Spawn-Standorten, sodass wahrscheinliche Respawn-Bereiche zu streamen beginnen, bevor der Spielercharakter erscheint, wodurch Pausen und fehlende Inhalte sofort nach dem Respawn reduziert werden. |
| CFrame Rückgabeoptimierung | Wenn ein Spieler CFrames von einem Bereich entfernt ist, erstellt die Engine einen kleinen, temporären Streaming-Fokus an dem Ort, den er verlassen hat. Dies hilft, diesen Bereich gestreamt zu halten, wenn der Spieler kurz danach zurückkehrt, ein häufiges Szenario beim Bewegen zwischen Gebäuden, Unterebenen, Geschäften oder Hubs. |
Modell-Streaming-Kontrollen
Um Probleme mit dem Streaming auf pro-Modell-Basis zu vermeiden und die Verwendung von WaitForChild() zu minimieren, können Sie anpassen, wie Models und deren Nachkommen über ihre ModelStreamingMode-Eigenschaft gestreamt werden.
Nonatomic
Standardmäßig sind Modelle Nonatomic und sie streamen ein/aus, basierend darauf, ob Workspace.ModelStreamingBehavior auf Legacy (Standard) oder Improved gesetzt ist.
Legacy
Wenn Workspace.ModelStreamingBehavior auf Legacy (Standard) gesetzt ist, wird der Model-Container und seine nicht-BasePart-Nachkommen wie Scripts an den Client repliziert, wenn der Spieler beitritt. Dann, wenn sie berechtigt sind, streamen die BasePart-Nachkommen des Modells ein.

Verbessert
Wenn Workspace.ModelStreamingBehavior auf Improved gesetzt ist, variiert das Streaming-Verhalten von Modellen, je nachdem, ob das Modell BasePart-Nachkommen enthält oder nicht enthält:
Ein Modell mit BasePart-Nachkommen streamt ein, wenn einer seiner BasePart-Nachkommen berechtigt ist, gestreamt zu werden. Zu diesem Zeitpunkt wird das Modell und der berechtigte BasePart gestreamt, zusammen mit den nicht-BasePart-Nachkommen des Modells.
Wenn der letzte verbleibende BasePart des Modells aus gestreamt wird, wird das Modell selbst zusammen mit ihm gestreamt.

Ein Modell ohne BasePart-Nachkommen, wie eines, das lediglich als "Container" für nicht-BasePart-Instanzen wie Skripte verwendet wird, wird kurz nach dem Beitritt des Spielers an den Client repliziert. Diese Art von Modell ist von dem Streaming ausgeschlossen es sei denn, es wird ein Nachkomme eines BasePart.

Atomar
Wenn ein Model auf Atomic gesetzt ist, werden alle seine ursprünglichen Nachkommen zusammen gestreamt, wenn ein Nachkomme BasePart berechtigt ist, gestreamt zu werden. Daher müsste ein clientseitiges Skript, das auf Instanzen innerhalb des Modells zugreifen muss, WaitForChild() auf dem Modell selbst verwenden, jedoch nicht auf einem Nachkommen MeshPart oder Part, da diese zusammen mit dem Modell gesendet werden.
Ein atomares Modell wird nur gestreamt, wenn alle seine Nachkommen für das Streaming berechtigt sind, zu diesem Zeitpunkt wird das gesamte Modell zusammen gestreamt.

Persistent
Persistent Modelle unterliegen nicht dem normalen Streaming ein oder aus. Sie werden als vollständige atomare Einheit kurz nach dem Beitritt des Spielers gesendet und bevor das Workspace.PersistentLoaded-Ereignis ausgelöst wird. Persistente Modelle und deren Nachkommen werden niemals gestreamt, aber um das Streaming innerhalb eines clientseitigen Skripts sicher zu handhaben, sollten Sie auf das Auslösen des PersistentLoaded-Ereignisses warten.

PersistentPerPlayer
Modelle, die auf PersistentPerPlayer gesetzt sind, verhalten sich für Spieler, die mit Model:AddPersistentPlayer() hinzugefügt wurden, gleich wie Persistent. Für andere Spieler ist das Verhalten dasselbe wie bei Atomic. Sie können ein Modell von der Spielerpersistenz über Model:RemovePersistentPlayer() zurücksetzen.
Anpassung des Pausebildschirms
Vorausgesetzt, Workspace.StreamingIntegrityMode ist auf das empfohlene PauseOutsideLoadedArea gesetzt, wird das Spiel pausiert, wenn ein Spieler in eine Region der Welt zieht, die ihm nicht gestreamt wurde. In diesen Fällen zeigt die Player.GameplayPaused-Eigenschaft den aktuellen Pausenzustand des Spielers an, der mit einer Verbindung zu GetPropertyChangedSignal() verwendet werden kann, um eine benutzerdefinierte GUI anzuzeigen oder auszublenden.
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Deaktivieren Sie das standardmäßige Pausenmodal
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Benutzerdefinierte GUI anzeigen
else
-- Benutzerdefinierte GUI ausblenden
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)Laufzeit-Debugging
Die Engine enthält mehrere On-Screen-Debug-Panels, die auf dem Client mit Tastenkombinationen aktiviert werden können. Um Streaming-Debug-Informationen zuzugreifen:
- Öffnen Sie die Netzwerkübersicht-Debug-Überlagerung über ShiftCtrlF3 (Windows) oder Shift⌘F3 (Mac).
- Sobald die Debug-Überlagerung geöffnet ist, drücken Sie wiederholt Shift1, um durch die verfügbaren Panels zu wechseln. Das vierte Panel ist die Streaming-Debug-Ansicht, die nützliche Laufzeitinformationen anzeigt:
- Aktive Streaming-Einstellungen
- Derzeit geladene (gestreamte) Regionen
- Streaming-Verhalten und -Zustand
Sobald aktiviert, erscheinen farblich hervorgehobene Regionen im 3D-Viewport:
| Farbe | Beschreibung |
|---|---|
| Weniger als StreamingMinRadius | |
| Größer oder gleich StreamingMinRadius und weniger als StreamingTargetRadius | |
| Gleich StreamingTargetRadius | |
| Größer als StreamingTargetRadius |