Roblox per gli sviluppatori di Unity

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Questa pagina include informazioni per aiutare gli sviluppatori Unity esperti a iniziare con Roblox: orientamento di base, confronto concettuale e differenze chiave tra le due piattaforme.

Ottieni orientamento

La finestra gerarchia di Unity e Explorer di Roblox Studio sono le finestre principali per organizzare gli elementi nelle scene 3D:

  • Entrambi ti consentono di gestire e organizzare oggetti (ad esempio, personaggi e risorse ambientali).
  • Entrambi utilizzano una struttura albero per le relazioni genitore-figlio tra gli oggetti.

Tuttavia, la finestra Gerarchia non ha una struttura predefinita, mentre la finestra Explorer ha una struttura rigorosa.Potrebbe aiutare a pensare alla finestra Explorer come una combinazione delle gerarchie di Unity e delle finestre Progetto, con la cartella Workspace come l'elemento più riconoscibile.

Allo stesso modo, il Roblox Studio Gestore risorse e Toolbox si sovrappongono alla finestra del progetto Unity.Il gestore delle risorse ti consente di gestire tutte le risorse all'interno della tua esperienza, mentre la Toolbox ti consente di accedere a qualsiasi risorsa che hai pubblicato.La Toolbox ti consente inoltre di cercare nel Creator Store risorse da Roblox o dalla comunità, simili al Unity Asset Store.

Differenze filosofiche

Roblox è un "motore di simulazione" piuttosto che un motore di gioco tradizionale.Unity GameObjects e Roblox Parts entrambi servono come blocchi di costruzione fondamentali per creare oggetti in un Ambiente3D, ma in pratica, i due sono piuttosto diversi:

  • Rappresentazione : GameObjects in Unity sono un concetto di livello superiore per qualsiasi oggetto in una scena, mentre Parts in Roblox sono progettati per rappresentare oggetti fisici come blocchi di legno e sfere di plastica, piuttosto che geometrie astratte come oggetti primitivi in Unity.
  • Fisica : Per eseguire simulazioni di fisica in Unity, aggiungi componenti come Rigidbody e Collider a un GameObject .In Roblox, la fisica è incorporata nel inserisci / scrividi dati Parts ; il motore gestisce le interazioni in modo automatico.

Puoi vedere la differenza immediatamente se crei un GameObject e un Part.Il GameObject non ha altro che una posizione, una rotazione e una Ridimensionare.Il Part ha le stesse informazioni - più un materiale e un colore, valori di riflettanza e trasparenza, massa e forma, e molto altro ancora.Trasformare un Part in qualcosa di più simile a uno vuoto GameObject vuol dire rimuovere molte proprietà predefinite.Allo stesso modo, puoi creare un GameObject che sembra molto un Part aggiungendo MeshFilter , MeshRenderer , Collider e Rigidbody componenti ad esso.

Da una prospettiva di scripting, GameObject è più simile alla Roblox Instance, la classe base per tutte le altre ClassiRoblox, ma poiché non crei (e non puoi) oggetti di tipo Instance, il confronto non è particolarmente pratico.

Un'altra comparazione è l'Unity GameObject con il Roblox Model .I modelli agiscono come contenitore per una collezione di parti interconnesse allo stesso modo in cui potresti stabilire una relazione genitore-figlio tra molte GameObjects in Unity.Specifichi 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, emittenti di particelle e altro ancora.

Ad esempio, un Unity GameObject potrebbe avere componenti per ParticleSystem , Physics3D , SpringConstraint e uno script.Nella finestra gerarchia, vedi un singolo GameObject nominato SpringyFireball.La finestra dell'ispettore mostra la raccolta di componenti e proprietà.

In Roblox, un modello comparabile SpringyFireball nella finestra Explorer potrebbe sembrare qualcosa del genere:


Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- Script

La filosofia fisica 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 è disponibile in Unity.

Piuttosto che utilizzare unità metriche standard per lunghezza e massa, Roblox utilizza unità nominali chiamate studs e Roblox Unità di massa (RMU).Per le conversioni e le raccomandazioni metriche approssimate attorno all'uso, vedi Unità.

