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


Okno Hierarchia w Unity i Eksplorator w Roblox Studio to główne okna do organizowania elementów w scenach 3D:
- Oba pozwalają zarządzać i organizować obiekty (na przykład postacie i zasoby środowiskowe).
- Oba używają struktury drzewa do relacji rodzic-dziecko między obiektami.
Jednak okno Hierarchia nie ma zdefiniowanej struktury, podczas gdy okno Eksplorator ma ścisłą strukturę. Może pomóc myślenie o oknie Eksplorator jako połączeniu okien Hierarchia i Projekt w Unity, z folderem Workspace jako najbardziej rozpoznawalnym elementem.
Podobnie, Menedżer zasobów w Roblox Studio i Skrzynka narzędziowa pokrywają się z oknem Projekt w Unity. Menedżer zasobów pozwala zarządzać wszystkimi zasobami w grze, podczas gdy Skrzynka narzędziowa umożliwia dostęp do wszelkich zasobów, które opublikowałeś. Skrzynka narzędziowa pozwala również przeszukiwać Sklep twórców w poszukiwaniu zasobów z Roblox lub społeczności, podobnie jak Sklep zasobów w Unity.
Różnice filozoficzne
Roblox jest "silnikiem symulacyjnym", a nie tradycyjnym silnikiem gier. GameObjects w Unity i Parts w Roblox służą jako podstawowe elementy do tworzenia obiektów w środowisku 3D, ale w praktyce są dość różne:
- Reprezentacja: GameObjects w Unity to wyższy poziom pojęcia dla dowolnego obiektu w scenie, podczas gdy Parts w Roblox są zaprojektowane do 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, do GameObject dołącza się komponenty, takie jak Rigidbody i Collider. 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 tylko pozycję, rotację i skalę. Part ma te same informacje — plus materiał i kolor, wartości dla 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 do niego komponenty MeshFilter, MeshRenderer, Collider i Rigidbody.
Z perspektywy skryptowej, GameObject jest najbardziej podobny do Instance w Roblox, podstawowej klasy dla wszystkich innych klas Roblox, ale ponieważ nie możesz (i nie możesz) tworzyć obiektów typu Instance, porównanie nie jest szczególnie praktyczne.
Innym porównaniem jest GameObject w Unity do Model w Roblox. Modele działają jako kontener dla zbioru połączonych części w ten sam sposób, w jaki możesz ustanowić 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 inne.
Na przykład, GameObject w Unity może mieć komponenty dla ParticleSystem, Physics3D, SpringConstraint i skrypt. W oknie Hierarchia widzisz pojedynczy GameObject nazwany SpringyFireball. Okno Inspektora pokazuje zbiór komponentów i właściwości.
W Roblox porównywalny model SpringyFireball w oknie Eksplorator może wyglądać mniej więcej tak:
Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- ScriptFilozofia fizyki domyślnej w Roblox rozciąga się na proces budowania modeli 3D. W Roblox łączenie wielu części w zespół to doskonały sposób na szybkie budowanie 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 dla długości i masy, Roblox używa jednostek nominalnych zwanych studami i jednostkami masy Roblox (RMU). Aby uzyskać przybliżone konwersje 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 określonymi zachowaniami. Aby uzyskać więcej informacji, zobacz czas wykonywania klient-serwer i organizację obiektów.
| Location | Description |
|---|---|
| Workspace | Reprezentuje 3D świat gry. Może uruchamiać skrypty serwera, które są bezpośrednio przypięte do obiektów i kontrolują ich zachowanie. |
| ReplicatedFirst | Zawiera obiekty, które są replikowane do klienta przed wszystkim innym. Ta lokalizacja jest idealna dla absolutnie minimalnego zestawu obiektów i skryptów klienckich niezbędnych do wyświetlenia ekranu ładowania. |
| ReplicatedStorage | Zawiera obiekty, które są replikowane zarówno do klienta, jak i do serwera. Ta lokalizacja jest idealna dla Skryptów z KontekstemUruchomienia Klient, klienckich ModułówSkryptów oraz ModułówSkryptów, które chcesz używać zarówno na serwerze, jak i kliencie. SkryptyLokalne nie uruchamiają się z tej lokalizacji. |
| ServerScriptService | Zawiera 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. |
| ServerStorage | Zawiera 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 gry. Skrypty nie uruchamiają się z tej lokalizacji, ale możesz przechowywać tutaj moduły skryptów po stronie serwera ModułySkryptów. |
| StarterPlayer ⟩ StarterCharacterScripts | Zawiera SkryptyLokalne, które uruchamiają się, gdy postać się pojawia. |
| StarterPlayer ⟩ StarterPlayerScripts | Zawiera SkryptyLokalne, które uruchamiają się, gdy gracz dołącza do gry. |
| StarterGui | Zawiera elementy GUI, które klient wyświetla, gdy ładuje grę. SkryptyLokalne mogą uruchamiać się z tej lokalizacji. |
| StarterPack | Zazwyczaj zawiera tylko Narzędzia, ale może również zawierać SkryptyLokalne do konfigurowania plecaków graczy. |
Skryptowanie
Roblox gry obsługują trzy różne typy skryptów Luau:
Skrypty klienckie
Te skrypty działają na kliencie, a serwer nie ma wglądu w ich zachowanie. Z powodów związanych z dziedzictwem te skrypty mogą mieć postać 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żywaj skryptów modułowych do dzielenia się kodem i danymi pomiędzy tymi dwoma. Skrypty modułowe często znajdują się w ReplicatedStorage, ale mogą znajdować się gdzie indziej, jeśli chcesz dzielić się kodem pomiędzy skryptami po tej samej stronie granicy klient-serwer.
Unity nie ma koncepcji różnych typów skryptów. Jeśli zdecydujesz się stworzyć grę wieloosobową, Unity używa 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 nasłuchując aktualizacji.
C# i Luau
Do skryptowania Unity używa C#. Roblox używa Luau, języka skryptowego pochodzącego od Lua 5.1.
W porównaniu do C#, Luau jest stopniowo typowany i ogólnie ma mniej rozwlekłą składnię. W większych projektach jednak stopniowe typowanie może wprowadzać kategorie błędów, których unika się w językach o silnym typowaniu, takich jak C#, więc rozważ włączenie ścisłej kontroli typów w skryptach Roblox.
Aby uzyskać podstawowe różnice składniowe 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 mogącą wyposażać Tools. Te założenia nie istnieją w Unity, więc implementacja byłaby bardzo różna.
Zasoby
Unity i Roblox obsługują importowanie niestandardowych siatek i modeli w formacie .fbx. Niektóre typy zasobów mogą wymagać specyficznych konfiguracji i ustawień eksportu z oprogramowania modelującego firm trzecich. Aby uzyskać więcej informacji, zobacz następujące strony:
W Unity obiekty importują się do katalogu Assets, widocznego w oknie Projekt. W Roblox zasoby importują się do Workspace oraz do Skrzynki narzędziowej lub Menedżera zasobów.
Roblox oferuje również otwartoźródłową wtyczkę do Blendera, aby uprościć proces importu.
Przekształcenia
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 żyją w chmurze (chociaż możesz eksportować kopie), więc Roblox Studio zapewnia wbudowane przepływy pracy współpracy do jednoczesnej edycji, zarządzania grupami, uprawnień, szkicowania skryptów i więcej. Zobacz Współpraca.
Wtyczki
Podobnie jak narzędzia Unity, Roblox Studio obsługuje wtyczki, które mogą uprościć lub dać Ci dodatkową kontrolę nad różnymi aspektami procesu deweloperskiego. Wtyczki są dostępne w Sklepie twórców, podobnie jak zasoby, wiele z nich za darmo.
Słownik
| Unity | Roblox | Uwagi |
|---|---|---|
| Scena | Miejsce | |
| GameObject | Part lub Model | Zobacz Różnice filozoficzne. |
| Prefab | Pakiet | |
| Przekształcenie | CFrame | CFrame nie zawiera informacji o skali. Zobacz Przekształcenia. |
| Hierarchia | Eksplorator | |
| Inspektor | Właściwości | |
| Widok sceny | Widok 3D | |
| Widok gry | Widok 3D | Widok przechodzi w widok rozgrywki, gdy testujesz swoją grę. |
| Okno projektu | Menedżer zasobów lub Skrzynka narzędziowa | |
| Inspektor terenu | Edytor terenu | |
| Punkt odrodzenia | SpawnLocation | |
| Konsola | Wyjście | |
| Sklep zasobów | Sklep twórców | |
| Nakładki | Pasek narzędzi | |
| Narzędzie | Wtyczka |