Tutorial · Fundamentos de scripting

Cómo hacer un juego en Roblox Studio, paso a paso

Puedes hacer un juego de Roblox solo con Roblox Studio, que es gratis, y una cuenta de Roblox. Esta guía construye un recorrido corto de monedas a partir de la plantilla Baseplate: plataformas para saltar, lava que te reinicia, monedas en la lista de jugadores y una meta que da una victoria (Win), todo dirigido por dos scripts de servidor. Luego publica el juego y lo lanza para los jugadores, siguiendo las reglas actuales de Roblox sobre quién puede jugarlo.

Actualizado el 26 de octubre de 202622 min de lectura

La respuesta corta

Para hacer un juego en Roblox Studio, abre Studio, elige la plantilla Baseplate, construye tu nivel con Parts (marca Anchored para que no se muevan) y añade Scripts en ServerScriptService para las reglas, como una carpeta leaderstats para las monedas. Pulsa Play (F5) para probarlo. Luego elige File > Publish para guardarlo en tu cuenta. Sigue siendo privado hasta que lo lances (lo hagas público) desde el mismo menú y respondas la pregunta sobre contenido restringido por edad.

  • Deja las reglas del juego en Scripts de servidor. Un cambio que hace un LocalScript solo lo ve ese jugador, y todo lo que hay en el dispositivo de un jugador lo puede cambiar un tramposo.
  • Lanzar el juego necesita una cuenta en regla con al menos 2 días de antigüedad, y una verificación de edad. Si respondes No a la pregunta sobre contenido restringido por edad, Roblox etiqueta el juego como Content May Vary y lo lanza para usuarios con la edad verificada de 16 años o más. Llegar a todas las edades tiene requisitos extra.
  • Studio funciona en Windows y Mac. La página de configuración de Roblox no indica ninguna versión para teléfono o tableta.
En esta página
  1. Lo que construyes
  2. 1. Instalar Studio
  3. 2. Construir
  4. 3. Script PlayerStats
  5. 4. Script CourseService
  6. Reglas en el servidor
  7. 5. Probar
  8. 6. Publicar
  9. 7. Hacerlo público
  10. Con amigos
  11. Siguientes pasos
  12. Errores comunes
  13. Con RoCode
  14. Preguntas frecuentes
  15. Fuentes y lecturas

Lo que vas a construir

IlustraciónEl recorrido terminado en un juego en marcha: tres monedas en una ronda, y luego la meta da una Win y devuelve al jugador al inicio.

El juego es un recorrido corto. Los jugadores empiezan en el SpawnLocation, saltan entre plataformas sobre un suelo de lava, recogen monedas y tocan una meta verde. La meta da una Win solo a un jugador que recogió al menos 3 monedas desde la última vez que apareció o llegó a la meta, y luego lo devuelve al inicio. Coins y Wins se muestran en la lista de jugadores, y todas las reglas se ejecutan en el servidor.

Las piezas del recorrido de monedas
PiezaDónde estáQué hace
SpawnLocationDirectamente en Workspace (viene con la plantilla Baseplate)Donde aparecen los jugadores al entrar y al reaparecer. La meta devuelve aquí a los jugadores.
Folder CourseWorkspaceContiene todo el nivel, para que el script lo encuentre todo en un solo sitio.
Folder Lava y sus partesDentro de CourseCada parte que contiene reinicia al jugador que la toca.
Folder Coins y sus partesDentro de CourseCada moneda paga 1 Coin al primer jugador que la toca, se oculta y vuelve después de 10 segundos.
Part FinishDentro de CourseDa una Win a un jugador que recogió 3 monedas en esta ronda, y luego lo devuelve al inicio.
Script PlayerStatsServerScriptServiceDa a cada jugador una estadística Coins y otra Wins en la lista de jugadores.
Script CourseServiceServerScriptServiceDirige la lava, las monedas y la meta. Es el único sitio donde cambian Coins y Wins.
El Explorer con el recorrido terminado. Añade todas las plataformas, partes de lava y monedas que quieras. Solo los nombres Course, Lava, Coins y Finish son fijos.
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

