Crear una mecánica de colección de monedas

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.


Ahora que tienes un mundo 3D, es hora de añadir tu primer script. En esta sección, crearás una mecánica de colección de monedas que permite a los jugadores recoger monedas y desactiva temporalmente las monedas después de que se hayan recogido.

Crea las monedas

Antes de que puedas programar algo, necesitas tener objetos de marcador de posición en el mundo para usar como tus monedas. Al igual que las plataformas de pila mariana que hiciste en la sección anterior, las monedas pueden ser objetos simples de tipo Part.

Crear las monedas

En Workspace > World, crea una nueva carpeta llamada Coins.
Dentro de la carpeta Coins, crea un Part cilíndrico llamado Coin con BrickColor establecido en Gold, Material establecido en Metal, Size 0.6, 8, 4 y Orientation 90, 0, 0.
Desactiva CanCollide y habilita Anchored.
Luego duplica la parte Coin varias veces y esparce las duplicados por la isla y en las plataformas para que sean alcanzables desde los niveles de las pilas marinas.
Mantén cada duplicado llamado Coin.

Crea el script

A continuación, harás que las monedas respondan a los jugadores. El motor de Roblox puede detectar cuando algo toca una moneda, pero necesitas usar un script para definir cómo debería reaccionar la moneda.

Crear CoinService

En ServerScriptService, crea un Script llamado CoinService con el siguiente código:
```lua
-- Inicializando servicios y variables
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
-- Definiendo el manejador de eventos
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- El jugador tocó una moneda
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("El jugador recogió una moneda")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Configurando oyentes de eventos
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end
```

Ahora, cada vez que un jugador toque una moneda, la moneda desaparecerá durante 10 segundos y el registro de salida imprimirá El jugador recogió una moneda.

Las siguientes secciones describen cómo funciona el script en más detalle.

Inicializa servicios y variables

Al igual que con mucho del código que probablemente has escrito en otros lenguajes, defines variables que necesitarás más tarde en la parte superior del script. Nuestro código hace lo siguiente:

  • Obtener instancias de servicios - Los servicios de Roblox ofrecen funcionalidad incorporada para funciones comunes. El script primero obtiene instancias del servicio Workspace, que contiene todos los objetos en el mundo 3D, y del servicio Player, que gestiona y contiene todos los jugadores conectados a tu juego.
  • Obtener referencias a todas las monedas - El script luego consulta el espacio de trabajo 3D en busca de todas las referencias a objetos de moneda con el método GetChildren(). Este método devuelve un arreglo que contiene todo lo que está parentado al objeto asociado, que en este caso es la carpeta Workspace.World.Coins que creaste previamente.
  • Define una variable global - La variable COOLDOWN se utiliza más tarde para definir cuánto tiempo desactivar una moneda después de que se recoja.
Inicializando Servicios y Variables

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
...

Definir el manejador de eventos

El motor de Roblox simula físicamente el mundo 3D y maneja gran parte de la lógica para gestionar los eventos relacionados con el renderizado, la física y la red. Cuando te interesa programar tu propia lógica durante algunos de estos eventos, puedes escuchar y manejarlos, mientras dejas que el motor se encargue del resto. En este caso, escuchas y manejas eventos relacionados con las monedas que son tocadas. El script define la lógica para manejar este evento en el método onCoinTouched(), que hace lo siguiente:

  • Detecta si la moneda está habilitada - Cada Instance tiene un atributo booleano Enabled que define si el objeto existe o no en el mundo 3D. Puedes obtener los atributos de instancia con el método GetAttribute().
  • Detecta si un jugador tocó la moneda - Si una moneda está habilitada, el método utiliza el servicio de jugadores para comprobar si el objeto que tocó la moneda era efectivamente un jugador. Cuando ocurre un evento de tocado, el motor de Roblox pasa el objeto que tocó la moneda como un parámetro otherPart. El script verifica si el padre de otherPart pertenece a un jugador.
  • Desactiva la moneda si un jugador la tocó, y la vuelve a habilitar después de 10 segundos - Finalmente, si un jugador tocó la moneda, el método desactiva la moneda, espera 10 segundos y luego vuelve a habilitar la moneda para su recolección. task.wait() se utiliza en lugar de wait(), porque proporciona un mejor rendimiento al no pausar completamente la ejecución del código, permitiendo que las tareas en otros hilos se ejecuten de manera concurrente.
Definiendo el Manejador de Eventos

local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- El jugador tocó una moneda
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("El jugador recogió una moneda")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Conectar el manejador de eventos

Todos los objetos 3D simulados heredan de BasePart y, por lo tanto, tienen un evento Touched(). El siguiente bucle conecta el manejador onTouchedEvent() al evento de toque de cada moneda haciendo lo siguiente:

  • Iterar a través de todas las monedas - Itera a través de cada una de las monedas usando una iteración general.
  • Conectar el manejador al evento - En cada iteración del bucle, la moneda está habilitada por defecto, por lo que es visible en el mundo 3D durante el inicio inicial del juego. El método del manejador onCoinTouched() también está conectado al evento Touched de la moneda para que se ejecute cada vez que ocurra el evento. Cuando el motor detecta un toque, también pasa el objeto que tocó el objeto, otherPart.
Conectando el Manejador de Eventos

for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end

Prueba la mecánica

Selecciona Test del menú desplegable y haz clic en Play. Mueve tu personaje para tocar una moneda. Si todo está funcionando, la moneda desaparece, la ventana de Output imprime El jugador recogió una moneda, y la moneda reaparece 10 segundos después.

La ventana de Output del estudio que muestra la confirmación de que el jugador recogió una moneda.
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.