How do you make a disappearing platform on Roblox?

Plataformas que Desaparecen en Roblox

27/12/2021

Valoración: 4.42 (5827 votos)

Crear experiencias interactivas y desafiantes es clave en el desarrollo de juegos en Roblox. Una forma popular de añadir dificultad y dinamismo a tus mapas es mediante el uso de plataformas que reaccionan a la interacción del jugador. En este artículo, te guiaremos a través del proceso de creación de una plataforma que desaparece temporalmente cuando un jugador la pisa, utilizando el lenguaje de scripting Luau.

https://www.youtube.com/watch?v=YyvJ-FYL9mo

Este tipo de obstáculo es ideal para niveles de parkour, carreras de obstáculos o cualquier juego donde quieras poner a prueba la habilidad y el timing de los jugadores. Aprenderás a manipular propiedades de las partes, usar eventos, controlar el flujo del código con bucles y asegurar que la lógica se ejecute correctamente incluso en situaciones complejas como el contacto constante.

How to scroll up and down in Roblox?
You need to learn how to scroll without arrow key as Roblox won't support arrow keys for scrolling. Place two fingers on the trackpad (do not click) then move them up and down dragging them on the trackpad. This is the only was apart from using a scroll wheel.

Preparando la Plataforma Base

Lo primero que necesitas es la plataforma física en tu mundo de Roblox Studio. Inserta una 'Part' (Parte) en tu juego. Puedes hacerlo seleccionando 'Part' en la pestaña 'Model' (Modelo). Una vez insertada, colócala en el lugar deseado de tu mapa. Es una buena práctica darle un nombre descriptivo para identificarla fácilmente en el explorador de objetos. Puedes renombrarla a, por ejemplo, 'PlataformaDesvanecida' en la ventana 'Explorer' (Explorador).

Asegúrate de que la plataforma tenga el tamaño adecuado para que un personaje pueda saltar sobre ella cómodamente. Lo más importante para este tipo de objeto es que esté anclada. Selecciona la plataforma y marca la propiedad 'Anchored' (Anclada) en la ventana 'Properties' (Propiedades). Esto evita que la plataforma se caiga o se mueva al iniciar el juego o al interactuar con ella, a menos que lo controlemos explícitamente con scripts.

Una vez que la plataforma física está lista y anclada, necesitas añadirle la inteligencia que la hará desaparecer. Para ello, inserta un 'Script' dentro de la plataforma. Selecciona la plataforma en el explorador, haz clic en el signo '+' junto a ella y busca 'Script'. Nombra este script de forma clara, como 'ControlDesvanecimiento'. Al abrir el script, borra cualquier código predeterminado que aparezca; empezaremos desde cero.

El Script para el Desvanecimiento

Dentro del script 'ControlDesvanecimiento', lo primero es obtener una referencia a la plataforma para poder manipular sus propiedades. Hacemos esto creando una variable local. El script es un hijo de la plataforma, así que podemos referenciar al padre usando script.Parent.

local plataforma = script.Parent

Ahora, queremos que algo suceda cuando un jugador toque la plataforma. Las partes en Roblox tienen un evento llamado Touched que se activa cada vez que algo entra en contacto con ellas. Podemos conectar una función a este evento para que se ejecute cada vez que la plataforma sea tocada.

local plataforma = script.Parent

local function alTocar()
-- Aquí irá el código que se ejecuta al tocar
end

plataforma.Touched:Connect(alTocar)

Dentro de la función alTocar es donde definiremos el comportamiento de desvanecimiento. Si la plataforma desapareciera instantáneamente, sería casi imposible para los jugadores reaccionar. Queremos que se desvanezca gradualmente, dándoles tiempo para saltar. Esto se logra cambiando la propiedad Transparency (Transparencia) de la plataforma a lo largo del tiempo.

La propiedad Transparency varía de 0 (completamente visible) a 1 (completamente invisible). Para un desvanecimiento suave, necesitamos aumentar este valor en pequeños pasos. Podríamos escribir líneas de código repetitivas cambiando la transparencia y esperando un momento, pero eso sería ineficiente. Aquí es donde los bucles (loops) son útiles.

Un bucle for es perfecto para repetir una acción un número específico de veces. Para desvanecer la plataforma en 1 segundo con 10 pasos, podemos usar un bucle que itere 10 veces, aumentando la transparencia en 0.1 en cada iteración y esperando 0.1 segundos.

La estructura de un bucle for típicamente incluye una variable de control (que cuenta las iteraciones), un valor final (cuándo detenerse) y, opcionalmente, un incremento (cuánto sumar en cada paso, por defecto es 1). En nuestro caso, podemos usar la variable de control para calcular el valor de transparencia.

Implementando el Desvanecimiento Gradual

Dentro de la función alTocar, añadimos el bucle for. Iteraremos 10 veces, usando una variable contador que irá de 1 a 10.

local plataforma = script.Parent

local function alTocar()
for contador = 1, 10 do
plataforma.Transparency = contador / 10
task.wait(0.1)
end
end

plataforma.Touched:Connect(alTocar)

