Streaming instancji

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

W grze streaming instancji pozwala silnikowi Roblox dynamicznie ładować i usuwać zawartość 3D oraz powiązane instancje w Workspace. Może to poprawić ogólne doświadczenie gracza na kilka sposobów, w tym:

  • Szybsze czasy dołączenia
    — Gracze mogą zacząć grać w jednej części świata, podczas gdy więcej świata ładowane jest w tle.
  • Efektywność pamięci
    — Gry mogą być uruchamiane na urządzeniach z mniejszą pamięcią, ponieważ zawartość jest dynamicznie przesyłana w i na zewnątrz. Bardziej immersywne i szczegółowe światy mogą być odtwarzane na szerszym zakresie urządzeń.
  • Poprawiona wydajność
    — Lepsze liczby klatek na sekundę i wydajność, ponieważ serwer może spędzać mniej czasu i pasma na synchronizowaniu zmian między światem a graczami w nim. Klienci spędzają mniej czasu na aktualizowaniu instancji, które nie są obecnie istotne dla gracza.
  • Poziom szczegółowości
    — Po skonfigurowaniu, odległe modele, awatary platformy i teren pozostają widoczne, nawet gdy nie są przesyłane do klientów, co pozwala na optymalizację gry bez całkowitego poświęcania wizualizacji w tle. SLIM zapewnia najwyższy poziom szczegółowości zarówno dla modeli, jak i awatarów.

Streaming instancji jest kontrolowany przez właściwość Workspace.StreamingEnabled, która jest domyślnie włączona dla nowych miejsc tworzonych w Studio. Ta właściwość nie może być ustawiana w skrypcie.

Okno Właściwości z włączoną właściwością StreamingEnabled.

Zachowanie techniczne

Zakres

Logika i funkcje streamingu mają zastosowanie wyłącznie do instancji, które są potomkami Workspace, podczas gdy instancje przechowywane w innych kontenerach, takich jak ReplicatedStorage i ReplicatedFirst, nie kwalifikują się do streamingu. Na przykład umieszczenie modelu atomowego w ReplicatedStorage nie gwarantuje atomowej replikacji.

Streaming w

Gdy gracz dołącza do gry z włączonym streamingiem instancji:

  1. Instancje w Workspace są replikowane do klienta z wyłączeniem następujących:

    Models ustawione na Nieatomowy (domyślnie), gdy Workspace.ModelStreamingBehavior jest ustawione na Improved

    Potomkowie powyższych instancji

  2. W trakcie rozgrywki serwer może przesyłać instancje z powyższych kategorii opóźnionych do klienta w zależności od właściwości streamingu, pozycji gracza, wydajności urządzenia klienckiego i innych warunków.

Streaming out

W trakcie rozgrywki klient może usunąć regiony BaseParts z Workspace gracza w zależności od zachowania ustawionego przez Workspace.StreamOutBehavior. Proces zaczyna się od regionów najdalej od fokusu replikacji i przesuwa się bliżej, w razie potrzeby. Regiony wewnątrz zakresu Workspace.StreamingMinRadius nigdy nie są przesyłane.

Należy zauważyć, że Model bez potomków BasePart, na przykład używany jedynie jako "kontener" dla instancji nie będących BasePart, takich jak skrypty, jest zwolniony z przesyłania chyba że stanie się potomkiem BasePart.

Zespoły

Fizyczne zespoły przesyłają w jako kompletne jednostki, w tym ich powiązane Constraints i Attachments, co pomaga zapewnić spójne aktualizacje fizyki na klientach. Jedynym wyjątkiem jest sytuacja, gdy zespół jest zakotwiczony, w takim przypadku tylko BaseParts w zasięgu streamingu są przesyłane wraz z ich powiązanymi Constraints i Attachments.

Zespoły nie są przesyłane na zewnątrz, dopóki wszystkie ich BaseParts nie są kwalifikowane do przesyłania na zewnątrz.

Właściwości streamingu

