Netzwerkbesitz

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Um komplexe physikalische Mechanismen zu unterstützen und gleichzeitig ein reibungsloses und reaktives Erlebnis für Spieler zu gewährleisten, nutzt die Roblox-Physik-Engine ein verteiltes Physiksystem , in dem Berechnungen zwischen dem Server und allen verbundenen Clients verteilt werden.Innerhalb dieses Systems weist die Engine Netzwerkbesitz von physisch simulierten BaseParts an einen Client oder Server zu, um die Arbeit der Berechnung von Physik zu teilen.

Clients erleben effizientere physikalische Interaktionen mit Teilen, die sie besitzen, da es keine Verzögerung durch die Kommunikation mit dem Server gibt.Die Netzwerkbesitz verbessert auch die Serverleistung, da Physikberechnungen unter einzelnen Clients aufgeteilt werden können, wodurch der Server andere Aufgaben priorisieren kann.

Besitz von Basisteilen

Standardmäßig behält der Server die Eigentumsrechte an jedem BasePart.Zusätzlich besitzt der Server immer angeankerte und du kannst ihre Eigentümerschaft nicht manuell ändern.

Basierend auf der Hardwarekapazität des Clients und der Nähe des Spieler:inzu einem unverankerten , weist die Engine automatisch das Eigentum an diesem Teil dem Client zu.Teile, die der Charakter eines Spieler:innahe sind, werden wahrscheinlicher Spieler-Eigentum.

Versammlungseigentum

Wenn ein physikbasierter Mechanismus keine verankerten Teile hat, legt das Festlegen der Eigentümerschaft auf einer Montagemaschine innerhalb dieses Mechanismus die gleiche Eigentümerschaft für jede Montagemaschine im Mechanismus fest.

Wenn du eine einsame Montagemaschine ankerst, die nicht Teil eines breiteren Mechanismus ist , geht ihr Eigentum an den Server, da der Server immer angeankerte BaseParts besitzt.Wenn die gleiche Montagemaschine nicht verankert wird, geht ihr früherer Besitzstatus verloren und sie kehrt zum automatischen Handling durch die Engine zurück.

Wenn du eine Montagemaschine innerhalb eines breiteren Montagemaschinenmechanismus ankerst, geht deren Eigentum an den Server, aber das Eigentum der anderen Montagemaschinen bleibt unverändert.Das Abankern derselben Zusammenstellung kehrt ihre zuvor festgelegte Eigentümerschaft zurück.

Eigentum einstellen

In Erlebnissen mit komplexen physikalischen Interaktionen oder in Fällen, in denen Sie direkte Kontrolle zuweisen müssen, können Sie die Eigentumsverwaltung durch einen Serveraufruf auf BasePart:SetNetworkOwner() festlegen.

Betrachte ein Fahrzeug, das ein VehicleSeat-Objekt für den Fahrer und ein Seat-Objekt für einen Passagier hat, beide in der Fahrzeugmontage enthalten.Mit den Standard-Besitzregeln, wenn ein Spielercharakter in der Seat (Passagier) sitzt und dann ein anderer Spieler in die VehicleSeat (Fahrer) springt, gewinnt der Passagier physische Besitz des gesamten Fahrzeugs, weil sie zuerst eingetreten sind.Der Fahrer muss mehrere Netzwerkzyklen warten, bevor seine Eingabe erkannt wird und das Fahrzeug weniger reaktionsfähig fühlt.

Die folgenden Script Korrekturen beheben dies, indem sie dem Fahrer manuell Netzwerkbesitz zuweisen.Darin legt das seine auf den Sitz, so dass das Skript auf das Sitzereignis des Sitzes höört, wenn ein Spieler sich auf den Sitz setzt.Wenn der Fahrer den Sitz verlässt, wird die Netzwerkbesitz des Fahrzeugs auf automatisch zurückgestuft mit 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
-- Holen Sie den Spieler vom Charakter
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Besitz zurücksetzen, wenn der Sitz unbesetzt ist
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)

Besitz visualisieren

Um beim Netzwerkbesitz-Debugging zu helfen, kann Studio farbige Umrisse um Objekte rendern, wenn sie getestet werden.

UmrissfarbeBeschreibung
(grün)Dein Client besitzt das Teil und simuliert es.
(rot)Das Teil befindet sich in einer "Pufferzone", in der dein Client es simuliert, aber es gehört immer noch etwas anderem.Dein Client könnte nach diesem Eigentum erhalten oder es ablehnen.
(weiß/grau)Server oder ein anderer Client besitzt das Teil durch automatisches Netzwerkbesitz oder durch explizite Zuweisung durch part:SetNetworkOwner()

Um die Netzwerkbesitzvisualisierung zu aktivieren:

  1. Klicken Sie auf die Visualisierungsoptionen Schaltfläche in der oberen rechten Ecke des 3D-Ansichtsfensters.

    A close up view of the 3D viewport with the Visualization Options button indicated in the upper-right corner.
  2. Im Dropdown-Menü wechsle auf Netzwerkbesitzer .

Sicherheitsbedenken

Roblox kann die Physikberechnungen nicht überprüfen, wenn ein Client Eigentum über ein BasePart hat.Clients können dies ausnutzen und schlechte Daten an den Server senden, wie das Teleportieren von BasePart, wodurch sie durch Wände gehen oder herumfliegen.

Zusätzlich sind BasePart.Touched mit dem Netzwerkbesitz verbunden, was bedeutet, dass ein Client Touched auf einem BasePart abfeuern kann, selbst wenn der Server es nicht berührt, und sie an den Server senden, auch wenn der Server es nicht berührt.Zum Beispiel kann ein Client einen Schwertschaden an einem anderen Spieler auf der Karte verursachen, indem er das Ereignis durch Skript-Injektionen feuert, so ist es wichtig, die Gültigkeit solcher Ereignisse, die von Clients abgefeuert werden, zu überprüfen.

Siehe Sicherheitstaktiken und Cheat-Minderungsmaßnahmen für detaillierte Sicherheitstaktiken und Cheat-Minderungsmaßnahmen für Roblox-Erlebnisse.