Trong trò chơi, chạy trình truyền thể hiện cho phép engine Roblox dynamically load và unload nội dung 3D và các thể hiện liên quan trong Workspace. Điều này có thể cải thiện trải nghiệm của người chơi tổng thể theo nhiều cách, bao gồm:
- Thời Gian Tham Gia Nhanh Hơn— Người chơi có thể bắt đầu chơi ở một phần của thế giới trong khi phần còn lại của thế giới được tải ở chế độ nền.
- Tiết Kiệm Bộ Nhớ— Các trò chơi có thể chơi trên các thiết bị có bộ nhớ ít hơn vì nội dung được truyền tải vào và ra một cách động. Những thế giới chi tiết và sống động có thể chơi trên một loạt các thiết bị rộng hơn.
- Hiệu Suất Cải Thiện— Tăng tốc độ khung hình và hiệu suất, khi server có thể tiết kiệm thời gian và băng thông để đồng bộ hóa các thay đổi giữa thế giới và người chơi ở đó. Các khách hàng mất ít thời gian để cập nhật các thể hiện không còn liên quan đến người chơi hiện tại.
- Mức Độ Chi Tiết— Khi được cấu hình, các mô hình xa, nhân vật nền tảng và địa hình vẫn hiển thị ngay cả khi chúng không được truyền tới khách hàng, giữ cho trò chơi được tối ưu hóa mà không hy sinh hoàn toàn hình ảnh nền.
Chạy trình truyền thể hiện được kiểm soát thông qua thuộc tính Workspace.StreamingEnabled, được bật theo mặc định cho các địa điểm mới được tạo trong Studio. Thuộc tính này không thể được thiết lập qua một script.

Hành vi kỹ thuật
Phạm vi
Logic và tính năng truyền tải chỉ áp dụng cho các thể hiện là con cháu của Workspace, trong khi các thể hiện được lưu trữ trong các container khác như ReplicatedStorage và ReplicatedFirst không đủ điều kiện để truyền tải. Ví dụ, việc đặt một mô hình nguyên tử dưới ReplicatedStorage không đảm bảo sao chép nguyên tử.
Stream in
Khi một người chơi tham gia vào một trò chơi với trình truyền thể hiện được bật:
Các thể hiện trong Workspace được sao chép đến khách hàng không bao gồm các thể hiện sau:

Models được đặt thành Nguyên Tử, Bền Bỉ, hoặc Bền BỉPerNgười Chơi; xem điều khiển truyền tải theo mô hình

Models được đặt thành Không Nguyên Tử (mặc định) khi Workspace.ModelStreamingBehavior được đặt thành Improved

Các con cháu của các thể hiện ở trên
Trong quá trình chơi, server có thể truyền tải các thể hiện trong các thể loại trì hoãn trên đến khách hàng dựa trên thuộc tính truyền tải của trò chơi, vị trí người chơi, hiệu suất thiết bị của khách hàng và các điều kiện khác.
Stream out
Trong quá trình chơi, một khách hàng có thể loại bỏ các vùng của BaseParts từ Workspace của người chơi dựa trên hành vi được thiết lập bởi Workspace.StreamOutBehavior. Quá trình bắt đầu với các khu vực xa nhất từ trọng tâm sao chép và di chuyển vào gần hơn, khi cần. Các khu vực trong phạm vi Workspace.StreamingMinRadius không bao giờ bị truyền tải ra.
Lưu ý rằng một Model không có con cháu BasePart, chẳng hạn như một cái chỉ được sử dụng như một "container" cho các thể hiện không phải BasePart như scripts, thì sẽ miễn trừ khỏi việc truyền tải ra trừ khi nó trở thành con cháu của một BasePart.
Tập hợp
Chạy bản vật lý vào như các đơn vị hoàn chỉnh, bao gồm cả các Constraints và Attachments liên kết với nó, giúp đảm bảo các bản cập nhật vật lý nhất quán trên các khách hàng. Ngoại lệ duy nhất là khi tập hợp được neo, trong trường hợp đó chỉ các BaseParts trong phạm vi truyền tải được truyền vào cùng với các Constraints và Attachments liên kết.
Tập hợp không truyền tải ra cho đến khi tất cả các BaseParts của chúng đủ điều kiện để truyền tải ra.
Các thuộc tính truyền tải
Các thuộc tính sau kiểm soát cách thức truyền tải thể hiện áp dụng cho trò chơi của bạn. Tất cả các thuộc tính này là không thể lập trình và phải được thiết lập trên đối tượng Workspace trong Studio.