Następujące właściwości kontrolują, jak streaming instancji ma zastosowanie do twojej gry. Wszystkie te właściwości są nie-skróty i muszą być ustawione na obiekcie Workspace w Studio.

WłaściwośćOpis
EnableSLIMAvatarsKontroluje, czy model SLIM jest generowany dla postaci awatarów w grze. Gdy jest włączony, awatary renderują się przy użyciu SLIM w ten sam sposób, w jaki ustawienie Model.LevelOfDetail na SLIM działa dla innych modeli. Zobacz SLIM po szczegóły.
ModelStreamingBehaviorKontroluje, jak modele Nieatomowe (domyślnie) przesyłają się w i na zewnątrz.

Zalecane
Użyj Improved, aby włączyć najefektywniejszy streaming dla Models z potomkami BasePart.
PredictiveStreamingModeWłącza streaming predykcyjny, który wykorzystuje sygnały silnika do proaktywnego przesyłania obszarów, które gracz prawdopodobnie będzie potrzebował wkrótce, takich jak miejsca respawnu lub regiony, które gracz niedawno opuścił poprzez zmianę CFrame. Przewidywania są dodawane, wygasają po krótkim czasie, jeśli nie są używane, i są pomijane na urządzeniach z ograniczonymi zasobami.
StreamingIntegrityModeGra może zachowywać się w niezamierzony sposób, jeśli gracz wchodzi w region świata, który nie został przesłany do niego. Ta właściwość oferuje sposób na uniknięcie tych potencjalnie problematycznych sytuacji.

Zalecane
Użyj PauseOutsideLoadedArea, aby zrównoważyć integralność rozgrywki bez niepotrzebnego lub zbyt częstego wstrzymywania. Możesz również dostosować ekran wstrzymania.
StreamingMinRadiusTa właściwość wskazuje promień wokół fokusu replikacji, w którym instancje przesyłają się z najwyższym priorytetem. Należy zachować ostrożność przy zwiększaniu wartości domyślnej, ponieważ może to wymagać więcej pamięci i większej przepustowości serwera kosztem innych komponentów.

Zalecane
Użyj domyślnej wartości 64, aby zmaksymalizować, jak bardzo silnik może zmniejszyć grę dla urządzeń niskobudżetowych.
StreamingTargetRadiusTa właściwość kontroluje maksymalną odległość od fokusu replikacji, w której instancje są przesyłane. Należy zauważyć, że silnik ma prawo zachować wcześniej załadowane instancje poza promieniem docelowym, o ile pozwala na to pamięć.

Mniejsza wartość StreamingTargetRadius zmniejsza obciążenie serwera, ponieważ serwer nie będzie przesyłał dodatkowych instancji poza ustawioną wartość. Jednak promień docelowy jest również maksymalną odległością, z jakiej gracze będą mogli zobaczyć pełne szczegóły twojej gry, więc powinieneś wybrać wartość, która tworzy dobrą równowagę między tymi dwoma.

Zalecane
Użyj domyślnej wartości 1024, aby osiągnąć dobrą równowagę między widocznością dla graczy na urządzeniach wysokobudżetowych a rozsądnym zużyciem pamięci.
StreamOutBehaviorTa właściwość ustawia zachowanie streamingu na zewnątrz zgodnie z wartością Enum.StreamOutBehavior. Jeśli ustawiona na LowMemory (domyślnie), klient przesyła tylko regiony poza minimalnym promieniem w sytuacji niskiej pamięci. Jeśli ustawiona na Opportunistic, regiony poza StreamingTargetRadius mogą być usuwane na kliencie, nawet gdy nie ma presji pamięci (w tym trybie klient nigdy nie usuwa instancji, które są w obrębie promienia docelowego, z wyjątkiem sytuacji niskiej pamięci).

Zalecane
Użyj Opportunistic, aby pozwolić klientowi agresywnie zbierać nieużywaną zawartość, znacznie zmniejszając zużycie pamięci i pomagając zapobiegać awariom z powodu braku pamięci.

Fokus replikacji