Todo lo de Workspace lo construyes a mano en el paso 2. Los dos scripts van en ServerScriptService. Roblox nunca envía a los jugadores los scripts de ese contenedor, así que nadie puede leerlos ni cambiarlos desde su propio dispositivo.

Paso 1: instala Studio y abre un Baseplate

  1. Descarga Roblox Studio desde el Creator Hub de Roblox y ejecuta el instalador (RobloxStudio.exe en Windows, RobloxStudio.dmg en Mac). Studio es una app gratuita para Windows y Mac.
  2. Cuando se abra, inicia sesión con tu cuenta de Roblox. Si no tienes una, créala antes en roblox.com.
  3. En la sección Open a Template, elige Baseplate. Empieza solo con dos objetos: un SpawnLocation, donde aparecen y reaparecen los personajes, y el Baseplate, un suelo con una textura de cuadrícula de 4 por 4 alineada con los studs, la unidad de longitud de Roblox.
  4. Abre tres ventanas que vas a usar todo el tiempo. Explorer muestra cada objeto de tu juego, y Properties cambia el objeto que seleccionas; las dos se abren desde el menú Window o la pestaña Home. Output muestra los errores de tus scripts, y se abre desde el menú Window o la pestaña Script.

Paso 2: construye el recorrido

  1. En el Explorer, pasa el ratón sobre Workspace, haz clic en el botón + (o pulsa Ctrl+I, Cmd+I en un Mac) e inserta un Folder. Llámalo Course.
  2. Pasa el ratón sobre Course, haz clic en + e inserta dos Folders más dentro. Llámalos Lava y Coins.
  3. Construye el suelo de lava. Haz clic en Part en la pestaña Home o Model para insertar un bloque, y usa la herramienta Scale para estirarlo hasta una losa grande y plana que quede bajo todo el recorrido, con mucho margen por cada lado. En Properties, pon su Color en rojo y su Material en Neon, marca Anchored y arrástralo a la carpeta Lava. Ahora un jugador que se caiga en cualquier sitio cae en la lava, no en el Baseplate.
  4. Construye las plataformas. Inserta más partes del mismo modo y usa las herramientas Move y Scale para colocarlas sobre la lava, cada una unos studs por encima, con huecos para saltar entre ellas. En Properties, asegúrate de que Anchored está marcado en cada una, y arrástralas a Course.
  5. Construye las monedas. Mantén pulsada la flechita del botón Part y elige Cylinder. Hazlo pequeño y amarillo, marca Anchored y desmarca CanCollide para que los jugadores lo atraviesen en lugar de chocar con él. Ponlo en la carpeta Coins, y pulsa Ctrl+D (Cmd+D en un Mac) para duplicarlo hasta tener al menos 3, y repártelos sobre las plataformas a lo largo del recorrido.
  6. Construye la meta. Inserta una parte más sobre la lava al final, lo bastante grande para aterrizar en ella, coloréala de verde, marca Anchored, llámala exactamente Finish y arrástrala directamente a Course, no a una de las carpetas.
  7. Mueve el SpawnLocation sobre la lava al principio del recorrido, junto a tu primera plataforma, para que quede encima de la losa. Déjalo directamente en Workspace, no dentro de Course: CourseService lo busca ahí para devolver a los jugadores al inicio.

Los nombres importan

CourseService encuentra el recorrido por el nombre: una carpeta llamada Course directamente en Workspace, las carpetas Lava y Coins dentro de ella, y una parte llamada Finish dentro de ella. Escríbelos exactamente igual, con las mismas mayúsculas. Los nombres de las partes de lava y de las monedas dan igual: cada parte directamente dentro de Lava es lava, y cada parte directamente dentro de Coins es una moneda.

Paso 3: añade Coins y Wins a la lista de jugadores

En el Explorer, pasa el ratón sobre ServerScriptService, haz clic en +, inserta un Script y llámalo PlayerStats. Sustituye todo su contenido por esto:

Script en ServerScriptService llamado PlayerStats
-- Script en ServerScriptService llamado PlayerStats.
-- Da a cada jugador una estadística Coins y otra Wins. Una carpeta llamada leaderstats dentro del
-- jugador hace que Roblox muestre estos valores en la lista de jugadores, arriba a la derecha.

local Players = game:GetService("Players")

local function onPlayerAdded(player: Player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats" -- tiene que escribirse exactamente así

	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 -- quien entró antes de que se ejecutara esta línea
	onPlayerAdded(player)
end

La carpeta tiene que llamarse leaderstats, todo en minúsculas. Roblox lee cada valor de dentro y lo muestra en la lista de jugadores, con el nombre del valor como título de la columna.

Cada jugador recibe un Folder llamado leaderstats con dos objetos IntValue dentro. Un IntValue guarda un número entero, que es todo lo que necesita un contador de monedas. El bucle del final prepara a cualquier jugador que entró antes de que se ejecutara la línea de PlayerAdded, para que no se quede nadie fuera.

La guía de leaderboard (en inglés) construye la misma carpeta con más detalle, y luego añade guardado y un top 10 global.

Paso 4: haz que funcionen la lava, las monedas y la meta

Inserta un segundo Script en ServerScriptService, llámalo CourseService y pega esto. Es el único sitio donde cambian Coins y Wins. Los dos ajustes de arriba son los números que están pensados para que los cambies.

Script en ServerScriptService llamado CourseService
-- Script en ServerScriptService llamado CourseService.
-- Dirige el recorrido en el servidor, para que todos vean lo mismo y nadie pueda
-- darse monedas: las partes de lava reinician a los jugadores, las monedas pagan 1 Coin y vuelven,
-- y la meta da una Win a los jugadores que recogieron suficientes monedas en esta ronda.

local Players = game:GetService("Players")

local COINS_TO_FINISH = 3 -- monedas que un jugador debe recoger en una ronda antes de que cuente la meta
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

-- Monedas recogidas en esta ronda: desde que el jugador apareció por última vez o llegó a la meta
local runCoins: { [Player]: number } = {}

-- Encuentra al jugador cuyo personaje tocó una parte, o nil para cualquier otra cosa
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: cualquier parte de la carpeta Lava reinicia al jugador que la toca
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

-- Monedas: el primer jugador que toca una moneda se la lleva, y luego se oculta hasta que reaparece
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 -- no es un jugador, o esta moneda ya se la llevaron
			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

-- Meta: una Win para los jugadores que hicieron el recorrido, y vuelta al inicio
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 -- primero esto, para que tocar otra vez la meta no cuente dos veces
	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 un script de control de velocidad, si añades uno
	end
end)

-- Un personaje nuevo (tras un reinicio o una caída) empieza una ronda nueva
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 -- quien entró mientras este script esperaba a Course
	onPlayerAdded(player)
end

Players.PlayerRemoving:Connect(function(player: Player)
	runCoins[player] = nil
end)

CourseService revisa las carpetas Lava y Coins una vez, cuando empieza el juego. Construye cada parte de lava y cada moneda en Studio antes de pulsar Play: una parte que otro script añade durante el juego no queda conectada.

