Cómo poner música y sonidos en tu juego

Claim Your Loot

·

Portada del artículo «Música y sonidos en tu juego», de la sección Roblox Studio

El sonido es la mitad de la sensación de un juego y la parte que más se descuida. Un cofre que se abre sin ruido parece que no ha pasado nada; el mismo cofre con un golpe seco y un tintineo se siente como un premio.

Y hay un detalle técnico que decide todo lo demás: dónde pones el objeto Sound. De eso depende si el sonido se oye en todo el mapa o solo cerca, y si lo oye uno o lo oyen todos.

En la demo tienes las propiedades que cambian algo y qué hace cada una, con casos para acertar.

Respuesta rápida

Un Sound dentro de un Part suena en 3D: más fuerte cuanto más cerca. Un Sound en SoundService o en el PlayerGui suena igual en todo el mapa. Esa es la decisión principal; el resto son ajustes.

Lo que necesitas antes de empezar

  • Un lugar abierto en Studio.
  • Unos 25 minutos.

Paso 1: de dónde sale el audio

Tienes dos vías, y conviene conocer las dos:

  • Audio del catálogo. En Studio, en la caja de herramientas, hay audio subido por Roblox y por otra gente, listo para usar. Es lo más rápido y lo que no te va a dar problemas de licencias.
  • Audio propio. Se sube desde el panel de creaciones. Aquí hay reglas que hay que mirar en la web oficial antes de contar con ellas: hay límites de duración y restricciones de uso según el estado de tu cuenta, y han cambiado varias veces.

Lo que no debes hacer, aunque técnicamente puedas: subir música con derechos. Se retira, y la cuenta se lleva el aviso.

Paso 2: sonido en un sitio del mapa

Para una fuente que está en algún lugar (una cascada, una máquina, un cofre):

local sonido = Instance.new("Sound")
sonido.SoundId = "rbxassetid://0"      -- pon aquí tu id
sonido.Volume = 0.6
sonido.RollOffMinDistance = 8          -- hasta aquí, a volumen completo
sonido.RollOffMaxDistance = 60         -- a partir de aquí, no se oye
sonido.RollOffMode = Enum.RollOffMode.InverseTapered
sonido.Parent = script.Parent          -- un Part: eso lo hace 3D

La clave es la última línea. Un Sound dentro de un Part (o de un Attachment) suena en 3D: Roblox le baja el volumen según la distancia y lo reparte entre los altavoces.

Dónde va cada Sound: dentro de un Part, dentro del personaje o en SoundService

Los dos números de distancia son los que nadie toca y los que hacen que un mapa suene bien:

  • RollOffMinDistance pequeño (5-10) para efectos; más grande para ambientes.
  • RollOffMaxDistance debería acabar donde el jugador deja de ver la fuente. Si tienes una cascada que se oye desde el otro lado del mapa, es esto.

Paso 3: música que se oye en todo el mapa

Para la música de fondo, nada de Parts:

-- LocalScript en StarterPlayerScripts
local musica = Instance.new("Sound")
musica.SoundId = "rbxassetid://0"
musica.Volume = 0.25
musica.Looped = true
musica.Parent = game:GetService("SoundService")
musica:Play()

Dos cosas importantes:

  • Volume = 0.25, no 1. La música de fondo tiene que estar por debajo de los efectos: si compite con ellos, el jugador la quita y ya no vuelve.
  • Va en un LocalScript. La música es cosa de cada jugador; ponerla desde el servidor solo complica la vida cuando quieras que unos la oigan y otros no.

Paso 4: los grupos de sonido

Esto es lo que te permite tener un menú de opciones con «Música» y «Efectos» por separado, y cuesta cinco minutos:

local SoundService = game:GetService("SoundService")

local musicaGrupo = Instance.new("SoundGroup")
musicaGrupo.Name = "Musica"
musicaGrupo.Volume = 1
musicaGrupo.Parent = SoundService

local efectosGrupo = Instance.new("SoundGroup")
efectosGrupo.Name = "Efectos"
efectosGrupo.Volume = 1
efectosGrupo.Parent = SoundService

-- y a cada sonido:
musica.SoundGroup = musicaGrupo
golpe.SoundGroup = efectosGrupo

Con eso, bajar toda la música es una línea: musicaGrupo.Volume = 0.3. Sin grupos, acabas recorriendo todos los sonidos del juego a mano.