Analicemos este bucle:

  • for contador = 1, 10 do: Inicia un bucle donde la variable contador empieza en 1 y aumenta en 1 automáticamente en cada iteración hasta llegar a 10.
  • plataforma.Transparency = contador / 10: En la primera iteración, contador es 1, la transparencia se establece a 1/10 = 0.1. En la segunda, 2/10 = 0.2, y así sucesivamente hasta la décima iteración, donde es 10/10 = 1.
  • task.wait(0.1): Pausa la ejecución del script por 0.1 segundos.

El resultado es que la propiedad Transparency de la plataforma aumenta de 0.1 a 1.0 en 1 segundo, creando un efecto de desvanecimiento suave.

Controlando la Colisión y Reaparición

Una vez que la plataforma se ha vuelto completamente transparente (Transparency = 1), los jugadores ya no deberían poder pisarla; deberían caer a través de ella. Esto se controla con la propiedad CanCollide (Puede Colisionar). Si CanCollide es true, la plataforma es sólida. Si es false, los objetos (incluidos los personajes) pasarán a través de ella.

Después de que el bucle for termina (lo que significa que la plataforma es completamente invisible), debemos establecer CanCollide a false.

local plataforma = script.Parent

local function alTocar()
for contador = 1, 10 do
plataforma.Transparency = contador / 10
task.wait(0.1)
end
plataforma.CanCollide = false
end

plataforma.Touched:Connect(alTocar)

Si la plataforma desaparece para siempre, el desafío solo se podría intentar una vez. Generalmente, queremos que la plataforma reaparezca después de un tiempo para permitir que otros jugadores o el mismo jugador lo intenten de nuevo. Para hacer esto, simplemente esperamos unos segundos y luego revertimos los cambios: hacemos la plataforma sólida de nuevo (CanCollide = true) y la volvemos visible (Transparency = 0).

local plataforma = script.Parent

local function alTocar()
for contador = 1, 10 do
plataforma.Transparency = contador / 10
task.wait(0.1)
end
plataforma.CanCollide = false
task.wait(3) -- Espera 3 segundos
plataforma.CanCollide = true
plataforma.Transparency = 0
end

plataforma.Touched:Connect(alTocar)

Ahora, la plataforma se desvanece, se vuelve intangible por 3 segundos y luego reaparece en su estado original.

Evitando Múltiples Disparos: El Concepto de Debouncing

Hay un problema potencial con el código actual. El evento Touched se dispara cada vez que una parte del cuerpo del jugador (o cualquier otra parte) toca la plataforma. Si un jugador corre sobre la plataforma, el evento Touched se disparará varias veces rápidamente. Cada vez que se dispara, la función alTocar comienza de nuevo, reiniciando el bucle de desvanecimiento. Esto puede causar un comportamiento errático o impedir que la plataforma desaparezca correctamente.

How to scroll up and down in Roblox?
You need to learn how to scroll without arrow key as Roblox won't support arrow keys for scrolling. Place two fingers on the trackpad (do not click) then move them up and down dragging them on the trackpad. This is the only was apart from using a scroll wheel.

Para solucionar esto, necesitamos asegurarnos de que la función alTocar solo se ejecute una vez por "toque" significativo, es decir, cuando el jugador pisa la plataforma por primera vez antes de que se desvanezca. Esta técnica se llama Debouncing (Antirrebote).

El Debouncing se implementa típicamente usando una variable booleana (que solo puede ser true o false) para rastrear si la acción ya está en curso. Crearemos una variable llamada estaTocada, inicializada a false.

local plataforma = script.Parent
local estaTocada = false

local function alTocar()
-- El código irá aquí, condicionado por estaTocada
end

plataforma.Touched:Connect(alTocar)

Dentro de la función alTocar, solo queremos ejecutar el código de desvanecimiento si la plataforma *no* está marcada como tocada actualmente. Usamos una declaración if con la condición not estaTocada. El operador not invierte el valor booleano; not false es true, y not true es false.

local plataforma = script.Parent
local estaTocada = false

local function alTocar()
if not estaTocada then
-- Aquí movemos todo el código anterior de desvanecimiento y reaparición
end
end

plataforma.Touched:Connect(alTocar)

Ahora, el código dentro del if solo se ejecutará si estaTocada es false.

Completando el Debouncing

Para que el Debouncing funcione completamente, debemos cambiar el valor de estaTocada. Justo al principio de la función alTocar, *dentro* del bloque if (ya que solo entramos si no está tocada), establecemos estaTocada a true. Esto bloquea futuras llamadas a la función mientras la plataforma está en proceso de desvanecerse y reaparecer.

Una vez que la plataforma ha reaparecido y está lista para ser tocada de nuevo, debemos restablecer estaTocada a false. Esto debe hacerse al final de la función, después de que la plataforma ha vuelto a ser visible y sólida.

local plataforma = script.Parent
local estaTocada = false

local function alTocar()
if not estaTocada then
estaTocada = true -- Marcamos la plataforma como tocada

-- Código de desvanecimiento
for contador = 1, 10 do
plataforma.Transparency = contador / 10
task.wait(0.1)
end

