Tương tác hóa đám mây

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

In-experience stream trong trò chơi cho phép Roblox engine tải và unload 3D content và các instate liên quan trong các khu vực của thế giới. Điều này có thể cải thiện trải nghiệm người chơi nhiều cách, ví dụ như:

  • Thời gian tham gia nhanh hơn — Người chơi có thể bắt đầu chơi ở một khu vực của thế giới trong khi nhiều khu vực khác đang tải trong nền.
  • Hiệu suất bộ nhớ — Trải nghiệm có thể được chơi trên các thiết bị có ít bộ nhớ hơn khi nội dung được phát sóng dinhám trên và ngoài. Thế giới đa phương tiện và chi tiết hơn có thể được 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 — Hiệu hiệu lựctốt hơn, khi máy chủ có thể dành ít thời gian và băng thông để đồng bộ hóa thay đổi giữa thế giới và người chơi trong nó. Clients dành ít thời gian hơn để cập nhật những instância không liên quan đến người chơi hiện tại.
  • Cấp độ chi tiết — Các mô hình xa và địa hình vẫn hiển thị ngay cả khi chúng không được phát sóng cho khách hàng, giữ cho trải nghiệm tối ưu hóa mà không hy sinh hoàn toàn các bức ảnh nền.

Mở rộng phát sóng

Inst Streaming được kích hoạt thông qua StreamingEnabled 속性 của Workspace đối tượng trong Studio. This property cannot be set in a script. Streaming được kích hoạt bởi mặc định cho những nơi mới được tạo trong Studio.

The Properties window with the StreamingEnabled property enabled.

Một khi bật, nên tham khảo những lưu ý sau:

  • Vì không phải khách hàng sẽ thường xuyên có toàn bộ Workspace có sẵn ở địa phương, hãy sử dụng công cụ/API phù hợp để đảm bảo rằng các instâne
  • Minimize placement of 3D content outside of Workspace . Content in containers such as ReplicatedStorage or ReplicatedFirst is ineligible for streaming and may negatively impact join time and memory usage.
  • Nếu bạn di chuyển nhân vật của một người chơi bằng cách thiết lập nó CFrame , thực hiện như thế từ một phe máy chủ Script và sử dụng yêu cầu truyền dữ liệu hình ảnh để tải dữ liệu nhanh hơn xung quanh vị trí mới c
  • Cài đặt manu tính của người chơi ReplicationFocus chỉ trong các tình huống độc đáo như trong những trải nghiệm không sử dụng Player.Character . Ở các trường hợp này, hãy đảm bảo rằng tập tr

Hành vi kỹ thuật

Phát sóng trong

Bởi mặc định, khi một người chơi tham gia một trải nghiệm với instance streaming được kích hoạt, các instance ở Workspace được sao chép đến client, bao gồm những gì theo dõi:

Sau đó, trong lúc chơi trải nghiệm trò chơi, máy chủ có thể phát trực tiếp các instância cần thiết cho client như họ cần.

Diagram showing when various instances and their descendants in the Workspace stream in.
1 Terrain được xử lý một cách độc đáo, trong đó khu vực địa hình được sao chép đến client khi trải nghiệm được tải, nhưng khu vực địa hình chỉ được xử lý khi cần thiết

Hành vi mô hình

