在遊戲中,實例串流 允許 Roblox 引擎動態加載和卸載 Workspace 中的 3D 內容及相關實例。這可以在幾個方面改善整體玩家體驗,包括:
- 更快的加入時間— 玩家可以在世界的一部分開始遊玩,同時更多的世界在背景中加載。
- 記憶體效率— 遊戲可以在記憶體較少的設備上運行,因為內容是動態串流進出。更具沉浸感和細節的世界可以在更廣泛的設備上運行。
- 性能改善— 更好的幀率和性能,因為伺服器可以花更少的時間和帶寬來同步世界與其中玩家之間的變更。客戶端花更少的時間更新當前對玩家不相關的實例。
- 細節層次— 當配置時,遠處的模型、平台化身和地形即使在未串流到客戶端時仍然可見,保持遊戲優化而不完全犧牲背景視覺。SLIM 提供模型和化身的最高保真度細節層次。
實例串流通過 Workspace.StreamingEnabled 屬性控制,對於在 Studio 中創建的新地方默認啟用。此屬性不能在腳本中設置。

技術行為
範圍
串流邏輯和功能僅適用於 Workspace 的後代實例,而存儲在其他容器中的實例,如 ReplicatedStorage 和 ReplicatedFirst,則不符合串流條件。例如,將一個 原子 模型放在 ReplicatedStorage 下並不保證原子複製。
串流進
當玩家加入啟用實例串流的遊戲時:
在遊戲過程中,伺服器可以根據遊戲的 串流屬性、玩家位置、客戶端設備性能和其他條件,將上述延遲類別的實例串流到客戶端。
串流出
在遊戲過程中,客戶端可以根據 Workspace.StreamOutBehavior 設置的行為,從玩家的 Workspace 中移除 BaseParts 的區域。該過程從距離 複製焦點 最遠的區域開始,根據需要向內移動。位於 Workspace.StreamingMinRadius 範圍內的區域永遠不會串流出。
請注意,沒有 BasePart 後代的 Model,例如僅用作非 BasePart 實例(如腳本)的“容器”的模型,豁免 串流出 除非 它成為 BasePart 的後代。
組件
物理 組件 會作為完整單元串流 進,包括其相關的 Constraints 和 Attachments,幫助確保客戶端上的物理更新一致。唯一的例外是當組件被 固定 時,在這種情況下,只有在串流半徑內的 BaseParts 會與其相關的 Constraints 和 Attachments 一起串流進來。
組件不會串流 出,直到它們的所有 BaseParts 都符合串流出條件。
串流屬性
以下屬性控制實例串流如何應用於您的遊戲。所有這些屬性都是 不可腳本化 的,必須在 Studio 中設置在 Workspace 對象上。

| 屬性 | 描述 |
|---|---|
| EnableSLIMAvatars | 控制是否為遊戲中的化身角色生成 SLIM 模型。啟用後,化身將使用 SLIM 渲染,與將 Model.LevelOfDetail 設置為 SLIM 的其他模型的工作方式相同。詳情請參見 SLIM。 |
| ModelStreamingBehavior | 控制 非原子 (默認) 模型的串流進出方式。 推薦 使用 Improved 以啟用對具有 BasePart 後代的 Models 的最有效串流。 |
| PredictiveStreamingMode | 選擇加入 預測串流,該功能使用引擎信號主動串流玩家可能很快需要的區域,例如重生位置或玩家最近通過 CFrame 變更離開的區域。預測是累加的,如果未使用會在短時間內過期,並且在資源受限的客戶端上會被跳過。 |
| StreamingIntegrityMode | 如果玩家移動到尚未串流到他們的世界區域,遊戲可能會以意想不到的方式行為。此屬性提供了一種避免這些潛在問題情況的方法。 推薦 使用 PauseOutsideLoadedArea 以平衡遊戲完整性,而不會不必要或過於頻繁地暫停。您還可以 自定義暫停屏幕。 |
| StreamingMinRadius | 此屬性指示在 複製焦點 周圍的半徑,實例以最高優先級串流進來。在增加默認值時應謹慎,因為這樣做會需要更多的記憶體和伺服器帶寬,並以其他組件為代價。 推薦 使用默認值 64 以最大化引擎如何縮小遊戲以適應低端設備。 |
| StreamingTargetRadius | 此屬性控制從 複製焦點 的最大距離,實例會串流進來。請注意,允許引擎在目標半徑之外保留先前加載的實例,前提是記憶體允許。 較小的 StreamingTargetRadius 減少伺服器工作負載,因為伺服器不會在設置的值之外串流進額外的實例。然而,目標半徑也是玩家能夠看到您遊戲的完整細節的最大距離,因此您應該選擇一個在這兩者之間創造良好平衡的值。 推薦 使用默認值 1024 以在高端設備的可見性和合理的記憶體佔用之間取得良好平衡。 |
| StreamOutBehavior | 此屬性根據 Enum.StreamOutBehavior 的值設置 串流出 行為。如果設置為 LowMemory (默認),則客戶端僅在低記憶體情況下串流出超出最小半徑的區域。如果設置為 Opportunistic,則即使在沒有記憶體壓力的情況下,超出 StreamingTargetRadius 的區域也可以在客戶端上被移除(在此模式下,客戶端從不移除在目標半徑內的實例,除非在低記憶體情況下)。 推薦 使用 Opportunistic 以允許客戶端積極垃圾回收內容,顯著減少記憶體使用並幫助防止內存不足崩潰。 |
複製焦點
默認情況下,串流發生在本地玩家角色的 PrimaryPart 周圍,儘管您可以通過 Player.ReplicationFocus 指定不同的複製焦點。
您還可以通過 Player:AddReplicationFocus() 和 Player:RemoveReplicationFocus() 添加和移除額外的複製焦點,以動態啟用遊戲中多個區域的串流。
客戶端的物理模擬,包括在實施 伺服器權限 時的預測和重新模擬,僅在串流區域內發生,即使對於本地創建的實例和 Persistent 實例也是如此。如果您有希望即使在遠離角色時也保持模擬的實例,請在這些實例附近創建額外的複製焦點。
預測串流
預測串流是一個選擇性功能,使用引擎信號來預測玩家的移動並主動串流玩家可能很快需要的區域。當通過將 PredictiveStreamingMode 設置為 Enabled 啟用時,它可以減少串流暫停和視覺彈出,而無需任何代碼更改。
預測串流是 累加的。它在您現有的 複製焦點 之外創建小的臨時串流焦點,串流少量額外內容,並不改變您的遊戲邏輯或串流合約。如果不需要預測,預測區域會在短時間內過期,然後引擎卸載內容。引擎還會考慮客戶端的記憶體和性能,跳過資源受限設備上的預測。
當 PredictiveStreamingMode 設置為 Enabled 時,以下預測功能會啟用:
| 功能 | 描述 |
|---|---|
| 重生預取 | 當玩家死亡時,引擎會在可能的重生位置創建小的臨時串流焦點,以便在玩家角色出現之前,可能的重生區域開始串流,減少重生後的暫停和缺失內容。 |
| CFrame 返回優化 | 當玩家 CFrames 離開一個區域時,引擎會在他們離開的位置創建小的臨時串流焦點。如果玩家在短時間內返回,這有助於保持該區域串流進來,這在建築物、子層、商店或中心之間移動時是一個常見場景。 |
模型串流控制
為了避免按模型串流的問題並最小化使用 WaitForChild(),您可以通過其 ModelStreamingMode 屬性自定義 Models 及其後代的串流方式。
非原子
默認情況下,模型為 Nonatomic,並根據 Workspace.ModelStreamingBehavior 設置為 Legacy (默認) 或 Improved 進行串流進出。
舊版
當 Workspace.ModelStreamingBehavior 設置為 Legacy (默認) 時,Model 容器及其 非 BasePart 後代(如 Scripts)在玩家加入時會複製到客戶端。然後,當符合條件時,模型的 BasePart 後代會串流進來。

改進版
當 Workspace.ModelStreamingBehavior 設置為 Improved 時,模型串流行為根據模型是否包含 BasePart 後代或不包含 BasePart 後代而有所不同:
原子
如果 Model 設置為 Atomic,則當一個後代 BasePart 符合串流進的條件時,所有初始後代會一起串流進來。因此,需要訪問模型 內部 實例的客戶端腳本需要在模型本身上使用 WaitForChild(),而不需要在後代 MeshPart 或 Part 上使用,因為它們會與模型一起發送。
只有當所有後代部件都符合串流出的條件時,原子模型才會串流出,此時整個模型會一起串流出。

持久
Persistent 模型不受正常串流進或串流出的限制。它們會在玩家加入後不久作為完整的原子單元發送,並在 Workspace.PersistentLoaded 事件觸發之前。持久模型及其後代永遠不會串流出,但為了安全地處理客戶端腳本中的串流進,您應該等待 PersistentLoaded 事件觸發。

每玩家持久
設置為 PersistentPerPlayer 的模型對於使用 Model:AddPersistentPlayer() 添加的玩家的行為與 Persistent 相同。對於其他玩家,行為與 Atomic 相同。您可以通過 Model:RemovePersistentPlayer() 將模型從玩家持久性中恢復。
暫停屏幕自定義
假設 Workspace.StreamingIntegrityMode 設置為推薦的 PauseOutsideLoadedArea,如果玩家移動到尚未串流到他們的世界區域,遊戲將暫停。在這些情況下,Player.GameplayPaused 屬性指示玩家的當前暫停狀態,可以與 GetPropertyChangedSignal() 連接一起使用,以顯示或隱藏自定義 GUI。
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- 禁用默認暫停模態
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- 顯示自定義 GUI
else
-- 隱藏自定義 GUI
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)運行時調試
引擎包括多個可以使用鍵盤快捷鍵在客戶端啟用的屏幕調試面板。要訪問串流調試信息:
- 通過 ShiftCtrlF3 (Windows) 或 Shift⌘F3 (Mac) 打開 網絡摘要 調試覆蓋層。
- 一旦調試覆蓋層打開,重複按 Shift1 以循環顯示可用面板。第四個面板是 串流 調試視圖,顯示有用的運行時信息:
- 活動串流設置
- 當前加載的(串流進來的)區域
- 串流行為和狀態
啟用後,彩色高亮區域會出現在 3D 視口中:
| 顏色 | 描述 |
|---|---|
| 小於 StreamingMinRadius | |
| 大於或等於 StreamingMinRadius 且小於 StreamingTargetRadius | |
| 等於 StreamingTargetRadius | |
| 大於 StreamingTargetRadius |


