Crear un Mecánico 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, esta sección del tutorial te enseña cómo agregar tu primer script para definir una mecánica de recolección de monedas. Esta mecánica permite que los jugadores recolecten monedas y desactive la recolección de una moneda si se ha recolectado recientemente.

Crear las Monedas

Antes de que pueda hacer nada, necesita tener objetos de marcador en el mundo para usar como sus monedas. Como las plataformas de pila de mar que hizo en la sección anterior, las monedas pueden ser objetos simples Part objetos.

Para crear las monedas:

  1. En la ventana Explorador , añade un nuevo directorio en el World directorio, y luego renombrarlo Coins .

  2. Inserta una parte de cilindro en la carpeta Monedas , luego renombra la parte a Moneda .

    Studio's Explorer window with the Coin part highlighted. The hierarchy of the Workspace to World folder to Coins folder to Coin part is also highlighted.
  3. Seleccione la parte, luego en la ventana Propiedades ,

    • Establece Color de ladrillo a Oro .
    • Establece Material a Metal .
    • Establece Tamaño a 0.6, 8, 4 .
    • Desactivar CanCollide . Esto le dice al motor que otras partes pueden pasar por la moneda, lo que significa que los jugadores pueden caminar a través de las monedas para recogerlas.
    • Habilita Anchored . Esto le dice al motor que nunca cambie la posición de la moneda debido a cualquier simulación relacionada con la física, lo que significa que los jugadores pueden tocar la moneda sin afectar su ubicación.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Duplica algunas monedas y posiciónalas alrededor del mapa para propósitos de prueba.

    Studio's Explorer window with multiple Coin parts highlighted under the Coins folder. A view of multiple coins on the island and two gray cylinder sea stacks.

Tus partes de cilindro ahora se ven como monedas y evitan la simulación de física, pero necesitas añadir lógica a las monedas para que los jugadores las puedan recoger.

Crear el Script

Para que las monedas sean recolectables, quieres reaccionar a los jugadores que las tocan. El motor de Roblox puede notificarte cuando algo toca una moneda, pero necesitas declararlo en un script. Para crear un script:

  1. En la ventana Explorer , pasa el cursor sobre ServerScriptService y haz clic en el botón . Se muestra un menú contextual.

  2. Desde el menú contextual, seleccione Script . Se muestra un nuevo script debajo de ServerScriptService , que le dice al motor que ejecute el script en el servidor y evita que los clientes accedan al código.

    Studio's Explorer window with both ServerScriptService's plus icon and Script object highlighted.
  3. Renombre el script a CoinService .

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Reemplace el código predeterminado con el siguiente código:


    -- 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 gestor 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("Player collected coin")
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Configurando evento escuchas
    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 toca una moneda, la moneda desaparece durante 10 segundos, y el registro de salida imprime Player collected coin .

    Las siguientes secciones explican cómo funciona el script con más detalle.

    Inicializando Servicios y Variables

    Como con mucho del código que probablemente has escrito en otros idiomas, definiste variables que necesitas más tarde en la parte superior del script. Nuestro código hace lo siguiendo:

    • Obtener instancias de servicio - Los servicios de Roblox proporcionan funciones integradas para características comunes. El script primero obtiene instancias del servicio de Workspace , que contiene todos los objetos en el mundo 3D, y el servicio de Player, que gestiona y contiene todos los jugadores conectados a tu experiencia.

    • Obtener referencias a todas las monedas - El script luego consulta el espacio de trabajo 3D para todas las referencias a objetos de moneda con el método GetChildren() . Este método devuelve un arreglo que contiene todo lo padreado al objeto con el que se asocia, que en este caso es el Workspace.World.Coins directorio que creaste anteriormente.

    • Define una variable global: - La variable COOLDOWN se usa más tarde para definir cuánto tiempo desactivar una moneda después de que se recolecte.

      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 Handler del Evento

    El motor de Roblox simula físicamente el mundo 3D y maneja mucha de la lógica para manejar eventos relacionados con el rendimiento, la física y la red. Cuando estás interesado en programar tu propia lógica durante algunos de estos eventos, puedes escuchar y manejar ellos, mientras que el motor hace el resto. En este caso, estás escuchando y manejando eventos relacionados con las moned

    • Detecta si la moneda está habilitada - Cada Instance tiene un atributo de Enabled que define si el objeto existe en el mundo 3D. Puedes obtener atributos de instancia con el método 0> Class.Instance:GetAttribute()|GetAttribute()0>.

    • Detecta si un jugador tocó la moneda - Si se habilita la moneda, el método usa el servicio del jugador para verificar si el objeto que tocó la moneda era un jugador. Cuando ocurre un evento de toque, el motor de Roblox pasa el objeto que tocó la moneda como un parámetro de otherPart . El script comprueba si el padre de otherPart pertene

    • Desactiva la moneda si un jugador la toca, y la reactiva después de 10 segundos - Finalmente, si un jugador toca la moneda, el método la desactiva, espera 10 segundos y luego reactiva la moneda para la colecciones. task.wait() es usado en lugar de wait() porque proporciona un mejor rendimiento

      Definiendo el gestor 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("Player collected coin")
      task.wait(COOLDOWN)
      coin.Transparency = 0
      coin:SetAttribute("Enabled", true)
      end
      end
      end

    Conectando el Handler del Evento

    Todos los objetos 3D simulados heredan de BasePart y por lo tanto tienen un evento Touched() . El siguiente ciclo conecta el controlador de onTouchedEvent() a cada evento de toque de moneda al hacer lo siguiendo:

    • Loop a través de todas las monedas - Loop a través de cada una de las monedas usando generalización.

    • Conecta el handleador al evento - En cada iteración de la cadena, la moneda está habilitada por defecto, por lo que es visible en el mundo 3D durante la inicialización de la experiencia. El método onCoinTouched() del handleador también se conecta al evento Touched de la mon

      Conectando el manejador de eventos

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

Probar el mecánico

Es hora de ver si la colección de monedas funciona como se esperaba. Para probar tu experiencia:

  1. En la barra de menú, haz clic en el botón Reproducir . Studio entra en modo de prueba de juego.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Mueva su personaje para tocar una moneda. Si sus scripts están funcionando correctamente, la ventana de salida muestra Player ha recogido la moneda , y la moneda desaparece durante 10 segundos antes de reaparecer.

    Studio's Output window that displays confirmation that the player collected a coin.