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, 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 recojan monedas y desactiva la recogida de una moneda si recientemente se ha recogido.

Crear las monedas

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

Para crear las monedas:

  1. En la ventana Explorador , agrega una nueva carpeta en la carpeta Mundo , luego renombra la carpeta Monedas .

  2. Inserta una parte 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 .
    • Establecer tamaño a .
    • Desactivar CanCollide .Esto le dice al motor que otras partes pueden pasar a través de la moneda, lo que significa que los jugadores pueden caminar a través de las monedas para recogerlas.
    • Habilitar Anclado .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 unas pocas monedas más y colócalas alrededor del mapa con fines 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 piezas de cilindro ahora se parecen a monedas y previenen la simulación de física, pero necesitas agregar lógica a las monedas para que los jugadores puedan recogerlas.

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 toque una moneda, pero necesitas declararlo en un script.Para crear un script:

  1. En la ventana Explorador , pasa el mouse sobre Servicio de script del servidor y haz clic en el botón . Se muestra un menú contextual.

  2. Desde el menú contextual, seleccione Guión .Un nuevo script se muestra debajo de Servicio de script del servidor , 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. Renombra el script a CoinService .

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


    -- Inicialización de 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 manipulador 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
    -- Configurar los 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 toca una moneda, la moneda desaparece durante 10 segundos, y el registro de salida imprime Player collected coin .

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

    Inicializar servicios y variables

    Al igual que con mucho del código que probablemente hayas escrito en otros idiomas, defines 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 funcionalidad integrada para características comunes.El script primero obtiene instancias del servicio Workspace que contiene todos los objetos en el mundo 3D, y el servicio 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 monedas con el método GetChildren().Este método devuelve un array que contiene todo lo que está asociado al objeto con el que está asociado, que en este caso es la carpeta Workspace.World.Coins que creó 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.

      Inicialización de 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
      ...

    Defina el manipulador de eventos

    El motor de Roblox simula físicamente el mundo 3D y maneja mucha de la lógica para manejar eventos relacionados con el renderizado, 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 dejas que el motor haga el resto.En este caso, escuchas y manejas eventos relacionados con las monedas que se tocan.El script define la lógica para manejar este evento en el método onCoinTouched(), que hace lo siguiendo:

    • Detecta si la moneda está habilitada - Cada tiene un atributo booleano que define si el objeto existe o no en el mundo 3D.Puedes obtener atributos de instancia con el método GetAttribute().

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

    • Desactiva la moneda si un jugador la toca, y la vuelve a habilitar después de 10 segundos - Por último, si un jugador toca la moneda, el método desactiva la moneda, espera 10 segundos, y luego vuelve a habilitar la moneda para la colecciones. task.wait() se usa en lugar de wait() porque proporciona un mejor rendimiento al no pausar la ejecución del código por completo, permitiendo que las tareas en otros subprocesos se ejecuten simultáneamente.

      Definiendo el manipulador 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

    Conecta el manipulador de eventos

    Todos los objetos 3D simulados heredados 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 siguiendo:

    • Bucle a través de todas las monedas - Bucle a través de cada una de las monedas usando la iteración general.

    • Conecta el manejador al evento - En cada iteración del bucle, la moneda se habilita por defecto, por lo que es visible en el mundo 3D durante el inicio inicial de la experiencia.El método 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 por el objeto que tocó el objeto, otherPart .

      Conectando el manipulador 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

Es hora de ver si la mecánica de la colección de monedas funciona como se pretendía. Para probar tu experiencia:

  1. En la barra de herramientas, haz clic en el botón Jugar . Studio entra en modo de prueba de juego.

    Play button highlighted in Studio's playtesting options.
  2. Mueve tu personaje para tocar una moneda.Si tus scripts funcionan correctamente, la ventana Salida muestra Player collected coin y la moneda desaparece durante 10 segundos antes de reaparecer.

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