In-Experience Instanz-Streaming ermöglicht es der Roblox-Engine, 3D-Inhalte und verwandte Instanzen dynamisch in Regionen der Welt zu laden und zu entladen.Dies kann die Gesamterfahrung des Spielers auf mehrere Weisen verbessern, zum Beispiel:
- Schnellere Beitrittszeiten — Spieler können in einem Teil der Welt spielen, während mehr der Welt im Hintergrund geladen wird.
- Speichereffizienz — Erlebnisse können auf Geräten mit weniger Speicher gespielt werden, da Inhalte dynamisch eingegeben und ausgegeben werden.Mehr immersive und detaillierte Welten können auf einer breiteren Palette von Geräten gespielt werden.
- Verbesserte Leistung — Bessere Rahmenraten und Erfüllung, da der Server weniger Zeit und Bandbreite damit verbringen kann, Änderungen zwischen der Welt und den Spielern darin zu synchronisieren.Kunden verbringen weniger Zeit damit, Instanzen zu aktualisieren, die dem Spieler:inderzeit nicht relevant sind.
- Detaillierungsgrad — Entfernte Modelle und Gelände bleiben auch sichtbar, wenn sie nicht an Clients gestreamt werden, und die Erfahrung optimiert bleibt, ohne Hintergrundvisuals vollständig aufzugeben.
Streaming aktivieren
Instance-Streaming wird durch die StreamingEnabled Eigenschaft des Arbeitsbereichs Objekts in Studio aktiviert.Diese Eigenschaft kann in einem Skript, das. PL: die Skriptsnicht festgelegt werden.Streaming ist standardmäßig für neue Orte aktiviert, die im Studio erstellt wurden.

Sobald aktiviert, wird empfohlen, sich an die folgenden Praktiken zu halten:
- Da Clients nicht typischerweise die gesamte Workspace Verfügbarkeit lokal haben, verwende das entsprechende Werkzeug/API, um sicherzustellen, dass Instanzen existieren, bevor du versuchst, auf sie in einer LocalScript zuzugreifen.Verwenden Sie zum Beispiel Streaming-Steuerelemente pro Modell , erkennen von Instanzstreaming oder verwenden Sie auf Objekten, die möglicherweise nicht existieren.
- Vermeiden Sie die Platzierung von 3D-Inhalten außerhalb von Workspace.Inhalte in Containern wie ReplicatedStorage oder ReplicatedFirst sind für das Streaming nicht elegibel und können die Verbindungszeit und den Speicherverbrauch negativ beeinflussen.
- Wenn du den Charakter eines Spieler:inverschiebst, indem du seine CFrame festlegst, tue dies von einer serverseitigen Script aus und verwende Streaminganfragen, um Daten um den neuen Standort des Charakters schneller zu laden.
- Stelle die ReplicationFocus des Spieler:inmanuell nur in einzigartigen Situationen ein, wie in Erlebnissen, die kein Player.Character verwenden.In diesen Fällen stelle sicher, dass der Fokus in der Nähe der Objekte ist (en), die der Spieler steuert, um sicherzustellen, dass der Inhalt weiterhin rund um den Interaktionspunkt des Spieler:ingestreamt wird.
Technisches Verhalten
Stream ein
Standardmäßig, wenn ein Spieler einer Erfahrung mit aktiviertem Instanzstreaming beitritt, werden Instanzen in der Workspace repliziert auf den Client, ausgenommen die gefolgte Profile:
- Abkömmlinge der oben genannten Instanzen
- Nicht replizierende Instanzen
Dann kann der Server während des Gameplaynotwendige Instanzen zum Client streamen, solange sie benötigt werden.
Modellverhalten
Modelle werden auf nicht standardmäßiges Verhalten wie Atomisches Stream in unter speziellen Regeln festgelegt, wie in Per-Modell-Streamingsteuere beschrieben.Standardmäßige (nicht atomare) Modelle werden jedoch unterschiedlich gesendet, basierend darauf, ob ModelStreamingBehavior auf Standard ( Legacy ) oder Verbessert eingestellt ist.

