Per supportare complessi meccanismi fisici mentre si punta anche a un'esperienza liscia e reattiva per i giocatori, il motore di fisica Roblox utilizza un sistema di fisica distribuita in cui le operazioni vengono distribuite tra il server e tutti i client connessi.All'interno di questo sistema, il motore assegna la proprietà di rete di fisicamente simulata a un client o a un server per dividere il lavoro di calcolo della fisica.
I clienti sperimentano interazioni fisiche più reattive con parti che Proprio, poiché non c'è alcun ritardo dalla comunicazione con il Server.Anche la proprietà della rete migliora le prestazioni del server perché le calcolazioni fisiche possono essere suddivise tra i singoli client, consentendo al server di dare priorità ad altre attività.
Proprietà della BasePart
Per impostazione predefinita, il server mantiene la proprietà di qualsiasi BasePart .Inoltre, il server ha sempre un ancoraggio e non puoi cambiarne manualmente la proprietà.
In base alla capacità hardware del client e alla vicinanza del Giocatorea una parte non ancorata , il motore assegna automaticamente la proprietà di quella parte al client.Pertanto, le parti vicine al personaggio di un Giocatoresono più probabili di diventare di proprietà del giocatore.
Proprietà di assemblaggio
Se un meccanismo basato sulla fisica non ha parti ancorate, Impostare la proprietà su un assemblaggio all'interno di tale meccanismo imposta la stessa proprietà per ogni assemblaggio nel meccanismo.
Se ancori un'assemblaggio solitario che non fa parte di un meccanismo più ampio, la sua proprietà va al Server, poiché il server possiede sempre l'ancoraggio .Dopo l'allineamento dello stesso assemblaggio, viene perso lo stato di proprietà precedente e si ripristina l'elaborazione automatica da parte del motore.
Se ancori una raccolta all'interno di un meccanismo più ampio di raccolte, la sua proprietà va al Server, ma la proprietà delle altre raccolte rimane invariata.L'ancoraggio dello stesso assemblaggio ripristina la proprietà precedentemente impostata.
Impostazione della proprietà
Nelle esperienze con interazioni fisiche complesse o nei casi in cui è necessario assegnare un controllo diretto, puoi impostare la proprietà attraverso una chiamata lato server a BasePart:SetNetworkOwner() .
Considera un veicolo che ha un oggetto VehicleSeat per il conducente e un oggetto Seat per un passeggero, entrambi inclusi nell'assemblaggio del veicolo.Con le regole di proprietà predefinite, se un personaggio del giocatore si siede nel Seat (passenger) e poi un altro giocatore salta nel VehicleSeat (driver), il passenger guadagna la proprietà fisica di tutto il veicolo perché è entrato per primo.Il driver dovrà aspettare diversi cicli di rete prima che il loro input venga riconosciuto e il veicolo si sentirà meno reattivo.
Le seguenti Script correzioni risolvono questo problema assegnando manualmente la proprietà della rete al driver.In esso, il VehicleSeat imposta il suo Occupant a quello Humanoid seduto su di esso, quindi lo script ascolta l'evento del sedile Changed per catturare quando un giocatore si siede nel sedile.Quando il driver lascia il sedile, la proprietà della rete del veicolo torna all'automatico 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
-- Ottieni il giocatore dal personaggio
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Ripristina la proprietà quando il sedile è vuoto
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Visualizzazione della proprietà
Per aiutare con la diagnosi dell'appartenenza alla rete, Studio può rendere linee colorate intorno agli oggetti durante il test del gioco.
Colore dell'outline | Descrizione | |
---|---|---|
(verde) | Il tuo client possiede la parte e la sta simulando. | |
(rosso) | La parte è all'interno di una "zona di buffer" in cui il tuo client la sta simulando ma è ancora di proprietà di qualcos'altro.Il tuo cliente potrebbe ottenere la proprietà dopo questo, o potrebbe rifiutare. | |
(bianco/grigio) | Il server o un altro client possiede la parte attraverso la proprietà di rete automatica o da assegnazione esplicita attraverso part:SetNetworkOwner() . |
Per abilitare la visualizzazione della proprietà della rete:
Fai clic sul pulsante opzioni di visualizzazione nell'angolo superiore destro del finestra3D.
Nel menu a discesa, attiva Proprietari di rete .
Preoccupazioni per la sicurezza
Roblox non può verificare i calcoli fisici quando un client ha la proprietà su un BasePart .I clienti possono sfruttare questo e inviare dati cattivi al Server, come teletrasportare il BasePart , facendolo passare attraverso le pareti o volare.
Inoltre, gli eventi sono legati alla proprietà della rete, il che significa che un client può inviare eventi su una rete di proprietà e inviarli al Server, anche se il server non lo vede toccare nulla.Ad esempio, un client può infliggere danni da spada a un altro giocatore attraverso la mappa sparando l'evento attraverso iniezioni di script, quindi è importante controllare la validità di tali eventi sparati dai client.
Vedi Tattiche di sicurezza e mitigazione di truffe per dettagliate tattiche di sicurezza e tattiche di mitigazione delle truffe per le esperienze Roblox.