Qué hace cada parte de CourseService
Parte del scriptCódigoQué hace
AjustesCOINS_TO_FINISH, COIN_RESPAWN_SECONDSCuántas monedas debe recoger un jugador en una ronda antes de que cuente la meta (3), y cuánto tiempo se queda oculta una moneda recogida (10 segundos).
Encontrar el recorridoWaitForChild, FindFirstChildOfClass("SpawnLocation")Espera a Course, Lava, Coins y Finish por su nombre, y encuentra el SpawnLocation directamente en Workspace al que la meta devuelve a los jugadores. Si no hay ninguno, imprime un aviso en el Output.
Quién lo tocóplayerFromHitLa parte que toca puede ser un pie, una mano o el asa de un sombrero. FindFirstAncestorOfClass("Model") sube hasta el modelo del personaje, y GetPlayerFromCharacter lo convierte en un jugador, o en nil para todo lo que no sea el personaje de un jugador.
Lavahumanoid.Health = 0Reinicia a cualquier personaje que toque una parte de la carpeta Lava.
Monedastaken, Transparency = 1, task.delayEl primer jugador que toca una moneda recibe 1 Coin. La moneda se vuelve invisible e ignora los toques hasta que vuelve tras COIN_RESPAWN_SECONDS. Como la oculta el servidor, desaparece para todos los jugadores.
Esta rondarunCoinsCuenta las monedas que cada jugador recogió desde que apareció por última vez o llegó a la meta. El número de Coins de la lista de jugadores sigue creciendo; esta cuenta vuelve a 0 en cada reaparición y cada Win.
MetarunCoins[player] < COINS_TO_FINISHIgnora a un jugador con menos de 3 monedas en esta ronda. Si no, primero pone su cuenta a 0, para que quedarse sobre la meta no pague dos veces, suma 1 Win y mueve el personaje 4 studs por encima del SpawnLocation.
Ronda nuevaCharacterAdded, GetPlayers()Cada personaje nuevo empieza una ronda nueva. El bucle cubre a los jugadores que entraron mientras el script todavía esperaba a Course.
LimpiezaPlayerRemovingOlvida a un jugador que se va.

La lava pone Health a 0, como hace el propio tutorial de lava de Roblox. Un personaje nuevo tiene un ForceField durante 10 segundos después de aparecer en un SpawnLocation, por defecto, y Humanoid:TakeDamage no hace nada mientras uno lo protege. Poner Health directamente ignora los ForceFields, así que la lava funciona incluso justo después de reaparecer.

La meta mueve el personaje con character:PivotTo(...), que la referencia de Roblox llama la forma principal de mover un modelo desde un script. Cambiar la posición de la parte raíz del personaje, en cambio, separa esa parte del resto del cuerpo.

La línea MovementCheckSkip no hace nada por sí sola. Está para el control de velocidad del servidor de la guía de sprint (en inglés): si añades ese control más adelante, el teletransporte de la meta no se marca como exceso de velocidad.

Por qué las reglas se ejecutan en el servidor

Todas las reglas de este recorrido están en CourseService, un Script de servidor, a propósito. Si un LocalScript sumara la moneda, el nuevo valor de Coins solo existiría en el dispositivo de ese jugador: el servidor y los demás jugadores nunca lo verían. Y todo lo que hay en el dispositivo de un jugador se puede cambiar. La guía de seguridad de Roblox dice que un exploiter tiene control total sobre su estado local y su tráfico de red, así que el servidor tiene que tomar todas las decisiones que importan.

Lo que un tramposo puede intentar en este recorrido
Un tramposo intentaResultadoPor qué
Cambiar sus Coins o Wins en su propio dispositivoSolo lo ve élLos valores reales viven en el servidor, y solo CourseService los cambia.
Teletransportarse directamente a la metaSin WinLa meta necesita 3 monedas recogidas en esta ronda. La página de diseño defensivo de Roblox usa justo este caso de obby, un exploiter que se teletransporta al final para cobrar recompensas, y recomienda checkpoints que el servidor comprueba antes de recompensar.
Tocar monedas o la meta desde lejosPosibleLa guía de seguridad de Roblox dice que los exploiters pueden disparar eventos Touched a cualquier distancia o frecuencia. Cada moneda sigue pagando una vez, a quien la toque primero, y luego se oculta 10 segundos para todos.
Volar o teletransportarse a cada moneda, y luego a la metaPosibleEl dispositivo de cada jugador controla su propio personaje, y Roblox incluye teletransportarse y volar entre lo que un cliente puede hacer con él.
Ignorar la lavaPosibleEl mismo dispositivo decide si los toques de su personaje llegan a dispararse. Para un primer juego, es aceptable.

Así que la regla de las monedas frena la trampa más simple, saltar directamente al final, y poco más. Es normal en un primer juego. Las siguientes capas son una comprobación en el servidor de que un personaje está de verdad cerca de una moneda o de la meta antes de pagar, como la guía de seguridad de Roblox comprueba la distancia de un jugador a una tienda; checkpoints que hay que alcanzar en orden, como en la guía de checkpoints de obby; y un control de movimiento como el de la guía de sprint. Qué se replica y qué no explica con más detalle la división entre cliente y servidor. Estas guías están en inglés.

