Dalam permainan streaming instance memungkinkan mesin Roblox untuk memuat dan membongkar konten 3D dan instance terkait di Workspace secara dinamis. Ini dapat meningkatkan pengalaman pemain secara keseluruhan dalam beberapa cara, termasuk:
- Waktu Bergabung Lebih Cepat— Pemain dapat mulai bermain di satu bagian dunia sementara lebih banyak dunia dimuat di latar belakang.
- Efisiensi Memori— Permainan dapat dimainkan di perangkat dengan memori lebih sedikit karena konten dimuat secara dinamis. Dunia yang lebih imersif dan detail dapat dimainkan di berbagai perangkat.
- Kinerja yang Ditingkatkan— Frame rate dan kinerja yang lebih baik, karena server dapat menghabiskan lebih sedikit waktu dan bandwidth untuk menyinkronkan perubahan antara dunia dan pemain di dalamnya. Klien menghabiskan lebih sedikit waktu untuk memperbarui instance yang tidak relevan dengan pemain saat ini.
- Tingkat Detail— Ketika dikonfigurasi, model jauh, avatar platform, dan terrain tetap terlihat bahkan ketika mereka tidak dialirkan ke klien, menjaga permainan tetap teroptimasi tanpa mengorbankan visual latar belakang sepenuhnya. SLIM menyediakan tingkat detail dengan fidelitas tertinggi untuk model dan avatar.
Streaming instance dikendalikan melalui properti Workspace.StreamingEnabled, yang diaktifkan secara default untuk tempat baru yang dibuat di Studio. Properti ini tidak dapat diatur dalam skrip.

Perilaku teknis
Lingkup
Logika dan fitur streaming berlaku secara eksklusif untuk instance yang merupakan keturunan dari Workspace, sementara instance yang disimpan di kontainer lain seperti ReplicatedStorage dan ReplicatedFirst tidak memenuhi syarat untuk streaming. Misalnya, menempatkan model atomik di bawah ReplicatedStorage tidak menjamin replikasi atomik.
Streaming masuk
Ketika seorang pemain bergabung dengan permainan dengan streaming instance diaktifkan:
Instance di Workspace direplikasi ke klien kecuali yang berikut:

Models yang diatur ke Atomik, Persisten, atau PersistenPerPemain; lihat kontrol streaming per-model

Models yang diatur ke Nonatomik (default) ketika Workspace.ModelStreamingBehavior diatur ke Improved

Keturunan dari instance di atas
Selama permainan, server dapat melakukan streaming instance dalam kategori yang ditunda di atas ke klien berdasarkan properti streaming permainan, posisi pemain, kinerja perangkat klien, dan kondisi lainnya.
Streaming keluar
Selama permainan, klien dapat menghapus wilayah BaseParts dari Workspace pemain berdasarkan perilaku yang ditetapkan oleh Workspace.StreamOutBehavior. Proses dimulai dengan wilayah yang paling jauh dari fokus replikasi dan bergerak lebih dekat, sesuai kebutuhan. Wilayah di dalam jangkauan Workspace.StreamingMinRadius tidak pernah dialirkan keluar.
Perhatikan bahwa Model tanpa keturunan BasePart, seperti yang digunakan hanya sebagai "kontainer" untuk instance non-BasePart seperti skrip, dibebaskan dari streaming keluar kecuali jika ia dijadikan keturunan dari BasePart.
Perakitan
Perakitan fisik dialirkan masuk sebagai unit lengkap, termasuk Constraints dan Attachments terkait, membantu memastikan pembaruan fisika yang konsisten di klien. Satu-satunya pengecualian adalah ketika perakitan tersebut dijepit, dalam hal ini hanya BaseParts dalam jangkauan streaming yang dialirkan masuk bersama dengan Constraints dan Attachments terkait.
Perakitan tidak dialirkan keluar sampai semua BaseParts mereka memenuhi syarat untuk dialirkan keluar.
Properti streaming
Properti berikut mengontrol bagaimana streaming instance diterapkan pada permainan Anda. Semua properti ini adalah tidak dapat diprogram dan harus diatur pada objek Workspace di Studio.

