Sở hữu mạng

*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.

Để hỗ trợ các cơ chế vật lý phức tạp trong khi vẫn nhắm đến một trải nghiệm mượt mà và phản ứng nhanh cho người chơi, động cơ Roblox vật lý sử dụng một hệ thống vật lý phân tán trong đó các tính toán được phân phối giữa máy chủ và tất cả các khách hàng kết nối.Trong hệ thống này, động cơ gán sở hữu mạng của vật lý được mô phỏng thực tế cho một khách hàng hoặc máy chủ để chia công việc tính toán vật lý.

Khách hàng trải nghiệm nhiều tương tác vật lý hơn với các bộ phận mà họ sở hữu, vì không có độ trễ từ giao tiếp với máy chủ.Sở hữu mạng cũng cải thiện hiệu suất máy chủ bởi các tính toán vật lý có thể được chia nhỏ giữa các khách hàng riêng lẻ, cho phép máy chủ ưu tiên các nhiệm vụ khác.

Sở hữu BasePart

Mặc định, máy chủ giữ quyền sở hữu của bất kỳ BasePart nào.Ngoài ra, máy chủ luôn luôn sở hữu cố định BaseParts và bạn không thể thay đổi sở hữu của chúng thủ công.

Dựa trên công suất phần cứng của khách hàng và sự gần gũi của người chơi với một phần chưa neo , động cơ tự động gán quyền sở hữu của phần đó cho khách hàng.Do đó, các bộ phận gần với nhân vật của người chơi có khả năng trở thành của người chơi hơn.

Sở hữu lắp ráp

Nếu một cơ chế dựa trên vật lý không có các bộ phận neo, thiết lập quyền sở hữu trên một lắp ráp trong cơ chế đặt quyền sở hữu tương tự cho mọi lắp ráp trong cơ chế.

Nếu bạn neo một lắp ráp cô đơn không phải là phần của một cơ chế rộng hơn, quyền sở hữu của nó chuyển sang máy chủ, vì máy chủ luôn sở hữu neo BaseParts .Sau khi gỡ bỏ cùng một tập hợp, tình trạng sở hữu trước đó của nó bị mất và nó trở lại xử lý tự động bởi động cơ.

Nếu bạn neo một lắp ráp trong một cơ chế rộng hơn của các lắp ráp, quyền sở hữu của nó chuyển sang máy chủ, nhưng quyền sở hữu của các lắp ráp khác vẫn không thay đổi.Bỏ neo cùng một tập hợp sẽ lập lại quyền sở hữu đã được đặt trước đó.

Đặt quyền sở hữu

Trong những trải nghiệm có sự tương tác vật lý phức tạp hoặc trong những trường hợp bạn cần phải gán điều khiển trực tiếp, bạn có thể đặt quyền sở hữu thông qua cuộc gọi bên máy chủ đến BasePart:SetNetworkOwner() .

Hãy xem xét một chiếc xe có một đối tượng VehicleSeat cho tài xế và một đối tượng Seat cho một hành khách, cả hai đều bao gồm trong lắp ráp xe.Với các quy tắc sở hữu mặc định, nếu một nhân vật người chơi ngồi trong Seat (hành khách) và sau đó một người chơi khác nhảy vào VehicleSeat (tài xế), hành khách nhận quyền sở hữu vật lý của toàn bộ xe vì họ đã vào trước tiên.Tài xế sẽ phải chờ đợi một vài chu kỳ mạng trước khi nhập của họ được nhận ra và xe sẽ cảm thấy ít phản ứng hơn.

Các sửa lỗi sau Script sửa lỗi này bằng cách gán quyền sở hữu mạng cho tài xế bằng tay.Trong đó, VehicleSeat cài đặt Occupant của nó vào Humanoid ngồi trên nó, vì vậy danh sách lắng nghe sự kiện của ghế Changed khi một người chơi ngồi vào ghế.Khi tài xế rời khỏi ghế, quyền sở hữu mạng của xe được phục hồi thành tự động với BasePart:SetNetworkOwnershipAuto() .


local Players = game:GetService("Players")
local vehicleSeat = script.Parent
vehicleSeat.Changed:Connect(function(prop)
if prop == "Occupant" then
local humanoid = vehicleSeat.Occupant
if humanoid then
-- Lấy người chơi từ nhân vật
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Đặt lại quyền sở hữu khi ghế không được sử dụng
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)

Hiển thị sở hữu

Để hỗ trợ gỡ lỗi sở hữu mạng, Studio có thể hiển thị các đường viền màu xung quanh các đối tượng khi thử nghiệm chơi.

Màu nét vẽMô tả
(màu xanh lá cây)Khách hàng của bạn sở hữu phần và đang mô phỏng nó.
(màu đỏ)Phần nằm trong "khu vực bộ nhớ" mà khách hàng của bạn đang mô phỏng nó nhưng vẫn thuộc về thứ gì đó khác.Khách hàng của bạn có thể nhận được quyền sở hữu sau đó, hoặc nó có thể từ chối.
(trắng/xám)Máy chủ hoặc khách hàng khác sở hữu phần thông qua quyền sở hữu mạng tự động hoặc từ việc gán rõ ràng thông qua part:SetNetworkOwner() .

Để bật hiển thị sở hữu mạng:

  1. Nhấp vào nút tùy chọn hiển thị ở góc trên bên phải của cửa sổ 3D.

    A close up view of the 3D viewport with the Visualization Options button indicated in the upper-right corner.
  2. Trong menu thả xuống, bật Chủ sở hữu mạng .

Nỗi lo lắng về an ninh

Roblox không thể xác minh tính toán vật lý khi một khách hàng có quyền sở hữu về một BasePart .Khách hàng có thể lợi dụng điều này và gửi dữ liệu xấu đến máy chủ, chẳng hạn như dịch chuyển BasePart, làm cho nó đi qua các bức tường hoặc bay xung quanh.

Ngoài ra, sự kiện BasePart.Touched được gắn với quyền sở hữu mạng, có nghĩa là một khách hàng có thể kích hoạt sự kiện Touched trên một BasePart mà nó sở hữu và gửi nó lên máy chủ, ngay cả khi máy chủ không thấy nó chạm vào bất cứ thứ gì.Ví dụ, một khách hàng có thể gây sát thương kiếm cho một người chơi khác trên bản đồ bằng cách bắn sự kiện thông qua việc chèn mã qua kịch bản, vì vậy rất quan trọng để kiểm tra tính hợp lệ của các sự kiện như vậy bị bắn bởi khách hàng.

Xem Thủ thuật bảo mật và giảm thiểu lừa đảo để có chi tiết về thủ thuật bảo mật và thủ thuật giảm thiểu lừa đảo cho trải nghiệm Roblox.