Roblox dla deweloperów Unity

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Ta strona zawiera informacje, które pomogą doświadczonym deweloperom Unity rozpocząć pracę z Roblox, w tym podstawową orientację, porównanie koncepcyjne i kluczowe różnice między tymi dwiema platformami.

Zorientuj się

Interfejs użytkownika Unity z oznaczeniem różnych okien i paneli. Interfejs użytkownika Roblox Studio z oznaczeniem różnych okien i paneli.

Okno Hierarchia w Unity i Explorer w Roblox Studio są głównymi oknami do organizowania elementów w scenach 3D:

  • Obydwa pozwalają zarządzać i organizować obiekty (na przykład postacie i zasoby środowiskowe).
  • Obydwa używają struktury drzewa do zdefiniowania relacji rodzic-dziecko między obiektami.

Jednak okno Hierarchia nie ma zdefiniowanej struktury, podczas gdy okno Explorer ma ścisłą strukturę. Może być pomocne myślenie o oknie Explorer jako o połączeniu okien Hierarchia i Projekt w Unity, z folderem Workspace jako najbardziej rozpoznawalnym elementem.

Podobnie, Menadżer zasobów w Roblox Studio i Narzędzie pokrywają się z oknem Projekt w Unity. Menadżer zasobów pozwala zarządzać wszystkimi zasobami w grze, podczas gdy Narzędzie umożliwia dostęp do wszystkich zasobów, które opublikowałeś. Narzędzie umożliwia również przeszukiwanie Sklepu Kreatora pod kątem zasobów z Roblox lub społeczności, podobnie jak Unity Sklep z zasobami.

Różnice filozoficzne

Roblox jest „silnikiem symulacyjnym”, a nie tradycyjnym silnikiem gier. GameObjects w Unity oraz Parts w Roblox są podstawowymi elementami do tworzenia obiektów w środowisku 3D, ale w praktyce są dość różne:

  • Reprezentacja: GameObjects w Unity to wyższy poziom koncepcji dla dowolnego obiektu w scenie, podczas gdy Parts w Roblox są zaprojektowane w celu reprezentowania obiektów fizycznych, takich jak drewniane klocki i plastikowe kule, a nie abstrakcyjnej geometrii, jak obiekty prymitywne w Unity.
  • Fizyka: Aby przeprowadzać symulacje fizyczne w Unity, podłączasz komponenty, takie jak Rigidbody i Collider, do GameObject. W Roblox fizyka jest wbudowana w typ danych Parts; silnik automatycznie obsługuje interakcje.

Różnicę widać od razu, jeśli stworzysz GameObject i Part. GameObject ma jedynie pozycję, rotację i skalę. Part ma te same informacje - plus materiał i kolor, wartości dla współczynnika odbicia i przezroczystości, masę i kształt, i wiele więcej. Przekształcenie Part w coś bardziej przypominającego pusty GameObject oznacza usunięcie wielu wbudowanych właściwości. Z drugiej strony, możesz stworzyć GameObject, który wygląda bardzo podobnie do Part, dodając komponenty MeshFilter, MeshRenderer, Collider i Rigidbody.

Z perspektywy skryptowej GameObject jest najbliższy Instance w Roblox, podstawowej klasie dla wszystkich innych klas Roblox, ale ponieważ nie możesz (i nie powinieneś) tworzyć obiektów typu Instance, to porównanie nie jest zbyt praktyczne.

Inne porównanie to GameObject w Unity vs Model w Roblox. Modele działają jak kontener dla zbioru powiązanych ze sobą części w taki sam sposób, jak możesz ustalić relację rodzic-dziecko między wieloma GameObjects w Unity. Określasz jedną z części modelu jako jego główną część, aby zdefiniować punkt obrotu. Modele przechowują również skrypty, animacje, efekty dźwiękowe, podpowiedzi, ograniczenia, emitery cząsteczek i więcej.

Na przykład GameObject w Unity może mieć komponenty dla ParticleSystem, Physics3D, SpringConstraint i skrypt. W oknie Hierarchii widzisz jeden GameObject o nazwie SpringyFireball. Okno Inspektora pokazuje zbiór komponentów i właściwości.

W Roblox porównywalny model SpringyFireball w oknie Explorer może wyglądać mniej więcej tak:


Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- Script

Filosofia fizyki domyślnej w Roblox rozszerza się na proces budowania modeli 3D. W Roblox łączenie wielu części w zespoły to doskonały sposób na szybkie tworzenie rzeczy, ponieważ Roblox traktuje połączone części jako jeden sztywny obiekt. To podejście nie jest dostępne w Unity.