Domyślnie streaming odbywa się wokół PrimaryPart postaci lokalnego gracza, chociaż możesz określić inny punkt fokusu replikacji przez Player.ReplicationFocus.

Możesz również dodawać i usuwać dodatkowe foki replikacji przez Player:AddReplicationFocus() i Player:RemoveReplicationFocus(), aby dynamicznie włączyć streaming w wielu obszarach gry.

Symulacja fizyki po stronie klienta, w tym przewidywanie i ponowne symulacje, gdy wprowadzona jest autorytet serwera, odbywa się tylko w przesyłanych obszarach, nawet dla instancji tworzonych lokalnie i dla instancji Persistent. Jeśli masz instancje, które chciałbyś, aby nadal symulowały się, nawet gdy są daleko od postaci, utwórz dodatkowy fokus replikacji w pobliżu tych instancji.

Streaming predykcyjny

Streaming predykcyjny to funkcja, która wymaga aktywacji i wykorzystuje sygnały silnika do przewidywania ruchu gracza oraz proaktywnego przesyłania obszarów, które gracz prawdopodobnie będzie potrzebował wkrótce. Gdy jest włączony przez ustawienie PredictiveStreamingMode na Enabled, może zmniejszyć przerwy w streamingu i wizualne pojawianie się zawartości bez jakichkolwiek zmian w kodzie.

Streaming predykcyjny jest dodawany. Tworzy małe, tymczasowe foki streamingu oprócz istniejących fokusu replikacji, przesyła niewielką ilość dodatkowej zawartości i nie zmienia logiki gry ani umów dotyczących streamingu. Jeśli przewidywanie nie jest potrzebne, przewidywany obszar wygasa po krótkim czasie, a silnik usuwa zawartość. Silnik uwzględnia również pamięć i wydajność klienta, pomijając przewidywania na urządzeniach z ograniczonymi zasobami.

Gdy PredictiveStreamingMode jest ustawione na Enabled, następujące funkcje predykcyjne są aktywne:

FunkcjaOpis
Wstępne pobieranie respawnuGdy gracz umiera, silnik tworzy małe, tymczasowe foki streamingu w możliwych lokalizacjach respawnu, aby prawdopodobne obszary respawnu zaczęły się przesyłać przed pojawieniem się postaci gracza, co zmniejsza przerwy i brakującą zawartość tuż po respawnie.
Optymalizacja zwrotu CFrameGdy gracz jest CFrames z dala od obszaru, silnik tworzy mały, tymczasowy fokus streamingu w miejscu, które opuścił. Pomaga to utrzymać ten obszar przesyłanym, jeśli gracz wróci krótko po, co jest powszechnym scenariuszem podczas poruszania się między budynkami, podziemi, sklepami lub hubami.

Kontrole streamingu modeli

Aby uniknąć problemów z przesyłaniem na poziomie modelu i zminimalizować użycie WaitForChild(), możesz dostosować sposób, w jaki Models i ich potomkowie są przesyłani przez ich właściwość ModelStreamingMode.

Nieatomowy

Domyślnie modele są Nonatomic i przesyłają się w i na zewnątrz w zależności od tego, czy Workspace.ModelStreamingBehavior jest ustawione na Legacy (domyślnie) lub Improved.

Legacy

Gdy Workspace.ModelStreamingBehavior jest ustawione na Legacy (domyślnie), kontener Model i jego nieBasePart potomkowie, tacy jak Scripts, replikują się do klienta, gdy gracz dołącza. Następnie, gdy są kwalifikowane, potomkowie BasePart modelu przesyłają się.

Ulepszony

