Para apoiar mecanismos físicos complexos, ao mesmo tempo que também visa uma experiência de suavidade e responsividade para os jogadores, o motor Roblox física utiliza um sistema de física distribuída no qual as cálculos são distribuídos entre o servidor e todos os clientes conectados. Dentro deste sistema, o motor atribui a propried
Os clientes experimentam mais interações de física responsivas com peças que eles possuir, já que não há latência da comunicação com o servidor. A propriedade da rede também melhora a performance do servidor, pois as cálculos de física podem ser divididos entre os clientes individuais, permitindo que o servidor priorize outras tarefas.
Propriedade da Base
Por padrão, o servidor reté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 do cliente e na proximidade do jogador, o motor atribui automaticamente a propriedade dessa parte ao cliente. Assim, peças perto do personagem de um jogador são mais prováveis de se tornar propriedade do cliente.
Propriedade da Montagem
Se um mecanismo baseado em física não tiver peças ancoradas, definir propriedade em uma montagem dentro desse mecanismo define a mesma propriedade para cada montagem no mecanismo.
Se você ancorar uma montagem solitária que não é parte de um mecanismo mais amplo, sua propriedade é transferida para o servidor, já que o servidor sempre possui propriedade ancorada Class.BasePart|BaseParts . Ao desancorar a mesma montagem, seu estado de propriedade anterior é perdido e ele é revertido para o controle automático pelo motor.
Se você ancorar uma montagem dentro de um mecanismo mais amplo de montagens, sua propriedade passa para o servidor, mas a propriedade das outras montagens permanece não alterada. Desancorar a mesma montagem reverte sua propriedade previamente definida.
Configurando Propriedade
Em experiências com interações físicas complexas ou em casos em que você precisa atribuir controle direto, você pode configurar a propriedade através de uma chamada do lado do servidor para BasePart:SetNetworkOwner() .
Considerar um veículo que tem um VehicleSeat objeto para o motorista e um Seat objeto para um passeio, com ambos incluídos na montagem do veículo. Com as
As seguintes correções de Script corrigem isso atribuindo propriedade de rede ao motorista. In it, the VehicleSeat sets its
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 a propriedade quando o assento não estiver ocioso
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Visualizando Propriedade
Para ajudar com a depuração de propriedade da rede, o Studio pode renderizar contornos coloridos em torno de objetos quando testar.
Cor de contorno | Descrição | |
---|---|---|
(verde) | Seu cliente possui a peça e está simulando-a. | |
(vermelho) | A peça está dentro de uma "zona de buffer" onde seu cliente está simulando-a, mas ainda é de propriedade de outra pessoa. Seu cliente pode obter propriedade depois disso, ou pode rejeitar. | |
(branco/cinza) | O servidor ou outro cliente possui a peça por meio de propriedade de rede automática ou de atribuição explícita através de part:SetNetworkOwner() . |
Para habilitar a visualização de propriedade de rede:
Clique no botão visualização de opções no canto superior direito da janela de visualização 3D.
No menu suspenso, ative Proprietários da Rede .
Considereções de 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 ao redor.
Além disso, BasePart.Touched eventos são vinculados à propriedade da rede, o que significa que um cliente pode disparar Class.BasePart.Touched|Touched eventos em um Class.BasePart que ele possui e envia para o servidor, mesmo
Veja Táticas de Segurança e Mitigação de Cheats para detalhes de táticas de segurança e mitigação de cheats para experiências Roblox.