Om complexe fysieke mechanismen te ondersteunen en tegelijkertijd te streven naar een soepele en responsieve ervaring voor spelers, maakt de Roblox fysica engine gebruik van een gedistribueerd fysicasysteem waarin berekeningen worden verdeeld tussen de server en alle verbonden clients. Binnen dit systeem wijst de engine netwerkbezit van fysiek gesimuleerde BaseParts toe aan een client of server om het werk van het berekenen van fysica te verdelen.
Clients ervaren meer responsieve fysica-interacties met onderdelen die zij bezitten, aangezien er geen vertraging is door communicatie met de server. Netwerkbezit verbetert ook de serverprestaties omdat fysica-berekeningen kunnen worden verdeeld over individuele clients, waardoor de server andere taken kan prioriteren.
BasePart bezit
Standaard behoudt de server het bezit van elke BasePart. Bovendien bezit de server altijd verankerde BaseParts en je kunt hun bezit niet handmatig wijzigen.
Op basis van de hardwarecapaciteit van een client en de nabijheid van de Player.Character van de speler tot een onverankerde BasePart, wijst de engine automatisch het bezit van dat onderdeel toe aan de client. Dergelijke onderdelen die dicht bij het personage van een speler zijn, hebben een grotere kans om speler-bezit te worden.
Assemblagebezit
Als een fysica-gebaseerd mechanisme geen verankerde onderdelen heeft, het instellen van bezit op een assemblage binnen dat mechanisme stelt hetzelfde bezit in voor elke assemblage in het mechanisme.
Als je een enkele assemblage verankert die geen deel uitmaakt van een breder mechanisme, gaat het bezit naar de server, aangezien de server altijd verankerde BaseParts bezit. Bij het onverankeren van dezelfde assemblage gaat de vorige bezitstoestand verloren en wordt het automatisch beheerd door de engine.
Als je een assemblage verankert binnen een breder mechanisme van assemblages, gaat het bezit naar de server, maar het bezit van de andere assemblages blijft ongewijzigd. Het onverankeren van dezelfde assemblage herstelt het eerder ingestelde bezit.
Bezit instellen
In games met complexe fysica-interacties of in gevallen waarin je directe controle moet toewijzen, kun je het bezit instellen via een server-side aanroep naar BasePart:SetNetworkOwner().
Overweeg een voertuig dat een VehicleSeat object heeft voor de bestuurder en een Seat object voor een passagier, waarbij beide zijn opgenomen in de voertuigassemblage. Met de standaardbezitregels, als een spelerpersonage in de Seat (passagier) gaat zitten en vervolgens een andere speler in de VehicleSeat (bestuurder) springt, krijgt de passagier fysiek bezit van het hele voertuig omdat zij als eerste zijn ingestapt. De bestuurder moet enkele netwerkcycli wachten voordat hun invoer wordt herkend en het voertuig zal minder responsief aanvoelen.
De volgende Script lost dit op door handmatig netwerkbezit toe te wijzen aan de bestuurder. Hierin stelt de VehicleSeat zijn Occupant in op de Humanoid die erop zit, zodat het script luistert naar het Changed evenement van de stoel om te detecteren wanneer een speler in de stoel gaat zitten. Wanneer de bestuurder de stoel verlaat, wordt het netwerkbezit van het voertuig teruggezet naar automatisch met 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
-- Verkrijg de speler van het personage
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Reset bezit wanneer de stoel niet bezet is
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)Bezit visualiseren
Om te helpen bij het debuggen van netwerkbezit, kan Studio gekleurde omtrekken rond objecten renderen tijdens het testen.
| Omtrek kleur | Beschrijving | |
|---|---|---|
| (groen) | Jouw client bezit het onderdeel en simuleert het. | |
| (rood) | Het onderdeel bevindt zich in een "bufferzone" waar jouw client het simuleert, maar het nog steeds door iets anders wordt bezeten. Jouw client kan na dit bezit krijgen, of het kan worden afgewezen. | |
| (wit/grijs) | Server of een andere client bezit het onderdeel via automatisch netwerkbezit of door expliciete toewijzing via part:SetNetworkOwner(). | |
| (zwart) | Het onderdeel is door noch de server, noch de client bezeten. Fysica zal niet van toepassing zijn op dit onderdeel. | |
Om de visualisatie van netwerkbezit in te schakelen:
Klik op de visualisatie-opties knop in de rechterbovenhoek van het 3D-venster.

Schakel in het dropdownmenu Netwerkbezitters in.
Beveiligingszorgen
Roblox kan fysica-berekeningen niet verifiëren wanneer een client bezit heeft over een BasePart. Clients kunnen dit misbruiken en slechte gegevens naar de server sturen, zoals het teleporteren van de BasePart, waardoor deze door muren gaat of rondvliegt.
Bovendien zijn BasePart.Touched evenementen gekoppeld aan netwerkbezit, wat betekent dat een client Touched evenementen kan afvuren op een BasePart die het bezit en dit naar de server kan sturen, zelfs als de server het niet ziet aanraken. Bijvoorbeeld, een client kan een zwaard schade toebrengen aan een andere speler aan de andere kant van de kaart door het evenement via scriptinjecties af te vuren, dus het is belangrijk om de geldigheid van dergelijke evenementen die door clients zijn afgevuurd te controleren.
Zie Beveiligingstactieken en Cheat Mitigatie voor gedetailleerde beveiligingstactieken en cheat mitigatie tactieken voor Roblox-games.