Pour prendre en charge des mécanismes physiques complexes tout en visant une expérience de jeu fluide et réactive pour les joueurs, le moteur Roblox physique utilise un système de physique distribuée dans lequel les calculs sont distribués entre le serveur et tous les clients connectés. Dans ce système, le moteur attribue à la propriété du réseau</
Les clients expérimentent plus de interactions physiques réactives avec des parties qu'ils posséder, puisque il n'y a pas de latence de communication avec le serveur. La propriété du réseau améliore également les performances du serveur, car les calculs physiques peuvent être divisés entre les clients individuels, ce qui permet au serveur de prioriser d'autres tâches.
Propriété de BasePart
Par défaut, le serveur conserve la propriété de n'importe quelle BasePart . De plus, le serveur toujours possède une partie ancrée BaseParts et vous ne pouvez pas modifier manuellement leur propriété.
En fonction de la capacité matérielle du client et de la proximité du joueur, Player.Character , le moteur attribue automatiquement la propriété de cette partie au client. Ainsi, les parties fermées à un personnage de joueur sont plus susceptibles de devenir la propriété du client.
Propriété de l'assemblage
Si un mécanisme basé sur la physique n'a pas de parties ancrées, définir la propriété sur une assemblage dans ce mécanisme définit la même propriété pour chaque assemblage dans le mécanisme.
Si vous ancrez un assemblage longe qui n'est pas une partie d'un mécanisme plus large, son propriété appartient au serveur, car le serveur possède toujours un ancrer Class.BasePart|BaseParts . Lors de l'ancrage du même assemblage, son état de propriété précédent est perdu et il revient à la gestion automatique par le moteur.
Si vous fixez un élément d'assemblage dans un mécanisme plus vaste de l'assemblage, sa propriété va au serveur, mais la propriété des autres éléments d'assemblage restera inchangée. Désancrer le même élément d'assemblage réinitialise sa propriété précédemment définie.
Paramètres d'Owner
Dans les expériences avec des interactions physiques complexes ou dans les cas où vous devez attribuer un contrôle direct, vous pouvez configurer la propriété via un appel côté serveur à BasePart:SetNetworkOwner().
Envisagez un véhicule qui a un VehicleSeat objet pour le conducteur et un Seat objet pour un passager, avec les deux inclus dans l'assemblage du véhicule. A
Les correctifs suivants Script corrige cela en attribuant manuellement la propriété du réseau au conducteur. Dans celui-ci, le Class.VehicleSe
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
-- Obtenez le joueur du personnage
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Réinitialiser la propriété lorsque la place n'est pas occupée
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Visibilité de la propriété
Pour aider au débogage des propriétés réseau, Studio peut rendre des contours colorés autour des objets lors du test de jeu.
Couleur de contours | Description | |
---|---|---|
(vert) | Votre client possède la partie et la simule. | |
(rouge) | La partie est dans une zone de «bordure» où votre client la simule, mais elle appartient toujours à quelque chose d'autre. Votre client pourrait obtenir la propriété après cela, ou il pourrait la rejeter. | |
(blanc/gris) | Le serveur ou un autre client possède la partie par le biais de l'automatisation de la propriété du réseau ou par le biais d'une attribution explicite via part:SetNetworkOwner() . |
Pour activer la visualisation de la propriété du réseau :
Cliquez sur le bouton visualisation des options dans le coin supérieur droit de la fenêtre de jeu3D.
Dans le menu déroulant, activez les propriétaires du réseau .
Inquiétudes de sécurité
Roblox ne peut pas vérifier les calculs de physique lorsqu'un client a la propriété sur un BasePart. Les clients peuvent exploiter ceci et envoyer des données mauvaises au serveur, telles que la téléportation du BasePart, ce qui fait passer à travers les murs ou voler autour.
De plus, les événements BasePart.Touched sont liés à la propriété du réseau, ce qui signifie que un client peut déclencher Class.BasePart.Touched|Touched événements sur un Class.BasePart qu'il possède et envoie sur le serveur,
Voir tactiques de sécurité et mitiges de cheat pour des tactiques de sécurité détaillées et des tactiques de mitige de cheat pour les expériences Roblox.