Deze pagina bevat informatie om ervaren Unreal Engine-ontwikkelaars te helpen beginnen met Roblox, inclusief basisoriëntatie, een conceptuele vergelijking en belangrijke verschillen tussen de twee platforms.
Oriëntatie


De Outliner van Unreal en de Explorer van Roblox Studio zijn de primaire vensters voor het organiseren van elementen in 3D-ruimtes. Beide tonen een hiërarchie van objecten en mappen. De Outliner heeft echter een plattere, minder gedefinieerde structuur en toont alleen Actors. Het Explorer-venster heeft een diep geneste, strikte structuur en toont alle objecten als onderdeel van de hiërarchie, zelfs objecten die als componenten in Unreal zouden worden beschouwd.
De Asset Manager van Roblox Studio en de Toolbox overlappen met de Content Browser van Unreal. De Asset Manager stelt je in staat om alle assets binnen je game te beheren, terwijl de Toolbox je toegang geeft tot alle assets die je hebt gepubliceerd. De Toolbox stelt je ook in staat om de Creator Store te doorzoeken naar assets van Roblox of de community, vergelijkbaar met de Marketplace van Unreal Engine, maar toegankelijk direct vanuit de gebruikersinterface van Studio.
Filosofische verschillen
Roblox is een "simulatie-engine" in plaats van een traditionele game-engine. Unreal Actors en Roblox Parts dienen beide als fundamentele bouwstenen, maar in de praktijk zijn de twee behoorlijk verschillend:
- Representatie: Actors in Unreal zijn een hoger niveau concept voor elk object in een level, terwijl Parts in Roblox zijn ontworpen om fysieke objecten zoals houten blokken en plastic bollen te vertegenwoordigen.
- Fysica: Om fysicasimulaties in Unreal uit te voeren, schakel je fysica in binnen bepaalde componenten (zoals de StaticMeshComponent) of door componenten aan Actors toe te voegen, zoals fysica-beperkingen. In Roblox zijn fysica ingebouwd in het Parts datatype; de engine beheert interacties automatisch.
Je kunt het verschil onmiddellijk zien als je een Actor en een Part maakt. De Actor heeft weinig meer dan een locatie, rotatie en schaal. De Part heeft diezelfde informatie, plus een materiaal en kleur, waarden voor reflectie en transparantie, massa en vorm, en nog veel meer. De twee beginnen pas vergelijkbare eigenschappen te delen wanneer je een StaticMeshActor in Unreal vergelijkt met een MeshPart in Roblox.


Een nuttige vergelijking is de Unreal Actor met de Roblox Model. Modellen fungeren als een container voor een verzameling onderling verbonden delen op dezelfde manier als Actors in Unreal containers zijn voor componenten. Je specificeert een van de delen van het model als zijn primaire deel om het draaipunt te definiëren. Modellen bevatten ook scripts, animaties, geluidseffecten, prompts, beperkingen, deeltjesemitteren en meer.
Bijvoorbeeld, een Unreal Actor kan een NiagaraComponent hebben die verschillende emitteren gebruikt om het gewenste visuele effect te bereiken, een mesh voor de vorm, een fysica-beperking om veerkracht toe te voegen, en een script voor spelersinteractiviteit. In de Outliner zie je een enkele Actor genaamd SpringyFireball.
In Roblox kan een vergelijkbaar SpringyFireball-model in het Explorer-venster er ongeveer zo uitzien:
Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- ScriptDe filosofie van Roblox om fysica standaard in te schakelen, strekt zich uit tot het proces van het bouwen van 3D-modellen. In Roblox is het lassen van meerdere delen tot een assemblage een uitstekende manier om snel dingen te bouwen, omdat Roblox de gelaste delen als één rigide lichaam beschouwt. Deze aanpak is niet praktisch in Unreal.
In plaats van standaard metrische eenheden voor lengte en massa te gebruiken, gebruikt Roblox hypothetische eenheden genaamd studs en Roblox Mass Units (RMU's). Voor benaderende metrische conversies en aanbevelingen rond gebruik, zie Eenheden.
Locatie is belangrijk
Roblox-games zijn standaard multiplayer, dus Roblox Studio bevat veel verschillende opslaglocaties met specifieke gedragingen. Voor meer informatie, zie client-server runtime en objectorganisatie.
| Location | Description |
|---|---|
| Workspace | Vertegenwoordigt de 3D-wereld van het spel. Kan serverscripts uitvoeren die direct aan objecten zijn gekoppeld en hun gedrag controleren. |
| ReplicatedFirst | Bevat objecten die als eerste naar de client worden gerepliceerd. Deze locatie is ideaal voor de absoluut minimale set objecten en clientscripts die nodig zijn om een laadscherm weer te geven. |
| ReplicatedStorage | Bevat objecten die naar zowel de client als de server worden gerepliceerd. Deze locatie is ideaal voor Scripts met een RunContext van Client, client ModuleScripts, en ModuleScripts die je op zowel de server als de client wilt gebruiken. LocalScripts worden niet vanuit deze locatie uitgevoerd. |
| ServerScriptService | Bevat serverscripts. Deze locatie is ideaal voor scripts die toegang nodig hebben tot server-side functionaliteit of objecten, zoals spel-logica en cloudopslag. |
| ServerStorage | Bevat server-side objecten. Deze locatie is ideaal voor grote objecten die niet onmiddellijk naar clients hoeven te worden gerepliceerd wanneer ze een spel joinen. Scripts worden niet vanuit deze locatie uitgevoerd, maar je kunt hier server-side ModuleScripts opslaan. |
| StarterPlayer ⟩ StarterCharacterScripts | Bevat LocalScripts die worden uitgevoerd wanneer het personage spawnt. |
| StarterPlayer ⟩ StarterPlayerScripts | Bevat LocalScripts die worden uitgevoerd wanneer de speler het spel joinet. |
| StarterGui | Bevat GUI-elementen die de client weergeeft wanneer het spel wordt geladen. LocalScripts kunnen vanuit deze locatie worden uitgevoerd. |
| StarterPack | Bevat over het algemeen alleen Tools, maar kan ook LocalScripts bevatten voor het instellen van spelersrugzakken. |
Scripting
Roblox-games ondersteunen drie verschillende soorten Luau-scripts:
Client-scripts
Deze scripts worden op de client uitgevoerd, en de server heeft geen zicht op hun gedrag. Om legacy-redenen kunnen deze scripts de vorm aannemen van LocalScripts of Scripts met een RunContext waarde van Client. Client-scripts bevinden zich meestal in ReplicatedStorage, StarterPlayerScripts of StarterCharacterScripts.
Server-scripts
Deze scripts worden op de server uitgevoerd, en de client heeft geen zicht op hun gedrag. Server-scripts hebben een RunContext waarde van Server en bevinden zich meestal in ServerScriptService, waarvan de inhoud niet naar de client wordt gerepliceerd.
Module-scripts
Deze scripts zijn herbruikbare stukjes code die precies één waarde retourneren, meestal een functie of tabel (of een tabel van functies). In plaats van code te dupliceren in client- en server-scripts, gebruik module-scripts om code en gegevens tussen de twee te delen. Module-scripts bevinden zich vaak in ReplicatedStorage, maar kunnen ook elders worden geplaatst als je code wilt delen tussen scripts aan dezelfde kant van de client-servergrens.
Unreal heeft niet het concept van verschillende scripttypes. Als je ervoor kiest om een multiplayer-game te maken, schrijf je extra code om de game-status tussen de server en de clients te synchroniseren.
In Unreal is veel van de functionaliteit van de engine beschikbaar door ingebouwde klassen zoals UObject, ACharacters, ULevel en UWorld in C++ of Blueprint uit te breiden. Unreal ondersteunt aangepaste evenementen, maar veel klassen bevatten evenementen die de engine automatisch oproept als onderdeel van de natuurlijke levenscyclus van het level.
In vergelijking met het "ticking"-systeem van Unreal zijn Roblox-scripts veel meer gebeurtenisgestuurd. Je krijgt toegang tot vergelijkbare enginefunctionaliteit door je in te schrijven voor services en te luisteren naar updates.
C++ en Luau
Voor scripting gebruikt Unreal C++. Roblox gebruikt Luau, een scripttaal afgeleid van Lua 5.1.
In vergelijking met Luau heeft C++ een algemeen prestatievoordeel, wat relevant kan zijn of niet voor de soorten games die je wilt bouwen. Luau is geleidelijk getypeerd en heeft een minder uitgebreide syntaxis. In grotere projecten kan geleidelijk typen echter categorieën van bugs introduceren die sterk getypeerde talen zoals C++ vermijden, dus overweeg om strikte typecontrole in Roblox-scripts in te schakelen.
Unreal bevat ook een visueel scripttingssysteem genaamd Blueprints. Roblox heeft derde-partij plugins die vergelijkbare functionaliteit bieden, maar geen vergelijkbaar systeem ingebouwd.
Luau codevoorbeeld
De volgende Luau-codevoorbeeld demonstreert hoe je, nadat een speler een hengel heeft uitgerust, kunt luisteren naar gebruikersinvoer (in dit geval de E-toets) en aanvullende functies kunt aanroepen:
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Verkrijg een module-script uit ReplicatedStorage dat een enkele functie retourneert
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Gaat ervan uit dat dit script een kind is van de hengel
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Controleer of de toets ingedrukt is, en roep dan een andere functie aan
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Schakel de actie alleen in wanneer de speler de hengel uitrust
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Deactiveer de actie wanneer de speler de hengel uittrekt
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)Het Roblox-script kan relatief beknopt zijn omdat Roblox veel ingebouwde aannames heeft: een Player met een Humanoid-personage dat verbonden is met de server en Tools kan uitrusten. Deze aannames bestaan niet in Unreal, dus de implementatie zou heel anders zijn.
Assets
Zowel Unreal als Roblox ondersteunen het importeren van aangepaste meshes en modellen in .fbx-formaat. Bepaalde soorten assets kunnen specifieke configuraties en exportinstellingen van je derde-partij modelleringsoftware vereisen. Voor meer informatie, zie de volgende pagina's:
In Unreal worden assets geïmporteerd in je Content-directory, zichtbaar in de Content Browser. In Roblox worden assets geïmporteerd in je Workspace en in de Toolbox of Asset Manager.
Roblox biedt ook een open-source Blender-plugin om het importproces te stroomlijnen, vergelijkbaar met de Send to Unreal-functie van Blender Tools.
Transforms
Unreal Engine's transformaties en Roblox's CFrames dienen vergelijkbare doelen bij het weergeven van 3D-transformaties van objecten:
- Zowel transformaties als CFrames vertegenwoordigen de positie en rotatie van een object in 3D-ruimte. Transformaties omvatten schaal, terwijl Roblox een BasePart.Size-eigenschap gebruikt die geen deel uitmaakt van de CFrame.
- Beide ondersteunen vermenigvuldiging voor complexe transformaties en hebben ingebouwde methoden voor andere manipulaties.
Samenwerking
In Unreal werk je samen met versiebeheersystemen zoals Perforce of SVN, meestal via de ingebouwde gebruikersinterface van Unreal. Deze versiebeheersystemen gebruiken het gecentraliseerde "checkout"-model dat bestanden vergrendelt terwijl één persoon eraan werkt.
Roblox-bestanden leven in de cloud (hoewel je kopieën kunt exporteren), dus Roblox Studio biedt ingebouwde samenwerkingsworkflows voor gelijktijdige bewerking, groepsbeheer, machtigingen, scriptontwerp en meer. Zie Samenwerking.
Plugins
Vergelijkbaar met Unreal ondersteunt Roblox Studio plugins, die verschillende aspecten van het ontwikkelingsproces kunnen vereenvoudigen of je extra controle kunnen geven. Plugins zijn beschikbaar in de Creator Store, net als assets, veel gratis.
Woordenlijst
| Unreal | Roblox | Opmerkingen |
|---|---|---|
| Level | Plaats | |
| Actor | Part of Model | Zie Filosofische verschillen. |
| Blueprint Class | Pakket | |
| Transform | CFrame | CFrame bevat geen schaalinformatie. Zie Transforms. |
| Outliner | Explorer | |
| Details paneel | Properties | |
| Level Viewport | 3D viewport | |
| Content Browser | Asset Manager of Toolbox | |
| Landscape Mode | Terrain Editor | |
| PlayerStart | SpawnLocation | |
| Output Log | Output | |
| Marketplace | Creator Store | |
| Menu bar | Toolbar | |
| Plugin | Plugin |