Propriedade da rede

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Para suportar mecanismos físicos complexos enquanto também busca uma experiência suave e responsiva para os jogadores, o motor de física Roblox utiliza um sistema de física distribuída no qual as operações são distribuídas entre o servidor e todos os clientes conectados.Dentro deste sistema, o motor atribui propriedade de rede de fisicamente simulada a um cliente ou servidor para dividir o trabalho de cálculo de física.

Os clientes experimentam mais interações de física responsivas com partes que possuir, pois não há latência de comunicação com o servidor.A propriedade da rede também melhora o desempenho do servidor porque as operações de física podem ser divididas entre clientes individuais, permitindo que o servidor priorize outras tarefas.

Propriedade da BasePart

Por padrão, o servidor mantém a propriedade de qualquer BasePart.Além disso, o servidor sempre possui ancorado BaseParts e você não pode alterar manualmente sua propriedade.

Com base na capacidade de hardware de um cliente e na proximidade do jogador a uma parte não ancorada , o motor atribui automaticamente a propriedade dessa parte ao cliente.Assim, partes próximas do personagem de um jogador são mais prováveis de se tornarem de propriedade do jogador.

Propriedade de montagem

Se um mecanismo baseado em física não tem partes ancoradas, definir propriedade em uma montagem dentro desse mecanismo define a mesma propriedade para cada montagem no mecanismo.

Se você ancorar uma única montagem que não faz parte de um mecanismo mais amplo, sua propriedade vai para o servidor, pois o servidor sempre possui montagens ancoradas não .Ao desancorar a mesma montagem, seu estado de propriedade anterior é perdido e ela retorna ao manuseio automático pelo motor.

Se você ancorar uma única montagem dentro de um mecanismo mais amplo de montagens, sua propriedade vai para o servidor, mas a propriedade das outras montagens permanece inalterada.Desancorar a mesma montagem reverte sua propriedade previamente definida.

Definindo propriedade

Em experiências com interações de física complexas ou em casos em que você precisa atribuir controle direto, você pode definir a propriedade através de uma chamada do 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 de jogador sentar no Seat (passageiro) e depois outro jogador pular no VehicleSeat (motorista), o passageiro ganha propriedade física de todo o veículo porque eles entraram primeiro.O driver terá que esperar vários ciclos de rede antes que sua entrada seja reconhecida e o veículo se sentirá menos responsivo.

As seguintes correções Script corrigem isso atribuindo manualmente a propriedade da rede ao driver.Nele, o VehicleSeat define seu Occupant para o Humanoid sentado nele, então o script ouve o evento do assento Changed para capturar quando um jogador se senta no assento.Quando o driver deixa o assento, a propriedade da rede do veículo é revertida para automática 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 do personagem
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Redefinir propriedade quando o assento está desocupado
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)

Visualizando propriedade

Para ajudar com a depuração de propriedade de rede, o Studio pode renderizar contornos coloridos ao redor de objetos durante o teste de jogo.

Cor do contornoDescrição
(verde)Seu cliente possui a peça e está simulando-a.
(vermelho)A peça está dentro de uma "zona de buffer" onde o seu cliente está simulando-a, mas ainda pertence a outra coisa.Seu cliente pode obter propriedade após isso, ou pode rejeitar.
(branco/cinza)O servidor ou outro cliente possui a parte através da propriedade de rede automática ou de uma designação explícita através de part:SetNetworkOwner().

Para habilitar a visualização de propriedade de rede:

  1. Clique no botão opções de visualização no canto superior direito do janela3D.

    A close up view of the 3D viewport with the Visualization Options button indicated in the upper-right corner.
  2. No menu suspenso, ative Proprietários de rede .

Preocupações com segurança

O Roblox não pode verificar cálculos de física quando um cliente tem propriedade sobre um BasePart .Os clientes podem explorar isso e enviar dados ruins para o servidor, como teletransportar o BasePart , fazendo-o passar por paredes ou voar.

Além disso, eventos são vinculados à propriedade da rede, significando que um cliente pode disparar eventos em uma rede que possui e enviá-los ao servidor, mesmo que o servidor não os veja tocar nada.Por exemplo, um cliente pode causar dano de espada a outro jogador através do mapa atirando o evento através de injeções de script, então é importante verificar a validade de tais eventos disparados por clientes.

Veja Táticas de Segurança e Mitigação de Engano para táticas de segurança detalhadas e táticas de mitigação de engano para experiências do Roblox.