La posizione conta

Le esperienze di Roblox sono multiplayer per impostazione predefinita, quindi Roblox Studio include molti luoghi di archiviazione diversi con comportamenti specifici.Ad esempio, uno script potrebbe essere eseguito quando lo metti in ReplicatedStorage , ma non quando lo metti in StarterPlayerScripts .Per ulteriori informazioni, vedi Runtime client-server e Organizzazione dell'oggetto.

Posizione | Descrizione :--- | :--- Workspace | Rappresenta il Mondodel gioco.Questa posizione funziona bene per gli script del 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 minimo assoluto set 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 Class.ModuleScript\|ModuleScripts che vuoi utilizzare sia sul server che sul client.Class.LocalScript\|LocalScripts non fuggi da questa posizione, ma Class.Script\|Scripts con un contesto di esecuzione di Client fai.ServerScriptService | Contiene gli script del server.Questa posizione è ideale per gli script che devono accedere alla funzionalità lato server o agli oggetti, come la logica di gioco e lo storage cloud.ServerStorage | Contiene oggetti lato server.Questa posizione è ideale per oggetti grandi che non hanno bisogno di essere replicati immediatamente ai client quando si uniscono a un'esperienza.Gli script non vengono eseguiti da questa posizione, ma puoi archiviare il lato server Class.ModuleScript\|ModuleScripts qui.StarterPlayer.StarterCharacterScripts | Contiene Class.LocalScript\|LocalScripts che si eseguono quando il personaggio si genera.StarterPlayer.StarterPlayerScripts | Contiene script di uso generale Class.LocalScript\|LocalScripts che si eseguono quando il giocatore si unisce all'esperienzaStarterGui | Contiene elementi GUI che il client mostra quando carica il Gioco.Class.LocalScript\|LocalScripts può fuggire da questa posizione.Questa posizione è ideale per gli script che modificano l'interfaccia utente del Gioco, come l'aggiunta di pulsanti, menu e popup.StarterPack | Generalmente contiene solo Class.Tool\|Tools, ma può anche includere Class.LocalScript\|LocalScripts per configurare i backpack del giocatore.

Programmazione

Le esperienze di Roblox supportano tre diversi tipi di script Luau:

  • Script dei client

    Questi script vengono eseguiti sul client e il server non ha visibilità sul loro comportamento.Per motivi legacy, questi script possono assumere la forma di LocalScripts o Scripts con un valore RunContext di Client .Gli script del client vivono tipicamente in ReplicatedStorage , StarterPlayerScripts , o StarterCharacterScripts .

  • Script del server

    Questi script vengono eseguiti sul Servere il client non ha visibilità sul loro comportamento.Gli script del server hanno un valore di RunContext di Server e in genere vivono in ServerScriptService, il cui contenuto non viene replicato al client del gioco.

  • Script del modulo

    Questi script sono pezzi di codice riutilizzabili che restituiscono esattamente un valore, tipicamente una funzione o una tabella (o una tabella di funzioni).Invece di duplicare il codice negli script del client e del server, utilizza gli script del modulo per condividere codice e dati tra i due.Gli script del modulo vivono spesso in ReplicatedStorage, ma possono vivere altrove se vuoi condividere il codice tra gli script sullo stesso lato del confine client-server.

Unity non ha il concetto di diversi tipi di script.Se scegli di creare un Giocomultiplayer, Unity utilizza le sue librerie di networking per indicare quando un GameObject (e i suoi script) dovrebbero essere esclusivi per il Server.

In Unity, gran parte della funzionalità del motore è disponibile attraverso i metodi di MonoBehaviour .Ad esempio, per eseguire il codice prima del ciclo di rendering, aggiungi il codice al metodo Update().Per gestire gli eventi di collisione fisica, aggiungi codice al metodo OnCollideEnter() .

Gli script di Roblox sono più basati sugli eventi. Accedi a funzionalità simili iscrivendoti ai servizi e ascoltando gli aggiornamenti.

C# e Luau

