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


Outliner do Unreal e o Explorer do Roblox Studio são as janelas principais para organizar elementos em espaços 3D. Ambos exibem uma hierarquia de objetos e pastas. No entanto, o Outliner tem uma estrutura mais plana e menos definida e mostra apenas Actors. A janela Explorer possui uma estrutura estritamente aninhada e rigorosa, e exibe todos os objetos como parte da hierarquia, mesmo objetos que seriam considerados componentes no Unreal.
O Asset Manager do Roblox Studio e a Toolbox se sobrepõem ao Content Browser do Unreal. O Asset Manager permite gerenciar todos os ativos dentro do seu jogo, enquanto a Toolbox permite acessar quaisquer ativos que você publicou. A Toolbox também permite pesquisar na Creator Store por ativos do Roblox ou da comunidade, semelhante ao Marketplace do Unreal Engine, mas acessível diretamente da interface do usuário do Studio.
Diferenças filosóficas
Roblox é um "motor de simulação" em vez de um motor de jogo tradicional. Actors no Unreal e Parts no Roblox servem como blocos de construção fundamentais, mas na prática, os dois são bastante diferentes:
- Representação: Actors no Unreal são um conceito de nível superior para qualquer objeto em um nível, enquanto Parts no Roblox são projetados para representar objetos físicos, como blocos de madeira e esferas de plástico.
- Física: Para realizar simulações físicas no Unreal, você ativa a física dentro de certos componentes (como StaticMeshComponent) ou adicionando componentes a Actors, como restrições de física. No Roblox, a física é integrada ao tipo de dado Parts; o motor lida com as interações automaticamente.
Você pode ver a diferença imediatamente se criar um Actor e um Part. O Actor tem pouco mais do que uma localização, rotação e escala. O Part possui essas mesmas informações, além de um material e cor, valores para refletância e transparência, massa e forma, e muito mais. Os dois só começam a compartilhar propriedades semelhantes quando você compara um StaticMeshActor no Unreal com um MeshPart no Roblox.


