Aby wspierać złożone mechanizmy fizyczne, jednocześnie dążąc do płynnego i reaktywnego doświadczenia dla graczy, silnik fizyczny Roblox wykorzystuje system rozproszonej fizyki , w którym obliczenia są rozdzielane między serwerem a wszystkimi połączonymi klientami.W ramach tego systemu silnik przypisuje własność sieciową fizycznie symulowanej sieci do klienta lub serwera, aby podzielić pracę obliczania fizyki.
Klienci doświadczają bardziej reaktywnych interakcji fizycznych z częściami, które posiadać, ponieważ nie ma opóźnień z komunikacji z serwerem.Własność sieci poprawia również wydajność serwera, ponieważ obliczenia fizyczne mogą być rozdzielone między poszczególnych klientów, umożliwiając serwerowi priorytetowanie innych zadań.
Własność części bazowej
Domyślnie serwer zachowuje własność każdego BasePart.Ponadto serwer zawsze posiada zakotwiczone BaseParts i nie możesz ręcznie zmienić ich własności.
W oparciu o zdolność sprzętu klienta i bliskość gracza do niezakotwiczonej części , silnik automatycznie przypisuje właścicielowi tę część klientowi.W związku z tym części zbliżone do postaci gracza są bardziej prawdopodobne, aby stać się własnością gracza.
Własność zgromadzenia
Jeśli mechanizm oparty na fizyce nie ma zakotwiczonej części, ustawienie własności na zgromadzeniu wewnątrz tego mechanizmu ustawia tę samą własność dla każdego zgromadzenia w mechanizmie.
Jeśli zakotwisz pojedynczą asemblaż, która nie jest częścią szerszego mechanizmu, jej własność przechodzi na serwer, ponieważ serwer zawsze posiada zakotwiczone .Po odłączeniu tej samej zbiórki jej poprzedni stan własności zostaje utracony i wraca do automatycznego przetwarzania przez silnik.
Jeśli zakotwisz jedną zbiórkę w szerszym mechanizmie zbiórek, jej własność przechodzi na serwer, ale własność pozostałych zbiórek pozostaje niezmieniona.Odłączenie tej samej złożenia odwraca wcześniej ustawione własności.
Ustawienie własności
W przypadkach doświadczeń z złożonymi interakcjami fizycznymi lub w przypadkach, w których musisz przypisać bezpośrednią kontrolę, możesz ustawić własność za pośrednictwem połączenia stronnego do BasePart:SetNetworkOwner().
Rozważ pojazd, który ma obiekt VehicleSeat dla kierowcy i obiekt Seat dla pasażera, oba włączone do montażu pojazdu.Z domyślnymi zasadami własności, jeśli postać gracza siedzi w Seat (pasażer) a następnie inny gracz wskakuje do VehicleSeat (kierowca), pasażer uzyskuje fizyczną własność całego pojazdu, ponieważ wszedł jako pierwszy.Kierowca będzie musiał poczekać kilka cykli sieciowych, zanim jego wejście zostanie rozpoznane, a pojazd będzie czuł się mniej reaktywny.
Następujące Script naprawia to ręcznie przypisując własność sieci kierowcy.W nim, VehicleSeat ustawia swoje Occupant na siedzącym na nim Humanoid, więc skrypt słucha wydarzenia Changed siedzenia, aby złapać, gdy gracz siedzi na siedzeniu.Gdy kierowca opuści siedzenie, własność sieci pojazdu powraca do automatycznej z 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
-- Zdobądź gracza z postaci
local player = Players:GetPlayerFromCharacter(humanoid.Parent)
if player then
vehicleSeat:SetNetworkOwner(player)
end
else
-- Zresetuj własność, gdy siedzenie jest niezajęte
vehicleSeat:SetNetworkOwnershipAuto()
end
end
end)
Wizualizacja własności
Aby pomóc w debugowaniu własności sieciowych, Studio może renderować kolorowe obwody wokół obiektów podczas testowania.
Kolor konturu | Opis | |
---|---|---|
(zielony) | Twój klient posiada część i symuluje ją. | |
(czerwony) | Część znajduje się w "strefie buforowej", gdzie twój klient ją symuluje, ale nadal należy do czegoś innego.Twój klient może uzyskać własność po tym, albo może odrzucić. | |
(biały/szary) | Serwer lub inny klient posiada część poprzez automatyczne własność sieci lub poprzez wyraźne przypisanie przez part:SetNetworkOwner() . |
Aby włączyć wizualizację własności sieci:
Kliknij przycisk opcje wizualizacji w prawym górnym rogu widoku 3D.
W menu rozwijanym przełącz właścicieli sieci .
Obawy związane z bezpieczeństwem
Roblox nie może weryfikować obliczeń fizycznych, gdy klient posiada własność nad BasePart .Klienci mogą to wykorzystać i wysłać złe dane na serwer, takie jak teleportowanie BasePart, przez co przechodzą przez ściany lub latają.
Ponadto wydarzenia są powiązane z własnością sieci, co oznacza, że klient może wystrzelić wydarzenia na sieci, które posiada i wysłać je na serwer, nawet jeśli serwer nie widzi, że dotkną czegokolwiek.Na przykład klient może zadać obrażenia mieczem innemu graczowi na mapie, wystrzelając wydarzenie za pomocą wstrzykiwania skryptów, więc ważne jest sprawdzenie ważności takich wydarzeń wystrzelanych przez klientów.
Zobacz Taktyki bezpieczeństwa i łagodzenie oszustw na szczegółowe taktyki bezpieczeństwa i taktyki łagodzenia oszustw dla doświadczeń Roblox.