Untuk mendukung mekanisme fisik kompleks sambil juga menargetkan pengalaman yang halus dan responsif bagi pemain, mesin Roblox fisik menggunakan sistem fisik distribusi di mana kalkulasi di distribusi di antara server dan semua klien yang terhubung. Dalam sistem ini, mesin menet
Klien mengalami lebih responsif interaksi fisika dengan bagian yang mereka memiliki, karena tidak ada kelambatan dari komunikasi dengan server. Kepemilikan jaringan juga meningkatkan kinerja server karena kalkulasi fisika dapat dibagi di antara setiap klien, memungkinkan server untuk men prioritaskan tugas lain.
Pemilikan BasePart
Secara default, server menyimpan kepemilikan dari setiap BasePart . Selain itu, server selalu memiliki kepemilikan tertaut BaseParts dan Anda tidak dapat secara manual mengubah kepemilikan mereka.
Berdasarkan kapasitas hardware klien dan ketentuan dekatnya pemain, mesin secara otomatis menetapkan kepemilikan bagian itu ke klien. Oleh karena itu, bagian-bagian dekat dengan karakter pemain lebih mungkin menjadi milik pemain.
Kesahatan Pemilikan
Jika mekanisme berbasis fisika tidak memiliki bagian yang terancang, menetapkan kepemilikan di dalam mount dalam mekanisme tersebut menetapkan kepemilikan yang sama untuk setiap mount dalam mekanisme.
Jika Anda menambatkan kumpulan pengumpul yang tunggal yang bukan bagian dari mekanisme yang lebih luas, kepemilikannya pergi ke server, karena server selalu memiliki kepemilikan tertaut Class.BasePart|BaseParts. Setelah menambatkan kumpulan yang sama, keadaan kepemilikan sebelumnya hilang dan itu dikembalikan ke pengelolaan otomatis oleh mesin.
Jika Anda menambatkan satu assemble dalam mekanisme assemble yang lebih luas, kepemilikan assemble tertentu pergi ke server, tetapi kepemilikan assemble lainnya tetap tidak berubah. Unanchoring assemble yang sama mengembalikan kepemilikan sebelumnya yang diatur.
Mengatur Keemasan
Dalam pengalaman dengan interaksi fisik kompleks atau dalam kasus di mana Anda perlu menetapkan kontrol langsung, Anda dapat menetapkan kepemilikan melalui panggilan server ke BasePart:SetNetworkOwner() .
Pertimbangkan kendaraan yang memiliki objek VehicleSeat untuk pengemudi dan objek Seat untuk pasien, dengan kedua objek ini termas
Pemecahan berikut Script menyelesaikan ini dengan menetapkan kepemilikan jaringan ke pengemudi secara manual. Ini meng
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
-- Dapatkan pemain dari karakter
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Atur ulang kepemilikan saat kursi tidak diisi
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Menyajikan Kepemilikan
Untuk membantu dengan debugging kepemilikan jaringan, Studio dapat menyajikan tingkat tingkat warna di sekitar objek saat playtesting.
Warna Umum | Deskripsi | |
---|---|---|
(hijau) | Klien Anda memiliki bagian itu dan mengsimulasikannya. | |
(merah) | Bagian itu berada dalam " zona batas " di mana klien Anda menyimpulkannya, tetapi itu masih dimiliki oleh sesuatu yang lain. Klien Anda mungkin mendapatkan kepemilikan setelah ini, atau mungkin menolak. | |
(putih/abu-abu) | Server atau klien lainnya memiliki bagian melalui kedua otomatis jaringan kepemilikan atau dari ekspresi asignasi melalui part:SetNetworkOwner() . |
Untuk mengaktifkan visualisasi kepemilikan jaringan:
Klik pada tombol opsi visualisasi di sudut atas kanan 3D viewport.
Dalam menu dropdown, beralih pada Pemilik jaringan .
Ketidakpastian Keamanan
Roblox tidak dapat memverifikasi perhitungan fisika saat klien memiliki kepemilikan atas BasePart . Klien dapat mengeksploitasi ini dan mengirim data buruk ke server, seperti menyebarkan BasePart , menembus dinding atau terbang di sekitar.
Selain itu, acara BasePart.Touched terikat dengan kepemilikan jaringan, yang berarti klien dapat menyebabkan acara Touched di serveryang dimilikinya dan mengirimny
Lihat Taktik Keamanan dan Mitigasi Cheat untuk taktik keamanan dan mitigasi cheat untuk pengalaman Roblox.