Para apoyar mecanismos físicos complejos mientras se apunta a una experiencia de jugadores sin problemas y responsiva, el motor de Roblox física utiliza un sistema de física distribuida en el que las computadoras se distribuyen entre el servidor y todos los clientes conectados. En este sistema, el motor asigna propiedad de red a
Los clientes experimentan más interacciones de física responsivas con partes que en posesión, ya que no hay latencia de comunicación con el servidor. La propiedad de la red también mejora el rendimiento del servidor porque las cálculos de física se pueden dividir entre los clientes individuales, lo que permite al servidor priorizar otras tareas.
Propiedad de BasePart
Por defecto, el servidor retiene la propiedad de cualquier BasePart . Además, el servidor siempre posee un enlace BaseParts y no puede cambiar manualmente su propiedad.
En función de la capacidad de hardware del cliente y la proximidad del jugador a un Player.Character no anclado, el motor asigna automáticamente la propiedad de esa parte al cliente. Por lo tanto, las partes cerca del personaje de un jugador son más probable que se hagan propiedad del cliente.
Propiedad de la Asamblea
Si un mecanismo basado en física no tiene partes ancladas, establecer propiedad en un ensamblaje dentro de ese mecanismo establece la propiedad para cada ensamblaje en el mecanismo.
Si anclas una sola instalación que no es parte de un mecanismo más amplio, su propiedad se transfiere al servidor, ya que el servidor siempre posee un anclado Class.BasePart|BaseParts . Al desancorar la misma instalación, se pierde su estado de propiedad anterior y se restablece a la gestión automática por el motor.
Si anclas una instalación dentro de un mecanismo más amplio de instalaciones, su propiedad va al servidor, pero la propiedad de las otras instalaciones no cambia. Desanclar la misma instalación revertirá su propiedad previamente establecida.
Configurar propiedad
En experiencias con interacciones físicas complejas o en casos en los que se necesita asignar un control directo, puede establecer la propiedad a través de una llamada del lado del servidor para BasePart:SetNetworkOwner() .
Considera un vehículo que tiene un objeto VehicleSeat para el conductor y un objeto Seat para el pasajero, con ambos incluidos en la construcción del vehículo. Con las
Las siguientes Script correcciones esto asignando la propiedad de la red al conductor. En él, el VehicleSeat establece su
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
-- Obtener el jugador del personaje
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Restablecer la propiedad cuando el asiento no está ocupado
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Visualizar propiedad
Para ayudar con el diagnóstico de propiedad de la red, Studio puede renderizar contornos de colores alrededor de los objetos durante el playtest.
Color de contorno | Descripción | |
---|---|---|
(verde) | Su cliente posee la parte y la está simulando. | |
rojo | La parte está dentro de una "zona de tamano" donde tu cliente la está simulando, pero sigue siendo propiedad de algo más. Tu cliente podría obtener propiedad después de esto, o puede rechazarla. | |
(blanco/gris) | El servidor o otro cliente posee la parte a través de la propiedad de red automática o a través de la asignación explícita a través de part:SetNetworkOwner() . |
Para habilitar la visualización de propiedad de la red:
Haga clic en el botón opciones de visualización en la esquina superior derecha de la ventana de visualización 3D.
En el menú desplegable, seleccione Propietarios de la red .
Problemas de Seguridad
Roblox no puede verificar los cálculos de física cuando un cliente tiene propiedad sobre un BasePart . Los clientes pueden explotar esto y enviar datos malos al servidor, como teletransportar el BasePart , haciéndolo pasar a través de paredes o volar alrededor.
Además, los eventos BasePart.Touched están vinculados a la propiedad de la servidor, lo que significa que un cliente puede disparar los eventos Touched en un BasePart que posee y envía al servid
Vea Tácticas de seguridad y mitigación de cheat para obtener detalles de tácticas de seguridad y mitigación de cheat para las experiencias de Roblox.