Paso 5: pruébalo

  1. Asegúrate de que Test está seleccionado en el desplegable de modo de prueba y pulsa Play (F5). Tu nombre aparece en la lista de jugadores con Coins 0 y Wins 0.
  2. Camina hacia una moneda. Coins pasa a 1 y la moneda desaparece. Espera 10 segundos y vuelve. Tócala otra vez: Coins sube a 2.
  3. Toca la lava. Tu personaje cae y vuelve a aparecer en el SpawnLocation después de 5 segundos, el tiempo de reaparición por defecto de Roblox. Coins en la lista de jugadores no cambia, pero tu cuenta de esta ronda vuelve a 0.
  4. Toca la meta con menos de 3 monedas en esta ronda: no pasa nada. Recoge 3 monedas y tócala: Wins pasa a 1 y vuelves al SpawnLocation.
  5. Pulsa Stop (Shift+F5). Elige Server & Clients en el desplegable, pon 2 clientes y pulsa Play (o F7). Recoge una moneda en una ventana de cliente y mira la otra: la moneda también ha desaparecido ahí, porque el servidor la ocultó para todos.

Deja la ventana Output abierta todo el tiempo. Estos dos scripts no imprimen nada cuando funcionan, así que cualquier aviso o error rojo de PlayerStats o CourseService es un problema real. Consulta los errores comunes.

Paso 6: publica tu juego

  1. Abre el menú File y elige Publish. Se abre la ventana Game details.
  2. Escribe un Name, elige un Genre (el Subgenre es opcional) y escribe una Description corta de lo que hacen los jugadores. Aquí también puedes subir un icono y una miniatura. Comprueba antes sus tamaños con el comprobador de tamaño de miniaturas e iconos gratis.
  3. Haz clic en Save. Roblox publica el juego en la nube y lo conecta a tu cuenta, así que puedes abrirlo desde cualquier computadora.
  4. El juego ya está publicado pero es privado. Solo tú, las personas con acceso Edit y los miembros del grupo con los roles adecuados pueden jugarlo.
  5. ¿Quieres opiniones antes de lanzarlo? Elige File > Invite early testers y elige hasta 10 amigos de edad parecida. Si todavía no completaste una verificación de edad, Roblox te pide hacer una primero. Los testers ven una marca de agua que les dice que el juego es una vista previa.

A partir de ahora, guardar en Roblox desde el menú File mantiene una versión de tu juego en la nube. File > Publish es lo que cambia la versión que reciben los jugadores. De vez en cuando, juega la copia publicada desde Roblox, fuera de Studio, para comprobar que coincide con lo que probaste.

Paso 7: lánzalo (haz tu juego público)

Lanzar el juego es como lo haces público, para que puedan jugarlo personas que no sean tú y tus colaboradores. Antes de empezar, revisa los requisitos: tu cuenta debe estar en regla y tener al menos 2 días, y necesitas una verificación de edad, hecha con estimación facial de edad o un documento de identidad oficial.

  1. Abre el menú File y elige Publish otra vez. Se abre la ventana Publish.
  2. Haz clic en Continue. (El botón Invite de al lado invita a testers en su lugar.)
  3. Responde la primera pregunta del Maturity & Compliance Questionnaire de Roblox: ¿tu juego contiene contenido restringido por edad? Responde según lo que de verdad contiene tu juego. Si respondes Yes, completas el cuestionario entero.
  4. Haz clic en Publish.