| Properti | Deskripsi |
|---|---|
| EnableSLIMAvatars | Mengontrol apakah model SLIM dihasilkan untuk karakter avatar dalam permainan. Ketika diaktifkan, avatar dirender menggunakan SLIM dengan cara yang sama seperti pengaturan Model.LevelOfDetail ke SLIM bekerja untuk model lainnya. Lihat SLIM untuk detailnya. |
| ModelStreamingBehavior | Mengontrol bagaimana model Nonatomik (default) dialirkan masuk dan keluar. DIREKOMENDASIKAN Gunakan Improved untuk mengaktifkan streaming yang paling efisien untuk Models dengan keturunan BasePart. |
| PredictiveStreamingMode | Memilih untuk menggunakan streaming prediktif yang menggunakan sinyal mesin untuk secara proaktif melakukan streaming area yang kemungkinan akan dibutuhkan pemain segera, seperti lokasi respawn atau wilayah yang baru saja ditinggalkan pemain melalui perubahan CFrame. Prediksi bersifat aditif, kedaluwarsa setelah waktu singkat jika tidak digunakan, dan dilewati pada klien yang terbatas sumber daya. |
| StreamingIntegrityMode | Permainan mungkin berperilaku dengan cara yang tidak diinginkan jika seorang pemain bergerak ke wilayah dunia yang belum dialirkan kepada mereka. Properti ini menawarkan cara untuk menghindari situasi yang berpotensi bermasalah. DIREKOMENDASIKAN Gunakan PauseOutsideLoadedArea untuk menyeimbangkan integritas gameplay tanpa menghentikan secara tidak perlu atau terlalu sering. Anda juga dapat menyesuaikan layar jeda. |
| StreamingMinRadius | Properti ini menunjukkan radius di sekitar fokus replikasi di mana instance dialirkan masuk dengan prioritas tertinggi. Perhatian harus diambil saat meningkatkan default, karena melakukannya akan memerlukan lebih banyak memori dan lebih banyak bandwidth server dengan mengorbankan komponen lainnya. DIREKOMENDASIKAN Gunakan default 64 untuk memaksimalkan seberapa banyak mesin dapat mengurangi ukuran permainan untuk perangkat kelas rendah. |
| StreamingTargetRadius | Properti ini mengontrol jarak maksimum dari fokus replikasi di mana instance dialirkan masuk. Perhatikan bahwa mesin diizinkan untuk mempertahankan instance yang telah dimuat sebelumnya di luar radius target, jika memori memungkinkan. Radius StreamingTargetRadius yang lebih kecil mengurangi beban kerja server, karena server tidak akan melakukan streaming instance tambahan di luar nilai yang ditetapkan. Namun, radius target juga merupakan jarak maksimum yang dapat dilihat pemain dari detail penuh permainan Anda, jadi Anda harus memilih nilai yang menciptakan keseimbangan yang baik antara ini. DIREKOMENDASIKAN Gunakan default 1024 untuk mencapai keseimbangan yang baik antara visibilitas untuk pemain di perangkat kelas tinggi dan jejak memori yang wajar. |
| StreamOutBehavior | Properti ini mengatur perilaku streaming keluar sesuai dengan nilai Enum.StreamOutBehavior. Jika diatur ke LowMemory (default), klien hanya melakukan streaming keluar wilayah di luar radius minimum dalam situasi memori rendah. Jika diatur ke Opportunistic, wilayah di luar StreamingTargetRadius dapat dihapus di klien bahkan ketika tidak ada tekanan memori (dalam mode ini, klien tidak pernah menghapus instance yang berada dalam radius target, kecuali dalam situasi memori rendah). DIREKOMENDASIKAN Gunakan Opportunistic untuk memungkinkan klien secara agresif mengumpulkan sampah konten, secara signifikan mengurangi penggunaan memori dan membantu mencegah kerusakan karena kehabisan memori. |
Fokus replikasi
Secara default, streaming terjadi di sekitar PrimaryPart karakter pemain lokal, meskipun Anda dapat menentukan titik fokus replikasi yang berbeda melalui Player.ReplicationFocus.
Anda juga dapat menambahkan dan menghapus fokus replikasi tambahan melalui Player:AddReplicationFocus() dan Player:RemoveReplicationFocus() untuk secara dinamis mengaktifkan streaming di beberapa area permainan.
Simulasi fisika sisi klien, termasuk prediksi dan resimulasi ketika otoritas server diterapkan, hanya terjadi di area yang dialirkan, bahkan untuk instance yang dibuat secara lokal dan untuk instance Persistent. Jika Anda memiliki instance yang ingin Anda terus simulasikan bahkan ketika mereka jauh dari karakter, buat fokus replikasi tambahan di dekat instance tersebut.
Streaming prediktif
Streaming prediktif adalah fitur opt-in yang menggunakan sinyal mesin untuk memperkirakan pergerakan pemain dan secara proaktif melakukan streaming area yang kemungkinan akan dibutuhkan pemain segera. Ketika diaktifkan dengan mengatur PredictiveStreamingMode ke Enabled, ini dapat mengurangi jeda streaming dan visual pop-in tanpa perubahan kode.
Streaming prediktif bersifat aditif. Ini membuat fokus streaming kecil dan sementara di samping fokus replikasi yang ada, melakukan streaming sedikit konten tambahan, dan tidak mengubah logika permainan atau kontrak streaming Anda. Jika prediksi tidak diperlukan, area yang diprediksi kedaluwarsa setelah waktu singkat dan mesin membongkar konten. Mesin juga mempertimbangkan memori dan kinerja klien, melewatkan prediksi pada perangkat yang terbatas sumber daya.
Ketika PredictiveStreamingMode adalah Enabled, fitur prediktif berikut aktif:
| Fitur | Deskripsi |
|---|---|
| Pra-pengambilan spawn | Ketika seorang pemain mati, mesin membuat fokus streaming kecil dan sementara di lokasi respawn yang mungkin sehingga area respawn yang mungkin mulai dialirkan sebelum karakter pemain muncul, mengurangi jeda dan konten yang hilang segera setelah respawn. |
| Optimisasi pengembalian CFrame | Ketika seorang pemain CFrames menjauh dari suatu area, mesin membuat fokus streaming kecil dan sementara di lokasi yang mereka tinggalkan. Ini membantu menjaga area tersebut tetap dialirkan jika pemain kembali segera setelahnya, skenario umum saat bergerak antara bangunan, sublevel, toko, atau pusat. |
Kontrol streaming model
Untuk menghindari masalah dengan streaming pada basis per-model dan meminimalkan penggunaan WaitForChild(), Anda dapat menyesuaikan bagaimana Models dan keturunannya dialirkan melalui properti ModelStreamingMode.
Nonatomik
Secara default, model adalah Nonatomic dan mereka dialirkan masuk/keluar berdasarkan apakah Workspace.ModelStreamingBehavior diatur ke Legacy (default) atau Improved.
Legacy
Ketika Workspace.ModelStreamingBehavior diatur ke Legacy (default), kontainer Model dan keturunan non-BasePart seperti Scripts direplikasi ke klien ketika pemain bergabung. Kemudian, ketika memenuhi syarat, keturunan BasePart model dialirkan masuk.