Outra comparação útil é o Actor do Unreal com o Model do Roblox. Modelos atuam como um contêiner para uma coleção de partes interconectadas, da mesma forma que Actors no Unreal são contêineres para componentes. Você especifica uma das partes do modelo como sua parte primária para definir o ponto de pivô. Os modelos também contêm scripts, animações, efeitos sonoros, prompts, restrições, emissores de partículas e muito mais.
Por exemplo, um Actor do Unreal pode ter um NiagaraComponent que usa vários emissores para conseguir o efeito visual desejado, uma malha para a forma, uma restrição de física para adicionar elasticidade e um script para interatividade com o jogador. No Outliner, você vê um único Actor chamado SpringyFireball.
No Roblox, um modelo SpringyFireball comparável na janela Explorer pode parecer algo assim:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
A filosofia de física por padrão do Roblox se estende ao processo de construção de modelos 3D. No Roblox, soldar múltiplas partes juntas em um assemblage é uma ótima maneira de construir rapidamente coisas, porque o Roblox trata as partes soldadas como um único corpo rígido. Essa abordagem não é prática no Unreal.
Em vez de usar unidades métricas padrão para comprimento e massa, o Roblox utiliza unidades nóticas chamadas studs e Roblox Mass Units (RMUs). Para conversões métricas aproximadas e recomendações de uso, consulte Units.
Localização é importante
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, consulte runtime cliente-servidor e organização de objetos.
| Location | Description |
|---|---|
| Workspace | Representa o mundo 3D da experiência. Esta localização funciona bem para scripts de 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 de 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 ModuleScripts que você deseja usar tanto no servidor quanto no cliente. LocalScripts não são executados a partir desta localização, mas Scripts com um RunContext de Client são. |
| ServerScriptService | Contém scripts de 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 uma experiência. 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 gera. |
| StarterPlayer ⟩ StarterPlayerScripts | Contém LocalScripts de uso geral que são executados quando o jogador entra na experiência. |
| StarterGui | Contém elementos da GUI que o cliente exibe ao carregar a experiência. LocalScripts podem ser executados a partir desta localização. Esta localização é ideal para scripts que modificam a interface do usuário da experiência, como adicionar botões, menus e pop-ups. |
| StarterPack | Geralmente contém apenas Tools, mas também pode incluir LocalScripts para configurar mochilas de jogadores. |
Scripting
As experiências Roblox suportam três tipos diferentes de scripts Luau:
Scripts do cliente
Esses scripts são executados no cliente, e o servidor não tem visibilidade sobre seu comportamento. Por razões de compatibilidade, esses scripts podem assumir a forma de LocalScripts ou Scripts com um valor de RunContext de Client. Scripts do cliente geralmente estão localizados em ReplicatedStorage, StarterPlayerScripts ou StarterCharacterScripts.
Scripts do servidor
Esses scripts são executados no servidor, e o cliente não tem visibilidade sobre seu comportamento. Scripts do servidor têm um valor de RunContext de Server e geralmente estão localizados em ServerScriptService, cujo conteúdo não é replicado para o cliente.
Scripts de módulo
Esses scripts são peças reutilizáveis de código que retornam exatamente um valor, tipicamente uma função ou tabela (ou uma tabela de funções). Em vez de duplicar código em scripts do cliente e do servidor, utilize scripts de módulo para compartilhar código e dados entre os dois. Scripts de módulo frequentemente estão localizados em ReplicatedStorage, mas podem estar em outros lugares se você quiser compartilhar código entre scripts no mesmo lado da fronteira cliente-servidor.
O Unreal não tem o conceito de diferentes tipos de script. Se você optar por criar um jogo multiplayer, você escreve código adicional para sincronizar o estado do jogo entre o servidor e os clientes.
No Unreal, muita da funcionalidade do motor está disponível estendendo classes embutidas como UObject, ACharacters, ULevel e UWorld em C++ ou Blueprint. O Unreal suporta eventos personalizados, mas muitas classes incluem eventos que o motor invoca automaticamente como parte do ciclo de vida natural do nível.
Comparado ao sistema de "tick" do Unreal, os scripts do Roblox são muito mais orientados a eventos. Você acessa funcionalidade semelhante do motor assinando serviços e ouvindo atualizações.
C++ e Luau
Para scripting, o Unreal usa C++. O Roblox usa Luau, uma linguagem de script derivada do Lua 5.1.
Comparado ao Luau, o C++ tem uma vantagem de desempenho geral, o que pode ou não ser relevante para os tipos de jogos que você deseja construir. O Luau é tipado gradualmente e 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.
O Unreal também inclui um sistema de scripting visual chamado Blueprints. O Roblox tem plugins de terceiros que oferecem funcionalidade similar, mas nenhum sistema comparável embutido.
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 integradas: um Player com um personagem Humanoid conectado ao servidor e pode equipar Tools. Essas suposições não existem no Unreal, então a implementação seria muito diferente.
Ativos
Tanto o Unreal quanto o Roblox suportam a importação de malhas e modelos personalizados no formato .fbx. Certos tipos de ativos podem exigir configurações e opções de exportação específicas de seu software de modelagem de terceiros. Para mais informações, consulte as seguintes páginas:
No Unreal, os ativos são importados para o seu diretório Content, visíveis no Content Browser. No Roblox, os ativos são importados para o seu Workspace e na Toolbox ou Asset Manager.
O Roblox também oferece um plugin open-source para Blender para agilizar o processo de importação, semelhante ao recurso Send to Unreal das Blender Tools.
Transforms
As transformações de Unreal Engine 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 Unreal, você colabora com sistemas de controle de versão como Perforce ou SVN, geralmente através da interface do usuário embutida do Unreal. Esses sistemas de controle de versão usam o modelo centralizado de "checkout" que bloqueia arquivos enquanto uma pessoa trabalha neles.
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 embutidos para edição simultânea, gerenciamento de grupos, permissões, elaboração de scripts e muito mais. Consulte Collaboration.
Plugins
Semelhante ao Unreal, o Roblox Studio suporta plugins, que podem simplificar ou oferecer controle adicional sobre vários aspectos do processo de desenvolvimento. Os plugins estão disponíveis na Creator Store, assim como os ativos, muitos deles gratuitos.
Glossário
| Unreal | Roblox | Observações |
|---|---|---|
| Level | Place | |
| Actor | Part ou Model | Consulte Diferenças filosóficas. |
| Blueprint Class | Package | |
| Transform | CFrame | CFrame não inclui informações de escala. Consulte Transforms. |
| Outliner | Explorer | |
| Details panel | Properties | |
| Level Viewport | 3D viewport | |
| Content Browser | Asset Manager ou Toolbox | |
| Landscape Mode | Terrain Editor | |
| PlayerStart | SpawnLocation | |
| Output Log | Output | |
| Marketplace | Creator Store | |
| Menu bar | Toolbar | |
| Plugin | Plugin |