Quién puede jugar después del lanzamiento
Lo que hacesEtiquetaQuién puede jugar
Responder NoContent May VaryUsuarios con la edad verificada de 16 años o más. Puedes rellenar el cuestionario entero más tarde en el Creator Hub para llegar a más público.
Responder Yes y completar el cuestionarioSegún tus respuestasUsuarios con la edad verificada de 16 años o más, o usuarios con la edad verificada de 18 años o más, según lo que contenga el juego.
Cumplir los requisitos para todas las edadesMinimal, Mild o Moderate (9+), del cuestionario enteroTodas las edades. Además de los pasos anteriores, verificas tu cuenta (estimación facial de edad si tienes menos de 18, un documento oficial si tienes 18 o más), activas la verificación en 2 pasos, mantienes una suscripción a Roblox Plus o Premium durante 2 meses seguidos o pagas una tarifa única reembolsable, y el juego supera la evaluación de Roblox para el lanzamiento a todas las edades.

Para dejar entrar solo a tus amigos, abre el Creator Dashboard, selecciona el juego, ve a Publish settings > Manage Audience, haz clic en Manage access, activa Friends en la pestaña Public y haz clic en Save Changes. Con Friends activado, solo pueden jugar tus amigos y las personas de la pestaña Playtest.

Los mismos requisitos se aplican a cada acción de lanzamiento: el primer lanzamiento, lanzar una versión nueva de un juego que ya está fuera, lanzar a otro juego con Publish As y cambiar quién puede jugar.

Hazlo con amigos

Las herramientas de colaboración de Studio permiten que tú y un amigo editen el mismo juego a la vez. Para un juego tuyo:

  1. Con el juego abierto en Studio, haz clic en Collaborate en el lado derecho de la barra superior (mezzanine), la barra cuyo lado izquierdo tiene el botón Play.
  2. Busca a tu amigo, selecciónalo, elige Edit en el desplegable de permisos y haz clic en Save. En un juego tuyo, solo los amigos de Roblox pueden tener acceso Edit.
  3. Tu amigo abre el juego desde el Creator Dashboard, y los dos trabajan en el mismo juego a la vez.

Para colaborar con otros creadores, primero completas una verificación de edad, con documento o estimación facial de edad. Después, por defecto, Studio solo te deja colaborar con creadores de grupos de edad compatibles. Puedes usar Team Create tú solo sin verificación de edad. Durante una sesión de colaboración, Studio guarda el juego en la nube cada cuatro minutos.

Conviértelo en un juego de verdad

El recorrido es un ciclo completo: jugar, recoger, llegar a la meta, ganar. Cada una de estas guías (en inglés, salvo la primera) añade un sistema encima.

  • ¿Nuevo con los scripts? Programar en Roblox para principiantes cubre variables, funciones, eventos y bucles, las piezas con las que está hecho CourseService.
  • Guarda Coins y Wins entre sesiones con el paso 3 de la guía de leaderboard. Su script de guardado sustituye a un script de Coins y Wins como PlayerStats, así que borra PlayerStats al añadirlo. El tutorial de DataStore explica el guardado a fondo.
  • Checkpoints en orden, con una estadística Stage y reaparición en el último checkpoint: la guía de checkpoints de obby. Su script crea su propia carpeta leaderstats, así que copia las líneas de Coins y Wins de PlayerStats a esa carpeta y borra PlayerStats. Dos scripts que crean leaderstats cada uno dan dos carpetas a cada jugador, y Coins y Wins pueden dejar de cambiar.
  • Gasta las Coins en una tienda con GUI. Usa el valor Coins de leaderstats, así que sáltate su script Leaderstats: PlayerStats ya crea Coins.
  • Vende una ventaja por Robux con un game pass. Antes de poner un precio, la calculadora de impuesto de Robux gratis muestra lo que te paga cada venta después de la parte de Roblox, y la calculadora de DevEx lo que valen esos Robux en dólares estadounidenses.
  • Una pantalla de título con un botón Play: la guía de menú principal.
  • Rondas con intermedio, mapas aleatorios y temporizador: la guía de sistema de rondas, que suma al mismo valor Wins. Sáltate su script de leaderstats, porque PlayerStats ya crea Wins.
  • Una cinemática de introducción con planos de cámara, subtítulos y un botón Skip: la guía de cinemáticas.
  • Una puerta a una zona secreta que se abre con E, con una cerradura con llave opcional: la guía de puertas.
  • Plataformas de teletransporte entre zonas del mapa, o un menú de teletransporte: la guía de teletransportadores.
  • Sprint con Shift en teclado, teléfono y mando, con el control de movimiento del servidor: la guía de sprint. Su control de movimiento lee el atributo MovementCheckSkip que pone la meta.
  • Una pelea o un ciclo distinto: da a los jugadores una espada o un arma con raycast, o empieza un juego nuevo donde los jugadores hacen clic para ganar monedas, compran mejoras y hacen rebirth, con la guía de juego simulador.