Wenn Modellstreamingverhalten auf Standard / Legacy gesetzt ist, replizieren sich der Model -Container und seine nicht-räumlichen Nachkommen wie Scripts dem Client, wenn der Spieler beitritt.Dann, wenn berechtigt, fließen die Nachkommen des Modells BasePart ein.
Ausstrahlen
Während des Gameplaykann ein Client ausstrahlen (von den Regionen des Spieler:inWorkspace entfernen) und die darin enthaltenen BaseParts auf Basis des von StreamOutBehavior festgelegten Verhaltens.Der Prozess beginnt mit Regionen, die am weitesten vom Charakter des Spieler:inentfernt sind (oder ReplicationFocus ), und bewegt sich im Bedarfsfall näher.Regionen innerhalb des StreamingMinRadius Bereichs werden nie gestreamt.
Wenn eine Instanz ausgeht, wird sie zu nil übernommen, so dass jeder vorhandene Luau-Zustand wieder verbunden wird, wenn die Instanz zurückfließt.Als Ergebnis werden Signale wie ChildRemoved oder DescendantRemoving Feuer auf seine Eltern oder Vorfahren abgefeuert, aber die Instanz selbst wird nicht im selben Sinne zerstört wie ein Instance:Destroy() Anruf.
Um die Streamausgabe weiter vorherzusagen, untersuchen Sie diese Szenarien:
Szenario | Beispiel | Streaming-Verhalten |
---|---|---|
Ein Teil wird erstellt lokal durch Instance.new() in einem LocalScript erstellt. | In einem "Markierungeinfangen"-Spiel erstellst du und fügst blaue Helmteile allen Spielern im blauen Team durch eine LocalScript hinzu. | Das Teil wird nicht auf den Server repliziert, und es ist von der Ausstrahlung ausgenommen es sei denn , du machst es zu einem Nachkommen eines Teils, das auf dem Server existiert, wie ein Teil innerhalb des Modelleines Spieler:in. |
Ein Teil wird geklont lokal von ReplicatedStorage durch Instance:Clone() in einem LocalScript geklont. | Ein Zaubercharakter wirft einen Zauber aus, indem er einen aktiviert, auf dem ein Objekt mit mehreren Spezialeffekten geklont wird, von der Position des Zaubers in den Arbeitsbereich übernommen wird. | Das Teil wird nicht auf den Server repliziert, und es ist von der Ausstrahlung ausgenommen es sei denn , du machst es zu einem Nachkommen einer auf dem Server existierenden Teil. |
Ein Teil wird repariert von ReplicatedStorage an den Arbeitsbereich über einen LocalScript übertragen. | Ein "Zaubererhut" wird in ReplicatedStorage gespeichert.Wenn ein Spieler sich dazu entscheidet, im Team des Zauberers zu spielen, wird der Hut über einen LocalScript in sein Charaktermodell verschoben. | Der Teil bleibt für das Streaming berechtigt, da er vom Server kam und in ReplicatedStorage repliziert wurde.Vermeiden Sie dieses Muster, da es zu einer Desynchronisierung zwischen dem Client und dem Server führt, und der Teil möglicherweise ausgestreamt wird; stattdessen klonen Sie den Teil. |
Modellverhalten
Wenn Sie Modellstreamingverhalten auf Verbessert einstellen, kann die Engine Standardmodelle ( nichtatomar ) ausstrahlen, wenn sie berechtigt sind, ausgestrahnt zu werden, und reduziert möglicherweise die Instanzen, die Eigenschaftsaktualisierungen benötigen.

