Esta página contém informações para ajudar desenvolvedores Unity experientes a começarem com o Roblox, incluindo orientação básica, uma comparação conceitual e as principais diferenças entre as duas plataformas.
Se orientar


A janela Hierarquia do Unity e o Explorer do Roblox Studio são as principais janelas para organizar elementos em cenas 3D:
- Ambos permitem gerenciar e organizar objetos (por exemplo, personagens e ativos ambientais).
- Ambos usam uma estrutura de árvore para os relacionamentos pai-filho entre objetos.
No entanto, a janela Hierarquia não possui uma estrutura predefinida, enquanto a janela Explorer tem uma estrutura rígida. Pode ser útil pensar na janela Explorer como uma combinação das janelas Hierarquia e Projeto do Unity, com a pasta Workspace como o elemento mais reconhecível.
Da mesma forma, o Gerenciador de Ativos do Roblox Studio e a Caixa de Ferramentas se sobrepõem à janela Projeto do Unity. O Gerenciador de Ativos permite gerenciar todos os ativos dentro do seu jogo, enquanto a Caixa de Ferramentas permite acessar quaisquer ativos que você publicou. A Caixa de Ferramentas também permite pesquisar na Loja de Criadores por ativos do Roblox ou da comunidade, semelhante à Loja de Ativos do Unity.
Diferenças filosóficas
Roblox é um "motor de simulação" em vez de um motor de jogo tradicional. GameObjects do Unity e Parts do Roblox servem como os blocos de construção fundamentais para criar objetos em um ambiente 3D, mas na prática, os dois são bastante diferentes:
- Representação: GameObjects no Unity são um conceito de nível mais alto para qualquer objeto em uma cena, enquanto Parts no Roblox são projetados para representar objetos físicos como blocos de madeira e esferas plásticas, em vez de geometria abstrata como objetos primitivos no Unity.
- Física: Para realizar simulações físicas no Unity, você anexa componentes como Rigidbody e Collider a um GameObject. No Roblox, a física está embutida no tipo de dado Parts; o motor lida com interações automaticamente.
Você pode ver a diferença imediatamente se criar um GameObject e um Part. O GameObject não tem nada além de uma posição, rotação e escala. O Part tem essas mesmas informações—mais um material e cor, valores para refletância e transparência, massa e forma, e muito mais. Transformar um Part em algo mais parecido com um GameObject vazio significa remover muitas propriedades embutidas. Por outro lado, você pode fazer um GameObject que se pareça muito com um Part adicionando componentes MeshFilter, MeshRenderer, Collider e Rigidbody a ele.
De uma perspectiva de script, GameObject é mais semelhante ao Instance do Roblox, a classe base para todas as outras classes do Roblox, mas como você não pode (e não deve) criar objetos do tipo Instance, a comparação não é especialmente prática.
Outra comparação é o GameObject do Unity com o Model do Roblox. Modelos atuam como um contêiner para uma coleção de partes interconectadas da mesma forma que você poderia estabelecer um relacionamento pai-filho entre muitos GameObjects no Unity. Você especifica uma das partes do modelo como sua parte primária para definir o ponto de pivô. Modelos também contêm scripts, animações, efeitos sonoros, prompts, restrições, emissores de partículas e mais.
Por exemplo, um GameObject do Unity pode ter componentes para ParticleSystem, Physics3D, SpringConstraint e um script. Na janela Hierarquia, você vê um único GameObject chamado SpringyFireball. A janela Inspector mostra a coleção de componentes e propriedades.
No Roblox, um modelo SpringyFireball comparável na janela Explorer pode parecer algo assim:
Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- ScriptA filosofia de física por padrão do Roblox se estende ao processo de construção de modelos 3D. No Roblox, soldar várias partes juntas em uma montagem é uma excelente maneira de construir coisas rapidamente, porque o Roblox trata as partes soldadas como um único corpo rígido. Essa abordagem não está disponível no Unity.
Em vez de usar unidades métricas padrão para comprimento e massa, o Roblox usa unidades notacionais chamadas studs e Unidades de Massa Roblox (RMUs). Para conversões métricas aproximadas e recomendações sobre uso, veja Unidades.
A localização importa
Os jogos do Roblox são multiplayer por padrão, então o Roblox Studio inclui muitos locais de armazenamento diferentes com comportamentos específicos. Para mais informações, veja runtime cliente-servidor e organização de objetos.
| Localização | Descrição |
|---|---|
| Workspace | Representa o mundo 3D do jogo. Pode executar scripts do servidor que se conectam diretamente a objetos e controlam seu comportamento. |
| ReplicatedFirst | Contém objetos que se replicam para o cliente antes de qualquer outra coisa. Esta localização é ideal para o conjunto mínimo absoluto de objetos e scripts do cliente necessários para exibir uma tela de carregamento. |
| ReplicatedStorage | Contém objetos que são replicados tanto para o cliente quanto para o servidor. Esta localização é ideal para Scripts com um RunContext de Client, ModuleScripts do cliente e ModuleScripts que você deseja usar tanto no servidor quanto no cliente. LocalScripts não são executados a partir desta localização. |
| ServerScriptService | Contém scripts do servidor. Esta localização é ideal para scripts que precisam acessar funcionalidades ou objetos do lado do servidor, como lógica de jogo e armazenamento em nuvem. |
| ServerStorage | Contém objetos do lado do servidor. Esta localização é ideal para objetos grandes que não precisam ser replicados imediatamente para os clientes quando eles entram em um jogo. Scripts não são executados a partir desta localização, mas você pode armazenar ModuleScripts do lado do servidor aqui. |
| StarterPlayer ⟩ StarterCharacterScripts | Contém LocalScripts que são executados quando o personagem aparece. |
| StarterPlayer ⟩ StarterPlayerScripts | Contém LocalScripts que são executados quando o jogador entra no jogo. |
| StarterGui | Contém elementos de GUI que o cliente exibe quando carrega o jogo. LocalScripts podem ser executados a partir desta localização. |
| StarterPack | Geralmente contém apenas Tools, mas também pode incluir LocalScripts para configurar mochilas de jogadores. |
Scripting
Roblox games support three different types of Luau scripts:
Client scripts
These scripts run on the client, and the server has no visibility into their behavior. For legacy reasons, these scripts can take the form of LocalScripts or Scripts with a RunContext value of Client. Client scripts typically live in ReplicatedStorage, StarterPlayerScripts, or StarterCharacterScripts.
Server scripts
These scripts run on the server, and the client has no visibility into their behavior. Server scripts have a RunContext value of Server and typically live in ServerScriptService, the contents of which are not replicated to the client.
Module scripts
These scripts are reusable pieces of code that return exactly one value, typically a function or table (or a table of functions). Rather than duplicating code in client and server scripts, use module scripts to share code and data between the two. Module scripts often live in ReplicatedStorage, but can live elsewhere if you want to share code between scripts on the same side of the client-server boundary.
O Unity não tem o conceito de diferentes tipos de script. Se você optar por fazer um jogo multiplayer, o Unity usa suas bibliotecas de rede para indicar quando um GameObject (e seus scripts) deve ser exclusivo para o servidor.
No Unity, grande parte da funcionalidade do motor está disponível através dos métodos de MonoBehaviour. Por exemplo, para executar código antes do loop de renderização, você adiciona código ao método Update(). Para lidar com eventos de colisão física, você adiciona código ao método OnCollideEnter().
Os scripts do Roblox são mais orientados a eventos. Você acessa funcionalidades semelhantes assinando serviços e ouvindo atualizações.
C# e Luau
Para scripting, o Unity usa C#. O Roblox usa Luau, uma linguagem de script derivada do Lua 5.1.
Comparado ao C#, Luau é tipado gradualmente e geralmente tem uma sintaxe menos verbosa. Em projetos maiores, no entanto, a tipagem gradual pode introduzir categorias de bugs que linguagens fortemente tipadas como C# evitam, então considere habilitar verificação de tipo estrita em scripts do Roblox.
Para diferenças básicas de sintaxe entre as linguagens de script, veja Comparação entre Luau e C#.
Exemplo de código Luau
O seguinte exemplo de código Luau demonstra como, após um jogador equipar uma vara de pescar, escutar a entrada do usuário (neste caso, a tecla E) e chamar funções adicionais:
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Obter um script de módulo do ReplicatedStorage que retorna uma única função
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Supõe que este script é um filho da vara de pescar
local fishingPole = script.Parent
local ACTION_CAST = "Lançar"
-- Verifica se a tecla está pressionada e, em seguida, chama outra função
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Habilita a ação apenas quando o jogador equipa a vara de pescar
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Desabilita a ação quando o jogador des equipa a vara de pescar
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)O script do Roblox pode ser relativamente conciso porque o Roblox tem muitas suposições embutidas: um Player com um personagem Humanoid conectado ao servidor e pode equipar Tools. Essas suposições não existem no Unity, então a implementação seria muito diferente.
Ativos
Unity e Roblox ambos suportam a importação de malhas e modelos personalizados no formato .fbx. Certos tipos de ativos podem exigir configurações e definições de exportação específicas do seu software de modelagem de terceiros. Para mais informações, veja as seguintes páginas:
No Unity, objetos são importados para o seu diretório Assets, visíveis na janela Projeto. No Roblox, ativos são importados para o seu Workspace e na Caixa de Ferramentas ou Gerenciador de Ativos.
O Roblox também oferece um plugin do Blender de código aberto para agilizar o processo de importação.
Transforms
As transformações de Unity e CFrames do Roblox servem a propósitos semelhantes na representação de transformações 3D de objetos:
- Tanto as transformações quanto CFrames representam a posição e a rotação de um objeto no espaço 3D. As transformações incluem escala, enquanto o Roblox usa uma propriedade BasePart.Size que não faz parte do CFrame.
- Ambos suportam multiplicação para transformações complexas e possuem métodos embutidos para outras manipulações.
Colaboração
No Unity, você colabora com sistemas de controle de versão padrão ou serviços pagos como o Controle de Versão do Unity.
Os arquivos do Roblox vivem na nuvem (embora você possa exportar cópias), então o Roblox Studio fornece fluxos de trabalho de colaboração integrados para edição simultânea, gerenciamento de grupos, permissões, elaboração de scripts e mais. Veja Colaboração.
Plugins
Semelhante às ferramentas do Unity, o Roblox Studio suporta plugins, que podem simplificar ou dar a você controle adicional sobre vários aspectos do processo de desenvolvimento. Plugins estão disponíveis na Loja de Criadores, assim como ativos, muitos gratuitamente.
Glossário
| Unity | Roblox | Notas |
|---|---|---|
| Cena | Place | |
| GameObject | Part ou Model | Veja Diferenças filosóficas. |
| Prefab | Pacote | |
| Transform | CFrame | CFrame não inclui informações de escala. Veja Transforms. |
| Hierarquia | Explorer | |
| Inspector | Propriedades | |
| Vista da cena | Viewport 3D | |
| Vista do jogo | Viewport 3D | O viewport se transforma em uma visão de jogo quando você testa seu jogo. |
| Janela do projeto | Gerenciador de Ativos ou Caixa de Ferramentas | |
| Inspector de Terreno | Editor de Terreno | |
| Ponto de spawn | SpawnLocation | |
| Console | Output | |
| Loja de Ativos | Loja de Criadores | |
| Sobreposições | Toolbar | |
| Ferramenta | Plugin |