Crea una meccanica di raccolta delle monete

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.


Ora che hai un Mondo3D, questa sezione del tutorial ti insegna come aggiungere il tuo primo script per definire una meccanica di raccolta delle monete.Questa meccanica consente ai giocatori di raccogliere monete e disabilita la raccolta di una moneta se è stata raccolta di recente.

Crea le monete

Prima di poter scriptare qualcosa, devi avere oggetti di riempimento nel mondo da utilizzare come monete.Come le piattaforme di stack del mare che hai fatto nella sezione precedente, le monete possono essere semplici oggetti Part .

Per creare le monete:

  1. Nella finestra Explorer , aggiungi una nuova cartella nella cartella Mondo , quindi rinominala Monete .

  2. Inserisci una parte cilindro nella cartella Monete , quindi rinomina la parte a Monete .

    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. Seleziona la parte, quindi nella finestra Proprietà ,

    • Imposta BrickColor a Oro .
    • Imposta Materiale a Metallo .
    • Imposta Dimensione a 0.6, 8, 4.
    • Disabilita CanCollide .Questo dice al motore che altre parti possono passare attraverso la moneta, cioè i giocatori possono camminare attraverso le monete per raccoglierle.
    • Abilita Ancorato .Questo dice al motore di non cambiare mai la posizione della moneta a causa di qualsiasi simulazione legata alla fisica, il che significa che i giocatori possono toccare la moneta senza influenzare la sua posizione.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Duplica un paio di monete in più e posizionali intorno alla mappa per scopi di test.

    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.

Le tue parti cilindriche ora sembrano monete e impediscono la simulazione della fisica, ma devi aggiungere logica alle monete in modo che i giocatori possano raccoglierle.

Crea il script

Per avere le monete da collezionare, vuoi reagire ai giocatori che le toccano.Il motore Roblox può notificarti quando qualcosa tocca una moneta, ma devi dichiararlo in uno script.Per creare uno script:

  1. Nella finestra Explorer , passa il mouse su ServerScriptService e fai clic sul pulsante . Un menu contestuale viene visualizzato.

  2. Dal menu contestuale, seleziona Script .Un nuovo script viene visualizzato sotto ServerScriptService , che dice al motore di eseguire lo script sul Servere impedisce ai client di accedere al codice.

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

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Sostituisci il codice predefinito con il seguente codice:


    -- Inizializzazione dei servizi e delle variabili
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Definire il gestore eventi
    local function onCoinTouched(otherPart, coin)
    if coin:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Il giocatore ha toccato una moneta
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    print("Player collected coin")
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Configurazione dei lettori di eventi
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Ora, ogni volta che un giocatore tocca una moneta, la moneta scompare per 10 secondi e il registro di output mostra Player collected coin .

    Le seguenti sezioni descrivono come funziona lo script in dettaglio.

    Inizializza servizi e variabili

    Come con un sacco di codice che probabilmente hai scritto in altre lingue, definisci le variabili di cui hai bisogno in seguito in cima allo script.Il nostro codice fa quanto Seguendo:

    • Ottieni istanze di servizio - I servizi Roblox forniscono funzionalità integrate per caratteristiche comuni.Lo script ottiene prima le istanze del servizio Workspace , che contiene ogni oggetto nel Mondo3D, e il servizio Player , che gestisce e contiene tutti i giocatori connessi alla tua esperienza.

    • Ottieni riferimenti a tutte le monete - Lo script quindi interroga lo spazio di lavoro 3D per tutti i riferimenti agli oggetti delle monete con il metodo GetChildren().Questo metodo restituisce un array che contiene tutto ciò che è parented all'oggetto con cui è associato, che in questo caso è la cartella Workspace.World.Coins che hai creato in precedenza.

    • Definisce una variabile globale - La variabile COOLDOWN viene utilizzata in seguito per definire per quanto tempo disabilitare una moneta dopo che è stata raccolta.

      Inizializzazione dei servizi e delle variabili

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

    Definisci il gestore eventi

    Il motore Roblox simula fisicamente il mondo 3D e gestisce molta della logica per gestire eventi relativi a rendering, fisica e networking.Quando sei interessato a scriptare la tua logica durante alcuni di questi eventi, puoi ascoltare e gestire loro, mentre lasci che il motore faccia il resto.In questo caso, ascolti e gestisci eventi relativi a monete che vengono toccate.Lo script definisce la logica per gestire questo evento nel metodo onCoinTouched(), che esegue quanto Seguendo:

    • Rileva se la moneta è abilitata - Ogni Instance ha un attributo booleano Enabled che definisce se l'oggetto esista o meno nel Mondo3D.Puoi ottenere gli attributi dell'istanza con il metodo GetAttribute().

    • Rileva se un giocatore ha toccato la moneta - Se una moneta è abilitata, il metodo utilizza il servizio del giocatore per verificare se l'oggetto che ha toccato la moneta era effettivamente un Giocatore.Quando si verifica un evento di tocco, il motore Roblox passa l'oggetto che ha toccato la moneta come parametro otherPart.Lo script controlla per vedere se il padre di otherPart appartiene a un Giocatore.

    • Disabilita la moneta se un giocatore la tocca, e la riabilita dopo 10 secondi - Infine, se un giocatore tocca la moneta, il metodo disabilita la moneta, aspetta 10 secondi, e poi riabilita la moneta per la Collezioni.task.wait() è utilizzato invece di wait() perché fornisce una migliore performance non fermando completamente l'esecuzione del codice, consentendo alle attività in altri thread di essere eseguite contemporaneamente.

      Definire il gestore eventi

      local function onCoinTouched(otherPart, coin)
      if coin:GetAttribute("Enabled") then
      local character = otherPart.Parent
      local player = Players:GetPlayerFromCharacter(character)
      if player then
      -- Il giocatore ha toccato una moneta
      coin.Transparency = 1
      coin:SetAttribute("Enabled", false)
      print("Player collected coin")
      task.wait(COOLDOWN)
      coin.Transparency = 0
      coin:SetAttribute("Enabled", true)
      end
      end
      end

    Connetti il gestore eventi

    Tutti gli oggetti 3D simulati ereditati da BasePart e quindi hanno un evento Touched().Il seguente ciclo connette il onTouchedEvent() handler al evento di tocco di ogni moneta facendo quanto Seguendo:

    • Loop attraverso tutte le monete - Loop attraverso ciascuna delle monete utilizzando l'iterazione generale.

    • Connetti il gestore all'evento - In ogni iterazione del ciclo, la moneta è abilitata per impostazione predefinita, quindi è visibile nel mondo 3D durante l'avvio iniziale dell'esperienza.Il metodo handler onCoinTouched() è anche connesso all'evento Touched della moneta in modo che venga eseguito ogni volta che si verifica l'evento.Quando il motore rileva un tocco, passa anche nell'oggetto che ha toccato l'oggetto, otherPart .

      Connettere il gestore eventi

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

Prova la meccanica

È tempo di vedere se la meccanica della raccolta delle monete funziona come previsto. Per testare la tua esperienza:

  1. Nella barra degli strumenti, fai clic sul pulsante Gioca . Studio entra in modalità playtest.

    Play button highlighted in Studio's playtesting options.
  2. Sposta il tuo personaggio per toccare una moneta.Se i tuoi script funzionano correttamente, la finestra Output mostra Player collected coin e la moneta scompare per 10 secondi prima di riapparire.

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