Gdy Workspace.ModelStreamingBehavior jest ustawione na Improved, zachowanie streamingu modeli różni się w zależności od tego, czy model zawiera potomków BasePart, czy nie:

  • Model z potomkami BasePart przesyła się w tylko wtedy, gdy jeden z jego potomków BasePart jest kwalifikowany do przesyłania. W tym momencie model i kwalifikowany BasePart przesyłają się, wraz z nieBasePart potomkami modelu.

    Gdy ostatni pozostały BasePart modelu przesyła się na zewnątrz, sam model również przesyła się na zewnątrz.

  • Model bez potomków BasePart, na przykład używany jedynie jako "kontener" dla instancji nie będących BasePart, takich jak skrypty, replikują się do klienta wkrótce po dołączeniu gracza. Tego typu model jest zwolniony z przesyłania na zewnątrz chyba że stanie się potomkiem BasePart.

Atomowy

Jeśli Model jest ustawione na Atomic, wszystkie jego początkowe potomkowie są przesyłani razem, gdy potomny BasePart jest kwalifikowany do przesyłania. W rezultacie skrypt po stronie klienta, który potrzebuje uzyskać dostęp do instancji wewnątrz modelu, musiałby użyć WaitForChild() na samym modelu, ale nie na potomnym MeshPart lub Part, ponieważ są one przesyłane razem z modelem.

Atomowy model jest przesyłany na zewnątrz tylko wtedy, gdy wszystkie jego części potomne są kwalifikowane do przesyłania na zewnątrz, w tym momencie cały model przesyła się na zewnątrz.

Diagram pokazujący atomowe przesyłanie modeli wraz z dziećmi.

Trwały

Modele Persistent nie podlegają normalnemu przesyłaniu w i na zewnątrz. Są przesyłane jako kompletny atomowy jednostka wkrótce po dołączeniu gracza i przed wywołaniem zdarzenia Workspace.PersistentLoaded. Trwałe modele i ich potomkowie nigdy nie są przesyłane na zewnątrz, ale aby bezpiecznie obsługiwać przesyłanie w ramach skryptu po stronie klienta, powinieneś poczekać na wywołanie zdarzenia PersistentLoaded.

Diagram pokazujący trwałe przesyłanie modeli wraz z dziećmi.

TrwałyNaGracza

Modele ustawione na PersistentPerPlayer zachowują się tak samo jak Persistent dla graczy, którzy zostali dodani za pomocą Model:AddPersistentPlayer(). Dla innych graczy zachowanie jest takie samo jak Atomic. Możesz cofnąć model z trwałości gracza za pomocą Model:RemovePersistentPlayer().

Dostosowanie ekranu wstrzymania

Zakładając, że Workspace.StreamingIntegrityMode jest ustawione na zalecane PauseOutsideLoadedArea, gra zostanie wstrzymana, jeśli gracz wejdzie w region świata, który nie został przesłany do niego. W takich przypadkach właściwość Player.GameplayPaused wskazuje aktualny stan wstrzymania gracza, który można wykorzystać z połączeniem GetPropertyChangedSignal(), aby pokazać lub ukryć niestandardowy interfejs GUI.

LocalScript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Wyłącz domyślny modal wstrzymania
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Pokaż niestandardowy GUI
else
-- Ukryj niestandardowy GUI
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)

Debugowanie w czasie rzeczywistym

Silnik zawiera wiele paneli debugowania na ekranie, które można włączyć po stronie klienta za pomocą skrótów klawiaturowych. Aby uzyskać dostęp do informacji debugowania streamingu:

  1. Otwórz nakładkę debugowania Podsumowanie sieci za pomocą ShiftCtrlF3 (Windows) lub ShiftF3 (Mac).
  2. Gdy nakładka debugowania jest otwarta, naciśnij Shift1 wielokrotnie, aby przełączać się między dostępnymi panelami. Czwarty panel to widok debugowania Streamingu, który wyświetla przydatne informacje w czasie rzeczywistym:
    • Aktywne ustawienia streamingu
    • Obecnie załadowane (przesyłane) regiony
    • Zachowanie i stan streamingu

Po włączeniu, kolorowe podświetlone regiony pojawiają się w widoku 3D:

KolorOpis
Mniej niż StreamingMinRadius
Więcej niż lub równo StreamingMinRadius i mniej niż StreamingTargetRadius
Równo StreamingTargetRadius
Więcej niż StreamingTargetRadius
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.