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


La finestra Gerarchia di Unity e l'Esplora risorse 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 asset ambientali).
- Entrambi utilizzano una struttura ad albero per le relazioni padre-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 Cassetta degli attrezzi si sovrappongono con la finestra Progetto di Unity. Il Gestore Asset ti consente di gestire tutti gli asset all'interno del tuo gioco, mentre la Cassetta degli attrezzi consente di accedere a qualsiasi asset tu abbia pubblicato. La Cassetta degli attrezzi consente anche di cercare nel Negozio dei Creatori asset di Roblox o della community, in modo simile all'Asset Store di Unity.
Differenze filosofiche
Roblox è un "motore di simulazione" piuttosto che un motore di gioco tradizionale. Gli GameObjects di Unity e i Parts di Roblox fungono entrambi da blocchi fondamentali per la creazione di oggetti in un ambiente 3D, ma in pratica, i due sono abbastanza 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 notare immediatamente la differenza se crei un GameObject e un Part. Il GameObject ha solo una posizione, una rotazione e una scala. Il Part ha le stesse informazioni—più un materiale e un colore, valori per riflessione e trasparenza, massa e forma, e molto altro. Trasformare un Part in qualcosa di più simile a un GameObject vuol dire rimuovere molte proprietà incorporate. Al contrario, puoi creare un GameObject che assomiglia molto a un Part aggiungendo i componenti MeshFilter, MeshRenderer, Collider e Rigidbody ad esso.
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 devi) 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 contenitori per una collezione di parti interconnesse nello stesso modo in cui potresti stabilire una relazione padre-figlio tra molti GameObjects in Unity. Specifiche una delle parti del modello come sua parte principale per definire il punto di rotazione. I modelli contengono anche script, animazioni, effetti sonori, prompt, vincoli, emettitori di particelle e altro ancora.
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 comparabile SpringyFireball nella finestra Esplora potrebbe apparire simile a questo:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
La filosofia della fisica predefinita di Roblox si estende anche al processo di costruzione di modelli 3D. In Roblox, saldare più parti insieme in un assemblaggio è un ottimo modo per costruire rapidamente, perché Roblox tratta le parti saldate come un unico corpo rigido. Questo approccio non è disponibile in Unity.
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 è 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. 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.
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 delle 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 gli eventi di collisione fisica, aggiungi codice al metodo OnCollideEnter().
Gli script di Roblox sono più orientati agli eventi. Accedi a funzionalità simili iscrivendoti ai 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 ha generalmente una sintassi lessicale meno verbosa. Tuttavia, nei progetti più grandi, il tipaggio graduale può introdurre categorie di bug che i linguaggi fortemente tipizzati come C# evitano, quindi considera di abilitare il controllo di tipo rigoroso negli script di Roblox.
Per differenze di sintassi di base tra i linguaggi di scripting, vedere Confronto 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 incorporate: un Player con un personaggio Humanoid connesso al server e in grado di 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, visibili nella finestra Progetto. In Roblox, gli asset vengono importati nel tuo Workspace e nella Cassetta degli attrezzi 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 editing simultaneo, gestione di gruppo, permessi, redazione di script e altro. Vedi Collaborazione.
Plugin
Simile agli strumenti di Unity, 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 Negozio dei Creatori, proprio come gli asset, molti dei quali sono gratuiti.
Glossario
| Unity | Roblox | Note |
|---|---|---|
| Scena | Luogo | |
| GameObject | Part o Model | Vedi Differenze filosofiche. |
| Prefab | Pacchetto | |
| Trasformazione | CFrame | CFrame non include informazioni sulla scala. Vedi Trasformazioni. |
| Gerarchia | Esplora | |
| Inspector | Proprietà | |
| Vista della scena | Viewport 3D | |
| Vista del gioco | Viewport 3D | Il viewport si trasforma in una vista di gioco quando testi il tuo gioco. |
| Finestra progetto | Gestore Asset o Cassetta degli attrezzi | |
| Inspector del terreno | Editor di terreno | |
| Punto di spawn | SpawnLocation | |
| Console | Output | |
| Negozio degli asset | Negozio dei Creatori | |
| Sovrapposizioni | Toolbar | |
| Strumento | Plugin |