Propiedad de red

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Para soportar mecanismos físicos complejos y a la vez buscar una experiencia suave y responsiva para los jugadores, el motor de física de Roblox utiliza un sistema de física distribuida en el que los cálculos se distribuyen entre el servidor y todos los clientes conectados. Dentro de este sistema, el motor asigna la propiedad de red de BaseParts simulados físicamente a un cliente o al servidor para dividir el trabajo de cálculo de física.

Los clientes experimentan interacciones físicas más responsivas con las partes que poseen, ya que no hay latencia por la comunicación con el servidor. La propiedad de red también mejora el rendimiento del servidor porque los cálculos de física se pueden dividir entre los clientes individuales, permitiendo que el servidor priorice otras tareas.

Propiedad de BasePart

Por defecto, el servidor retiene la propiedad de cualquier BasePart. Además, el servidor siempre posee BaseParts anclados y no se puede cambiar manualmente su propiedad.

Basado en la capacidad de hardware de un cliente y la proximidad del Player.Character del jugador a un BasePart no anclado, el motor asigna automáticamente la propiedad de esa parte al cliente. Así, las partes cercanas al personaje de un jugador tienen más probabilidades de convertirse en parte de su propiedad.

Propiedad de ensamblaje

Si un mecanismo basado en física no tiene partes ancladas, establecer la propiedad en un ensamblaje dentro de ese mecanismo establece la misma propiedad para cada ensamblaje en el mecanismo.

Si anclas un ensamblaje solitario que no es parte de un mecanismo más amplio, su propiedad va al servidor, ya que el servidor siempre posee BaseParts anclados. Al desanclar el mismo ensamblaje, se pierde su estado de propiedad anterior y vuelve a ser gestionado automáticamente por el motor.

Si anclas un ensamblaje dentro de un mecanismo más amplio de ensamblajes, su propiedad va al servidor, pero la propiedad de los otros ensamblajes permanece sin cambios. Desanclar el mismo ensamblaje revierte su propiedad establecida anteriormente.

Estableciendo la propiedad

En juegos con interacciones físicas complejas o en casos donde necesitas asignar control directo, puedes establecer la propiedad a través de una llamada del lado del servidor a BasePart:SetNetworkOwner().

Considera un vehículo que tiene un objeto VehicleSeat para el conductor y un objeto Seat para un pasajero, ambos incluidos en el ensamblaje del vehículo. Con las reglas de propiedad por defecto, si un personaje de jugador se sienta en el Seat (pasajero) y luego otro jugador salta al VehicleSeat (conductor), el pasajero gana la propiedad física de todo el vehículo porque fue el primero en entrar. El conductor tendrá que esperar varios ciclos de red antes de que su entrada sea reconocida y el vehículo se sentirá menos receptivo.

El siguiente Script soluciona esto al asignar manualmente la propiedad de red al conductor. En él, el VehicleSeat establece su Occupant al Humanoid que está sentado en él, por lo que el script escucha el evento Changed del asiento para capturar cuando un jugador se sienta en el asiento. Cuando el conductor abandona el asiento, la propiedad de red del vehículo se revierte a la gestión automática con 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
-- Obtener al 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)

Visualizando la propiedad

Para ayudar con la depuración de la propiedad de red, Studio puede renderizar contornos coloreados alrededor de los objetos al probar el juego.

Color del contornoDescripción
(verde)Tu cliente posee la parte y la está simulando.
(rojo)La parte está dentro de una "zona de búfer" donde tu cliente la está simulando, pero todavía está en posesión de otra cosa. Tu cliente podría obtener la propiedad después de esto, o podría rechazarla.

(blanco/gris)El servidor u otro cliente posee la parte a través de la propiedad de red automática o por asignación explícita a través de part:SetNetworkOwner().
(negro)La parte no es propiedad ni del servidor ni del cliente. La física no se aplicará a esta parte.

Para habilitar la visualización de la propiedad de red:

  1. Haz clic en el botón de opciones de visualización en la esquina superior derecha de la ventana 3D.

    Una vista cercana de la ventana 3D con el botón de Opciones de Visualización indicado en la esquina superior derecha.
  2. En el menú desplegable, activa Propietarios de 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 incorrectos al servidor, como teletransportar el BasePart, hacerlo atravesar paredes o volar alrededor.

Además, los eventos BasePart.Touched están ligados a la propiedad de red, lo que significa que un cliente puede disparar eventos Touched en un BasePart que posee y enviarlo al servidor, incluso si el servidor no lo ve tocar nada. Por ejemplo, un cliente puede hacer que una espada cause daño a otro jugador al otro lado del mapa al disparar el evento a través de inyecciones de scripts, por lo que es importante verificar la validez de tales eventos disparados por los clientes.

Consulta Tácticas de seguridad y mitigación de trampas para obtener tácticas de seguridad detalladas y tácticas de mitigación de trampas para juegos de Roblox.

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.