Roblox para desenvolvedores da Unity

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Esta página inclui informações para ajudar desenvolvedores de Unidade experientes a começar com o Roblox: orientação básica, uma comparação conceitual e diferenças importantes entre as duas plataformas.

Se oriente

A janela de hierarquia da Unity e o Explorador do Roblox Studio são as janelas principais para organizar elementos em cenas 3D:

  • Ambos permitem que você gerencie e organize objetos (por exemplo, personagens e recursos ambientais).
  • Ambos usam uma estrutura de árvore para as relações pai-filho entre objetos.

No entanto, a janela Hierarquia não tem estrutura pré-definida, enquanto a janela Explorer tem uma estrutura rigorosa.Pode ajudar a pensar na janela do Explorer como uma combinação das janelas Hierarchy e Project da Unity, com o arquivo Workspace como o elemento mais reconhecível.

Da mesma forma, o Gerenciador de Recursos do Roblox Studio e a Caixa de Ferramentas se sobrepõem à janela do Projeto Unity.O Gerenciador de Recursos permite que você gerencie todos os recursos dentro da sua experiência, enquanto a Caixa de Ferramentas permite que você acesse quaisquer recursos que tenha publicado.A Caixa de Ferramentas também permite que você pesquise a Loja do Criador por recursos do Roblox ou da comunidade, semelhante à Loja de Recursos da Unity.

Diferenças filosóficas

O Roblox é um "motor de simulação" em vez de um motor de jogo tradicional.Unity GameObjects e Roblox Parts ambos 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 em Unity são um conceito de nível superior para qualquer objeto em uma cena, enquanto Parts em Roblox são projetados para representar objetos físicos como blocos de madeira e esferas de plástico, ao invés de geometria abstrata como objetos primitivos em Unity.
  • Física : Para executar simulações de física no Unity, você anexa componentes como Rigidbody e Collider a um GameObject .No Roblox, a física é construída no digitarde 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 mais do que uma posição, rotação e dimensionar/escalonar.O Part tem a mesma informação - mais um material e cor, valores para refletância e transparência, massa e forma, e muito mais.Transformar um Part em algo mais próximo de um vazio GameObject significa remover muitas propriedades integradas.Por outro lado, você pode fazer um GameObject que se parece muito com um Part adicionando MeshFilter , MeshRenderer , Collider e Rigidbody componentes a ele.

Do ponto de vista de scripts, GameObject é mais semelhante ao Roblox Instance, a classe base para todas as outras Classesdo Roblox, mas porque você não cria objetos do tipo Instance, a comparação não é especialmente prática.

Outra comparação é a Unidade GameObject para o Roblox Model .Modelos atuam como um contêiner para uma coleção de peças interconectadas da mesma maneira que você pode estabelecer uma relação pai-filho entre muitos GameObjects em 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 muito mais.

Por exemplo, um Unity GameObject pode ter componentes para ParticleSystem , Physics3D , SpringConstraint e um script.Na janela de Hierarquia, você vê um único GameObject chamado SpringyFireball.A janela do Inspector mostra a coleção de componentes e propriedades.

No Roblox, um modelo comparável SpringyFireball na janela do Explorer pode parecer algo assim:


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

A filosofia de física padrão do Roblox se estende ao processo de construção de modelos 3D.No Roblox, soldar múltiplas peças juntas em uma montagem é uma excelente maneira de construir rapidamente coisas, porque o Roblox trata as peças 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 noticiais chamadas studs e Roblox Mass Units (RMUs).Para conversões e recomendações aproximadas de métricas em torno do uso, veja Unidades.

Questões de localização

As experiências do Roblox são multijogador por padrão, então o Roblox Studio inclui muitos locais de armazenamento diferentes com comportamentos específicos.Por exemplo, um script pode ser executado quando você colocá-lo em ReplicatedStorage, mas não quando você colocá-lo em StarterPlayerScripts.Para mais informações, veja Tempo de execução cliente-servidor e Organização de objetos.

Localização | Descrição :--- | :--- Espaço de Trabalho | Representa o mundo do jogo.Esta localização funciona bem para scripts de servidor que se anexam 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 página de carregamento.ReplicatedStorage | Contém objetos que são replicados tanto para o cliente quanto para o servidor.Esta localização é ideal para Class.ModuleScript\|ModuleScripts que você deseja usar tanto no servidor quanto no cliente.Class.LocalScript\|LocalScripts não corra desta localização, mas Class.Script\|Scripts com um contexto de execução de Client faça.Serviço de Script de Servidor | 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.Armazenamento do Servidor | Contém objetos do lado do servidor.Esta localização é ideal para objetos grandes que não precisam ser imediatamente replicados aos clientes quando eles se juntam a uma experiência.Scripts não são executados a partir desta localização, mas você pode armazenar o lado do servidor Class.ModuleScript\|ModuleScriptsStarterPlayer.StarterCharacterScripts | Contém Class.LocalScript\|LocalScripts que são executados quando o personagem é gerado.StarterPlayer.StarterPlayerScripts | Contém scripts gerais de propósito Class.LocalScript\|LocalScripts que são executados quando o jogador se junta à experiência.StarterGui | Contém elementos de GUI que o cliente exibe quando carrega o jogo.Class.LocalScript\|LocalScripts pode correr desta localização.Esta localização é ideal para scripts que modificam a interface do usuário do jogo, como adicionar botões, menus e pop-ups.Pacote de Iniciante | Geralmente contém apenas Class.Tool\|Tools, mas também pode incluir Class.LocalScript\|LocalScripts para configurar mochilas de jogador.