Unter Verbessertes Modell-Streaming-Verhalten, Streamen aus Standard ( Nonatomic ) Modellen basiert darauf, ob das Modell räumlich (enthält BasePart Nachkommen) oder nicht räumlich (enthält keine BasePart ) ist.
- Ein räumliches Modell wird nur komplett ausgestreamt, wenn sein letzter verbleibender BasePart Nachkomme ausgestreamt wird, da einige der räumlichen Teile des Modells in der Nähe des Spielers/Replikationsfokus und einige weit entfernt sein können.
- Ein nicht-räumliches Modell wird nur dann ausgestreamt, wenn ein Vorfahrt ausgestreamt wird, gleich wie das veraltete Streaming-Verhalten.
Versammlungen und Mechanismen
Wenn mindestens ein Teil einer Montagemaschine zum Streamen berechtigt ist, werden auch alle Teile der Montagemaschine gestreamt.Eine Montagemaschine sendet jedoch nicht aus , bis alle ihrer Teile für den Streaming-Ausgang berechtigt sind.Während des Streamings werden alle Constraints und Attachments von unten absteigend von BaseParts und atomar oder persistent Models gestreamt, was dazu beiträgt, sicherzustellen, dass physikalische Updates auf Clients konsistent sind.
Beachten Sie, dass Versammlungen mit verankerten Teilen leicht anders behandelt werden als Versammlungen mit nur unverankerten Teilen:
Ansammlungskomposition | Streaming-Verhalten |
---|---|
Nur unverankerte Teile | Die gesamte Montagemaschine wird als atomare Einheit gesendet. |
Verankerte Wurzelteil | Nur die Teile, Anhänge und Einschränkungen, die zum Verknüpfen der gestreamten Teile mit dem verwurzelten Teil benötigt werden, werden zusammen gestreamt. |
Zeitverzögerung
Es kann eine leichte Verzögerung von ~10 Millisekunden zwischen der Erstellung einer Teil auf dem Server und der Replikation an Clients geben.In jedem der folgenden Szenarien müssen Sie möglicherweise WaitForChild() und andere Techniken verwenden, anstatt zu vermuten, dass Ereignisse und Eigenschaftsaktualisierungen immer zur gleichen Zeit wie Teilstreaming auftreten.
Szenario | Beispiel | Streaming-Verhalten |
---|---|---|
Ein LocalScript macht einen RemoteFunction Anruf beim Server, um ein Teil zu erstellen. | Ein Spieler aktiviert eine Tool lokal, um ein Teil auf dem Server zu spawnen, mit dem alle Spieler interagieren können. | Wenn die Remotefunktion zum Client zurückkehrt, existiert das Teil möglicherweise noch nicht, obwohl das Teil dem Kundenfokus nahe ist und sich innerhalb eines gestreamten Bereichs befindet. |
Ein Teil wird auf ein Charaktermodell auf dem Server durch ein Script und ein RemoteEvent auf einen Client abgefeuert. | Wenn ein Spieler dem Teambeitritt, wird ein "Polizeiabzeichen"-Teil, das in ServerStorage gespeichert ist, geklont und dem Modelldes Spieler:inangehängt.Ein RemoteEvent wird vom Client eines Spieler:inabgefeuert und empfangen, um ein lokales UI-Element zu aktualisieren. | Obwohl der Client das Ereignissignal empfängt, gibt es keine Garantie, dass das Teil bereits an diesen Client gestreamt wurde. |
Ein Teil kollidiert mit einer unsichtbaren Region auf dem Server und löst eine RemoteEvent auf dem Client aus. | Ein Spieler schießt einen Fußball in ein Tor, was ein "Tor erzielt"-Ereignis auslöst. | Andere Spieler, die dem Ziel nahe sind, können das Ereignis "Ziel erzielt" sehen, bevor der Ball an sie gestreamt wurde. |
Streaming-Eigenschaften
Die folgenden Eigenschaften steuern, wie sich Instanzstreaming auf deine Erlebnisauswirkt.Alle diese Eigenschaften sind nicht skriptbar und müssen auf dem Arbeitsbereich -Objekt in Studio festgelegt werden.

