Resumo
Para fazer um jogo no Roblox Studio, abra o Studio, escolha o template Baseplate, monte a fase com Parts (marque Anchored para elas ficarem paradas) e adicione Scripts no ServerScriptService para as regras, como uma pasta leaderstats para as moedas. Aperte Play (F5) para testar. Depois escolha File > Publish para salvar na sua conta. O jogo fica privado até você liberá-lo (deixá-lo público) no mesmo menu e responder à pergunta sobre conteúdo com restrição de idade.
- Mantenha as regras do jogo em Scripts de servidor. Uma mudança feita por um LocalScript só é vista por aquele jogador, e tudo no dispositivo de um jogador pode ser alterado por um trapaceiro.
- Liberar o jogo exige uma conta em situação regular com pelo menos 2 dias e uma verificação de idade. Se você responder Não à pergunta sobre conteúdo com restrição de idade, a Roblox marca o jogo como Content May Vary e o libera para usuários com idade verificada de 16 anos ou mais. Chegar a todas as idades tem requisitos extras.
- O Studio roda no Windows e no Mac. A página de configuração da Roblox não lista versão para celular ou tablet.
Nesta página
O que você vai construir
O jogo é um percurso curto. Os jogadores começam na SpawnLocation, pulam entre plataformas sobre um chão de lava, pegam moedas e tocam uma plataforma verde de chegada (Finish). A chegada dá uma Win só para quem pegou pelo menos 3 moedas desde que nasceu ou chegou pela última vez, e depois manda o jogador de volta para o começo. Coins e Wins aparecem na lista de jogadores, e todas as regras rodam no servidor.
| Peça | Onde fica | O que faz |
|---|---|---|
SpawnLocation | Direto no Workspace (vem com o template Baseplate) | Onde os jogadores aparecem quando entram e quando renascem. A chegada manda os jogadores de volta para cá. |
Pasta Course | Workspace | Guarda a fase inteira, para o script achar tudo em um lugar só. |
Pasta Lava e suas partes | Dentro de Course | Toda parte dentro dela reseta o jogador que tocar. |
Pasta Coins e suas partes | Dentro de Course | Cada moeda paga 1 Coin ao primeiro jogador que tocar, some e volta depois de 10 segundos. |
Part Finish | Dentro de Course | Dá uma Win a um jogador que pegou 3 moedas nesta rodada e o leva de volta ao começo. |
Script PlayerStats | ServerScriptService | Dá a cada jogador as estatísticas Coins e Wins na lista de jogadores. |
Script CourseService | ServerScriptService | Controla a lava, as moedas e a chegada. O único lugar onde Coins e Wins mudam. |
Workspace
Baseplate Part
SpawnLocation SpawnLocation
Course Folder new
Platform Part new
Lava Folder new
Lava Part new
Coins Folder new
Coin Part new
Finish Part new
ServerScriptService
PlayerStats Script new
CourseService Script new
Você constrói tudo no Workspace à mão no Passo 2. Os dois scripts ficam no ServerScriptService. A Roblox nunca envia os scripts desse contêiner aos jogadores, então ninguém consegue lê-los ou mudá-los a partir do próprio dispositivo.
Passo 1: Instale o Studio e abra uma Baseplate
- Baixe o Roblox Studio no Creator Hub da Roblox e rode o instalador (
RobloxStudio.exeno Windows,RobloxStudio.dmgno Mac). O Studio é um app grátis para Windows e Mac. - Quando ele abrir, entre com a sua conta do Roblox. Se você não tem uma, crie antes em roblox.com.
- Na seção Open a Template, escolha Baseplate. Ela começa com só dois objetos: uma SpawnLocation, onde os personagens aparecem e renascem, e a Baseplate, um chão com textura de grade 4 por 4 alinhada com studs, a unidade de medida do Roblox.
- Abra três janelas que você vai usar o tempo todo. O Explorer lista todos os objetos do jogo, e o Properties muda o objeto selecionado; os dois abrem pelo menu Window ou pela aba Home. O Output mostra os erros dos seus scripts e abre pelo menu Window ou pela aba Script.
Passo 2: Construa o percurso
- No Explorer, passe o mouse sobre Workspace, clique no botão + (ou aperte Ctrl+I, Cmd+I no Mac) e insira uma Folder. Renomeie para
Course. - Passe o mouse sobre Course, clique em + e insira mais duas Folders dentro dela. Chame de
LavaeCoins. - Construa o chão de lava. Clique em Part na aba Home ou Model para inserir um bloco, e use a ferramenta Scale para esticá-lo em uma placa grande e plana que vai ficar embaixo do percurso inteiro, com bastante sobra em todos os lados. No Properties, defina a Color como vermelho e o Material como Neon, marque Anchored e arraste para a pasta
Lava. Agora um jogador que cair de qualquer lugar cai na lava, não na Baseplate. - Construa as plataformas. Insira mais partes do mesmo jeito e use as ferramentas Move e Scale para colocá-las sobre a lava, cada uma alguns studs acima dela, com espaços para pular entre elas. No Properties, confira se Anchored está marcado em cada uma, e arraste para dentro de Course.
- Construa as moedas. Segure a pequena seta do botão Part e escolha Cylinder. Deixe pequena e amarela, marque Anchored e desmarque CanCollide para os jogadores atravessarem em vez de baterem nela. Coloque na pasta
Coins, aperte Ctrl+D (Cmd+D no Mac) para duplicar até ter pelo menos 3, e espalhe sobre as plataformas ao longo do percurso. - Construa a chegada. Insira mais uma parte sobre a lava no fim do percurso, grande o bastante para pousar, pinte de verde, marque Anchored, chame exatamente de
Finishe arraste direto para dentro de Course, não para uma das pastas. - Mova a SpawnLocation para cima da lava no começo do percurso, ao lado da primeira plataforma, para ela ficar sobre a placa. Mantenha direto no Workspace, não dentro de Course: o CourseService procura por ela lá para mandar os jogadores de volta ao começo.
Os nomes importam
O CourseService acha o percurso pelo nome: uma pasta chamada Course direto no Workspace, as pastas Lava e Coins dentro dela, e uma parte chamada Finish dentro dela. Escreva exatamente assim, com as mesmas maiúsculas. Os nomes das partes de lava e das moedas não importam: toda parte direto dentro de Lava é lava, e toda parte direto dentro de Coins é uma moeda.
Passo 3: Adicione Coins e Wins à lista de jogadores
No Explorer, passe o mouse sobre ServerScriptService, clique em +, insira um Script e chame de PlayerStats. Troque todo o conteúdo por isto:
-- Script no ServerScriptService chamado PlayerStats.
-- Dá a cada jogador uma estatística Coins e uma Wins. Uma pasta chamada leaderstats dentro do
-- jogador faz o Roblox mostrar esses valores na lista de jogadores no canto superior direito.
local Players = game:GetService("Players")
local function onPlayerAdded(player: Player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats" -- precisa ser escrito exatamente assim
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
coins.Parent = leaderstats
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Value = 0
wins.Parent = leaderstats
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do -- quem entrou antes desta linha rodar
onPlayerAdded(player)
end
A pasta precisa se chamar leaderstats, tudo em minúsculas. O Roblox lê cada valor dentro dela e mostra na lista de jogadores, com o nome do valor como título da coluna.
Cada jogador ganha uma Folder chamada leaderstats com dois objetos IntValue dentro. Um IntValue guarda um número inteiro, que é tudo de que uma contagem de moedas precisa. O loop no final prepara qualquer jogador que entrou antes da linha do PlayerAdded rodar, então ninguém fica de fora.
O guia de leaderboard (em inglês) monta a mesma pasta com mais detalhes, e depois adiciona salvamento e um top 10 global.
Passo 4: Faça a lava, as moedas e a chegada funcionarem
Insira um segundo Script no ServerScriptService, chame de CourseService e cole isto. É o único lugar onde Coins e Wins mudam. As duas configurações no topo são os números feitos para você mudar.
-- Script no ServerScriptService chamado CourseService.
-- Controla o percurso no servidor, para todos verem a mesma coisa e ninguém conseguir
-- se dar moedas: partes de lava resetam jogadores, moedas pagam 1 Coin e voltam,
-- e a plataforma Finish dá uma Win a quem pegou moedas suficientes nesta rodada.
local Players = game:GetService("Players")
local COINS_TO_FINISH = 3 -- moedas que o jogador precisa pegar em uma rodada antes de o Finish valer
local COIN_RESPAWN_SECONDS = 10
local course = workspace:WaitForChild("Course")
local lavaFolder = course:WaitForChild("Lava")
local coinFolder = course:WaitForChild("Coins")
local finish = course:WaitForChild("Finish") :: BasePart
local spawnLocation = workspace:FindFirstChildOfClass("SpawnLocation")
if not spawnLocation then
warn("CourseService: no SpawnLocation directly in Workspace, so the Finish cannot send players back")
end
-- Moedas pegas nesta rodada: desde que o jogador nasceu ou chegou ao Finish pela última vez
local runCoins: { [Player]: number } = {}
-- Acha o jogador cujo personagem tocou uma parte, ou nil para qualquer outra coisa
local function playerFromHit(otherPart: BasePart): Player?
local character = otherPart:FindFirstAncestorOfClass("Model")
return if character then Players:GetPlayerFromCharacter(character) else nil
end
local function addStat(player: Player, statName: string, amount: number)
local leaderstats = player:FindFirstChild("leaderstats")
local stat = leaderstats and leaderstats:FindFirstChild(statName)
if stat and stat:IsA("IntValue") then
stat.Value += amount
end
end
-- Lava: qualquer parte na pasta Lava reseta o jogador que tocar nela
for _, lava in lavaFolder:GetChildren() do
if lava:IsA("BasePart") then
lava.Touched:Connect(function(otherPart: BasePart)
local character = otherPart:FindFirstAncestorOfClass("Model")
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
humanoid.Health = 0
end
end)
end
end
-- Moedas: o primeiro jogador a tocar uma moeda fica com ela, e ela some até voltar
for _, coin in coinFolder:GetChildren() do
if coin:IsA("BasePart") then
local shownTransparency = coin.Transparency
local taken = false
coin.Touched:Connect(function(otherPart: BasePart)
local player = playerFromHit(otherPart)
if not player or taken then
return -- não é um jogador, ou esta moeda já foi pega
end
taken = true
coin.Transparency = 1
addStat(player, "Coins", 1)
runCoins[player] = (runCoins[player] or 0) + 1
task.delay(COIN_RESPAWN_SECONDS, function()
coin.Transparency = shownTransparency
taken = false
end)
end)
end
end
-- Finish: uma Win para quem fez o percurso, depois de volta ao começo
finish.Touched:Connect(function(otherPart: BasePart)
local player = playerFromHit(otherPart)
if not player or (runCoins[player] or 0) < COINS_TO_FINISH then
return
end
runCoins[player] = 0 -- zera primeiro, para tocar a plataforma de novo não contar duas vezes
addStat(player, "Wins", 1)
local character = player.Character
if character and spawnLocation then
character:PivotTo(spawnLocation.CFrame + Vector3.new(0, 4, 0))
player:SetAttribute("MovementCheckSkip", true) -- para um script de checagem de velocidade, se você adicionar um
end
end)
-- Um personagem novo (depois de um reset ou de uma queda) começa uma rodada nova
local function onPlayerAdded(player: Player)
runCoins[player] = 0
player.CharacterAdded:Connect(function()
runCoins[player] = 0
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do -- quem entrou enquanto este script esperava o Course
onPlayerAdded(player)
end
Players.PlayerRemoving:Connect(function(player: Player)
runCoins[player] = nil
end)
O CourseService olha as pastas Lava e Coins uma vez, quando o jogo começa. Construa todas as partes de lava e moedas no Studio antes de apertar Play: uma parte que outro script adiciona durante o jogo não fica ligada.
| Parte do script | Código | O que faz |
|---|---|---|
| Configurações | COINS_TO_FINISH, COIN_RESPAWN_SECONDS | Quantas moedas um jogador precisa pegar em uma rodada antes de a chegada valer (3), e quanto tempo uma moeda pega fica escondida (10 segundos). |
| Achar o percurso | WaitForChild, FindFirstChildOfClass("SpawnLocation") | Espera Course, Lava, Coins e Finish pelo nome, e acha a SpawnLocation direto no Workspace para onde a chegada manda os jogadores. Se não houver, imprime um aviso no Output. |
| Quem tocou | playerFromHit | A parte que toca pode ser um pé, uma mão ou o cabo de um chapéu. FindFirstAncestorOfClass("Model") sobe até o modelo do personagem, e GetPlayerFromCharacter o transforma em um jogador, ou nil para qualquer coisa que não seja o personagem de um jogador. |
| Lava | humanoid.Health = 0 | Reseta qualquer personagem que tocar uma parte na pasta Lava. |
| Moedas | taken, Transparency = 1, task.delay | O primeiro jogador a tocar uma moeda ganha 1 Coin. A moeda fica invisível e ignora toques até voltar depois de COIN_RESPAWN_SECONDS. Como é o servidor que a esconde, ela some para todos os jogadores. |
| Esta rodada | runCoins | Conta as moedas que cada jogador pegou desde que nasceu ou chegou ao Finish pela última vez. O número Coins na lista de jogadores continua crescendo; esta contagem volta a 0 a cada renascimento e a cada Win. |
| Chegada | runCoins[player] < COINS_TO_FINISH | Ignora um jogador com menos de 3 moedas nesta rodada. Se não, zera a contagem dele primeiro, para ficar em cima da plataforma não pagar duas vezes, soma 1 Win e move o personagem 4 studs acima da SpawnLocation. |
| Rodada nova | CharacterAdded, GetPlayers() | Todo personagem novo começa uma rodada nova. O loop cobre jogadores que entraram enquanto o script ainda esperava o Course. |
| Limpeza | PlayerRemoving | Esquece um jogador que sai. |
A lava define Health como 0, como faz o próprio tutorial de lava da Roblox. Um personagem novo tem um ForceField por 10 segundos depois de nascer em uma SpawnLocation, por padrão, e Humanoid:TakeDamage não faz nada enquanto ele protege. Definir Health diretamente ignora ForceFields, então a lava funciona até logo depois de renascer.
A chegada move o personagem com character:PivotTo(...), que a referência da Roblox chama de jeito principal de mover um modelo por script. Definir a posição da parte raiz do personagem move só aquela parte, separada do resto do corpo.
A linha do MovementCheckSkip não faz nada sozinha. Ela está ali para a checagem de velocidade no servidor do guia de corrida (em inglês): se você adicionar essa checagem depois, o teletransporte da chegada não é marcado como velocidade excessiva.
Por que as regras rodam no servidor
Todas as regras deste percurso ficam no CourseService, um Script de servidor, de propósito. Se um LocalScript somasse a moeda, o novo valor de Coins existiria só no dispositivo daquele jogador: o servidor e os outros jogadores nunca veriam. E tudo no dispositivo de um jogador pode ser alterado. O guia de segurança da Roblox diz que um exploiter tem controle total sobre o próprio estado local e o tráfego de rede, então o servidor precisa tomar toda decisão que importa.
| Um trapaceiro tenta | Resultado | Por quê |
|---|---|---|
| Mudar os próprios Coins ou Wins no dispositivo dele | Só ele vê | Os valores reais ficam no servidor, e só o CourseService os muda. |
| Se teletransportar direto para a chegada | Sem Win | A chegada exige 3 moedas pegas nesta rodada. A página de design defensivo da Roblox usa exatamente este caso de obby, um exploiter que se teletransporta até o fim para pegar recompensas, e recomenda checkpoints que o servidor confere antes de recompensar. |
| Tocar moedas ou a chegada de longe | Possível | O guia de segurança da Roblox diz que exploiters podem disparar eventos Touched a qualquer distância ou frequência. Cada moeda ainda paga uma vez, a quem tocar primeiro, e depois some por 10 segundos para todos. |
| Voar ou se teletransportar até cada moeda, depois até a chegada | Possível | O dispositivo de cada jogador controla o próprio personagem, e a Roblox lista teletransportar e voar entre as coisas que um cliente pode fazer com ele. |
| Ignorar a lava | Possível | O mesmo dispositivo decide se os toques do personagem disparam ou não. Para um primeiro jogo, isso é aceitável. |
Então a regra das moedas impede a trapaça mais simples, um pulo direto para o fim, e não muito mais. Isso é normal em um primeiro jogo. As próximas camadas são uma checagem no servidor de que o personagem está mesmo perto de uma moeda ou da chegada antes de pagar, do jeito que o guia de segurança da Roblox confere a distância de um jogador até uma loja; checkpoints que precisam ser alcançados em ordem, como no guia de checkpoints de obby; e uma checagem de movimento como a do guia de corrida. O que é replicado e o que não é explica a divisão entre cliente e servidor com mais detalhes (guias em inglês).
Passo 5: Teste o jogo
- Confira se Test está selecionado no menu de modo de teste e aperte Play (F5). O seu nome aparece na lista de jogadores com Coins 0 e Wins 0.
- Ande até uma moeda. Coins vai para 1 e a moeda some. Espere 10 segundos e ela volta. Ande até ela de novo: Coins sobe para 2.
- Toque a lava. O seu personagem cai e aparece de novo na SpawnLocation depois de 5 segundos, o tempo de renascimento padrão do Roblox. Coins na lista de jogadores fica igual, mas a sua contagem desta rodada volta a 0.
- Toque a chegada com menos de 3 moedas nesta rodada: nada acontece. Pegue 3 moedas e toque: Wins vai para 1 e você cai de volta na SpawnLocation.
- Aperte Stop (Shift+F5). Escolha Server & Clients no menu, defina 2 clientes e aperte Play (ou F7). Pegue uma moeda em uma janela de cliente e olhe a outra: a moeda sumiu lá também, porque o servidor a escondeu para todos.
Mantenha a janela Output aberta o tempo todo. Estes dois scripts não imprimem nada quando funcionam, então qualquer aviso ou erro vermelho do PlayerStats ou do CourseService é um problema de verdade. Veja Erros comuns.
Passo 6: Publique o seu jogo
- Abra o menu File e escolha Publish. A janela Game details abre.
- Digite um Name, escolha um Genre (o Subgenre é opcional) e escreva uma Description curta do que os jogadores fazem. Você também pode enviar um ícone e uma thumbnail aqui. Confira os tamanhos antes com o verificador de tamanho de thumbnail e ícone (em inglês) grátis.
- Clique em Save. A Roblox publica o jogo na nuvem e o liga à sua conta, então você pode abri-lo em qualquer computador.
- O jogo agora está publicado, mas privado. Só você, pessoas com acesso Edit e membros de grupo com as funções certas podem jogar.
- Quer opiniões antes de liberar? Escolha File > Invite early testers e escolha até 10 amigos de idade parecida. Se você ainda não fez a verificação de idade, a Roblox pede que faça antes. Os testadores veem uma marca d'água que diz que o jogo é uma prévia.
A partir de agora, salvar no Roblox pelo menu File guarda uma versão do seu jogo na nuvem. File > Publish é o que muda a versão que os jogadores recebem. De vez em quando, jogue a cópia publicada pelo Roblox, fora do Studio, para conferir se ela bate com o que você testou.
Passo 7: Libere o jogo (deixe o seu jogo público)
Liberar (release) é como você deixa o seu jogo público, para que outras pessoas além de você e dos seus colaboradores possam jogar. Antes de começar, confira os requisitos: a sua conta precisa estar em situação regular e ter pelo menos 2 dias, e você precisa de uma verificação de idade, feita por estimativa de idade facial ou documento oficial.
- Abra o menu File e escolha Publish de novo. A janela Publish abre.
- Clique em Continue. (O botão Invite ao lado convida testadores antecipados.)
- Responda à primeira pergunta do Maturity & Compliance Questionnaire da Roblox: o seu jogo tem conteúdo com restrição de idade? Responda pelo que o jogo realmente tem. Se responder Yes, você preenche o questionário inteiro.
- Clique em Publish.
| O que você faz | Rótulo | Quem pode jogar |
|---|---|---|
| Responde Não | Content May Vary | Usuários com idade verificada de 16 anos ou mais. Você pode preencher o questionário inteiro depois no Creator Hub para alcançar um público maior. |
| Responde Sim e preenche o questionário | De acordo com as respostas | Usuários com idade verificada de 16 anos ou mais, ou usuários com idade comprovada de 18 anos ou mais, conforme o que o jogo contém. |
| Cumpre os requisitos para todas as idades | Minimal, Mild ou Moderate (9+), pelo questionário inteiro | Todas as idades. Além dos passos acima, você verifica a conta (estimativa de idade facial se tiver menos de 18, documento oficial se tiver 18 ou mais), ativa a verificação em duas etapas, mantém uma assinatura Roblox Plus ou Premium por 2 meses seguidos ou paga uma taxa única reembolsável, e o jogo passa na avaliação da Roblox para liberação a todas as idades. |
Para deixar entrar só os seus amigos, abra o Creator Dashboard, selecione o jogo, vá em Publish settings > Manage Audience, clique em Manage access, ative Friends na aba Public e clique em Save Changes. Com Friends ativado, só os seus amigos e as pessoas na aba Playtest podem jogar.
Os mesmos requisitos valem para toda ação de liberação: a primeira liberação, liberar uma versão nova de um jogo que já está no ar, liberar para outro jogo com Publish As e mudar quem pode jogar.
Faça com amigos
As ferramentas de colaboração do Studio deixam você e um amigo editarem o mesmo jogo ao mesmo tempo. Para um jogo que é seu:
- Com o jogo aberto no Studio, clique em Collaborate no lado direito da barra superior, a barra que tem o botão Play do lado esquerdo.
- Procure o seu amigo, selecione, escolha Edit no menu de permissões e clique em Save. Em um jogo que é seu, só amigos do Roblox podem receber acesso Edit.
- O seu amigo abre o jogo pelo Creator Dashboard, e vocês dois trabalham no mesmo jogo ao mesmo tempo.
Para colaborar com outros criadores, você precisa antes fazer a verificação de idade, por documento ou estimativa de idade facial. Depois disso, por padrão, o Studio só deixa você colaborar com criadores de faixas etárias compatíveis. Você pode usar o Team Create sozinho sem verificação de idade. Durante uma sessão colaborativa, o Studio salva o jogo na nuvem a cada quatro minutos.
Transforme em um jogo de verdade
O percurso é um ciclo completo: jogar, pegar, chegar, vencer. Cada um destes guias adiciona um sistema por cima dele (guias em inglês, exceto o de scripting).
- Novo em scripts? Como programar no Roblox Studio cobre variáveis, funções, eventos e loops, as peças de que o CourseService é feito.
- Salve Coins e Wins entre sessões com o Passo 3 do guia de leaderboard. O script de salvamento dele substitui um script de Coins e Wins como o PlayerStats, então apague o PlayerStats quando adicioná-lo. O tutorial de DataStore explica o salvamento a fundo.
- Checkpoints em ordem, com uma estatística Stage e renascimento no último checkpoint: o guia de checkpoints de obby. O script dele cria a própria pasta leaderstats, então copie as linhas de Coins e Wins do PlayerStats para essa pasta e apague o PlayerStats. Dois scripts que criam leaderstats dão duas pastas a cada jogador, e Coins e Wins podem parar de mudar.
- Gaste as moedas em uma loja com GUI. Ela usa o valor Coins dos leaderstats, então pule o script Leaderstats dela: o PlayerStats já cria Coins.
- Venda uma vantagem por Robux com um game pass. Antes de definir o preço, a calculadora de taxa de Robux grátis mostra quanto cada venda rende depois da parte da Roblox, e a calculadora de DevEx quanto esses Robux valem em dólares americanos.
- Uma tela de título com botão Play: o guia de menu principal.
- Rodadas com intervalo, mapas aleatórios e cronômetro: o guia de sistema de rodadas, que soma no mesmo valor Wins. Pule o script de leaderstats dele, porque o PlayerStats já cria Wins.
- Uma cutscene de abertura com tomadas de câmera, legendas e botão Skip: o guia de cutscene.
- Uma porta para uma área secreta que abre com E, com tranca opcional por chave: o guia de portas.
- Plataformas de teletransporte entre partes do mapa, ou um menu de teletransporte: o guia de teletransporte.
- Correr com Shift no teclado, no celular e no controle, com a checagem de movimento no servidor: o guia de corrida. A checagem de movimento dele lê o atributo
MovementCheckSkipque a chegada define. - Uma luta ou outro ciclo: dê aos jogadores uma espada ou uma arma com raycast, ou comece um jogo novo em que os jogadores clicam por moedas, compram upgrades e fazem rebirth, com o guia de jogo simulador.
Erros comuns
Abra a janela Output (menu Window ou aba Script) antes de apertar Play. A maioria dos problemas neste percurso imprime um aviso ou um erro ali, ou vem de um nome que não bate.
Infinite yield possible on 'Workspace:WaitForChild("Course")'
O CourseService esperou 5 segundos por uma pasta chamada Course direto no Workspace e não achou. Confira a grafia e o C maiúsculo. O mesmo aviso citando Lava, Coins ou Finish quer dizer que esse objeto não está dentro de Course ou tem outro nome. Até ele aparecer, nada depois dessa linha roda, então a lava, as moedas e a chegada não fazem nada.
Coins e Wins não aparecem na lista de jogadores
Confira se o nome da pasta no PlayerStats é leaderstats, tudo em minúsculas, e se o PlayerStats é um Script, não um LocalScript, direto dentro do ServerScriptService. Se os dois estiverem certos, procure um erro vermelho do PlayerStats no Output.
Um erro vermelho do CourseService assim que aperto Play
Confira CanTouch no Properties de cada parte de lava, cada moeda e da chegada. Se estiver desligado em qualquer uma quando você aperta Play, o Roblox dá um erro quando o CourseService conecta o Touched àquela parte, e o script para ali: nada depois desse ponto funciona, então moedas seguintes, a chegada ou o reset da rodada podem nunca ser ligados. Marque CanTouch em todas e aperte Play de novo.
Tocar uma moeda não faz nada
A moeda precisa ser uma parte direto dentro da pasta Coins, não dentro de outra pasta ou de um modelo ali, porque o CourseService só olha os filhos diretos da pasta. Ela também precisa estar lá antes de você apertar Play, com CanTouch marcado (veja o item acima).
Toco a chegada e nada acontece
Você precisa de 3 moedas pegas nesta rodada, desde que nasceu ou chegou ao Finish pela última vez. Tocar a lava zera essa contagem, e uma Win também, mesmo o número Coins na lista de jogadores ficando igual. Confira também se a parte se chama exatamente Finish e está direto dentro de Course.
A chegada dá a Win mas não me leva de volta
O CourseService procura a SpawnLocation direto no Workspace, e imprime um aviso no Output quando não acha nenhuma lá. Se você arrastou a SpawnLocation para dentro de Course ou de uma das pastas, arraste de volta para o Workspace no Explorer e aperte Play de novo.
A lava não me reseta
A parte de lava precisa estar direto dentro da pasta Lava antes de você apertar Play, com CanTouch marcado. Uma parte de lava colocada em outro lugar de Course é só uma plataforma vermelha.
Minhas plataformas ou moedas caem quando aperto Play
Elas não estão ancoradas. Selecione, marque Anchored no Properties e aperte Play de novo.
Ou descreva o jogo para o RoCode
Se você prefere descrever o jogo a construir cada peça à mão, o RoCode pode construí-lo no jogo que você tem aberto. O RoCode é um agente de IA independente para Roblox Studio, não feito pela Roblox: você descreve o recurso no chat na web, e o plugin dele para o Studio cria as partes e os scripts no seu Explorer, então você não copia código de uma janela de chat.
Faça um percurso de moedas: uma pasta Course com as pastas Lava e Coins e uma parte Finish, os leaderstats Coins e Wins, lava que reseta os jogadores, moedas que valem 1 e voltam depois de 10 segundos, e uma chegada que dá uma Win só depois de 3 moedas nesta rodada.
- Pode procurar antes no seu jogo código de leaderstats ou DataStore que já existe, para estender o que você tem em vez de criar um segundo leaderboard
- Cria a pasta e as partes no Workspace e os Scripts no ServerScriptService
- Compila cada script que escreveu dentro do Studio com Check Script. É uma verificação de compilação, não de tipos nem um teste
- Cria um ponto de desfazer antes e depois de cada lote de alterações, então Ctrl+Z volta um lote de cada vez
Com o plugin 3.9 ou mais recente, o RoCode pode rodar um teste curto e ler os erros, e com o 3.9.11 ou mais recente controlar um personagem de teste para conferir se o jogo funciona, mas ele só confere o que escolheu testar, então você joga também. Construir um jogo inteiro com o RoCode funciona assim, um sistema por prompt. Como o RoCode se conecta ao Studio.
Perguntas frequentes
Dá para fazer um jogo no Roblox de graça?
Sim. O Studio é grátis, e construir e publicar só exigem uma conta do Roblox. Liberar para os jogadores também exige uma conta em situação regular com pelo menos 2 dias e uma verificação de idade. Alguns extras custam Robux, como a taxa reembolsável que é um dos jeitos de chegar a todas as idades.
Dá para fazer um jogo no Roblox pelo celular, iPad ou Chromebook?
A página de configuração da Roblox lista o Studio só para Windows e Mac, então você precisa de um desses computadores para construir um jogo.
Como deixo o meu jogo do Roblox público?
Libere o jogo. No Studio, escolha File > Publish, clique em Continue, responda à pergunta sobre conteúdo com restrição de idade e clique em Publish. Você precisa de uma conta em situação regular com pelo menos 2 dias e de uma verificação de idade. Se responder Não, a Roblox libera o jogo para usuários com idade verificada de 16 anos ou mais. Chegar a todas as idades tem requisitos extras, listados no Passo 7.
Por que os meus amigos não conseguem jogar o meu jogo?
Jogos novos são privados: só você, pessoas com acesso Edit e membros de grupo com as funções certas podem entrar. Libere com File > Publish, o que exige uma verificação de idade e a pergunta sobre conteúdo com restrição de idade, ou convide até 10 amigos de idade parecida como testadores antecipados com File > Invite early testers.
Por que diz que o meu jogo é só para 16+?
Normalmente porque você respondeu Não à pergunta sobre conteúdo com restrição de idade ao liberar. A Roblox então dá ao jogo o rótulo Content May Vary e o libera para usuários com idade verificada de 16 anos ou mais. Uma resposta Sim com o questionário inteiro também dá 16+, ou 18+, conforme o que o jogo contém. Chegar a todas as idades exige verificação da conta, verificação em duas etapas, uma assinatura Roblox Plus ou Premium por 2 meses seguidos ou uma taxa única reembolsável, uma avaliação do jogo e o questionário inteiro.
Como faço um jogo com amigos?
Clique em Collaborate no Studio e dê acesso Edit a um amigo. Para colaborar com outros criadores, você precisa antes fazer a verificação de idade, e depois dela o Studio só deixa você colaborar com criadores de faixas etárias compatíveis, por padrão. Aí vocês dois podem trabalhar no mesmo jogo ao mesmo tempo.
Preciso saber programar?
Não para este guia: você cola dois scripts, e as tabelas explicam o que cada parte faz. Para mudá-los com confiança, comece por programar no Roblox para iniciantes.
Fontes e leitura extra
- Roblox Creator Docs: Roblox Studio setup (em inglês). o Studio é um app grátis para Windows e Mac; instalar e entrar
- Roblox Creator Docs: Create and publish games and places (em inglês). templates, File > Publish, privado por padrão, testadores antecipados, liberar ao público, requisitos de liberação, o limite diário e Manage Audience
- Roblox Creator Docs: Templates (em inglês). o que o template Baseplate contém
- Roblox Creator Docs: Explorer window (em inglês). inserir objetos, pastas e duplicar
- Roblox Creator Docs: Parts (em inglês). inserir partes, cilindros, mover, redimensionar e colorir
- Roblox Creator Docs: Deadly lava tutorial (em inglês). uma parte de lava que define Health como 0 ao tocar
- Roblox Creator Docs: Create a coin collection mechanic (em inglês). partes de moeda com CanCollide desligado e Anchored ligado
- Roblox Creator Docs: Score points tutorial (em inglês). a pasta leaderstats e o nome exato dela
- Roblox Creator Docs: BasePart.CanTouch (em inglês). conectar o Touched a uma parte com CanTouch desligado dá erro
- Roblox Creator Docs: Studio testing modes (em inglês). Test, Play (F5), Stop e Server & Clients
- Roblox Creator Docs: Humanoid:TakeDamage (em inglês). proteção do ForceField, e definir Health diretamente
- Roblox Creator Docs: PVInstance:PivotTo (em inglês). o jeito de mover um modelo por script
- Roblox Creator Docs: Version History (em inglês). versões salvas e as versões publicadas que os jogadores recebem
- Roblox Creator Docs: Security tactics and cheat mitigation (em inglês). nunca confie no cliente; eventos Touched a qualquer distância
- Roblox Creator Docs: Network ownership, movement validation, and physics (em inglês). um cliente pode teletransportar e fazer voar o próprio personagem
- Roblox Creator Docs: Defensive design (em inglês). o caso do obby com teletransporte até o fim
- Roblox Creator Docs: Collaboration (em inglês). o botão Collaborate, acesso Edit, a verificação de idade e o salvamento automático
Como o código foi verificado: todo script desta página passa no verificador de tipos estrito do Luau com as definições da API do Roblox (luau-lsp, 26 de outubro de 2026). A verificação de tipos pega APIs com nome errado e tipos incorretos, não a lógica do jogo, então teste no Studio antes de publicar.