Kepemilikan jaringan

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Untuk mendukung mekanisme fisik yang kompleks sambil tetap berusaha untuk pengalaman yang lancar dan responsif bagi pemain, engine fisika Roblox menggunakan sistem fisika distribusi di mana perhitungan dibagi antara server dan semua klien yang terhubung. Dalam sistem ini, engine menetapkan kepemilikan jaringan dari BaseParts yang disimulasi secara fisik kepada klien atau server untuk membagi beban perhitungan fisika.

Klien mengalami interaksi fisika yang lebih responsif dengan bagian yang mereka miliki, karena tidak ada latensi dari komunikasi dengan server. Kepemilikan jaringan juga meningkatkan kinerja server karena perhitungan fisika dapat dibagi di antara klien individu, memungkinkan server untuk memprioritaskan tugas lainnya.

Kepemilikan BasePart

Secara default, server mempertahankan kepemilikan dari setiap BasePart. Selain itu, server selalu memiliki BaseParts yang teranchored dan Anda tidak dapat mengubah kepemilikannya secara manual.

Berdasarkan kapasitas perangkat keras klien dan kedekatan karakter pemain Player.Character dengan BasePart yang tidak teranchored, engine secara otomatis menetapkan kepemilikan bagian tersebut kepada klien. Dengan demikian, bagian yang dekat dengan karakter pemain lebih mungkin untuk menjadi milik pemain.

Kepemilikan Assembly

Jika mekanisme berbasis fisika tidak memiliki bagian yang teranchored, mengatur kepemilikan pada assembly dalam mekanisme tersebut akan mengatur kepemilikan yang sama untuk setiap assembly dalam mekanisme tersebut.

Jika Anda menganchorkan satu assembly yang tidak menjadi bagian dari mekanisme yang lebih luas, kepemilikannya akan berpindah ke server, mengingat server selalu memiliki BaseParts yang teranchored. Setelah mengunanchorkan assembly yang sama, status kepemilikannya yang sebelumnya hilang dan kembali ditangani secara otomatis oleh engine.

Jika Anda menganchorkan satu assembly dalam mekanisme assemblies yang lebih luas, kepemilikannya akan berpindah ke server, tetapi kepemilikan assemblies lainnya tetap tidak berubah. Mengunanchorkan assembly yang sama akan mengembalikan kepemilikannya yang telah ditetapkan sebelumnya.

Mengatur kepemilikan

Dalam permainan dengan interaksi fisika yang kompleks atau dalam kasus di mana Anda perlu menetapkan kontrol langsung, Anda dapat mengatur kepemilikan melalui panggilan sisi server ke BasePart:SetNetworkOwner().

Pertimbangkan sebuah kendaraan yang memiliki objek VehicleSeat untuk pengemudi dan objek Seat untuk penumpang, dengan keduanya termasuk dalam assembly kendaraan. Dengan aturan kepemilikan default, jika karakter pemain duduk di Seat (penumpang) dan kemudian pemain lain melompat ke VehicleSeat (pengemudi), penumpang memperoleh kepemilikan fisik dari seluruh kendaraan karena mereka masuk pertama. Pengemudi harus menunggu beberapa siklus jaringan sebelum input mereka dikenali dan kendaraan akan terasa kurang responsif.

Script berikut ini memperbaiki masalah ini dengan menetapkan kepemilikan jaringan kepada pengemudi secara manual. Di dalamnya, VehicleSeat mengatur Occupant nya kepada Humanoid yang duduk di atasnya, sehingga skrip mendengarkan peristiwa Changed dari kursi untuk menangkap saat seorang pemain duduk di kursi. Ketika pengemudi meninggalkan kursi, kepemilikan jaringan kendaraan kembali menjadi otomatis dengan 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
-- Dapatkan pemain dari karakter
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Reset kepemilikan ketika kursi tidak ditempati
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)

Memvisualisasikan kepemilikan

Untuk membantu dengan debugging kepemilikan jaringan, Studio dapat merender garis berwarna di sekitar objek saat pengujian bermain.

Warna garis luarDeskripsi
(hijau)Klien Anda memiliki bagian dan menyimulasi itu.
(merah)Bagian tersebut berada dalam "zona penyangga" di mana klien Anda menyimulasi itu tetapi masih dimiliki oleh sesuatu yang lain. Klien Anda bisa mendapatkan kepemilikan setelah ini, atau mungkin ditolak.

(putih/abu-abu)Server atau klien lain memiliki bagian tersebut baik melalui kepemilikan jaringan otomatis atau dari penugasan eksplisit melalui part:SetNetworkOwner().
(hitam)Bagian tersebut tidak dimiliki oleh server maupun klien. Fisika tidak akan diterapkan pada bagian ini.

Untuk mengaktifkan visualisasi kepemilikan jaringan:

  1. Klik tombol opsi visualisasi di sudut kanan atas viewport 3D.

    Tampilan dekat viewport 3D dengan tombol Opsi Visualisasi ditunjukkan di sudut kanan atas.
  2. Dalam menu dropdown, aktifkan Pemilik jaringan.

Masalah keamanan

Roblox tidak dapat memverifikasi perhitungan fisika ketika klien memiliki BasePart. Klien dapat mengeksploitasi ini dan mengirim data yang buruk ke server, seperti teleporter BasePart, membuatnya melewati dinding atau terbang.

Selain itu, peristiwa BasePart.Touched terikat pada kepemilikan jaringan, yang berarti klien dapat memicu peristiwa Touched pada BasePart yang dimilikinya dan mengirimnya ke server, bahkan jika server tidak melihatnya menyentuh sesuatu. Misalnya, klien dapat membuat pedang memberikan kerusakan pada pemain lain di seberang peta dengan memicu peristiwa melalui injeksi skrip, jadi penting untuk memeriksa validitas peristiwa semacam itu yang dipicu oleh klien.

Lihat Taktik Keamanan dan Mitigasi Kecurangan untuk taktik keamanan dan mitigasi kecurangan yang lebih rinci untuk permainan Roblox.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.