Errores comunes y soluciones

Abre la ventana Output (menú Window o pestaña Script) antes de pulsar Play. La mayoría de los problemas de este recorrido imprimen ahí un aviso o un error, o vienen de un nombre que no coincide.

Infinite yield possible on 'Workspace:WaitForChild("Course")'

CourseService esperó 5 segundos a una carpeta llamada Course directamente en Workspace y no la encontró. Revisa la ortografía y la C mayúscula. El mismo aviso con Lava, Coins o Finish significa que ese objeto falta en Course o tiene otro nombre. Hasta que aparezca, no se ejecuta nada después de esa línea, así que la lava, las monedas y la meta no hacen nada.

Coins y Wins no aparecen en la lista de jugadores

Comprueba que el nombre de la carpeta en PlayerStats es leaderstats, todo en minúsculas, y que PlayerStats es un Script, no un LocalScript, directamente dentro de ServerScriptService. Si las dos cosas están bien, busca un error rojo de PlayerStats en el Output.

Un error rojo de CourseService nada más pulsar Play

Revisa CanTouch en Properties en cada parte de lava, cada moneda y la meta. Si está desactivado en alguna al pulsar Play, Roblox lanza un error cuando CourseService conecta Touched a esa parte, y el script se para ahí: nada de lo que va después funciona, así que puede que las monedas siguientes, la meta o los reinicios de ronda nunca queden conectados. Marca CanTouch en todas y pulsa Play otra vez.

Tocar una moneda no hace nada

La moneda tiene que ser una parte directamente dentro de la carpeta Coins, no dentro de otra carpeta o un modelo ahí, porque CourseService solo mira los hijos directos de la carpeta. También tiene que estar ahí antes de pulsar Play, con CanTouch marcado (mira el punto anterior).

Toco la meta y no pasa nada

Necesitas 3 monedas recogidas en esta ronda, desde la última vez que apareciste o llegaste a la meta. Tocar la lava reinicia esa cuenta, y una Win también, aunque el número de Coins de la lista de jugadores se mantenga. Comprueba también que la parte se llama exactamente Finish y está directamente dentro de Course.

La meta da una Win pero no me devuelve al inicio

CourseService busca el SpawnLocation directamente en Workspace, e imprime un aviso en el Output cuando no lo encuentra ahí. Si arrastraste el SpawnLocation a Course o a una de sus carpetas, vuelve a arrastrarlo a Workspace en el Explorer y pulsa Play otra vez.

La lava no me reinicia

La parte de lava tiene que estar directamente dentro de la carpeta Lava antes de pulsar Play, con CanTouch marcado. Una parte de lava que pongas en otro sitio de Course es solo una plataforma roja.

Mis plataformas o monedas se caen al pulsar Play

No están ancladas. Selecciónalas, marca Anchored en Properties y pulsa Play otra vez.

Con RoCode

Si prefieres describir el juego en lugar de construir cada pieza a mano, RoCode puede construirlo en el juego que tienes abierto. RoCode es un agente de IA independiente para Roblox Studio, no lo hace Roblox: describes la función en su chat web y su plugin de Studio crea las partes y los scripts en tu Explorer, así que no copias código de una ventana de chat.

Tú escribes

Haz un recorrido de monedas: una carpeta Course con las carpetas Lava y Coins y una parte Finish, leaderstats con Coins y Wins, lava que reinicia a los jugadores, monedas que valen 1 y vuelven después de 10 segundos, y una meta que da una Win solo después de 3 monedas en esta ronda.