| Thuộc tính | Mô tả |
|---|---|
| EnableSLIMAvatars | Kiểm soát liệu một mô hình SLIM có được tạo ra cho nhân vật avatar trong trò chơi hay không. Khi được bật, các avatar được render sử dụng SLIM theo cách giống như thiết lập Model.LevelOfDetail thành SLIM cho các mô hình khác. |
| ModelStreamingBehavior | Kiểm soát cách các mô hình Không Nguyên Tử (mặc định) được truyền vào và ra. KHÔN NGOAN Sử dụng Improved để kích hoạt việc truyền tải hiệu quả nhất cho các Models với các con cháu là BasePart. |
| StreamingIntegrityMode | Trò chơi có thể hoạt động theo những cách không mong đợi nếu một người chơi di chuyển vào một vùng của thế giới chưa được truyền tải đến họ. Thuộc tính này cung cấp một cách để tránh những tình huống có thể gây vấn đề. KHÔN NGOAN Sử dụng PauseOutsideLoadedArea để cân bằng tính chính xác của trò chơi mà không cần dừng lại không cần thiết hoặc quá thường xuyên. Bạn cũng có thể tùy chỉnh màn hình dừng. |
| StreamingMinRadius | Thuộc tính này chỉ ra bán kính quanh trọng tâm sao chép trong đó các thể hiện được truyền vào với ưu tiên cao nhất. Cần thận trọng khi tăng mức mặc định, vì điều này sẽ yêu cầu nhiều bộ nhớ và băng thông server hơn với mức chi phí cho các thành phần khác. KHÔN NGOAN Sử dụng mức mặc định là 64 để tối đa hóa khả năng engine làm giảm kích thước trò chơi cho các thiết bị thấp cấp. |
| StreamingTargetRadius | Thuộc tính này kiểm soát khoảng cách tối đa từ trọng tâm sao chép mà các thể hiện truyền vào. Lưu ý rằng engine được phép duy trì các thể hiện đã được tải trước đó vượt quá bán kính mục tiêu, nếu bộ nhớ cho phép. Bán kính StreamingTargetRadius nhỏ hơn sẽ giảm tải công việc của server, vì server sẽ không truyền vào các thể hiện bổ sung vượt quá giá trị đã đặt. Tuy nhiên, bán kính mục tiêu cũng là khoảng cách tối đa mà người chơi sẽ có thể thấy toàn bộ chi tiết của trò chơi của bạn, vì vậy bạn nên chọn một giá trị tạo ra sự cân bằng tốt giữa những điều này. KHÔN NGOAN Sử dụng mặc định là 1024 để tạo sự cân bằng tốt giữa khả năng nhìn thấy cho người chơi trên các thiết bị cao cấp và một dấu ấn bộ nhớ hợp lý. |
| StreamOutBehavior | Thuộc tính này thiết lập hành vi transmitting out theo giá trị của Enum.StreamOutBehavior. Nếu được đặt thành LowMemory (mặc định), khách hàng chỉ truyền ra các khu vực vượt quá bán kính tối thiểu trong trường hợp bộ nhớ thấp. Nếu được đặt thành Opportunistic, các khu vực vượt quá StreamingTargetRadius có thể bị loại bỏ trên khách hàng ngay cả khi không có áp lực bộ nhớ (trong chế độ này, khách hàng không bao giờ loại bỏ các thể hiện mà nằm trong bán kính mục tiêu, ngoại trừ trong các tình huống bộ nhớ thấp). KHÔN NGOAN Sử dụng Opportunistic để cho phép khách hàng thực hiện dọn dẹp rác một cách chủ động, giúp giảm thiểu việc sử dụng bộ nhớ và giúp ngăn ngừa lỗi do hết bộ nhớ. |
Trọng tâm sao chép
Theo mặc định, quá trình truyền tải xảy ra xung quanh PrimaryPart của nhân vật người chơi địa phương, mặc dù bạn có thể chỉ định một điểm trọng tâm sao chép khác thông qua Player.ReplicationFocus.
Bạn cũng có thể thêm và loại bỏ các trọng tâm sao chép bổ sung thông qua Player:AddReplicationFocus() và Player:RemoveReplicationFocus() để kích hoạt việc truyền tải động trong nhiều khu vực của trò chơi.
Mô phỏng vật lý phía khách hàng, bao gồm dự đoán và tái mô phỏng khi quyền server được thực hiện, chỉ xảy ra trong các khu vực đã được truyền tải, ngay cả đối với các thể hiện được tạo ra ở local và cho các thể hiện Persistent. Nếu bạn có các thể hiện mà bạn muốn tiếp tục mô phỏng ngay cả khi chúng ở xa nhân vật, hãy tạo một điểm trọng tâm sao chép gần các thể hiện đó.
Điều khiển truyền tải theo mô hình
Để tránh các vấn đề với việc truyền tải theo từng mô hình và giảm thiểu việc sử dụng WaitForChild(), bạn có thể tùy chỉnh cách mà Models và các con cháu của chúng được truyền tải thông qua thuộc tính ModelStreamingMode.
Không Nguyên Tử
Theo mặc định, các mô hình là Nonatomic và chúng truyền vào/ra dựa trên việc Workspace.ModelStreamingBehavior được đặt thành Legacy (mặc định) hay Improved.
Cổ Điển
Khi Workspace.ModelStreamingBehavior được đặt thành Legacy (mặc định), container Model và các con cháu không phải BasePart như Scripts sao chép đến khách hàng khi người chơi tham gia. Sau đó, khi đủ điều kiện, các con cháu BasePart của mô hình sẽ được truyền vào.

Cải Thiện
Khi Workspace.ModelStreamingBehavior được đặt thành Improved, hành vi truyền tải mô hình thay đổi tùy thuộc vào việc mô hình có chứa các con cháu BasePart hay không:
Một mô hình có các con cháu BasePart chỉ được truyền vào khi một trong số các con cháu BasePart của nó đủ điều kiện để truyền vào. Tại thời điểm đó, mô hình và các BasePart đủ điều kiện sẽ được truyền vào, cùng với các con cháu không phải BasePart của mô hình.
Khi BasePart cuối cùng còn lại của mô hình truyền ra, mô hình sẽ truyền ra cùng với nó.

Một mô hình không có con cháu BasePart, chẳng hạn như một cái chỉ được sử dụng như một "container" cho các thể hiện không phải BasePart như scripts, sẽ sao chép đến khách hàng ngay sau khi người chơi tham gia. Loại mô hình này được miễn trừ khỏi việc truyền tải ra trừ khi nó trở thành con cháu của một BasePart.

Nguyên Tử
Nếu một Model được đặt thành Atomic, tất cả các con cháu ban đầu của nó sẽ được truyền vào cùng nhau khi một con cháu BasePart đủ điều kiện để được truyền vào. Do đó, một script phía khách hàng cần truy cập các thể hiện bên trong mô hình sẽ cần sử dụng WaitForChild() trên chính mô hình, nhưng không trên một con cháu MeshPart hoặc Part vì chúng được gửi cùng với mô hình.
Một mô hình nguyên tử chỉ được truyền ra khi tất cả các bộ phận con cháu của nó đủ điều kiện để truyền ra, lúc đó toàn bộ mô hình được truyền ra cùng nhau.

Bền Bỉ
Các mô hình Persistent không phải là đối tượng của việc truyền tải vào hoặc ra bình thường. Chúng được gửi như một đơn vị nguyên tử hoàn chỉnh ngay sau khi người chơi tham gia và trước khi sự kiện Workspace.PersistentLoaded xảy ra. Các mô hình bền bỉ và các con cháu của chúng sẽ không bao giờ bị truyền ra, nhưng để xử lý an toàn việc truyền tải vào trong một script phía khách hàng, bạn nên chờ sự kiện PersistentLoaded xảy ra.

Bền BỉTheoNgườiChơi
Các mô hình được đặt thành PersistentPerPlayer hoạt động giống như Persistent cho những người chơi đã được thêm vào bằng Model:AddPersistentPlayer(). Đối với những người chơi khác, hành vi giống như Atomic. Bạn có thể khôi phục một mô hình từ sự bền bỉ của người chơi thông qua Model:RemovePersistentPlayer().
Tùy chỉnh màn hình dừng
Giả sử Workspace.StreamingIntegrityMode được đặt thành PauseOutsideLoadedArea được khuyến nghị, trò chơi sẽ dừng lại nếu một người chơi di chuyển vào một vùng của thế giới chưa được truyền tải đến họ. Trong những trường hợp này, thuộc tính Player.GameplayPaused cho biết trạng thái dừng hiện tại của người chơi, có thể được sử dụng với kết nối GetPropertyChangedSignal() để hiển thị hoặc ẩn GUI tùy chỉnh.
LocalScript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Vô hiệu hóa modal dừng mặc định
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Hiện GUI tùy chỉnh
else
-- Ẩn GUI tùy chỉnh
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)
Gỡ lỗi thời gian chạy
Engine bao gồm nhiều bảng gỡ lỗi trên màn hình có thể được kích hoạt trên khách hàng bằng cách sử dụng các phím tắt. Để truy cập thông tin gỡ lỗi truyền tải:
Mở lớp gỡ lỗi Tóm tắt Mạng thông qua ShiftCtrlF3 (Windows) hoặc Shift⌘F3 (Mac).
Khi lớp gỡ lỗi được mở, nhấn Shift1 liên tục để chuyển qua các bảng có sẵn. Bảng thứ tư là chế độ gỡ lỗi Truyền Tải hiển thị thông tin runtime hữu ích:
- Các cài đặt truyền tải đang hoạt động
- Các khu vực hiện đang được tải (đã truyền vào)
- Hành vi và trạng thái truyền tải
Khi được bật, các vùng được đánh dấu bằng màu sẽ xuất hiện trong viewport 3D:
| Màu | Mô tả |
|---|---|
| Ít hơn StreamingMinRadius | |
| Lớn hơn hoặc bằng StreamingMinRadius và nhỏ hơn StreamingTargetRadius | |
| Bằng với StreamingTargetRadius | |
| Lớn hơn StreamingTargetRadius |