Ditingkatkan
Ketika Workspace.ModelStreamingBehavior diatur ke Improved, perilaku streaming model bervariasi tergantung pada apakah model tersebut mengandung keturunan BasePart atau tidak:
Model dengan keturunan BasePart hanya dialirkan masuk ketika satu dari keturunan BasePart memenuhi syarat untuk dialirkan masuk. Pada saat itu, model dan BasePart yang memenuhi syarat dialirkan masuk, bersama dengan keturunan non-BasePart model.
Ketika BasePart terakhir yang tersisa dari model dialirkan keluar, model itu sendiri akan dialirkan keluar bersamanya.

Atomik
Jika Model diatur ke Atomic, semua keturunan awalnya dialirkan masuk bersama ketika keturunan BasePart memenuhi syarat untuk dialirkan masuk. Akibatnya, skrip sisi klien yang perlu mengakses instance di dalam model harus menggunakan WaitForChild() pada model itu sendiri, tetapi tidak pada keturunan MeshPart atau Part karena mereka dikirim bersamaan dengan model.
Model atomik hanya dialirkan keluar ketika semua bagian keturunannya memenuhi syarat untuk dialirkan keluar, pada titik mana seluruh model dialirkan keluar bersama.

Persisten
Model Persistent tidak tunduk pada streaming masuk atau keluar normal. Mereka dikirim sebagai unit atomik lengkap segera setelah pemain bergabung dan sebelum acara Workspace.PersistentLoaded dipicu. Model persistensi dan keturunannya tidak pernah dialirkan keluar, tetapi untuk menangani streaming masuk dengan aman dalam skrip sisi klien, Anda harus menunggu acara PersistentLoaded dipicu.

PersistenPerPemain
Model yang diatur ke PersistentPerPlayer berperilaku sama seperti Persistent untuk pemain yang telah ditambahkan menggunakan Model:AddPersistentPlayer(). Untuk pemain lain, perilakunya sama seperti Atomic. Anda dapat mengembalikan model dari persistensi pemain melalui Model:RemovePersistentPlayer().
Kustomisasi layar jeda
Dengan asumsi Workspace.StreamingIntegrityMode diatur ke PauseOutsideLoadedArea yang direkomendasikan, permainan akan terhenti jika seorang pemain bergerak ke wilayah dunia yang belum dialirkan kepada mereka. Dalam kasus ini, properti Player.GameplayPaused menunjukkan status jeda pemain saat ini yang dapat digunakan dengan koneksi GetPropertyChangedSignal() untuk menampilkan atau menyembunyikan GUI kustom.
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Nonaktifkan modal jeda default
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Tampilkan GUI kustom
else
-- Sembunyikan GUI kustom
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)Debugging runtime
Mesin menyertakan beberapa panel debug di layar yang dapat diaktifkan di klien menggunakan pintasan keyboard. Untuk mengakses informasi debug streaming:
- Buka overlay debug Ringkasan Jaringan melalui ShiftCtrlF3 (Windows) atau Shift⌘F3 (Mac).
- Setelah overlay debug terbuka, tekan Shift1 berulang kali untuk beralih di antara panel yang tersedia. Panel keempat adalah tampilan debug Streaming yang menampilkan informasi runtime yang berguna:
- Pengaturan streaming aktif
- Wilayah yang saat ini dimuat (dialirkan masuk)
- Perilaku dan status streaming
Setelah diaktifkan, wilayah yang disorot berwarna muncul di viewport 3D:
| Warna | Deskripsi |
|---|---|
| Kurang dari StreamingMinRadius | |
| Lebih besar dari atau sama dengan StreamingMinRadius dan kurang dari StreamingTargetRadius | |
| Sama dengan StreamingTargetRadius | |
| Lebih besar dari StreamingTargetRadius |