-- Código de invisibilidad y reaparición
plataforma.CanCollide = false
task.wait(3)
plataforma.CanCollide = true
plataforma.Transparency = 0

estaTocada = false -- Restablecemos para permitir futuros toques
end
end

plataforma.Touched:Connect(alTocar)

¡Y eso es todo! Con este script completo, tu plataforma se desvanecerá suavemente cuando sea pisada, se volverá intangible, esperará unos segundos y luego reaparecerá, lista para el próximo desafío. El Debouncing asegura que el comportamiento sea consistente y predecible, sin importar cuántas veces el jugador toque la plataforma mientras se desvanece.

Preguntas Frecuentes (FAQ)

Aquí respondemos algunas preguntas comunes que podrías tener al implementar plataformas que desaparecen:

¿Qué pasa si quiero que la plataforma desaparezca instantáneamente en lugar de desvanecerse?
Si quieres una desaparición instantánea, no necesitas el bucle for. Simplemente, dentro del bloque if not estaTocada, establece plataforma.Transparency = 1 inmediatamente después de estaTocada = true. Luego, sigue con plataforma.CanCollide = false, el task.wait(), y la reaparición.

¿Cómo hago que la plataforma reaparezca más rápido o más lento?
El tiempo que tarda en reaparecer está controlado por el task.wait(3). Cambia el número 3 por la cantidad de segundos que deseas que permanezca invisible (por ejemplo, task.wait(1) para 1 segundo o task.wait(5) para 5 segundos).

¿Cómo ajusto la velocidad del desvanecimiento?
La velocidad del desvanecimiento está determinada por el número de iteraciones del bucle for y el tiempo de espera dentro de él. En for contador = 1, 10 do, 10 es el número de pasos. En task.wait(0.1), 0.1 es el tiempo entre pasos. Para un desvanecimiento más rápido, puedes disminuir el número de pasos (por ejemplo, for contador = 1, 5 do) o disminuir el tiempo de espera (por ejemplo, task.wait(0.05)). Para un desvanecimiento más lento, aumenta estos valores. Recuerda que la fórmula plataforma.Transparency = contador / 10 asume 10 pasos; si cambias el número de pasos (por ejemplo, a 20), deberás ajustar la fórmula (plataforma.Transparency = contador / 20).

¿El script debe estar *dentro* de la plataforma?
Sí, en este ejemplo simple, el script está dentro de la plataforma que controla. Esto facilita obtener la referencia a la plataforma usando script.Parent. Para sistemas más complejos con muchas plataformas, podrías tener un script central en otro lugar (como ServerScriptService) que gestione múltiples plataformas, pero la lógica básica de desvanecimiento y debouncing se aplicaría de manera similar.

¿Qué es task.wait()?
task.wait() es una función en Luau que pausa la ejecución del script por el número de segundos especificado. Es crucial para crear efectos de tiempo como desvanecimientos graduales o esperas antes de reaparecer. Es la forma moderna y recomendada de pausar scripts en Roblox.

Mi plataforma no desaparece, ¿qué puedo revisar?

  • Verifica que la plataforma está anclada (Anchored = true).
  • Asegúrate de que el script está *dentro* de la plataforma.
  • Comprueba que el nombre de la variable plataforma en el script realmente referencia al padre (script.Parent).
  • Revisa si hay errores en la ventana 'Output' (Salida) de Roblox Studio. Los errores de sintaxis o de lógica aparecerán allí.
  • Asegúrate de que la propiedad Transparency y CanCollide se están estableciendo correctamente dentro del bucle y después de él.
  • Verifica que el evento Touched está conectado correctamente a la función.
  • Confirma que la lógica de Debouncing (la variable estaTocada y el if not estaTocada) está implementada correctamente y que la variable se establece a true y false en los lugares adecuados.

¿Puedo hacer que la plataforma solo desaparezca una vez por jugador o por ronda de juego?
Sí, pero esto requiere una lógica más avanzada que rastree el estado de la plataforma por jugador o por el estado general del juego, posiblemente utilizando variables globales o módulos de script. El Debouncing que implementamos aquí solo previene múltiples activaciones *consecutivas* de la función de desvanecimiento para *una* instancia de la plataforma.

Crear plataformas que desaparecen es solo el comienzo. Puedes expandir esta idea para crear plataformas que se mueven, que cambian de color, que dan velocidad al jugador, o que tienen efectos visuales y sonoros al ser tocadas. La clave es entender cómo manipular propiedades de las partes, usar eventos para reaccionar a las interacciones y controlar el flujo de tu script con bucles y condicionales. El Debouncing es una técnica fundamental para asegurar que tus scripts responden de manera confiable a eventos que pueden dispararse repetidamente.

Experimenta con los tiempos de espera, la velocidad de desvanecimiento y el tiempo de reaparición para encontrar el equilibrio perfecto de dificultad para tu juego. Con práctica, podrás crear obstáculos muy creativos y atractivos para tus jugadores.

Si quieres conocer otros artículos parecidos a Plataformas que Desaparecen en Roblox puedes visitar la categoría Maquillaje.

Subir