Programação

As experiências do Roblox suportam três tipos diferentes de scripts Luau:

  • Scripts de cliente

    Esses scripts são executados no cliente e o servidor não tem visibilidade em seu comportamento.Por razões legadas, esses scripts podem tomar a forma de LocalScripts ou Scripts com um valor de RunContext de Client.Scripts de cliente tipicamente vivem em ReplicatedStorage , StarterPlayerScripts ou StarterCharacterScripts .

  • Scripts do servidor

    Esses scripts são executados no servidor e o cliente não tem visibilidade em seu comportamento.Os scripts do servidor têm um valor de RunContext de Server e normalmente vivem em ServerScriptService, o conteúdo do qual não é replicado para o cliente do jogo.

  • Scripts de módulo

    Esses scripts são pedaços reutilizáveis de código que retornam exatamente um valor, geralmente uma função ou tabela (ou uma tabela de funções).Em vez de duplicar código em scripts de cliente e servidor, use scripts de módulo para compartilhar código e dados entre os dois.Scripts de módulo muitas vezes vivem em ReplicatedStorage, mas podem viver em outro lugar se você quiser compartilhar código entre scripts no mesmo lado do limite cliente-servidor.

A Unidade não tem o conceito de diferentes tipos de scripts.Se você optar por fazer um jogo multiplayer, a Unity usa suas bibliotecas de rede para indicar quando um GameObject (e seus scripts) devem ser exclusivos para o servidor.

Na Unidade, muito 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 baseados em eventos. Você acessa funcionalidades semelhantes ao se inscrever em serviços e ouvir atualizações.

C# e Luau

Para scripting, a Unity usa C#. O Roblox usa Luau, um idioma de script derivado de Lua 5.1.

Comparado ao C#, o Luau é gradualmente tipado e geralmente tem uma síntaxe menos verbosa.Em projetos maiores, no entanto, a digitação gradual pode introduzir categorias de bugs que os idiomas fortemente tipados como C# evitam, portanto, considere habilitar verificação de tipo rigorosa em scripts do Roblox.

Para diferenças de síntese básicas entre os idiomas de programação, veja Comparação de Luau e C#.

Exemplo de código Luau

O seguinte exemplo de código Luau mostra como, depois que um jogador equipa uma vara de pesca, ouvir a entrada do usuário (neste caso, a chaveE ) e chamar funções adicionais:


-- Obtenha os serviços de jogo necessários
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Obtenha um script de módulo do ReplicatedStorage que retorne uma única função
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Assume que este script é um filho da vara de pesca
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Verifique se a chave está baixo, então chame outra função
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Ative apenas a ação quando o jogador equipar a vara de pesca
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Desabilite a ação quando o jogador desequipar 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 na Unity, então a implementação seria muito diferente.

Recursos

Unidade e Roblox ambos suportam a importação de malhas e modelos personalizados no formato .fbx .Certos tipos de recursos podem exigir configurações e configurações de exportação específicas de seu software de modelagem de terceiros.Para mais informações, consulte as seguintes páginas:

Na Unidade, objetos são importados para o seu diretório Assets na unidade, visível na janela do Projeto.No Roblox, os recursos são importados para o seu Espaço de Trabalho e na seção Caixa de Ferramentas ou Inventário da Gerenciador de Recursos.

O Roblox também oferece um plugin de código aberto Blender para simplificar o processo de importação.

Transformações

As transformações do props.engine e do Roblox's CFrames servem a propósitos semelhantes ao representar transformações 3D de objetos:

  • Ambas as transformações e CFrames representam a posição e a rotação de um objeto no espaço 3D.Transformações incluem dimensionar/escalonar, enquanto o Roblox usa uma propriedade BasePart.Size que não faz parte do CFrame.
  • Ambos suportam multiplicação (ou seja, composição) para transformações complexas e têm métodos integrados para outras manipulações.

Colaboração

Na Unidade, você colabora com sistemas de controle de versão padrão ou serviços pagos como Controle de Versão da Unidade.

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 muito mais.Veja Colaboração.

Plugins

Semelhante às ferramentas da 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 do Criador, assim como recursos, muitos grátis.

Glossário

| Unidade | Roblox | Notas | | :--- | :--- | :--- | | Cena | Lugar | | | GameObject | Part ou Model | Veja Diferenças filosóficas .| | Prefab | Pacote | | | Transform | CFrame | CFrame não inclui informações de escala.Veja Transformações.| | Janela de hierarquia | Janela do Explorer | | | Inspector | Janela de propriedades | | Visão da cena | Visão da janela | | Visão do jogo | Visão da janela | As transições da janela de visualização se transformam em uma visão de jogabilidade quando você testa sua experiência.| | Janela do projeto | Gerenciador de recursos ou Caixa de ferramentas | | | Inspector de terreno | Editor de terreno | | | Ponto de spawn | SpawnLocation | | | Console | Saída | | | Loja de recursos | Loja do Criador | | | Superposições | Barra de menu | | | Ferramenta | Plugin | |