Ta strona zawiera informacje, które pomogą doświadczonym programistom Unreal Engine rozpocząć pracę z Roblox: podstawową orientację, porównanie koncepcyjne i kluczowe różnice między oboma platformami.
Otrzymaj orientację
Wizualizator Unreal i eksplorator Roblox Studio są głównymi oknami do organizowania elementów w przestrzeniach 3D.Oba wyświetlają hierarchię obiektów i folderów.Jednak Outliner ma płaską, mniej zdefiniowaną strukturę i pokazuje tylko Actors.Okno Explorer ma głęboko zagniezione, surową strukturę i wyświetla wszystkie obiekty jako część hierarchii, nawet obiekty, które zostaną uznane za komponenty w Unreal.
Menadżer zasobów Roblox Studio i pudełko narzędzi pokrywają się z przeglądarką treści Unreal.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.Sklep dla twórców jest podobny do rynku Unreal Engine, ale możesz do niego bezpośrednio uzyskać dostęp z interfejsu użytkownika Studio.
Różnice filozoficzne
Roblox jest "silnikiem symulacji" zamiast tradycyjnym silnikiem gier.Nierealne Actors i Roblox Parts oba służą jako podstawowe bloki budowlane, ale w praktyce są one dość różne:
- Reprezentacja : Actors w Unreal jest wyższym poziomem koncepcji dla każdego obiektu na poziomie, podczas gdy Parts w Roblox jest przeznaczony do reprezentowania fizycznych obiektów, takich jak drewniane bloki i plastikowe kule.
- Fizyka : Aby wykonać symulacje fizyczne w Unreal, włączysz fizykę w niektórych komponentach (takich jak StaticMeshComponent ) lub dodając komponenty do Actors , takie jak ograniczenia fizyczne.W Roblox fizyka jest wbudowana w wpisywaćdanych Parts ; silnik obsługuje interakcje automatycznie.
Możesz zobaczyć różnicę natychmiast, jeśli utworzysz Actor i Part.The Actor ma niewiele więcej niż lokalizacja, 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.Dwa zaczynają dzielić podobne właściwości tylko wtedy, gdy porównasz StaticMeshActor w Unreal (np.kostka) do MeshPart w Roblox.


Innym przydatnym porównaniem jest Unreal Actor do Roblox Model.Modele działają jako pojemnik dla kolekcji połączonych części w taki sam sposób, jak Actors w Unreal są pojemnikami dla komponentów.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, Unreal Actor może mieć NiagraComponent, który wykorzystuje kilka emiterów, aby uzyskać pożądany efekt wizualny, siatkę dla kształtu, ograniczenie fizyczne, aby dodać sprężystość, i skrypt dla interaktywności gracza.W Outliner widzisz pojedyncze Actor o nazwie SpringyFireball.
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 praktyczna w Unreal.
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.
Unreal nie ma koncepcji różnych typów skryptów.Jeśli wybierzesz stworzenie grawieloosobowej, napiszesz dodatkowy kod, aby zsynchronizować stan gry między serwerem a klientami.
W Unreal większość funkcjonalności silnika jest dostępna rozszerzając wbudowane klasy, takie jak UObject , ACharacters , ULevel i UWorld w C++ lub w projekcie.Unreal wspiera niestandardowe wydarzenia, ale wiele klas zawiera wydarzenia, które silnik automatycznie wzywa w ramach naturalnego cyklu życia poziomu.
W porównaniu do systemu "ticking" nierzeczywistego, skrypty Roblox są znacznie bardziej wydarzeniowe.Masz dostęp do podobnej funkcjonalności silnika, subskrybując usługi i słuchając aktualizacji.
C++ oraz Luau
Do skryptowania Unreal używa C++. Roblox używa Luau , języka skryptowania pochodzącego z Lua 5.1 .
W porównaniu do Luau, C++ ma ogólną przewagę wydajności, która może być lub nie może być odpowiednia do rodzajów doświadczeń, które chcesz budować.Luau jest stopniowo pisane i ma mniej werbalną 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.
Unreal obejmuje również system wizualnego programowania zwany projektami.Roblox ma wtyczki stron trzecich, które oferują podobną funkcjonalność, ale nie ma porównywalnego systemu wbudowanego.
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 Unreal, więc implementacja byłaby bardzo różna.
Aktywa
Nierealny i Roblox oba 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 Unreal, import zasobów do twojego katalogu Content, widocznego w przeglądarce treści.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, podobnie jak funkcja Wysyłaj do Unreal narzędzi Blender.
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 Unreal współpracujesz z systemami kontroli wersji, takimi jak Perforce lub SVN, zwykle za pośrednictwem wbudowanego interfejsu użytkownika Unreal.Te systemy kontroli wersji wykorzystują scentralizowany model "zamknięcia", który blokuje pliki, gdy jedna osoba pracuje nad nimi.
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 Unreal, 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
| Nierealne | Roblox | Notatki | | :--- | :--- | :--- | | Poziom | Miejsce | | | Aktor | Part lub Model | Zobacz różnice filozoficzne .| | Klasa projektu | Pakiet | | | Transformuj | CFrame | CFrame nie zawiera informacji o skali.Zobacz Transformacje.| | Outliner | Okno Explorer | | | Panel szczegółów | Okno właściwości | | | Port widokowy poziomu | Port widokowy | | | Menadżer treści | Menadżer narzędzi lub Pudełko narzędzi | | | Tryb krajobrazowy | Edytor terenu | | | Gracz startowy | SpawnLocation | | | Log wyjścia | Wyjście | | | Sklep z twórcami | Sklep z twórcami | | | Pasek menu | Pasek menu | | | Plugin | Plugin | | | Rejestr wyjścia | Wyjście | | |