Crie uma mecânica 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ê a adicionar seu primeiro script para definir uma mecânica de coleta de moedas.Essa mecânica permite que os jogadores coletem moedas e desabilite a coleta de uma moeda se ela foi coletada recentemente.

Criar as moedas

Antes de poder programar qualquer coisa, você precisa ter objetos de espaço reservado no mundo para usar como suas moedas.Como as plataformas de pilha 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 diretório ao diretório Mundo , então renomeie-o Moedas .

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

    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 ,

    • Defina Cor do Tijolo para Ouro .
    • Defina Material para Metal .
    • Defina Tamanho 0.6, 8, 4 .
    • Desabilite CanCollide .Isso diz ao motor que outras peças podem passar pela moeda, o que significa que os jogadores podem caminhar pelas moedas para coletá-las.
    • Ativar Ancorado .Isso diz ao motor que nunca mude 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. Duplique mais algumas moedas e posicione-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 parecem moedas e impedem a simulação de física, mas você precisa adicionar lógica às moedas para que os jogadores possam coletá-las.

Crie o script

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

  1. Na janela Explorer , passe o mouse sobre Serviço de Script de Servidor e clique no botão . Um menu contextual é exibido.

  2. Do menu contextual, selecione Script .Um novo script é exibido sob Serviço de Script de Servidor , que diz ao motor para executar o script no servidor e impede que os clientes acessem 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 pelo 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 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
    -- 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 ouvintes de evento
    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 em uma moeda, a moeda desaparece por 10 segundos e o registro de saída imprime Player collected coin .

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

    Inicializar 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 no topo do script.Nosso código faz o seguindo:

    • Obtenha instâncias de serviço - Os serviços do Roblox fornecem funcionalidades integradas para recursos comuns.O script primeiro obtém instâncias do serviço Workspace 3D, 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 que contém tudo associado ao objeto com o qual está associado, que neste caso é o diretório Workspace.World.Coins que você criou anteriormente.

    • Defines uma variável global - A variável COOLDOWN é usada mais tarde para definir por quanto tempo desativar uma moeda depois de 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
      ...

    Defina o manipulador de eventos

    O motor do Roblox simula fisicamente 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 ouvi-los e lidar com eles, enquanto deixa o motor fazer o resto.Neste caso, você ouve e lida com eventos relacionados a moedas sendo tocadas.O script define a lógica para lidar com esse evento no método onCoinTouched(), que faz o seguindo:

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

    • Detecta se um jogador tocou a moeda - Se uma 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 Roblox passa o objeto que tocou a moeda como um parâmetro otherPart.O script verifica se o pai de otherPart pertence a um jogador.

    • Desabilita a moeda se um jogador a tocou, e reativa-a após 10 segundos - Finalmente, se um jogador tocou a moeda, o método desabilita a moeda, espera por 10 segundos e, em seguida, reativa a moeda para coleções. task.wait() é usado em vez de wait() porque oferece melhor desempenho ao não pausar totalmente a execução de código, permitindo que tarefas em outros subprocessos sejam executadas simultaneamente.

      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
      -- 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

    Conectar o manipulador de eventos

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

    • Percorra todas as moedas - Percorra cada uma das moedas usando a iteração geral.

    • Conecte o manipulador ao evento - Em cada iteração do loop, a moeda é habilitada por padrão, então ela é visível no mundo 3D durante o início inicial da experiência.O método do manipulador onCoinTouched() também está conectado ao evento Touched da moeda para que ele ocorra sempre que o evento ocorrer.Quando o motor detecta um toque, também passa no objeto que tocou o Objeto, otherPart .

      Conectando o Gerenciador de Eventos

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

Teste o mecânico

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

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

    Play button highlighted in Studio's playtesting options.
  2. Mova seu personagem para tocar em 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.