Các mô hình được cài đặt để không được hành vi mặc định như Atomic stream trong dưới các quy tắc đặc biệt như được mô tả trong Per-Model Streaming Controls . Tuy nhiên, các mô hình (khô

The Properties window with the ModelStreamingBehavior property set to Default.

Khi ModelStreamingBehavior được đặt để Mặc định / Di Sản , thì 1> Class.Model1> 컨тей너 và các con cháu không gian hóa của nó như 4> Class.Script|Script

Diagram showing default model stream in behavior.

Phát sóng ra ngoài

Trong quá trình trải nghiệm trò chơi, một client có thể stream out (xóa khỏi khu vực Workspace của người chơi và BaseParts được chứa bên trong chúng, dựa

Khi một instream bị rơi, nó được gắn với nil để cho phép bất kỳ trạng thái Luau hiện tại nào cũng sẽ được kết n

Để tiếp tục dự đoán ra, hãy xem xét các tình huống này:

Tình huốngVí dụHành vi Phát sóng
Một phần được tạo ra ở đây thông qua Instance.new() trong một LocalScript .Trong một trò chơi "nhặt lấy cờ", bạn tạo và kết dính các bộ phận mũ xanh lên tất cả người chơi trên đội xanh dương thông qua một LocalScript .Phần này không được sao chép đến máy chủ, và nó được miễn thuế phát sóng ra trừ khi bạn làm cho nó một con cháu của một phần tồn tại trên máy chủ, chẳng hạn như một phần trong mô hình nhân vật của một người chơi.
Một phần được sao chép từ ReplicatedStorage đến Instance:Clone() qua 2>Class.Instance:Clone2> trong một 5>Class.LocalScript5> .Một nhân vật phù thuỷ sử dụng một phép thuật bằng cách kích hoạt một Tool, trên đó một ô bao gồm nhiều hiệu ứng đặc biệt được sao chép từ Class.ReplicatedStorage và được gắn vớiWorkspace tại vị trí của wizard.Phần này không được sao chép đến máy chủ, và nó được miễn phí khỏi việc phát sóng ra trừ khi bạn làm cho nó một cháu tổ của một phần tồn tại trên máy chủ.
Một phần là reparented từ ReplicatedStorage đếnWorkspace via a LocalScript .Một "mũ phù thủy" được lưu trong ReplicatedStorage . Khi một người chơi chọn để chơi trên đội phù thủy, chiếc mũ được di chuyển vào mô hình nhân vật của họ thông qua một LocalScript .Phần tương tự vẫn đủ điều kiện để phát sóng bởi vì nó đến từ máy chủ và đã được sao chép đến ReplicatedStorage . Hạn chế hoạm nhìn này làm cho một mô hình không đồng bộ giữa client và server, và phần tương tự có thể phát sóng; thay vào đó, sao ch

Hành vi mô hình

Nếu bạn đặt ModelStreamingBehavior để Cải tiến , động cơ có thể stream out Mặc định ( 1> Nonatomic1> ) mô hình khi họ đủ điều kiện để stream out, tiết kiệm bộ nhớ trên client và giảm những instância cần cập nhật tính năng.

The Properties window with the ModelStreamingBehavior property set to Improved.

Dưới Đã cải thiện mô hình truyền dữ liệu, truyền dữ liệu ngoài mô hình mặc định ( không átom ) là dựa trên việc model có phải là 1> trò chơi vật lý

  • Một mô hình không gian chỉ được phát sóng hoàn toàn khi các dòng dẫn đến cuối cùng của nó, BasePart dòng dẫn dắt, vì một số phần không gian của mô hình có thể ở gần với người chơi/nhân bản gần và một số xa.
  • Một mô hình không gian chỉ xuất khi một tiền nhân xuất khi, tương đương với hành vi phát sóng kế thừa.

Hoạt động và Mecanism

Khi ít nhất một phần của một Assembly đủ điều kiện để phát sóng, tất cả các bộ phận phát trực tuyến

Ghi chú rằng các bộ hòa hợp với kết dính các bộ phận là điều chỉnh nhẹ hơn so với các bộ hòa hợp với chỉ các bộ phận không kết dính:

Tổ chức Cấu hìnhHành vi Phát sóng
Chỉ các bộ phận không kết dínhToàn bộ máy tập trung được gửi như một đơn vị nguyên tử.
Cố gắn rễ câyChỉ các bộ phận, phụ kiện và hạn chế cần thiết để kết nối các bộ phận được phát sóng đến bộ phận chính mới được streamed cùng.

Độ trễ thời gian

Có thể có một sự trễ hơn nhỏ của ~ 10 mili giây giữa khi một phần được tạo trên máy chủ và khi nó được sao chép đến khách hàng. Trong mỗi trong các tình huống sau đây, bạn có thể cần phải sử dụng WaitForChild()

Tình huốngVí dụHành vi Phát sóng
Một LocalScript tạo một RemoteFunction gọi vào máy chủ để tạo một phần.Một người chơi kích hoạt một Tool ở địa phương để tạo một phần trên máy chủ mà tất cả người chơi có thể thấy và tương tác với.Khi chức năng điều khiển từ xa trở về khách hàng, bộ phận có thể chưa tồn tại, mặc dù bộ phận đang gần với trung tâm hướng tới và trong một khu vực bên trong.
Một phần được thêm vào một mô hình nhân vật trên máy chủ thông qua một Script và một RemoteEvent được kích hoạt để kết nối với một client.Khi một người chơi tham gia vào đội cảnh sát, một phần "cảnh sát badge" lưu trong ServerStorage được sao chép và kết hợp với mô hình nhân vật của người chơi để cập nhật một thành phần UI địa phương. Một RemoteEventMặc dù khách hàng nhận tín hiệu sự kiện, nhưng không có đảm bảo rằng bộ phận đã được phát trực tiếp đến khách hàng đó.
Một phần va chạm với một khu vực nào đó trên máy chủ và kích hoạt một RemoteEvent trên client.Một người chơi dịch một quả bóng futsal vào một mục tiêu, kích hoạt sự kiện "đã ghi một bàn".Những người chơi gần mục tiêu có thể xem sự kiện "đã ghi mục" trước khi trái banh được phát tới họ.

Tính chất phát sóng

Các thuộc tính sau đây kiểm soát cách streaming trên thực tế được ứng dụng cho trải nghiệm của bạn. Tất cả các thuộc tính này đều là non-scriptable và phải được cài đặt trên Workspace đối tượng trong Studio.

The Properties window with the ModelStreamingBehavior, StreamingIntegrityMode, StreamingMidRadius, StreamingTargetRadius, and StreamOutBehavior property highlighted.

Hành vi phát sóng

Kiểm tra xem các mô hình Mặc định ( Phi nguyên tử ) được sao chép khi một người chơi tham gia, hoặc chỉ được gửi khi cần thiết. Nếu thuộc tính này được cài đặt thành <

Chế độ phát sóng hòa hợp

Trải nghiệm của bạn có thể biến thành những cách không định nghĩa nếu một người chơi di chuyển vào khu vực của thế giới mà họ đã không phát sóng. Tính năng streaming integrity cung cấp một cách để tránh những tình huống có thể gây ra những vấn đề tiềm

Độ lưu thông minh

Thuộc tính StreamingMinRadius cho thấy bán kính xung quanh nhân vật người chơi (hoặc Class.Player.ReplicationFocus|ReplicationFocus) trong đó các dòng dịch chảy ở mức ưu tiên cao nhất. Lưu ý khi tăng giá trị mặc định là tăng giá nhớ và băng thông máy chủ đến chi

Tiêu chuẩn phát sóng

Thuộc tính StreamingTargetRadius kiểm soát khoảng cách tối đa khỏi nhân vật của người chơi (hoặc Class.Player.ReplicationFocus|ReplicationFocus) trong đó các dòng dịch chảy. Ghi nhớ rằng máy chủ có thể giữ lại các dịch đã tải trước đó ngoài khu vực giới hạn của mục đ

Một StreamingTargetRadius nhỏ hơn giảm tải nền tảng của máy chủ, vì máy chủ sẽ không phát sóng trong các trường hợp cụ thể ngoài giá trị đã đặt. Tuy nhiên, vòng tròn mục tiêu là khoảng cách tối đa mà người chơi sẽ có thể nhìn thấy chi tiết đầy đủ của

Hành vi phát sóng

Thuộc tính StreamOutBehavior đặt hành vi phát sóng ra ngoài theo một trong những giá trị sau đây:

Cài đặtHành vi Phát sóng
Mặc định Hành vi mặc định, hiện tại giống như LowMemory .
ThấpMemory Client chỉ xuất hành lang các bộ phận trong một tình huống lưu trữ thấp và có thể xóa nội dung 3D cho đến khi chỉ có kích thước tối thiểu được hiện diện.
Cơ hội Các khu vực ngoài StreamingTargetRadius có thể bị xóa khỏi client ngay cả khi không có áp lực lưu trữ. Ở chế độ này, client không bao giờ xóa các instância gần gũi nhất với kích thước của target, ngoại trừ trong các tình huống thấp hơn

Điều khiển phát sóng theo mô hình

Trên toàn cầu, ModelStreamingBehavior tính năng cho phép bạn kiểm soát cách mô hình được phát sóng trên tham gia. Ngoài ra, để tránh các vấn đề với streaming trên cơ sở mô hình và để giảm thiể

The Properties window with the ModelStreamingMode property set to Default. The property is also highlighted.

Mặc định/ Không nguyên tử

Khi một Model được đặt để Mặc định hoặc Không đồng nhất , hành vi phát sóng phụ thuộc vào việc 1> ModelStreamingBehavior1> được đặt để 4> Mặc định4> ( 7> Di Sản

ModelStreamingBehaviorHành vi kỹ thuật
Mặc định ( Di Sản )Mô hình được sao chép khi một người chơi tham gia. Điều này có thể dẫn đến thêm một số trường hợp được gửi trong khi tải, thêm một số trường hợp lưu trong bộ nhớ và sự phức tạp thêm cho c
Cải thiện Mô hình chỉ được gửi khi cần thiết, có thể làm tăng tốc thời gian tham gia.

Xem Hành vi kỹ thuật để biết thêm chi tiết.

Nguyên tử

Nếu một Model được thay đổi thành Atomic , tất cả các con cháu của nó đều

Một mô hình nguyên tử chỉ được phát sóng khi tất cả các bộ phận con của nó đủ điều kiện để phát sóng, tại điểm nào mô hình nguyên tử toàn bộ sẽ được phát sóng cùng nhau. Nếu chỉ một số bộ phận của một mô hình nguyên tử thường được phát sóng, toàn bộ mô hình và con ch

A diagram showing Atomic model streaming along with children.
Script địa phương

-- Không có mô hình nguyên tử tại thời điểm tải; sử dụng WaitForChild()
local model = workspace:WaitForChild("Model")
-- Các bộ phận con cháu dòng vào với mô hình và ngay lập tức có thể truy cập
local meshPart = model.MeshPart
local part = model.Part

Kiên định

Các mô hình vững chắc không bị ảnh hưởng bởi dòng chảy thông thường trong hoặc ngoài. Chúng được g

A diagram showing Persistent model streaming along with children.
Script địa phương

-- Không có mô hình persistent ở thời điểm load; use WaitForChild()
local model = workspace:WaitForChild("Model")
-- Các bộ phận con cháu dòng vào với mô hình và ngay lập tức có thể truy cập
local meshPart = model.MeshPart
local part = model.Part

Người chơi không bị mất

Các mô hình được cài đặt để PersistentPerPlayer hành xử giống như Persistent cho người chơi đã được thêm bằng cách sử dụng Model:AddPersistentPlayer() . Đối với người chơi khác, hành vi là

Yêu cầu phát sóng khu vực

Nếu bạn đặt CFrame của một nhân vật người chơi vào một khu vực mà hiện tại không được tải, tạm dừng phát sóng xảy ra, nếu bạn kích hoạt. Nếu bạn biết rằng nhân vật sẽ di chuyể

Các script sau đây cho thấy cách bắn một sự kiện client-to-server tại chỗ để dịch chuyển một người chơi trong một địa điểm, kết thúc trong yêu cầu phát sóng trước khi di chuyển nhân vật đến một new Datatype.CFrame .

Script - Dịch chuyển nhân vật người chơi

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")
local function teleportPlayer(player, teleportTarget)
-- Yêu cầu phát sóng xung quanh vị trí mục tiêu
player:RequestStreamAroundAsync(teleportTarget)
-- Dịch chuyển nhân vật
local character = player.Character
if character and character.Parent then
local currentPivot = character:GetPivot()
character:PivotTo(currentPivot * CFrame.new(teleportTarget))
end
end
-- Gọi chức năng dịch chuyển khi khách hàng kích hoạt sự kiệnRemote
teleportEvent.OnServerEvent:Connect(teleportPlayer)
LocalScript - Sự kiện Fire Remote

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportEvent = ReplicatedStorage:WaitForChild("TeleportEvent")
local teleportTarget = Vector3.new(50, 2, 120)
-- Kích hoạt sự kiệnRemote
teleportEvent:FireServer(teleportTarget)

Phát hiện Streaming Instanz

Trong một số trường hợp, có thể cần phải phát hiện khi một thể hiện dữ liệu trong hay ngoài một đối tượng và phản ứng với sự kiện đó. Một mẫu hữu ích cho phát hiện dữ liệu streaming là như sau:

  1. Bằng cách sử dụng nhãn mục trong các thành phần của một ví dụ / trường hợp's properties, hoặc Studio's Editor nhãn, giao định một tag CollectionService cho tất cả các đối tượng bị ảnh hưởng.

  2. Từ một single LocalScript , detect when a tagged object streams in or out through GetInstanceAddedSignal() and GetInstanceRemovedSignal() , then handle the object accordingly. Ví dụ, m

    LocalScript - Dòng chảy Dòng chảy Dòng chảy Dòng chảy

    local CollectionService = game:GetService("CollectionService")
    local tagName = "FlickerLightSource"
    local random = Random.new()
    local flickerSources = {}
    -- Xác định các bộ phận bị lỗi hoặc mới được phát trong hoặc ngoài
    for _, light in CollectionService:GetTagged(tagName) do
    flickerSources[light] = true
    end
    CollectionService:GetInstanceAddedSignal(tagName):Connect(function(light)
    flickerSources[light] = true
    end)
    CollectionService:GetInstanceRemovedSignal(tagName):Connect(function(light)
    flickerSources[light] = nil
    end)
    -- Vòng lặp nhấp mắt
    while true do
    for light in flickerSources do
    light.Brightness = 8 + random:NextNumber(-0.4, 0.4)
    end
    task.wait(0.05)
    end

Tùy chỉnh màn hình dừng

Thuộc tính Player.GameplayPaused cho thấy trạng thái tạm dừng của người chơi. Thuộc tính này có thể được sử dụng với một kết nối GetPropertyChangedSignal() để hiển thị hoặc ẩn một GUI tùy chỉnh.

Script địa phương

local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- Vô hiệu hóa màn hình tạm dừng mặc định
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- Hiển thị GUI tùy chỉnh
else
-- Ẩn giao diện người dùng tùy chỉnh
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)

Cấp độ chi tiết của mô hình

Khi truyền phát được bật, Models ngoài khu vực đang phát trực tiếp sẽ không hiển thị bằng mặc định. Tuy nhiên, bạn có thể chỉ thị cho máy chủ tạo ra các mạng lưới "imposter" độ phân giải thấp cho các mô hình không hiện diệ

LevelOfDetail property indicated for Model instance
A globe model displays in its actual level of detail.
Mô hình hiện tại
The same globe model displays as a low resolution imposter mesh with rough edges that obscure the globe's details.
Mạng lưới "imposter" có độ phân giải thấp
Cài đặt mô hìnhHành vi Phát sóng
StreamingMesh Kích hoạt sự tạo nộp nhập nhẹ nhàng của một lưới người giả mạo để hiển thị khi mô hình không hiện diện trên các khách hàng.
Vô hiệu hóa / Tự động Mô hình biến mất khi nó nằm ngoài vùng phát sóng.

Khi sử dụng meshes giả mạo, hãy lưu ý những điều theo dõi:

  • Mắt nhìn giả mạo được thiết kế để được xem ở 1024 studs xa camera hoặc xa hơn. Nếu bạn đã giảm StreamingTargetRadius xuống bằng một giá trị nhỏ hơn như 256, mắt nhìn giả mạo có thể không được thấy tốt cho mô hình mà nó thay th
  • Nếu một mô hình mô hình con của nó đều được cài đặt để StreamingMesh , chỉ mô hình cấp trên được hiển thị như một mô hình bị giả mạo, bao quanh tất cả các geometries dưới cấp để đảm bảo hiệu lựcsuấ
  • Các bề mặt không được hỗ trợ; các bề mặt giả mạo được hiển thị như những bề mặt mịn.
  • Mặc dù một Model không hoàn toàn được dịch chuyển trong, thì mạng lưới giả mạo được tạo thành thay vì các bộ phận của mô hình. Khi tất cả các bộ phận được dịch chuyển trong, chúng được tạo thành và mạng lưới giả mạo được lưu ý.
  • Các mạng lưới giả mạo không có ý nghĩa vật lý và hành xử như không tồn tại đối với raycasting , phát hiện va chạm và simulazione vật lý.
  • Chỉnh sửa một mô hình ở Studio, chẳng hạn như thêm/xóa/thay đổi vị trí các bộ phận con hoặc đặt lại màu sắc, tự động cập nhật mô hình đại diện.