Questa pagina contiene informazioni per aiutare gli sviluppatori esperti di Unreal Engine a iniziare con Roblox, inclusa un'orientazione 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 visualizzano 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 nidificata e rigida e visualizza tutti gli oggetti come parte della gerarchia, anche oggetti che sarebbero considerati componenti in Unreal.
Il Gestore delle risorse di Roblox Studio e il Toolbox si sovrappongono al Content Browser di Unreal. Il Gestore delle risorse ti consente di gestire tutte le risorse all'interno del tuo gioco, mentre il Toolbox ti consente di accedere a qualsiasi risorsa che hai pubblicato. Il Toolbox consente anche di cercare nel Creator Store risorse 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 motore di gioco tradizionale. Gli Actors di Unreal e i Parts di Roblox servono entrambi come mattoni fondamentali, ma nella pratica i due sono abbastanza 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 dati 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 quelle stesse informazioni, più un materiale e un colore, valori di 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. Devi specificare una delle parti del modello come sua parte principale per definire il punto di pivot. I modelli contengono anche script, animazioni, effetti sonori, richieste, 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| |- Script
La filosofia della fisica di default 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 cose, perché Roblox tratta le parti saldate come un singolo corpo rigido. Questo approccio non è pratico in Unreal.
Invece di utilizzare unità metriche standard per lunghezza e massa, Roblox utilizza unità nominali chiamate studs e Roblox Mass Units (RMUs). Per conversioni metriche approssimative e raccomandazioni sull'uso, vedere Unità.
La posizione conta
I giochi Roblox sono multiplayer per impostazione predefinita, quindi Roblox Studio include molteplici 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. Questa posizione è ideale per gli script del server che si collegano 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 mostrare una schermata di caricamento. |
| ReplicatedStorage | Contiene oggetti che vengono replicati sia al client che al server. Questa posizione è ideale per ModuleScripts che desideri utilizzare sia sul server che sul client. LocalScripts non vengono eseguiti da questa posizione, ma Scripts con un RunContext di Client sì. |
| ServerScriptService | Contiene script del server. Questa posizione è ideale per script che devono accedere a funzionalità o oggetti lato server, come la logica di gioco e lo storage 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 ModuleScripts lato server qui. |
| StarterPlayer ⟩ StarterCharacterScripts | Contiene LocalScripts che vengono eseguiti quando il personaggio appare. |
| StarterPlayer ⟩ StarterPlayerScripts | Contiene LocalScripts generici che vengono eseguiti quando il giocatore entra nel gioco. |
| StarterGui | Contiene elementi GUI che il client visualizza quando carica il gioco. LocalScripts possono essere eseguiti da questa posizione. Questa posizione è ideale per script che modificano l'interfaccia utente del gioco, come aggiungere pulsanti, menu e pop-up. |
| 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 realizzare 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 attiva 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 la programmazione, Unreal utilizza C++. Roblox utilizza Luau, un linguaggio di scripting derivato da Lua 5.1.
Rispetto a Luau, C++ ha un vantaggio complessivo in termini di prestazioni, 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, il typing graduale può introdurre categorie di bug che linguaggi tipizzati fortemente 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.
Risorse
Sia Unreal che Roblox supportano l'importazione di mesh e modelli personalizzati in formato .fbx. Alcuni tipi di risorse 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, le risorse vengono importate nella directory Content, visibile nel Content Browser. In Roblox, le risorse vengono importate nel tuo Workspace e nel Toolbox o nel Gestore delle risorse.
Roblox offre anche un plugin Blender open-source per semplificare il processo di importazione, simile alla funzione 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 tramite l'interfaccia utente integrata di Unreal. Questi sistemi di controllo versione utilizzano il modello centralizzato di "checkout" che blocca i file mentre una persona ci lavora sopra.
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 gruppo, le autorizzazioni, la stesura di script e altro. Vedi Collaborazione.
Plugin
Simile a Unreal, Roblox Studio supporta i 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 le risorse, molti gratuitamente.
Glossario
| Unreal | Roblox | Note |
|---|---|---|
| Livello | Luogo | |
| Attore | Part o Model | Vedi Differenze filosofiche. |
| Classe Blueprint | Pacchetto | |
| Trasformazione | CFrame | CFrame non include informazioni sulla scala. Vedi Trasformazioni. |
| Outliner | Explorer | |
| Pannello Dettagli | Proprietà | |
| Visualizzazione del livello | Viewport 3D | |
| Content Browser | Gestore delle risorse o Toolbox | |
| Modalità paesaggio | Editor Terreno | |
| InitioGiocatore | SpawnLocation | |
| Log di output | Output | |
| Marketplace | Creator Store | |
| Barra dei menu | Toolbar | |
| Plugin | Plugin |