Zamiast używać standardowych jednostek metrycznych do długości i masy, Roblox używa jednostek nominalnych zwanych studami i Jednostkami Masy Roblox (RMU). Aby uzyskać przybliżone przeliczenia metryczne i zalecenia dotyczące użycia, zobacz Jednostki.

Lokalizacja ma znaczenie

Gry Roblox są domyślnie wieloosobowe, więc Roblox Studio zawiera wiele różnych lokalizacji przechowywania z konkretnym zachowaniem. Aby uzyskać więcej informacji, zobacz czasy działania klient-serwer i organizację obiektów.

LocationDescription
WorkspaceReprezentuje 3D świat doświadczenia. Ta lokalizacja dobrze sprawdza się w skryptach serwera, które są bezpośrednio przypisane do obiektów i kontrolują ich zachowanie.
ReplicatedFirstZawiera obiekty, które replikują się do klienta przed wszystkim innym. Ta lokalizacja jest idealna do absolutnego minimum zestawu obiektów i skryptów klienta potrzebnych do wyświetlenia ekranu ładowania.
ReplicatedStorageZawiera obiekty, które są replikowane zarówno do klienta, jak i do serwera. Ta lokalizacja jest idealna dla ModuleScripts, które chcesz używać zarówno na serwerze, jak i kliencie. LocalScripts nie są uruchamiane z tej lokalizacji, ale Scripts z RunContext ustawionym na Client będą.
ServerScriptServiceZawiera skrypty serwera. Ta lokalizacja jest idealna dla skryptów, które muszą uzyskać dostęp do funkcji lub obiektów po stronie serwera, takich jak logika gry i przechowywanie w chmurze.
ServerStorageZawiera obiekty po stronie serwera. Ta lokalizacja jest idealna dla dużych obiektów, które nie muszą być natychmiast replikowane do klientów, gdy dołączają do doświadczenia. Skrypty nie są uruchamiane z tej lokalizacji, ale możesz przechowywać obiekty ModuleScripts po stronie serwera tutaj.
StarterPlayerStarterCharacterScriptsZawiera LocalScripts, które uruchamiają się, gdy postać się pojawia.
StarterPlayerStarterPlayerScriptsZawiera ogólnego przeznaczenia LocalScripts, które uruchamiają się, gdy gracz dołącza do doświadczenia.
StarterGuiZawiera elementy GUI, które klient wyświetla podczas ładowania doświadczenia. LocalScripts mogą być uruchamiane z tej lokalizacji. Ta lokalizacja jest idealna dla skryptów, które modyfikują interfejs użytkownika doświadczenia, takich jak dodawanie przycisków, menu i okienek dialogowych.
StarterPackZwykle zawiera tylko Tools, ale może również zawierać LocalScripts do ustawiania plecaków graczy.

Skrypty

Roblox experiences support three different types of Luau scripts:

  • Skrypty klienckie

    Te skrypty działają na kliencie, a serwer nie ma wglądu w ich zachowanie. Z powodów związanych z kompatybilnością, skrypty te mogą przybierać formę LocalScripts lub Scripts z wartością RunContext równą Client. Skrypty klienckie zazwyczaj znajdują się w ReplicatedStorage, StarterPlayerScripts lub StarterCharacterScripts.

  • Skrypty serwerowe

    Te skrypty działają na serwerze, a klient nie ma wglądu w ich zachowanie. Skrypty serwerowe mają wartość RunContext równą Server i zazwyczaj znajdują się w ServerScriptService, której zawartość nie jest replikowana do klienta.

  • Skrypty modułowe

    Te skrypty to wielokrotnego użytku fragmenty kodu, które zwracają dokładnie jedną wartość, zazwyczaj funkcję lub tabelę (lub tabelę funkcji). Zamiast duplikować kod w skryptach klienckich i serwerowych, użyj skryptów modułowych do dzielenia się kodem i danymi między oboma. Skrypty modułowe często znajdują się w ReplicatedStorage, ale mogą znajdować się gdzie indziej, jeśli chcesz dzielić się kodem między skryptami po tej samej stronie granicy klient-serwer.

Unity nie ma pojęcia różnych typów skryptów. Jeśli zdecydujesz się stworzyć grę wieloosobową, Unity korzysta ze swoich bibliotek sieciowych, aby wskazać, kiedy GameObject (i jego skrypty) powinny być wyłącznie dla serwera.