Per gli script, Unity utilizza C#. Roblox utilizza Luau , un linguaggio di scripting derivato da Lua 5.1 .

Rispetto a C#, Luau è gradualmente tipizzato e generalmente ha una sintassi meno verbosa.In progetti più grandi, tuttavia, la digitazione graduale può introdurre categorie di bug che i linguaggi fortemente tipizzati come C# evitano, quindi considera di abilitare controllo rigoroso del tipo in script Roblox.

Per le differenze di sintassi di base tra i linguaggi di scripting, vedi Confronto di Luau e C#.

Esempio di codice Luau

Il seguente esempio di codice Luau mostra come, dopo che un giocatore equipaggia una canna da pesca, ascoltare l'input dell'utente (in questo caso, la chiave E ) e chiamare funzioni aggiuntive:


-- Ottieni i servizi di gioco necessari
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Ottieni uno script del modulo da ReplicatedStorage che restituisce una singola funzione
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Presume che questo script sia un figlio della canna da pesca
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Controlla che la chiave è giù, quindi chiama un'altra funzione
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Abilita l'azione solo quando il giocatore equipaggia la canna da pesca
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Disabilita l'azione quando il giocatore disequipa la canna da pesca
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)

Lo script di Roblox può essere relativamente conciso perché Roblox ha molte congetture predefinite: un Player con un personaggio Humanoid connesso al server e può equipaggiare Tools .Queste supposizioni non esistono in Unity, quindi l'implementazione sarebbe molto diversa.

Risorse

Unity e Roblox entrambi supportano l'importazione di mesh e modelli personalizzati in formato .fbx .Ci possono essere alcuni tipi di risorse che richiedono configurazioni e impostazioni di esportazione specifiche dal tuo software di modellazione di terze parti.Per ulteriori informazioni, vedi le seguenti pagine:

In Unity, gli oggetti vengono importati nel tuo directory Assets , visibile nella finestra Progetto.In Roblox, le risorse vengono importate nel tuo Workspace e nella sezione Toolbox o Inventory della Gestore risorse .

Roblox offre anche un plugin open source Blender per velocizzare il processo di importazione.

Transformazioni

Le trasformazioni di props.engine e Roblox's CFrames servono a scopi simili nel rappresentare le trasformazioni 3D degli oggetti:

  • Entrambi i trasform e CFrames rappresentano la posizione e la rotazione di un oggetto nello Spazio3D.Le trasformazioni includono la Ridimensionare, mentre Roblox utilizza una proprietà BasePart.Size che non fa parte del CFrame.
  • Entrambi supportano la moltiplicazione (cioè la composizione) per trasformazioni complesse e hanno metodi integrati per altre manipolazioni.

Collaborazione

In Unity, collabori con sistemi di controllo della versione standard o servizi a pagamento come Unity Version Control.

I file Roblox vivono nel cloud (anche se puoi esportare copie), quindi Roblox Studio fornisce flussi di lavoro di collaborazione integrati per l'editing simultaneo, la gestione dei gruppi, le autorizzazioni, la stesura di script e altro ancora.Vedi Collaborazione.

Plugin

Come gli strumenti di Unity, Roblox Studio supporta plug-in, 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, molte Gratis.

Glossario

| Unità | Roblox | Note | | :--- | :--- | :--- | | Scena | Luogo | | | GameObject | Part o Model | Vedi Differenze filosofiche .| | Prefab | Pacchetto | | | Trasforma | CFrame | CFrame non include informazioni sulla scala.Vedi Trasformazioni.| | Finestra gerarchia | Finestra Explorer | | | Ispettore | Finestra Proprietà | | Vista scena | Vista porta | | Vista di gioco | Vista porta | Le transizioni della vista si trasformano in una vista di gioco quando testi la tua esperienza.| | Finestra progetto | Gestore risorse o Toolbox | | | Ispettore del terreno | Editor del terreno | | | Punto di spawn | SpawnLocation | | | Console | Output | | | Negozio risorse | Creator Store | | | Sovrapposizioni | Barra menu | | | Strumento | Plugin | | |