Ta strona zawiera informacje, które pomogą doświadczonym programistom Unity rozpocząć pracę z Roblox: podstawową orientację, porównanie koncepcyjne i kluczowe różnice między oboma platformami.
Otrzymaj orientację
Okno hierarchii Unity i eksplorator Roblox Studio są głównymi oknami do organizowania elementów w scenach 3D:
- Oba pozwalają na zarządzanie i organizowanie obiektów (na przykład postaci i zasobów środowiskowych).
- Oba wykorzystują strukturę drzewa do relacji rodzic-dziecko między obiektami.
Jednak okno hierarchii nie ma ustalonej struktury, podczas gdy okno Explorer ma surową strukturę.Może to pomóc pomyśleć o oknie Explorer jako o kombinacji hierarchii Unity i okien projektów, z katalogiem przestrzeni roboczej jako najbardziej rozpoznawalnym elementem.
Podobnie, menadżer zasobów Roblox Studio i pudełko narzędzi pokrywają się z oknem projektu Unity.Menadżer zasobów pozwala zarządzać wszystkimi zasobami w swoim doświadczeniu, podczas gdy Toolbox pozwala na dostęp do wszystkich zasobów, które opublikowałeś.Pudełko z narzędziami pozwala również wyszukać sklep zasobów Twórcy dla zasobów z Roblox lub społeczności, podobnie jak sklep zasobów Unity.
Różnice filozoficzne
Roblox jest "silnikiem symulacji" zamiast tradycyjnym silnikiem gier.Unity GameObjects i Roblox Parts oba służą jako podstawowe bloki budowlane do tworzenia obiektów w środowisku 3D, ale w praktyce są one dość różne:
- Reprezentacja : GameObjects w Unity jest wyższym poziomem koncepcji dla każdego obiektu w scenie, podczas gdy Parts w Roblox jest przeznaczony do reprezentowania fizycznych obiektów, takich jak drewniane bloki i plastikowe kule, a nie abstrakcyjnej geometrii, takiej jak proste obiekty w Unity.
- Fizyka : Aby wykonać symulacje fizyczne w Unity, przymocuj komponenty takie jak Rigidbody i Collider do GameObject.W Roblox fizyka jest wbudowana w wpisywaćdanych Parts ; silnik obsługuje interakcje automatycznie.
Możesz zobaczyć różnicę natychmiast, jeśli utworzysz GameObject i Part.The GameObject nie ma więcej niż pozycja, rotacja i skala.The Part ma te same informacje — plus materiał i kolor, wartości odblasku i przejrzystości, masę i kształt, a wiele więcej.Przekształcenie Part w coś bardziej przypominającego puste GameObject oznacza usunięcie wielu wbudowanych właściwości.Odwrotnie możesz stworzyć GameObject, który wygląda bardzo podobnie do Part poprzez dodanie MeshFilter , MeshRenderer , Collider i Rigidbody komponentów.
Z perspektywy skryptowania, GameObject jest najbardziej podobny do Roblox Instance, podstawowej klasy dla wszystkich innych klas Roblox, ale ponieważ nie tworzysz (i nie możesz) obiektów typu Instance, porównanie nie jest szczególnie praktyczne.
Innym porównaniem jest Unity GameObject do Roblox Model.Modele działają jako pojemnik dla kolekcji połączonych części w taki 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 podstawową część, aby określić punkt obrotowy.Modele przechowują również skrypty, animacje, efekty dźwiękowe, komunikaty, ograniczenia, emiterki cząstek i wiele więcej.
Na przykład, Unity GameObject może mieć komponenty dla ParticleSystem , Physics3D , SpringConstraint i skrypt.W oknie hierarchii widzisz pojedynczą GameObject o nazwie SpringyFireball.Okno inspektora pokazuje kolekcję komponentów i właściwości.
W Roblox porównywalny SpringyFireball model w oknie Explorer może wyglądać tak:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
Filozofia fizyki domyślnej Roblox rozciąga się na proces budowania modeli 3D.W Roblox spawanie wielu części razem w złożenie jest doskonałym sposobem na szybkie budowanie rzeczy, ponieważ Roblox traktuje spawane części jako jeden sztywny ciało.Ta metoda nie jest dostępna w Unity.
Zamiast używać standardowych jednostek metrycznych dla długości i masy, Roblox używa jednostek koncepcyjnych zwanych szpilkami i jednostkami masy Roblox (RMUs).Aby uzyskać przybliżone konwersje metryczne i rekomendacje wokół użytku, zobacz Jednostki.
Kwestia lokalizacji
Doświadczenia Roblox są wieloosobowe domyślnie, więc Roblox Studio zawiera wiele różnych lokalizacji przechowywania z określonymi zachowaniami.Na przykład, skrypt może uruchomić się, gdy umieścisz go w ReplicatedStorage , ale nie gdy umieścisz go w StarterPlayerScripts .Aby uzyskać więcej informacji, zobacz czas wykonania klient-serwer i organizację obiektów.
Lokalizacja | Opis: --- | :--- Przestrzeń robocza | Reprezentuje świat gry.Ta lokalizacja działa dobrze dla skryptów serwerowych, które bezpośrednio przymocowują się do obiektów i kontrolują ich zachowanie.ReplicatedFirst | Zawiera obiekty, które replikują się do klienta przed wszystkim innym.Ta lokalizacja jest idealna dla absolutnego minimum zestawu obiektów i skryptów klienta niezbędnych do wyświetlenia ekranu ładowania.ReplicatedStorage | Zawiera obiekty, które są replikowane zarówno dla klienta, jak i serwera.Ta lokalizacja jest idealna dla Class.ModuleScript\|ModuleScripts, którą chcesz używać zarówno na serwerze, jak i na klientzie.Class.LocalScript\|LocalScripts nie uciekaj z tej lokalizacji, ale Class.Script\|Scripts z kontekstem wykonania Client uczyni.ServerScriptService | Zawiera skrypty serwera.To położenie jest idealne dla skryptów, które muszą uzyskać dostęp do funkcjonalności po stronie serwera lub obiektów, 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ć od razu replikowane do klientów, gdy dołączają do doświadczenia.Skrypty nie uruchamiają się z tej lokalizacji, ale możesz tutaj przechować stronę serwera Class.ModuleScript\|ModuleScripts.StarterPlayer.StarterCharacterScripts | Zawiera Class.LocalScript\|LocalScripts, które uruchamiają się, gdy pojawia się postać.StarterPlayer.StarterPlayerScripts | Zawiera ogólnego przeznaczenia Class.LocalScript\|LocalScripts, który uruchamia się, gdy gracz dołącza do doświadczenia.StarterGui | Zawiera elementy interfejsu, które klient wyświetla, gdy ładować grę.Class.LocalScript\|LocalScripts może uciec z tej lokalizacji.Ta lokalizacja jest idealna dla skryptów, które modyfikują interfejs użytkownika gry, takich jak dodawanie przycisków, menu i wyskakujących okienek.Pakiet startowy | Zawiera ogólnie tylko Class.Tool\|Tools, ale może również zawierać Class.LocalScript\|LocalScripts do ustawienia plecaków graczy.
Skryptowanie
Doświadczenia Roblox wspierają trzy różne rodzaje skryptów Luau:
Skrypty klienta
Te skrypty uruchamiane są na klientzie, a serwer nie ma widoczności ich zachowania.Z powodów dziedzictwa, te skrypty mogą przybrać formę LocalScripts lub Scripts z wartością RunContext w wartości Client.Skrypty klienta zwykle żyją w ReplicatedStorage , StarterPlayerScripts lub StarterCharacterScripts .
Skrypty serwera
Te skrypty uruchamiane są na serwerze, a klient nie ma widoczności ich zachowania.Skrypty serwerowe mają wartość RunContext``Server i zwykle żyją w ServerScriptService, zawartość których nie jest replikowana na klient gry.
Skrypty modułowe
Te skrypty są ponownie używalnymi kawałkami kodu, które zwracają dokładnie jedną wartość, zwykle funkcję lub tabelę (lub tabelę funkcji).Zamiast powielać kod w skryptach klienta i serwera, użyj skryptów modułowych, aby dzielić kod i dane między nimi.Skrypty modułu często żyją w ReplicatedStorage, ale mogą żyć gdzie indziej, jeśli chcesz udostępniać kod między skryptami po tej samej stronie granicy klienta-serwera.
Jedność nie ma koncepcji różnych typów skryptów.Jeśli wybierzesz stworzenie grawieloosobowej, Unity wykorzystuje swoje biblioteki sieciowe, aby wskazać, kiedy GameObject (i jego skrypty) powinny być wyłączone dla serwera.
W Unity większość funkcjonalności silnika jest dostępna za pośrednictwem metod MonoBehaviour.Na przykład, aby uruchomić kod przed pętlą renderowania, dodaj kod do metody Update().Aby obsłużyć zdarzenia kolizji fizycznej, dodaj kod do metody OnCollideEnter().
Skrypty Roblox są bardziej oparte na wydarzeniach. Możesz uzyskać podobną funkcjonalność, subskrybując usługi i słuchając aktualizacji.
C# oraz Luau
Do skryptowania Unity używa C#. Roblox używa Luau , języka skryptowania pochodzącego z Lua 5.1 .
W porównaniu do C# Luau jest stopniowo wpisywany i ogólnie ma mniej skomplikowaną sintaksę.W większych projektach jednak stopniowe pisanie może wprowadzić kategorie błędów, których silnie typowane języki, takie jak C#, unikają, więc rozważ użycie surowej weryfikacji typu w skryptach Roblox.
Dla podstawowych różnic w słownictwie między językami skryptowymi, patrz Porównanie Luau i C#.
Próbka kodu Luau
Poniższy przykład kodu Luau pokazuje, jak, po wyposażeniu gracza w wędkę, wysłuchać wpisu użytkownika (w tym przypadku kluczE), a następnie wezwać dodatkowe funkcje:
-- Zdobądź niezbędne usługi gier
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Zdobądź skrypt modułu z ReplicatedStorage, który zwraca jedną funkcję
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Założenie, że ten skrypt jest dzieckiem pręta wędkowego
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Sprawdź, czy klucz jest w dół, a następnie wezwij inną funkcję
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Włącz akcję tylko wtedy, gdy gracz wyposaża pręt wędkarski
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Wyłącz akcję, gdy gracz odłóż wędkę
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
Skrypt Roblox może być stosunkowo krótki, ponieważ Roblox ma wiele domyślnych założeń: Player z charakterem Humanoid połączonym z serwerem i może wyposażyć Tools .Te założenia nie istnieją w Unity, więc implementacja byłaby bardzo różna.
Aktywa
Zarówno Unity jak i Roblox wspierają importowanie niestandardowych modeli i siatek w formacie .fbx .Niektóre rodzaje zasobów mogą wymagać określonych konfiguracji i ustawień eksportu z oprogramowania modelowania strony trzeciej.Dla więcej informacji, zobacz następujące strony:
W Unity obiekty importują się do twojego katalogu Assets, widocznego w oknie projektu.W Roblox, zasoby są importowane do Twojej przestrzeni roboczej i do sekcji Pudełko narzędzi lub Ekwipunek w sekcji Menadżera zasobów.
Roblox oferuje również otwarty kod źródłowy plugin Blender do uproszczenia procesu importowania.
Transformacje
Transformacje props.engine'a i serwery Roblox'a CFrames służą podobnym celom w reprezentowaniu transformacji 3D obiektów:
- Zarówno transformacje, jak i CFrames reprezentują pozycję i rotację obiektu w przestrzeni 3D.Transformacje obejmują skalę, podczas gdy Roblox używa właściwości BasePart.Size, która nie jest częścią CFrame.
- Oba wspierają mnożenie (tj. kompozycję) dla skomplikowanych transformacji i mają wbudowane metody dla innych manipulacji.
Współpraca
W Unity współpracujesz z systemami kontroli wersji standardowymi lub płatnymi usługami, takimi jak Unity Control Wersji.
Pliki Roblox żyją w chmurze (choć możesz eksportować kopie), więc Roblox Studio zapewnia wbudowane przepływy pracy współpracy do jednoczesnej edycji, zarządzania grupami, uprawnień, sporządzania projektów skryptów i więcej.Zobacz Współpracę.
Pluginy
Podobnie jak narzędzia Unity, Roblox Studio wspiera pluginy, które mogą uprościć lub dać dodatkową kontrolę nad różnymi aspektami procesu rozwoju.Wtyczki są dostępne w sklepie twórców, tak jak zasoby, wiele za darmo.
Słownik
| Jedność | Roblox | Notatki | | :--- | :--- | :--- | | Scena | Miejsce | | | GameObject | Part lub Model | Zobacz różnice filozoficzne .| | Prefab | Pakiet | | | Transform | CFrame | CFrame nie zawiera informacji o skali.Zobacz Transformacje.| | Okno hierarchii | Okno przeglądarki | | | Inspektor | Okno właściwości | | Widok sceny | Port okna | | | Widok gry | Port okna | Przejścia widoku przechodzą do widoku rozgrywki, gdy testujesz swoje doświadczenie.| | Okno projektu | Menadżer zasobów lub Pudełko narzędzi | | | Inspektor terenu | Edytor terenu | | | Punkt odrodzenia | SpawnLocation | | | Konsola | Wyjście | | | Sklep zasobów | Sklep twórców | | | Przyciski | Pasek menu | | | Narzędzie | Plugin | | |