W Unity wiele funkcji silnika jest dostępnych poprzez metody MonoBehaviour. Na przykład, aby uruchomić kod przed pętlą renderowania, dodajesz kod do metody Update(). Aby obsługiwać zdarzenia kolizji fizycznych, dodajesz kod do metody OnCollideEnter().

Skrypty Roblox są bardziej oparte na zdarzeniach. Uzyskujesz podobną funkcjonalność, subskrybując usługi i słuchając aktualizacji.

C# i Luau

Do skryptów Unity używa C#. Roblox używa Luau, języka skryptowego wywodzącego się z Lua 5.1.

W porównaniu do C#, Luau jest typowany stopniowo i generalnie ma mniej zawiłą składnię. W większych projektach jednak stopniowe typowanie może wprowadzać kategorie błędów, których unikałyby języki silnie typowane, takie jak C#, więc rozważ włączenie ścisłego sprawdzania typów w skryptach Roblox.

Aby zobaczyć podstawowe różnice w składni między językami skryptowymi, zobacz Porównanie Luau i C#.

Przykład kodu Luau

The following Luau code sample demonstrates how to, after a player equips a fishing pole, listen for user input (in this case, the E key) and call additional functions:


local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Get a module script from ReplicatedStorage that returns a single function
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Assumes that this script is a child of the fishing pole
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Check that the key is down, then call another function
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Only enable the action when the player equips the fishing pole
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Disable the action when the player unequips the fishing pole
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)

Skrypt Roblox może być stosunkowo zwięzły, ponieważ Roblox ma wiele wbudowanych założeń: Player z postacią Humanoid połączoną z serwerem i możliwością wyposażenia Tools. Te założenia nie istnieją w Unity, więc implementacja byłaby bardzo inna.

Zasoby

Unity i Roblox obie wspierają importowanie niestandardowych siatek i modeli w formacie .fbx. Niektóre typy zasobów mogą wymagać specyficznych konfiguracji i ustawień eksportu z zewnętrznego oprogramowania do modelowania. Aby uzyskać więcej informacji, zobacz poniższe strony:

W Unity obiekty importują do katalogu Assets, widocznego w oknie Projekt. W Roblox zasoby importują do Workspace i do Narzędzia lub Menadżera zasobów.

Roblox oferuje również otwarte źródło wtyczka do Blendera, aby uprościć proces importu.

Transformaty

Transformatory Unity i CFrames Robloxa służą podobnym celom w reprezentowaniu 3D transformacji obiektów:

  • Zarówno transformatory, jak i CFrames reprezentują pozycję i obrót obiektu w przestrzeni 3D. Transformatory obejmują skalę, podczas gdy Roblox używa właściwości BasePart.Size, która nie jest częścią CFrame.
  • Oba wspierają mnożenie dla złożonych transformacji i mają wbudowane metody do innych manipulacji.

Współpraca

W Unity współpracujesz z standardowymi systemami kontroli wersji lub płatnymi usługami, takimi jak Unity Version Control.

Pliki Roblox znajdują się w chmurze (choć możesz eksportować kopie), więc Roblox Studio zapewnia wbudowane przepływy pracy współpracy w zakresie jednoczesnej edycji, zarządzania grupami, uprawnień, szkicowania skryptów i więcej. Zobacz Współpraca.

Wtyczki

Podobnie jak narzędzia Unity, Roblox Studio wspiera wtyczki, które mogą uprościć lub dać dodatkową kontrolę nad różnymi aspektami procesu deweloperskiego. Wtyczki są dostępne w Sklepie Kreatora, podobnie jak zasoby, wiele z nich darmowych.

Słownik

UnityRobloxUwagi
ScenaMiejsce
GameObjectPart lub ModelZobacz Różnice filozoficzne.
PrefabPakiet
TransformCFrameCFrame nie zawiera informacji o skali. Zobacz Transformaty.
HierarchiaExplorer
InspektorWłaściwości
Widok scenyWidok 3D
Widok gryWidok 3DWidok przechodzi w widok gry, gdy testujesz swoją grę.
Okno projektuMenadżer zasobów lub Narzędzie
Inspektor terenuEdytor terenu
Punkt odrodzeniaSpawnLocation
KonsolaWyjście
Sklep z zasobamiSklep Kreatora
NakładkiPasek narzędzi
NarzędzieWtyczka
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.