Aby wspierać złożone mechanizmy fizyczne, jednocześnie celując w gładki i reaktywny doświadczenie dla graczy, silnik Roblox fizyki wykorzystuje system dystrybucji fizyki, w którym obliczenia są rozdzielane między serwer i wszystkie połączone klienty. W
Klienci doświadczają bardziej reaktywnej interakcji fizycznej z częściami, które posiadać, ponieważ nie ma opóźnienia od komunikacji z serwerem. Własność sieci poprawia również wydajność serwera, ponieważ kalkulacje fizyczne można rozdzielić pomiędzy poszczególne klienty, umożliwiając serwerowi priorytetowanie innych zadań.
Własność BasePart
Domyślnie serwer zachowuje własność dowolnego BasePart . Ponadto, serwer zawsze posiada przyczepione BaseParts i nie możesz ręcznie zmienić ich własności.
W oparciu o zdolność sprzętu klienta i bliskość gracza Player.Character , silnik automatycznie przydziela własność tego części do klienta. Dzięki temu części blisko gracza mogą być bardziej podatne na zostać własnością gracza.
Własność konstrukcji
Jeśli mechanizm oparty na fizyce nie ma części związanych, ustawienie własności na złożonej konstrukcji w tym mechanizmie ustawia tę samą własność dla każdej z konstrukcji w mechanizmie.
Jeśli przywiązasz samotną złożoną zbiór, która nie jest częścią szerszego mechanizmu, to jej własność przechodzi na serwer, ponieważ serwer zawsze posiada przywiązany BaseParts. Po odłączeniu tego samego zbioru jego poprzedni stan własności zostaje utracony i powróща do automatycznego handlowania przez silnik.
Jeśli związasz jedną konstrukcję w ramach szerszego mechanizmu z konstrukcjami, jej własność przechodzi na serwer, ale własność innych konstrukcji pozostaje niezmieniona. Niezakorzenienie tej samej konstrukcji przywraca wcześniej ustawioną własność.
Ustawienie własności
W doświadczeniach z złożonymi interakcjami fizycznymi lub w przypadkach, w których musisz przypisać bezpośrednią kontrolę, możesz ustawić własność poprzez serwerowe wezwanie do BasePart:SetNetworkOwner() .
Rozważaj pojazd, który ma obiekt VehicleSeat dla kierowcy i obiekt Seat dla pasażera, zarówno włączony w konfiguracji pojazdu
Następujące Script naprawia to poprzez ręczne przypisanie własności sieci dla kierowcy. W nim, Class
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 diagnozowaniu sieci, Studio może renderować kolorowe kontury wokół obiektów podczas testowania.
Kolor konturu | Opis | |
---|---|---|
(zielony) | Twój klient posiada część i ją symuluje. | |
(czerwony) | Część jest w "strefie tamperingu", gdzie twój klient ją symuluje, ale nadal należy do czegoś innego. Twój klient może otrzymać własność po tym, lub może ją odrzucić. | |
(nan) | Serwer lub inny klient posiada część poprzez automatyczne własność sieci lub z wyraźnego przydziału poprzez part:SetNetworkOwner() . |
Aby włączyć wizualizację własności sieci:
Kliknij na przycisk opcji wizualizacji w górnym prawym rogu 3D-okienka.
W menu w menu spadający, włącz Właścicieli sieci .
Zagadnienia bezpieczeństwa
Roblox nie może weryfikować kalkulacji fizycznych, gdy klient ma własność nad BasePart. Klienty mogą wykorzystać to i wysyłać nieprawidłowe dane na serwer, takie jak teleportacja BasePart, która przechodzi przez ściany lub latać.
Dodatkowo, BasePart.Touched wydarzenia są powiązane z własnością sieci, co oznacza, że klient może uruchomić Touched wydarzenia na BasePart, którą posiada i wysy
Zobacz Taktyki bezpieczeństwa i zapobiegania oszustw dla szczegółowych taktyk bezpieczeństwa i zapobiegania oszustw dla doświadczeń Roblox.