Modellstreamingverhalten
Steuert, ob Standard ( Nichtatomar ) Modelle repliziert werden, wenn ein Spieler beitritt, oder nur dann gesendet werden, wenn sie benötigt werden.Wenn diese Eigenschaft auf Verbessert gesetzt ist, werden Modelle in Workspace nur dann an Clients gesendet, wenn sie benötigt werden, was die Verbindungszeiten möglicherweise beschleunigt.Siehe Technisches Verhalten für weitere Details.
StreamingIntegritätModus
Deine Erfahrung kann sich auf unerwartete Weise verhalten, wenn ein Spieler in eine Region der Welt eintritt, die nicht gestreamt wurde.Die Streaming-Integrität Funktion bietet eine Möglichkeit, diese möglicherweise problematischen Situationen zu vermeiden.Bitte siehe die Enum.StreamingIntegrityMode.
StreamingMinRadius
Die Eigenschaft StreamingMinRadius gibt den Radius um den Charakter des Spieler:inan (oder ReplicationFocus), in dem Instanzen mit höchster Priorität gestreamt werden.Beim Erhöhen des Standardwerts muss Vorsicht walten, da dies mehr Speicher und mehr Serverbandbreite auf Kosten anderer Komponenten erfordern wird.
StreamingZielradius
Die Eigenschaft StreamingTargetRadius steuert die maximale Entfernung vom Charakter des Spieler:in(oder ReplicationFocus ) in der Instanz, in der gestreamt wird.Beachten Sie, dass die Engine es erlaubt ist, zuvor geladene Instanzen außerhalb des Zielradius beizubehalten, sofern das Gedächtnis es zulässt.
Ein kleinerer StreamingTargetRadius reduziert die Serverbelastung, da der Server nicht in zusätzlichen Instanzen außerhalb des festgelegten Werts gestreamt wird.Der Zielradius ist jedoch auch die maximale Entfernung, in der Spieler das volle Detail deiner Erlebnissehen können, also solltest du einen Wert wählen, der ein schönes Gleichgewicht zwischen diesen schafft.
StreamOutVerhalten
Die Eigenschaft StreamOutBehavior legt das Streaming-Verhalten entsprechend einem der folgenden Werte fest:
Einstellung | Streaming-Verhalten |
---|---|
Standardmäßig | Standardverhalten, derzeit das gleiche wie LowMemory . |
Geringe Speichergröße | Der Client streamt nur Teile in einer niedrigen Speicher Situation und kann 3D-Inhalte entfernen, bis nur der minimale Radius vorhanden ist. |
Chancenreich | Regionen jenseits von StreamingTargetRadius können vom Client entfernt werden, auch wenn es keinen Speicherdruck gibt.In diesem Modus entfernt der Client niemals Instanzen, die näher als der Zielradius sind, außer in Situationen mit geringem Speicher. |
Steuerungpro Modell
Globale, lässt die Eigenschaft ModelStreamingBehavior Sie die Art und Weise steuern, wie Modelle beim Beitritt gestreamt werden.Zusätzlich, um Probleme mit dem Streaming auf der Grundlage eines jeden Modells zu vermeiden und die Verwendung von und ihren Nachkommen durch ihre Eigenschaft zu minimieren, kannst du anpassen, wie und ihre Nachkommen durch ihre Eigenschaftenstreamen.

Standard / nicht-atomar
Wenn ein Model auf Standard oder Nichtatomar eingestellt ist, unterscheidet sich das Streamingverhalten je nachdem, ob ModelStreamingBehavior auf Standard ( Legacy ) oder Verbessert eingestellt ist.
Modellstreamingverhalten | Technisches Verhalten |
---|---|
Standard ( Legacy ) | Das Modell wird repliziert, wenn ein Spieler beitritt.Dies kann zu mehr Instanzen führen, die während der Laufzeit gesendet werden, zu mehr Instanzen, die im Speicher gespeichert sind, und zusätzlicher Komplexität für Skripte, die auf die Nachkommen des Modells zugreifen möchten.Zum Beispiel muss ein separates LocalScript verwenden WaitForChild() auf einem Nachkommen BasePart innerhalb des Modells. |
Verbessert | Das Modell wird nur dann gesendet, wenn es nötig ist, was die Verbindungszeiten möglicherweise beschleunigt. |
Siehe technisches Verhalten für weitere Details.
Atomär
Wenn ein Model in Atomar geändert wird, werden alle seine Nachkommen zusammen gestreamt, wenn ein Nachkomme BasePart berechtigt ist.Als Ergebnis müsste ein separates LocalScript, das auf Instanzen im Modell zugreifen muss, auf das Modell selbst WaitForChild() zugreifen, aber nicht auf einen Nachkommen MeshPart oder Part, da sie neben dem Modell gesendet werden.
Ein atomares Modell wird nur dann gestreamt, wenn alle seine abstehenden Teile zum Streamen berechtigt sind, und an dieser Stelle wird das gesamte Modell zusammen gestreamt.Wenn nur einige Teile eines atomaren Modells typischerweise gestreamt werden, bleibt das gesamte Modell und seine Nachkommen auf dem Client.
Lokales Skript
local Workspace = game:GetService("Workspace")-- Atommodell existiert zur Ladezeit nicht; verwende WaitForChild()local model = Workspace:WaitForChild("Model")-- Absteckende Teile fließen mit dem Modell ein und sind sofort zugänglichlocal meshPart = model.MeshPartlocal part = model.Part
Beständig
Beständige Modelle unterliegen nicht der normalen Streaming-Ein- oder -Ausgabe.Sie werden als vollständige atomare Einheit kurz nachdem der Spieler beitritt und vor dem Workspace.PersistentLoaded Ereignis abgefeuert.Beständige Modelle und ihre Nachkommen werden nie gestreamt, aber um das Streaming innerhalb einer separaten LocalScript sicher zu handhaben, solltest du auf dem Elternmodell WaitForChild() verwenden oder auf das Ereignis PersistentLoaded warten, bis es initiierenwird.
Lokales Skript
local Workspace = game:GetService("Workspace")-- Dauerhaftes Modell existiert zur Ladezeit nicht; verwende WaitForChild()local model = Workspace:WaitForChild("Model")-- Absteckende Teile fließen mit dem Modell ein und sind sofort zugänglichlocal meshPart = model.MeshPartlocal part = model.Part
PersistentPerSpieler
Modelle, die auf PersistentPerPlayer eingestellt sind, verhalten sich gleich wie Persistent für Spieler, die mit Model:AddPersistentPlayer() hinzugefügt wurden.Für andere Spieler ist das Verhalten das gleiche wie Atomar.Du kannst ein Modell von der Beständigkeit des Spielers über Model:RemovePersistentPlayer() rückgängig machen.
Anfordern von Bereichsstreaming
Wenn du den CFrame eines Spielerkennzeichnens auf eine Region einstellst, die derzeit nicht geladen ist, tritt eine Streaming-Pause ein, wenn aktiviert.Wenn du weißt, dass der Charakter in einen bestimmten Bereich bewegt wird, kannst du Player:RequestStreamAroundAsync() anrufen, um zu verlangen, dass der Server Regionen rund um diesen Standort an den Client sendet.
Die folgenden Skripte zeigen, wie ein Client-zu-Server-Remote-Ereignis abgefeuert wird, um einen Spieler innerhalb eines Ortes zu teleportieren, der bei der Streaming-Anfrage erbracht wird, bevor der Charakter in eine neue CFrame verschoben wird.
Skript - Spielercharakter teleportieren
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")
local function teleportPlayer(player, teleportTarget)
-- Anfordern von Streaming rund um den Zielstandort
player:RequestStreamAroundAsync(teleportTarget)
-- Teleportierungszeichen
local character = player.Character
if character and character.Parent then
local currentPivot = character:GetPivot()
character:PivotTo(currentPivot * CFrame.new(teleportTarget))
end
end
-- Rufe die Teleportationsfunktion auf, wenn der Client das Remote-Ereignis feuert
teleportEvent.OnServerEvent:Connect(teleportPlayer)
LocalScript - Feuere remotes Ereignis
local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")local teleportTarget = Vector3.new(50, 2, 120)-- Feuere das Remote-Ereignis abteleportEvent:FireServer(teleportTarget)
Instanzstreaming erkennen
In einigen Fällen ist es notwendig, zu erkennen, wann ein Objekt ein- oder ausgeht und auf dieses Ereignis zu reagieren.Ein nützliches Muster für die Streamerkennung ist wie folgt:
Verwenden Sie den Tags-Abschnitt der Eigenschaften einer Instanz oder den Tag-Editor von Studio, um allen betroffenen Objekten ein logisches CollectionService zuzuweisen.
Von einem einzelnen LocalScript , erkennen, wenn ein mit einem Tag versehenes Objekt durch GetInstanceAddedSignal() und GetInstanceRemovedSignal() in oder ausgestreamt wird, und das Objekt dann entsprechend handhaben.Zum Beispiel fügt der folgende Code markierte Light -Objekte in eine "Flimmer"-Schleife ein, wenn sie eingestreamt werden, und entfernt sie, wenn sie ausgegeben werden.
LocalScript - CollectionService Streaming-Erkennunglocal CollectionService = game:GetService("CollectionService")local tagName = "FlickerLightSource"local random = Random.new()local flickerSources = {}-- Erkennen Sie derzeit und neue mit Tags versehene Teile, die eingestreamt oder ausgegeben werdenfor _, light in CollectionService:GetTagged(tagName) doflickerSources[light] = trueendCollectionService:GetInstanceAddedSignal(tagName):Connect(function(light)flickerSources[light] = trueend)CollectionService:GetInstanceRemovedSignal(tagName):Connect(function(light)flickerSources[light] = nilend)-- Flimmerlichtschleifewhile true dofor light in flickerSources dolight.Brightness = 8 + random:NextNumber(-0.4, 0.4)endtask.wait(0.05)end
Pausenbildschirm anpassen
Die Eigenschaft Player.GameplayPaused zeigt den aktuellen Pausenstatus des Spieler:inan.Diese Eigenschaft kann mit einer GetPropertyChangedSignal() Verbindung verwendet werden, um eine benutzerdefinierte grafische Benutzeroberflächeanzuzeigen oder auszublenden.
Lokales Skript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Standard-Pausenmodus deaktivieren
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- grafische Benutzeroberflächeanzeigen anpassen
else
-- grafische Benutzeroberflächeverbergen
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)
Modellierungsgrad der Details
Wenn Streaming aktiviert ist, wird Models außerhalb des derzeit gestreamten Bereichs standardmäßig nicht sichtbar sein.Sie können jedoch die Engine anweisen, niedrigere Auflösung "Imposter"-Meshes für Modelle zu rendern, die nicht auf Clients vorhanden sind, durch die EigenschaftenLevelOfDetail des Modells für jedes Modell.



Modell-Einstellung | Streaming-Verhalten |
---|---|
StreamingMesh | Aktiviert die asynchrone Generierung eines Betrügernetzes, um es anzuzeigen, wenn das Modell nicht auf den Clients vorhanden ist. |
Deaktiviert / Automatisch | Das Modell verschwindet, wenn es außerhalb des Streamingradius ist. |
Wenn du Betrüger- Meshes verwendest, beachte gefolgte Profile:
- Betrüger- Meshes sind so konzipiert, dass sie bei 1024 Klötzen von der Kamera entfernt oder weiter gesehen werden.Wenn du StreamingTargetRadius auf einen viel kleineren Wert wie 256 reduziert hast, können Betrüger-Meshes für das Modell, das sie ersetzen, nicht visuell akzeptabel sein.
- Wenn ein Modell und seine untergeordneten Modelle alle auf StreamingMesh eingestellt sind, wird nur das oberste Vorfahrenmodell als Betrüger-Netz gerendert, das alle Geometrien unter dem Vorfahren und seine untergeordneten Modelle einwickelt.Für eine bessere Erfüllungwird empfohlen, Deaktiviert für abstehende Modelle zu verwenden.
- Texturen werden nicht unterstützt; Betrüger-Meshes werden als glatte Meshes gerendert.
- Während ein Model nicht vollständig gestreamt wird, wird das Eindringling-Mesh anstelle einzelner Teile des Modells gerendert.Sobald alle einzelnen Teile gestreamt wurden, werden sie gerendert und die Betrüger-Mesh wird ignoriert.
- Betrüger-Meshes haben keine physische Bedeutung und agieren als nicht existent in Bezug auf Raycasting, Kollisionserkennung und Physiksimulation.
- Das Bearbeiten eines Modells in Studio, wie das Hinzufügen/Löschen/Verschieben von Kindern oder das Zurücksetzen von Farben, aktualisiert automatisch das repräsentative Mesh.