Paso 5: sonidos que se disparan

Para un efecto puntual, lo peor que puedes hacer es crear un Sound nuevo cada vez y no borrarlo. Dos formas limpias:

-- 1. Un sonido que ya existe, reproducido desde el principio
local golpe = script.Parent:WaitForChild("Golpe")

local function pegar()
	golpe.TimePosition = 0
	golpe:Play()
end
-- 2. Uno de usar y tirar, que se borra solo
local function sonarEn(posicion, id)
	local parte = Instance.new("Part")
	parte.Anchored = true
	parte.CanCollide = false
	parte.Transparency = 1
	parte.Position = posicion
	parte.Parent = workspace

	local s = Instance.new("Sound")
	s.SoundId = id
	s.Parent = parte
	s:Play()

	s.Ended:Connect(function()
		parte:Destroy()
	end)
	game:GetService("Debris"):AddItem(parte, 10)   -- por si Ended no llega
end

Ese Debris de seguridad no sobra: si el sonido no carga, Ended no se dispara nunca y te quedas con Parts invisibles por todo el mapa.

Paso 6: que no suene con retraso la primera vez

Un sonido que no está cargado tarda en sonar la primera vez, justo cuando más se nota. Precárgalo:

local ContentProvider = game:GetService("ContentProvider")

local aPrecargar = {golpe, cofre, musica}
task.spawn(function()
	ContentProvider:PreloadAsync(aPrecargar)
end)

Con eso, mientras el jugador mira la pantalla de carga, el audio se está bajando.

Paso 7: dónde poner cada cosa

SonidoDónde vaPor qué
Música de fondoSoundService, desde un LocalScriptSe oye igual en todo el mapa
Interfaz (botones)PlayerGui o SoundServiceNo tiene posición en el mundo
Golpe, cofre, puertaDentro del PartTiene que sonar donde está
Ambiente de zonaPart invisible en el centro de la zonaCon RollOffMaxDistance como radio
Pasos del personajeDentro del HumanoidRootPartSigue al jugador

Colócalo tú

¿Dónde va cada sonido?

Arrastrar no hace falta: pulsa el destino que le pondrías a cada sonido. Al fallar te dice qué se oiría mal exactamente.

Colocados

0 de 6 · 0 aciertos

Errores habituales

El sonido se oye igual de fuerte en todo el mapa

No está dentro de un Part, o el RollOffMaxDistance es gigante.

Se oye en el servidor pero los jugadores no lo oyen

Los Sound reproducidos desde el servidor dentro de un Part se replican. Si no se oye, casi siempre es que el SoundId no ha cargado o que el volumen está a cero.

La música se corta al morir

La pusiste dentro del personaje. Va en SoundService o en StarterPlayerScripts, que sobreviven a la muerte.

Suena la primera vez con medio segundo de retraso

Falta PreloadAsync.

Se acumulan Parts invisibles por todo el mapa

Sonidos de usar y tirar sin Debris.

El sonido se solapa consigo mismo veinte veces

Estás llamando a Play() en cada fotograma o dentro de un Touched sin debounce: ahí entra lo de Touched se dispara catorce veces.

«El audio no se puede usar en esta experiencia»

Las reglas de uso del audio dependen de quién lo subió y del estado de tu cuenta. Mira la página oficial de audio: es de lo que más ha cambiado en los últimos años.

Preguntas frecuentes

¿Cuánto debería durar la música de un juego?

Lo bastante como para que no se note el bucle: menos de dos minutos cansa rápido. Y ten dos o tres pistas si el juego es largo.

¿Puedo dejar que el jugador quite la música?

Deberías. Un botón que baje el SoundGroup de música a cero, y guárdalo con sus datos para que no tenga que hacerlo cada vez.

¿Cómo hago que la música cambie según la zona?

Con un TweenService sobre el Volume de dos sonidos: uno baja mientras el otro sube. Los cortes secos se notan mucho.

¿Los sonidos gastan rendimiento?

Los que están sonando, sí, sobre todo si hay muchos con rango grande. Es de lo que se mira en la guía de optimización cuando el juego va a tirones sin motivo aparente.


Última revisión: 2 de septiembre de 2026

Claim Your Loot

Explora otras secciones

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *