Es la mecánica que sostiene medio Roblox: pisas, la plataforma parpadea, se desvanece y te caes si no has saltado a tiempo. Obstáculos, torres, minijuegos de eliminación.
Y es engañosamente fácil de hacer mal: la versión que encuentras por ahí deja plataformas atascadas invisibles, o hace que se caigan cinco jugadores cuando solo pisó uno. Aquí tienes la buena, y una demo donde puedes ajustar los tiempos y pisarlas.
Respuesta rápida
Al tocarla: avisa (cambia el color), espera, hazla transparente y sin colisión (CanCollide = false), espera otro poco y devuélvela a su estado. Todo con una bandera para que un segundo toque no lance el proceso dos veces.
Lo que necesitas antes de empezar
- Un Part Anchored que haga de plataforma.
- Un
Scriptnormal dentro. - Unos 20 minutos.
Los cuatro estados
Una plataforma que desaparece bien pasa siempre por lo mismo:
| Estado | Qué ve el jugador | Cuánto dura |
|---|---|---|
| 1. Esperando | Sólida, color normal | Hasta que la pisan |
| 2. Avisando | Cambia de color, quizá parpadea | 0,5-1 s |
| 3. Desaparecida | Invisible y se atraviesa | 2-4 s |
| 4. Volviendo | Reaparece | Instantáneo o con fundido |
El estado 2 es el que separa una mecánica justa de una injusta. Sin aviso, el jugador se cae sin entender por qué y abandona.

Paso 1: la versión completa
-- Script DENTRO del Part de la plataforma
local plataforma = script.Parent
local AVISO = 0.6 -- segundos desde que la pisas hasta que se va
local FUERA = 3 -- segundos que está desaparecida
local COLOR_AVISO = Color3.fromRGB(230, 90, 70)
-- Guardamos el estado original para poder devolverla igual
local colorOriginal = plataforma.Color
local transpOriginal = plataforma.Transparency
local activada = false
plataforma.Touched:Connect(function(otro)
if activada then return end -- ya está en marcha, ignoramos
-- ¿Ha sido un jugador?
local humanoide = otro.Parent and otro.Parent:FindFirstChildOfClass("Humanoid")
if not humanoide then return end
activada = true
-- Estado 2: avisar
plataforma.Color = COLOR_AVISO
task.wait(AVISO)
-- Estado 3: desaparecer
plataforma.CanCollide = false
plataforma.Transparency = 1
task.wait(FUERA)
-- Estado 4: volver
plataforma.CanCollide = true
plataforma.Transparency = transpOriginal
plataforma.Color = colorOriginal
activada = false
end)
La bandera activada es lo más importante del script. Sin ella, cada parte del cuerpo que roce la plataforma arranca su propio proceso, y acabas con cuatro cuentas atrás pisándose: la plataforma reaparece mientras otra cuenta la está haciendo desaparecer y se queda invisible para siempre.
CanCollide = false antes que Transparency = 1 no es casualidad: así el jugador empieza a caer justo cuando la ve irse, y no medio segundo después.
Paso 2: que parpadee antes de irse
El aviso queda mucho mejor si parpadea, y son cuatro líneas:
-- Estado 2: parpadeo de aviso
for i = 1, 3 do
plataforma.Color = COLOR_AVISO
task.wait(AVISO / 6)
plataforma.Color = colorOriginal
task.wait(AVISO / 6)
end
Dividir entre 6 hace que los tres parpadeos ocupen exactamente el tiempo de aviso que hayas puesto: si cambias AVISO, no tienes que tocar nada más.
Paso 3: fundido en vez de corte seco
Con TweenService desaparece con suavidad:
local TweenService = game:GetService("TweenService")
-- Estado 3, con fundido de 0,3 s
plataforma.CanCollide = false
TweenService:Create(plataforma, TweenInfo.new(0.3), {Transparency = 1}):Play()
task.wait(FUERA)
-- Estado 4, reaparece con fundido
TweenService:Create(plataforma, TweenInfo.new(0.3), {Transparency = transpOriginal}):Play()
task.wait(0.3)
plataforma.CanCollide = true
Fíjate en que al volver se activa la colisión después del fundido: si la activas antes, un jugador que esté cayendo por ahí choca con una plataforma que todavía no se ve.

Paso 4: aplicarlo a muchas de golpe
No vas a meter el script en cincuenta plataformas a mano. Mételas todas en una carpeta llamada Plataformas y usa un solo script:
-- Script en ServerScriptService
local carpeta = workspace:WaitForChild("Plataformas")
local AVISO, FUERA = 0.6, 3
local COLOR_AVISO = Color3.fromRGB(230, 90, 70)
local function preparar(plataforma)
local colorOriginal = plataforma.Color
local transpOriginal = plataforma.Transparency
local activada = false
plataforma.Touched:Connect(function(otro)
if activada then return end
if not (otro.Parent and otro.Parent:FindFirstChildOfClass("Humanoid")) then return end
activada = true
plataforma.Color = COLOR_AVISO
task.wait(AVISO)
plataforma.CanCollide = false
plataforma.Transparency = 1
task.wait(FUERA)
plataforma.CanCollide = true
plataforma.Transparency = transpOriginal
plataforma.Color = colorOriginal
activada = false
end)
end
for _, p in ipairs(carpeta:GetChildren()) do
if p:IsA("BasePart") then
preparar(p)
end
end
-- Si añades plataformas durante la partida, también quedan preparadas
carpeta.ChildAdded:Connect(function(p)
if p:IsA("BasePart") then preparar(p) end
end)
Cada plataforma tiene su propia variable activada porque está dentro de la función. Esa es toda la gracia: si la sacaras fuera, pisar una desactivaría todas.
Pruébalo aquí
Písalas y mira los cuatro estados
Ajusta los tiempos y pulsa cualquier plataforma. Cada una lleva su propio ciclo, como en el script.
Errores habituales
Una plataforma se queda invisible para siempre
Es la falta de la bandera activada. Dos toques solapados y el segundo proceso la devuelve a visible antes de que el primero la vuelva a esconder, dejándola descuadrada.
Se activan todas a la vez
Tienes activada como variable global en vez de una por plataforma. El paso 4 lo resuelve metiéndola dentro de la función.
Se activa cuando le tiro algo encima
Falta el filtro del Humanoid.
El jugador la atraviesa antes de que desaparezca
Estás poniendo Transparency = 1 antes de tiempo, o tienes CanCollide ya desactivado de antes en las propiedades del Part.
Al reaparecer, el jugador se queda dentro de la plataforma
Le pasa a quien esté justo en ese punto. Se soluciona reapareciendo solo si no hay nadie encima, con GetPartBoundsInBox, o dejando el FUERA lo bastante largo.
Preguntas frecuentes
¿Qué tiempos van bien?
Para un parkour normal, 0,5 s de aviso y 3 s fuera. Si quieres que sea difícil, baja el aviso a 0,2. Prueba en la demo hasta que te parezca justo.
¿Puedo hacer que no vuelvan nunca?
Sí: quita el estado 4 y no reactives la bandera. Va bien para torres de un solo intento.
¿Se puede hacer desde el cliente para que vaya más fino?
El efecto visual sí, pero la colisión tiene que ser del servidor. Si dejas que el cliente decida cuándo puede atravesar, ya sabes lo que pasa.
¿Cómo hago que se caiga en vez de desaparecer?
Quítale el Anchored en el momento del estado 3 en lugar de hacerla invisible: la física se encarga. Acuérdate de devolverla a su sitio con su CFrame original al reaparecer.
Última revisión: 1 de septiembre de 2026



Deja una respuesta