Questa pagina contiene informazioni per aiutare gli sviluppatori esperti di Unreal Engine a iniziare con Roblox, inclusa un'orientamento di base, un confronto concettuale e le principali differenze tra le due piattaforme.
Orientati


L'Outliner di Unreal e l'Explorer di Roblox Studio sono le finestre principali per organizzare gli elementi negli spazi 3D. Entrambi mostrano una gerarchia di oggetti e cartelle. Tuttavia, l'Outliner ha una struttura più piatta e meno definita e mostra solo gli Actors. La finestra Explorer ha una struttura profondamente annidata e rigorosa e visualizza tutti gli oggetti come parte della gerarchia, anche oggetti che sarebbero considerati componenti in Unreal.
Il Gestore Asset di Roblox Studio e il Toolbox si sovrappongono con il Content Browser di Unreal. Il Gestore Asset ti consente di gestire tutti gli asset all'interno del tuo gioco, mentre il Toolbox ti consente di accedere a qualsiasi asset che hai pubblicato. Il Toolbox ti consente anche di cercare nel Creator Store asset di Roblox o della comunità, simile al Marketplace di Unreal Engine, ma accessibile direttamente dall'interfaccia utente di Studio.
Differenze filosofiche
Roblox è un "motore di simulazione" piuttosto che un tradizionale motore di gioco. Gli Actors di Unreal e i Parts di Roblox servono entrambi come blocchi fondamentali, ma nella pratica, i due sono piuttosto diversi:
- Rappresentazione: gli Actors in Unreal sono un concetto di livello superiore per qualsiasi oggetto in un livello, mentre i Parts in Roblox sono progettati per rappresentare oggetti fisici come blocchi di legno e sfere di plastica.
- Fisica: per eseguire simulazioni fisiche in Unreal, abiliti la fisica all'interno di determinati componenti (come il StaticMeshComponent) o aggiungendo componenti agli Actors, come vincoli fisici. In Roblox, la fisica è integrata nel tipo di dato Parts; il motore gestisce automaticamente le interazioni.
Puoi vedere immediatamente la differenza se crei un Actor e un Part. L'Actor ha poco più di una posizione, rotazione e scala. Il Part ha le stesse informazioni, più un materiale e un colore, valori per riflettanza e trasparenza, massa e forma, e molto altro. I due iniziano a condividere proprietà simili solo quando confronti un StaticMeshActor in Unreal con un MeshPart in Roblox.


Un altro confronto utile è l'Actor di Unreal con il Model di Roblox. I modelli fungono da contenitore per una collezione di parti interconnesse nello stesso modo in cui gli Actors in Unreal sono contenitori per componenti. Specifichi una delle parti del modello come sua parte principale per definire il punto di pivot. I modelli contengono anche script, animazioni, effetti sonori, prompt, vincoli, emettitori di particelle e altro.
Ad esempio, un Actor di Unreal potrebbe avere un NiagaraComponent che utilizza diversi emettitori per ottenere l'effetto visivo desiderato, una mesh per la forma, un vincolo fisico per aggiungere elasticità e uno script per l'interattività del giocatore. In Outliner, vedi un singolo Actor chiamato SpringyFireball.
In Roblox, un modello SpringyFireball comparabile nella finestra Explorer potrebbe apparire in questo modo:
Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- ScriptLa filosofia di fisica per impostazione predefinita di Roblox si estende al processo di costruzione di modelli 3D. In Roblox, saldare più parti insieme in un assemblaggio è un ottimo modo per costruire rapidamente le cose, perché Roblox tratta le parti saldate come un unico corpo rigido. Questo approccio non è pratico in Unreal.
Piuttosto che utilizzare unità metriche standard per lunghezza e massa, Roblox utilizza unità notionali chiamate studs e Roblox Mass Units (RMUs). Per conversioni metriche approssimative e raccomandazioni sull'uso, vedere Unità.
La posizione è importante
I giochi Roblox sono multiplayer per impostazione predefinita, quindi Roblox Studio include molte diverse posizioni di archiviazione con comportamenti specifici. Per ulteriori informazioni, vedere runtime client-server e organizzazione degli oggetti.
| Location | Description |
|---|---|
| Workspace | Rappresenta il mondo 3D del gioco. Può eseguire script server che si attaccano direttamente agli oggetti e controllano il loro comportamento. |
| ReplicatedFirst | Contiene oggetti che si replicano al client prima di qualsiasi altra cosa. Questa posizione è ideale per il set minimo assoluto di oggetti e script client necessari per visualizzare una schermata di caricamento. |
| ReplicatedStorage | Contiene oggetti che vengono replicati sia al client che al server. Questa posizione è ideale per Scripts con un RunContext di Client, ModuleScripts client e ModuleScripts che desideri utilizzare sia sul server che sul client. LocalScripts non vengono eseguiti da questa posizione. |
| ServerScriptService | Contiene script server. Questa posizione è ideale per script che devono accedere a funzionalità o oggetti lato server, come la logica di gioco e l'archiviazione cloud. |
| ServerStorage | Contiene oggetti lato server. Questa posizione è ideale per oggetti di grandi dimensioni che non devono essere immediatamente replicati ai client quando si uniscono a un gioco. Gli script non vengono eseguiti da questa posizione, ma puoi memorizzare qui ModuleScripts lato server. |
| StarterPlayer ⟩ StarterCharacterScripts | Contiene LocalScripts che vengono eseguiti quando il personaggio appare. |
| StarterPlayer ⟩ StarterPlayerScripts | Contiene LocalScripts che vengono eseguiti quando il giocatore si unisce al gioco. |
| StarterGui | Contiene elementi GUI che il client visualizza quando carica il gioco. LocalScripts possono essere eseguiti da questa posizione. |
| StarterPack | Contiene generalmente solo Tools, ma può includere anche LocalScripts per configurare gli zaini dei giocatori. |
Scripting
Roblox games support three different types of Luau scripts:
Script client
Questi script vengono eseguiti sul client e il server non ha visibilità sul loro comportamento. Per motivi di legacy, questi script possono assumere la forma di LocalScripts o Scripts con un valore di RunContext di Client. Gli script client vivono tipicamente in ReplicatedStorage, StarterPlayerScripts o StarterCharacterScripts.
Script server
Questi script vengono eseguiti sul server e il client non ha visibilità sul loro comportamento. Gli script server hanno un valore di RunContext di Server e vivono tipicamente in ServerScriptService, i cui contenuti non vengono replicati al client.
Script modulo
Questi script sono pezzi riutilizzabili di codice che restituiscono esattamente un valore, tipicamente una funzione o una tabella (o una tabella di funzioni). Piuttosto che duplicare codice negli script client e server, utilizza script modulo per condividere codice e dati tra i due. Gli script modulo vivono spesso in ReplicatedStorage, ma possono vivere altrove se desideri condividere codice tra script sullo stesso lato del confine client-server.
Unreal non ha il concetto di diversi tipi di script. Se scegli di creare un gioco multiplayer, scrivi codice aggiuntivo per sincronizzare lo stato del gioco tra il server e i client.
In Unreal, gran parte della funzionalità del motore è disponibile estendendo classi integrate come UObject, ACharacters, ULevel e UWorld in C++ o Blueprint. Unreal supporta eventi personalizzati, ma molte classi includono eventi che il motore invoca automaticamente come parte del ciclo di vita naturale del livello.
Rispetto al sistema di "tick" di Unreal, gli script di Roblox sono molto più orientati agli eventi. Accedi a funzionalità simili del motore iscrivendoti a servizi e ascoltando aggiornamenti.
C++ e Luau
Per lo scripting, Unreal utilizza C++. Roblox utilizza Luau, un linguaggio di scripting derivato da Lua 5.1.
Rispetto a Luau, C++ ha un vantaggio di prestazioni complessivo, che potrebbe o meno essere rilevante per i tipi di giochi che desideri costruire. Luau è tipizzato gradualmente e ha una sintassi meno verbosa. Tuttavia, in progetti più grandi, la tipizzazione graduale può introdurre categorie di bug che linguaggi fortemente tipizzati come C++ evitano, quindi considera di abilitare il controllo di tipo rigoroso negli script di Roblox.
Unreal include anche un sistema di scripting visivo chiamato Blueprints. Roblox ha plugin di terze parti che offrono funzionalità simili, ma nessun sistema comparabile integrato.
Esempio di codice 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)Lo script di Roblox può essere relativamente conciso perché Roblox ha molte assunzioni integrate: un Player con un personaggio Humanoid connesso al server e può equipaggiare Tools. Queste assunzioni non esistono in Unreal, quindi l'implementazione sarebbe molto diversa.
Asset
Unreal e Roblox supportano entrambi l'importazione di mesh e modelli personalizzati in formato .fbx. Alcuni tipi di asset potrebbero richiedere configurazioni specifiche e impostazioni di esportazione dal tuo software di modellazione di terze parti. Per ulteriori informazioni, vedere le seguenti pagine:
In Unreal, gli asset vengono importati nella tua directory Content, visibile nel Content Browser. In Roblox, gli asset vengono importati nel tuo Workspace e nel Toolbox o nel Gestore Asset.
Roblox offre anche un plugin Blender open-source per semplificare il processo di importazione, simile alla funzionalità Invia a Unreal degli strumenti di Blender.
Trasformazioni
I trasformatori di Unreal Engine e CFrames di Roblox svolgono scopi simili nella rappresentazione delle trasformazioni 3D degli oggetti:
- Sia i trasformatori che CFrames rappresentano la posizione e la rotazione di un oggetto nello spazio 3D. I trasformatori includono la scala, mentre Roblox utilizza una proprietà BasePart.Size che non fa parte del CFrame.
- Entrambi supportano la moltiplicazione per trasformazioni complesse e hanno metodi integrati per altre manipolazioni.
Collaborazione
In Unreal, collabori con sistemi di controllo versione come Perforce o SVN, generalmente attraverso l'interfaccia utente integrata di Unreal. Questi sistemi di controllo versione utilizzano il modello centralizzato "checkout" che blocca i file mentre una persona lavora su di essi.
I file di Roblox vivono nel cloud (anche se puoi esportare copie), quindi Roblox Studio fornisce flussi di lavoro di collaborazione integrati per la modifica simultanea, la gestione di gruppi, le autorizzazioni, la redazione di script e altro. Vedi Collaborazione.
Plugin
Simile a Unreal, Roblox Studio supporta plugin, che possono semplificare o darti un controllo aggiuntivo su vari aspetti del processo di sviluppo. I plugin sono disponibili nel Creator Store, proprio come gli asset, molti dei quali sono gratuiti.
Glossario
| Unreal | Roblox | Note |
|---|---|---|
| Level | Place | |
| Actor | Part o Model | Vedi Differenze filosofiche. |
| Blueprint Class | Package | |
| Transform | CFrame | CFrame non include informazioni sulla scala. Vedi Trasformazioni. |
| Outliner | Explorer | |
| Details panel | Properties | |
| Level Viewport | 3D viewport | |
| Content Browser | Asset Manager o Toolbox | |
| Landscape Mode | Terrain Editor | |
| PlayerStart | SpawnLocation | |
| Output Log | Output | |
| Marketplace | Creator Store | |
| Menu bar | Toolbar | |
| Plugin | Plugin |