Para suportar mecanismos físicos complexos enquanto visa uma experiência suave e responsiva para os jogadores, o motor de física do Roblox utiliza um sistema de física distribuída, onde os cálculos são distribuídos entre o servidor e todos os clientes conectados. Dentro deste sistema, o motor atribui propriedade de rede de BaseParts simulados fisicamente a um cliente ou servidor para dividir o trabalho de calcular a física.
Os clientes experimentam interações físicas mais responsivas com partes que possuem, uma vez que não há latência na comunicação com o servidor. A propriedade de rede também melhora o desempenho do servidor, pois os cálculos físicos podem ser divididos entre clientes individuais, permitindo que o servidor priorize outras tarefas.
Propriedade de BasePart
Por padrão, o servidor retém a propriedade de qualquer BasePart. Além disso, o servidor sempre possui partes BaseParts ancoradas e você não pode alterar manualmente sua propriedade.
Com base na capacidade de hardware de um cliente e na proximidade do personagem do jogador em relação a um BasePart não ancorado, o motor atribui automaticamente a propriedade dessa parte ao cliente. Assim, partes próximas ao personagem de um jogador têm mais probabilidade de se tornarem de propriedade do jogador.
Propriedade de montagem
Se um mecanismo baseado em física não tiver partes ancoradas, definir propriedade em uma montagem dentro desse mecanismo define a mesma propriedade para todas as montagens no mecanismo.
Se você ancorar uma montagem isolada que não faz parte de um mecanismo mais amplo, sua propriedade vai para o servidor, uma vez que o servidor sempre possui partes BaseParts ancoradas. Ao desanclar a mesma montagem, seu estado de propriedade anterior é perdido e ela reverte para o gerenciamento automático pelo motor.
Se você ancorar uma montagem dentro de um mecanismo mais amplo de montagens, sua propriedade vai para o servidor, mas a propriedade das outras montagens permanece inalterada. Desanclar a mesma montagem reverte sua propriedade anteriormente definida.
Definindo propriedade
Em jogos com interações físicas complexas ou em casos onde você precisa atribuir controle direto, você pode definir a propriedade através de uma chamada no lado do servidor para BasePart:SetNetworkOwner().
Considere um veículo que tem um objeto VehicleSeat para o motorista e um objeto Seat para um passageiro, ambos incluídos na montagem do veículo. Com as regras de propriedade padrão, se um personagem jogador senta no Seat (passageiro) e então outro jogador pula no VehicleSeat (motorista), o passageiro ganha a propriedade física de todo o veículo porque entrou primeiro. O motorista terá que esperar vários ciclos de rede antes que sua entrada seja reconhecida e o veículo parecerá menos responsivo.
O seguinte Script corrige isso atribuindo manualmente a propriedade de rede ao motorista. Nele, o VehicleSeat define seu Occupant para o Humanoid sentado nele, então o script escuta o evento Changed do assento para capturar quando um jogador senta no assento. Quando o motorista sai do assento, a propriedade de rede do veículo reverte para o automático com 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
-- Obter o jogador a partir do personagem
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Redefinir propriedade quando o assento estiver desocupado
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Visualizando propriedade
Para ajudar na depuração da propriedade de rede, o Studio pode renderizar contornos coloridos em torno de objetos ao testar.
| Cor do contorno | Descrição | |
|---|---|---|
| (verde) | Seu cliente possui a parte e está simulando-a. | |
| (vermelho) | A parte está dentro de uma "zona de buffer" onde seu cliente está simulando-a, mas ainda é de propriedade de outra coisa. Seu cliente pode obter a propriedade depois disso, ou pode rejeitar. | |
| (branco/cinza) | O servidor ou outro cliente possui a parte através de propriedade de rede automática ou de atribuição explícita através de part:SetNetworkOwner(). | |
| (preto) | A parte não é propriedade nem do servidor nem do cliente. A física não será aplicada a esta parte. | |
Para habilitar a visualização da propriedade de rede:
Clique no botão de opções de visualização no canto superior direito da viewport 3D.

No menu suspenso, ative Proprietários de rede.
Preocupações de segurança
O Roblox não pode verificar cálculos de física quando um cliente possui um BasePart. Os clientes podem explorar isso e enviar dados incorretos para o servidor, como teletransportar o BasePart, fazendo-o passar por paredes ou voar.
Além disso, eventos BasePart.Touched estão ligados à propriedade de rede, o que significa que um cliente pode disparar eventos Touched em um BasePart que possui e enviá-los ao servidor, mesmo que o servidor não veja ele tocar em nada. Por exemplo, um cliente pode fazer uma espada causar dano a outro jogador do outro lado do mapa disparando o evento por meio de injeções de script, portanto é importante verificar a validade de tais eventos disparados pelos clientes.
Veja Táticas de Segurança e Mitigação de Trapaças para táticas detalhadas de segurança e mitigação de trapaças para jogos Roblox.