Criar um Mecânico de Coleção de Moedas

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.


Agora que você tem um mundo 3D, esta seção do tutorial ensina você como adicionar seu primeiro script para definir uma mecânica de coleta de moedas. Essa mecânica permite que os jogadores coletem moedas e desabilita a coleta de uma moeda se ela tiver sido recentemente coletada.

Criar as Moedas

Antes de você poder fazer qualquer coisa, você precisa ter objetos de espaço reservado no mundo para usar como suas moedas. Como as plataformas de pilhas de mar que você fez na seção anterior, as moedas podem ser objetos simples Part .

Para criar as moedas:

  1. Na janela Explorer , adicione um novo pasta na pasta Mundo , então renomeie-a para Moedas .

  2. Insira uma peça cilindro na pasta Moedas , então renomeie a peça para Coin .

    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. Selecione a peça, então na janela Propriedades ,

    • Definir Cor de Tijolo para Ouro .
    • Definir Material para Metal .
    • Definir Tamanho para 0.6, 8, 4 .
    • Desabilitar CanCollide . Isso diz ao motor que outras peças podem passar pela moeda, o que significa que os jogadores podem caminhar através das moedas para coletá-las.
    • Habilite Anchored . Isso diz ao motor para nunca alterar a posição da moeda devido a qualquer simulação relacionada à física, o que significa que os jogadores podem tocar a moeda sem afetar sua localização.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Duplica algumas moedas e coloca-as ao redor do mapa para fins de teste.

    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.

Suas peças de cilindro agora se parecem com moedas e impedem a simulação de física, mas você precisa adicionar lógica às moedas para que os jogadores possam coletá-las.

Criar o Script

Para que as moedas sejam coletáveis, você quer reagir aos jogadores que as tocam. O motor do Roblox pode notificá-lo quando algo toca uma moeda, mas você precisa declarar isso em um script. Para criar um script:

  1. Na janela Explorer , passe o mouse sobre ServerScriptService e clique no botão . Um menu contextual será exibido.

  2. Do menu contextual, selecione Script. Um novo script será exibido em ServerScriptService ', que diz ao motor para executar o script no servidor e impede que os clientes acessoem o código.

    Studio's Explorer window with both ServerScriptService's plus icon and Script object highlighted.
  3. Renomeie o script para CoinService .

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Substitua o código padrão com o seguinte código:


    -- Inicializando serviços e variáveis
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Definindo o gerenciador de eventos
    local function onCoinTouched(otherPart, coin)
    if coin:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- O jogador tocou em uma moeda
    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 ouvidores de eventos
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Agora, sempre que um jogador toca uma moeda, a moeda desaparece por 10 segundos, e o log de saída imprime Player collected coin .

    As seções a seguir descrevem como o script funciona com mais detalhes.

    Inicializando Serviços e Variáveis

    Como com muito do código que você provavelmente escreveu em outros idiomas, você define variáveis que você precisa mais tarde na parte superior do script. Nosso código faz o seguindo:

    • Obtenha instâncias de serviço - Os serviços Roblox fornecem funcionalidades incorporadas para recursos comuns. O script primeiro obtém instâncias do serviço Workspace, que contém todos os objetos no mundo 3D e do serviço Player, que gerencia e contém todos os jogadores conectados à sua experiência.

    • Obtenha referências a todas as moedas - O script então consulta o espaço de trabalho 3D para todas as referências a objetos de moeda com o método GetChildren(). Este método retorna um array contendo tudo o que está ligado ao objeto que você criou previamente, que neste caso é o Workspace.World.Coins pasta.

    • Define uma variável global - A variável COOLDOWN é usada mais tarde para definir o tempo de desativação de uma moeda depois de ser coletada.

      Inicializando Serviços e Variáveis

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

    Definindo o Gerenciador de Eventos

    O mecanismo Roblox fisicamente simula o mundo 3D e lida com muita da lógica para lidar com eventos relacionados a renderização, física e rede. Quando você está interessado em programar sua própria lógica durante alguns desses eventos, você pode ouvir e lidar com eles, enquanto deixa o motor fazer o resto. Neste caso, você ouve e lida com eventos relacionados

    • Detecta se a moeda está ativada ou não - Cada Instance tem um atributo Enabled que define se o objeto existe no mundo 3D ou não. Você pode obter atributos de instância com o método 0> Class.Instance:GetAttribute()|GetAttribute() .

    • Detecta se um jogador tocou a moeda - Se a moeda estiver ativada, o método usa o serviço do jogador para verificar se o objeto que tocou a moeda era realmente um jogador. Quando um evento de toque ocorre, o motor do Roblox passa o objeto que tocou a moeda como um parâmetro otherPart. O script verifica se o pai de otherPart pertence a um

    • Desabilita a moeda se um jogador a tocar a moeda, e re-abilita após 10 segundos. Finalmente, se um jogador tocar a moeda, o método desabilita a moeda, espera por 10 segundos e depois re-abilita a moeda para coleções. task.wait() é usado em vez de wait() porque

      Definindo o Gerenciador de Eventos

      local function onCoinTouched(otherPart, coin)
      if coin:GetAttribute("Enabled") then
      local character = otherPart.Parent
      local player = Players:GetPlayerFromCharacter(character)
      if player then
      -- O jogador tocou em uma moeda
      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 ao Gerenciador de Eventos

    Todos os objetos 3D simulados herdam de BasePart e, portanto, têm um evento Touched(). O seguinte loop conecta o cabo de onTouchedEvent() ao evento de toque de cada moeda ao fazer o seguindo:

    • Loop através de todas as moedas - Loop através de cada uma das moedas usando iteração geral.

    • Conecte o gerador ao evento - Em cada iteração do loop, a moeda é ativada por padrão, então ela é visível no mundo 3D durante o início inicial da experiência. O método onCoinTouched() do gerador também é conectado ao evento Touched

      Conectando ao Gerenciador de Eventos

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

Testar o Mecânico

É hora de ver se a coleção de moedas funciona como deveria. Para testar sua experiência:

  1. Na barra de menu, clique no botão Jogar . Studio entra no modo de teste de jogo.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Mova seu personagem para tocar uma moeda. Se seus scripts estiverem funcionando corretamente, a janela Saída exibe Player collected coin , e a moeda desaparece por 10 segundos antes de reaparecer.

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