Để hỗ trợ các cơ chế vật lý phức tạp mà cũng mục đích để tạo ra một trải nghiệm vật lý mượt mà và phản hồi cho người chơi, Roblox vật lý engine sử dụng một hệ thống
Khách hàng trải nghiệm nhiều hiệu ứng vật lý hơn tương tác với các bộ phận mà họ sở hữu, vì không có thời gian 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 vì các tính toán vật lý có thể được chia sẻ giữa các khách h
Sở hữu BasePart
Bởi mặc định, máy chủ giữ quyền sở hữu của bất kỳ Class.BasePart nào. Ngoài ra, máy chủ luôn luôn sở hữu khóa để BasePart và bạn không thể thay đổi quyền sở hữu của họ bằng tay.
Dựa trên công suất của máy chủ và sự gần gũi của người chơi với một Class.Player.Character gắn bên Player.Character, máy chủ tự động giao hữu quyền sở hữu của bộ phận đó cho người chơi. Do đó, các bộ phận gần với một nhân vật của người chơ
Sở hữu Hệ thống
Nếu một cơ chế dựa trên vật lý không có các bộ phận cố định, cài đặt quyền sở hữu trên một assembley trong cơ chế đó cài đặt cùng một quyền sở hữu cho mọiasm trong cơ chế.
Nếu bạn kết dính một lắm dựng đơn lẻ đang ở ngoài phần của một cơ chế rộng hơn, sở hữu của nó đi vào máy chủ, vì máy chủ luôn luôn là chủ sở hữu của dựng đơn lẻ đó. Khi bạn bỏ dựng đơn lẻ đó, giá trị tiền n
Nếu bạn kết hợp một bộ dụng cụ trong một cơ chế cấu hình rộng hơn của các bộ dụng cụ, sở hữu của nó đi vào máy chủ, nhưng sở hữu của các bộ dụng cụ khác vẫn giữ nguyên. Không kết hợp lại cùng một bộ dụng cụ sẽ được trả lại sở hữu trước đó của nó.
Cài đặt Sở hữu
Trong các trải nghiệm với các tươ tác hành động vật lý phức tạp hoặc trong các trường hợp bạn cần phải giao quyền điều khiển trực tiếp, bạn có thể thiết lập quyền sở hữu thông qua một cuộc gọi bên máy chủ để BasePart:SetNetworkOwner() .
Hãy xem xét một chiếc xe có một VehicleSeat đối với người lái và một Seat
Các điều chỉnh sau đây Script điều này bằng cách giao mạng cho người l
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 sở hữu khi ghế ngồi không được sử dụng
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Tạo hình ảnh sở hữu
Để hỗ trợ việc kiểm tra sở hữu mạng, Studio có thể tạo những kết cấu màu xung quanh các thống kê khi chơi thử.
Màu nét | Mô tả | |
---|---|---|
(màu xanh lá) | Client của bạn sở hữu phần và đang simulate nó. | |
(màu đỏ) | Phần này nằm trong một "khu vực tam thế" nơi client của bạn đang simulat nó nhưng nó vẫn thuộc sở hữu của một cái gì đó khác. Client của bạn có thể nhận được sở hữu sau đó, hoặc nó có thể bị từ chối. | |
(màu trắng/màu xám) | Máy chủ hoặc một máy chủ khác sở hữu bộ phận thông qua chủ sở hữu mạng tự động hoặc qua phân bổ cụ thể thông qua part:SetNetworkOwner() . |
Để bật hiển thị sở hữu mạng:
Nhấp vào nút tùy chọn hiển thị ở góc trên cùng bên phải của các cổng 3D.
Trong menu dropdown, bật Các chủ mạng .
Những lo ngại về an ninh
Roblox không thể xác minh công thức vật lý khi một khách hàng có sở hữu trên một BasePart . Các khách hàng có thể tận 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ườ
Ngoài ra, các sự kiện BasePart.Touched được kết nối với sở hữu mạng, có nghĩa là một client có thể bắn Class.BasePart.Touched|Touched
Xem Chiến thuật an toàn và phòng ngừa lừa đảo để tìm hiểu các chiến thuật an toàn và phòng ngừa lừa đảo cho trải nghiệm Roblox.