RoCode hace
  • Puede buscar primero en tu juego código de leaderstats o DataStore que ya exista, para ampliar lo que tienes en lugar de añadir una segunda tabla de clasificación
  • Crea la carpeta y las partes en Workspace y los Scripts en ServerScriptService
  • Comprueba dentro de Studio con Check Script que cada script que escribió compila. Es una comprobación de compilación, no de tipos ni una prueba de juego
  • Pone un punto para deshacer antes y después de cada grupo de cambios, así que Ctrl+Z retrocede grupo a grupo

Constrúyelo en Studio

Con el plugin 3.9 o posterior RoCode puede hacer una prueba corta y leer los errores, y con el plugin 3.9.11 o posterior controlar un personaje de prueba para comprobar que el juego funciona, pero solo comprueba lo que decidió probar, así que juegas tú. Construir un juego entero con RoCode funciona así, un sistema por prompt. Cómo se conecta RoCode a Studio.

Preguntas frecuentes

¿Puedo hacer un juego de Roblox gratis?

Sí. Studio es gratis, y construir y publicar solo necesitan una cuenta de Roblox. Lanzarlo para los jugadores también necesita una cuenta en regla con al menos 2 días de antigüedad, y una verificación de edad. Algunos extras cuestan Robux, como la tarifa reembolsable que es una de las formas de llegar a todas las edades.

¿Puedo hacer un juego de Roblox en un teléfono, iPad o Chromebook?

La página de configuración de Roblox solo incluye Studio para Windows y Mac, así que necesitas una de esas computadoras para construir un juego.

¿Cómo hago público mi juego de Roblox?

Lánzalo. En Studio elige File > Publish, haz clic en Continue, responde la pregunta sobre contenido restringido por edad y haz clic en Publish. Necesitas una cuenta en regla con al menos 2 días de antigüedad, y una verificación de edad. Si respondes No, Roblox lanza el juego para usuarios con la edad verificada de 16 años o más. Llegar a todas las edades tiene requisitos extra, que están en el paso 7.

¿Por qué mis amigos no pueden jugar mi juego?

Los juegos nuevos son privados: solo pueden entrar tú, las personas con acceso Edit y los miembros del grupo con los roles adecuados. Lánzalo con File > Publish, lo que necesita una verificación de edad y responder la pregunta sobre contenido restringido por edad, o invita hasta 10 amigos de edad parecida como testers con File > Invite early testers.

¿Por qué dice que mi juego es solo para 16+?

Normalmente porque respondiste No a la pregunta sobre contenido restringido por edad al lanzarlo. Roblox le da entonces la etiqueta Content May Vary y lo lanza para usuarios con la edad verificada de 16 años o más. Una respuesta Yes con el cuestionario entero también da 16+, o 18+, según lo que contenga el juego. Llegar a todas las edades necesita verificar la cuenta, la verificación en 2 pasos, una suscripción a Roblox Plus o Premium durante 2 meses seguidos o una tarifa única reembolsable, una evaluación del juego y el cuestionario entero.

¿Cómo hago un juego con amigos?

Haz clic en Collaborate en Studio y da acceso Edit a un amigo. Para colaborar con otros creadores primero completas una verificación de edad, y después Studio solo te deja colaborar por defecto con creadores de grupos de edad compatibles. Luego los dos pueden trabajar en el mismo juego a la vez.

¿Necesito saber programar?

Para esta guía no: pegas dos scripts, y las tablas explican qué hace cada parte. Para cambiarlos con confianza, empieza con programar en Roblox para principiantes.

Fuentes y lecturas

Cómo se comprobó el código: cada script de esta página pasa el verificador de tipos estricto de Luau con las definiciones de la API de Roblox (luau-lsp, 26 de octubre de 2026). Una verificación de tipos detecta APIs mal escritas y tipos incorrectos, no la lógica del juego, así que pruébalo en Studio antes de publicar.

Prueba RoCode en tu propio juego.

Créditos gratis cada día, sin tarjeta. Instala el plugin, describe la función y revisa lo que aparece en Studio.