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


La finestra Gerarchia di Unity e l'Esplora di Roblox Studio sono le finestre principali per organizzare gli elementi nelle scene 3D:
- Entrambi consentono di gestire e organizzare oggetti (ad esempio, personaggi e risorse ambientali).
- Entrambi utilizzano una struttura ad albero per le relazioni genitore-figlio tra gli oggetti.
Tuttavia, la finestra Gerarchia non ha una struttura predefinita, mentre la finestra Esplora ha una struttura rigorosa. Potrebbe essere utile pensare alla finestra Esplora come a una combinazione delle finestre Gerarchia e Progetto di Unity, con la cartella Workspace come elemento più riconoscibile.
Allo stesso modo, il Gestore Asset di Roblox Studio e la Toolbox si sovrappongono alla finestra Progetto di Unity. Il Gestore Asset ti consente di gestire tutti gli asset all'interno del tuo gioco, mentre la Toolbox ti consente di accedere a qualsiasi asset che hai pubblicato. La Toolbox ti consente anche di cercare nel Creator Store asset di Roblox o della comunità, simile all'Asset Store di Unity.
Differenze filosofiche
Roblox è un "motore di simulazione" piuttosto che un tradizionale motore di gioco. Gli GameObjects di Unity e i Parts di Roblox servono entrambi come mattoni fondamentali per creare oggetti in un ambiente 3D, ma nella pratica, i due sono piuttosto diversi:
- Rappresentazione: gli GameObjects in Unity sono un concetto di livello superiore per qualsiasi oggetto in una scena, mentre i Parts in Roblox sono progettati per rappresentare oggetti fisici come blocchi di legno e sfere di plastica, piuttosto che geometria astratta come gli oggetti primitivi in Unity.
- Fisica: per eseguire simulazioni fisiche in Unity, attacchi componenti come Rigidbody e Collider a un GameObject. In Roblox, la fisica è integrata nel tipo di dato Parts; il motore gestisce automaticamente le interazioni.
Puoi vedere immediatamente la differenza se crei un GameObject e un Part. Il GameObject non ha altro che 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. Trasformare un Part in qualcosa di più simile a un GameObject vuoto significa rimuovere molte proprietà integrate. Al contrario, puoi creare un GameObject che assomiglia molto a un Part aggiungendo componenti MeshFilter, MeshRenderer, Collider e Rigidbody.
Da una prospettiva di scripting, GameObject è più simile a Instance di Roblox, la classe base per tutte le altre classi di Roblox, ma poiché non puoi (e non puoi) creare oggetti di tipo Instance, il confronto non è particolarmente pratico.
Un altro confronto è tra il GameObject di Unity e il Model di Roblox. I modelli fungono da contenitore per una collezione di parti interconnesse nello stesso modo in cui potresti stabilire una relazione genitore-figlio tra molti GameObjects in Unity. 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 GameObject di Unity potrebbe avere componenti per ParticleSystem, Physics3D, SpringConstraint e uno script. Nella finestra Gerarchia, vedi un singolo GameObject chiamato SpringyFireball. La finestra Inspector mostra la collezione di componenti e proprietà.
In Roblox, un modello SpringyFireball comparabile nella finestra Esplora potrebbe apparire in questo modo:
Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- ScriptLa filosofia di fisica per 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 unico corpo rigido. Questo approccio non è disponibile in Unity.
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.
Unity non ha il concetto di diversi tipi di script. Se scegli di creare un gioco multiplayer, Unity utilizza le sue librerie di rete per indicare quando un GameObject (e i suoi script) dovrebbe essere esclusivo per il server.
In Unity, gran parte della funzionalità del motore è disponibile attraverso i metodi di MonoBehaviour. Ad esempio, per eseguire codice prima del ciclo di rendering, aggiungi codice al metodo Update(). Per gestire eventi di collisione fisica, aggiungi codice al metodo OnCollideEnter().
Gli script di Roblox sono più orientati agli eventi. Accedi a funzionalità simili iscrivendoti a servizi e ascoltando aggiornamenti.
C# e Luau
Per lo scripting, Unity utilizza C#. Roblox utilizza Luau, un linguaggio di scripting derivato da Lua 5.1.
Rispetto a C#, Luau è tipizzato gradualmente e generalmente ha una sintassi meno verbosa. Tuttavia, in progetti più grandi, la tipizzazione graduale può introdurre categorie di bug che i linguaggi fortemente tipizzati come C# evitano, quindi considera di abilitare il controllo dei tipi rigoroso negli script di Roblox.
Per le differenze di sintassi di base tra i linguaggi di scripting, vedere Confronto tra Luau e C#.
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 Unity, quindi l'implementazione sarebbe molto diversa.
Asset
Unity 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 Unity, gli oggetti vengono importati nella tua directory Assets, visibile nella finestra Progetto. In Roblox, gli asset vengono importati nel tuo Workspace e nella Toolbox o nel Gestore Asset.
Roblox offre anche un plugin Blender open-source per semplificare il processo di importazione.
Trasformazioni
I trasformatori di Unity 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 Unity, collabori con sistemi di controllo versione standard o servizi a pagamento come Unity Version Control.
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, gestione dei gruppi, permessi, redazione di script e altro. Vedi Collaborazione.
Plugin
Simile agli strumenti di Unity, 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
| Unity | Roblox | Note |
|---|---|---|
| Scene | Place | |
| GameObject | Part o Model | Vedi Differenze filosofiche. |
| Prefab | Package | |
| Transform | CFrame | CFrame non include informazioni sulla scala. Vedi Trasformazioni. |
| Hierarchy | Explorer | |
| Inspector | Properties | |
| Scene view | 3D viewport | |
| Game view | 3D viewport | La viewport si trasforma in una vista di gioco quando testi il tuo gioco. |
| Project window | Asset Manager o Toolbox | |
| Terrain Inspector | Terrain Editor | |
| Spawn point | SpawnLocation | |
| Console | Output | |
| Asset Store | Creator Store | |
| Overlays | Toolbar | |
| Tool | Plugin |