Per supportare meccanismi fisici complessi mentre si punta anche ad un'esperienza fluida e responsiva per i giocatori, il motore Roblox fisica utilizza un sistema di fisica distribuita in cui le calcolazioni vengono distribuite tra il server e tutti i client connessi. All'interno di questo sistema, il motore assegna proprietà di rete I client hanno più interazioni dinamiche con parti che Proprio, poiché non ci sono latenze dalla comunicazione con il Server. La proprietà di rete migliora anche le prestazioni del server poiché le calcolatrici fisiche possono essere sparse tra i singoli client, consentendo al server di priorizzare le altre attività.
Proprietà di BasePart
Per impostazione predefinita, il server conserva la proprietà di qualsiasi BasePart . Inoltre, il server sempre possiede l'ancoraggio BaseParts e non puoi cambiare manualmente la loro proprietà.
In base alla capacità di hardware del client e alla vicinanza del Giocatore, Player.Character , il motore assegna automaticamente la proprietà di quella parte al client. Di conseguenza, le parti vicino al personaggio di un Giocatoresono più probabili diventare di proprietà del client.
Proprietà dell'assemblaggio
Se un meccanismo basato sulla fisica non ha parti ancorate, impostare la proprietà su un'assemblaggio all'interno di quel meccanismo imposta la stessa proprietà per ogniassemblaggio nel meccanismo.
Se ancori un'assemblaggio lontano che non fa parte di un meccanismo più ampio, la sua proprietà passa al Server, poiché il server possiede sempre l'assemblaggio Class.BasePart|BaseParts . Al momento dell'ancoraggio della stessa proprietà, il suo stato di proprietà precedente viene perso e torna all'handling automatico dal motore.
Se ancori un'assemblaggio all'interno di un meccanismo più ampio di assemblaggi, la sua proprietà passa al Server, ma la proprietà delle altre assemblaggi rimane inalterata. L'ancoraggio della stessa proprietà ripristina la sua proprietà precedentemente impostata.
Impostazione della proprietà
In esperienze con interazioni fisiche compluse o in casi in cui è necessario assegnare un controllo diretto, puoi impostare la proprietà attraverso un chiamata lato server a BasePart:SetNetworkOwner() .
Considera un veicolo che ha un oggetto VehicleSeat per il driver e un oggetto Seat per un passeggero, con entrambi inclusi nell'assemblaggio del ve
Il seguente Script risolve questo assegnando manualmente la proprietà della rete al driver. In esso, il VehicleSeat imp
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 seggio non è occupato
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Visualizzazione della proprietà
Per aiutare con il debug del network ownership, Studio può generare contorni colorati attorno agli oggetti durante il playtest.
Colore di contorno | Descrizione | |
---|---|---|
(verde) | Il tuo client possiede la parte e la sta simulando. | |
(rosso) | La parte è all'interno di una " buffer zone " in cui il tuo client la sta simulando, ma è ancora di proprietà di qualcun altro. Il tuo client potrebbe ottenere la proprietà dopo questo, o potrebbe rifiutarla. | |
(bianco/grigio) | Il server o un altro client possiede la parte tramite il network di proprietà automatica o dall'assunzione esplicita attraverso part:SetNetworkOwner() . |
Per abilitare la visualizzazione della proprietà del network:
Click on the opzioni di visualizzazione button in the upper-right corner of the 3D finestra.
Nel menu a discesa, attiva I proprietari della rete .
Punti di sicurezza
Roblox non può verificare i calcoli fisici quando un client ha la proprietà su un BasePart . I client possono approfittarne e inviare dati dannosi al Server, come il teletrasporto del BasePart , rendendolo attraverso i muri o volare intorno.
Inoltre, gli eventi BasePart.Touched sono legati alla proprietà di rete, il che significa che un client può attivare Touched eventi su un BasePart che possiede e invia al Server, anche se il server non lo vede to
Vedi Tattiche di sicurezza e mitigazione dei trucchi per dettagliate tattiche di sicurezza e mitigazione dei trucchi per Roblox esperienze.