Crea un Meccanico di 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 di monete. Questa meccanica consente ai giocatori di raccogliere monete e disabilita la raccolta di una moneta se è stata recentemente raccolta.

Crea le monete

Prima di poter fare uno script, devi avere oggetti placeholder nel mondo per usare come le tue monete. Come le piattaforme di stack della sponda precedente, le monete possono essere oggetti Part semplici.

Per creare le monete:

  1. Nella finestra Explorer , aggiungi una nuova cartella nella World cartella, quindi rinominala in Coins .

  2. Inserisci una parte cilindro in the Monete folder, then rename the part to 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. Seleziona la parte, quindi nella finestra Proprietà ,

    • Imposta BrickColor su Gold .
    • Imposta Materiale su Metallo .
    • Imposta Dimensione su 0.6, 8, 4 .
    • Disabilita CanCollide . Questo dice al motore che altre parti possono passare attraverso la moneta, il che significa che i giocatori possono camminare attraverso le monete per raccoglierle.
    • Abilita Anchored . Ciò consente al motore di non cambiare mai la posizione della moneta a causa di qualsiasi simulazione fisica, il che significa che i giocatori possono toccare la moneta senza influire sulla sua posizione.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Duplica alcune monete e posizionarle 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 del cilindro ora sembrano come monete e impediscono la simulazione fisica, ma devi aggiungere logica alle monete in modo che i giocatori possano raccoglierle.

Crea lo script

Per rendere le monete raccolte, vuoi reagire ai giocatori che le toccano. Il motore Roblox può avvisarti 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 . Viene visualizzato un menu contestuale.

  2. Dal menu contestuale, seleziona Script. Viene visualizzato un nuovo script 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 in CoinService .

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Remplace 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
    -- Difinire l'evento hook
    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 uscita mostra Player collected coin .

    Le seguenti sezioni descrivono in dettaglio come lo script funziona.

    Inizializzazione 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 nella parte superiore dello script. Il nostro codice fa le Seguendo:

    • Ottieni istanze di servizio - I servizi Roblox forniscono built-in funzionalità per le funzionalità comuni. Lo script prima ottiene 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 poi ottiene l'area di lavoro 3D per tutti i riferimenti alle oggetti monete con il metodo GetChildren() . Questo metodo restituisce un array contenente tutto ciò che è legato all'oggetto con cui è associato, che in questo caso è il Workspace.World.Coins cartella che hai creato in precedenza.

    • Difini una variabile globale. - La variabile COOLDOWN viene utilizzata in seguito per definire quanto tempo disabilitare una moneta dopo averla raccolta.

      Inizializzazione Servizi e Variabili

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

    Difinire l'evento Handler

    Il motore Roblox fisicamente simula il mondo 3D e gestisce una gran parte della logica per gestire gli eventi relativi alla rendering, alla fisica e alla rete. Quando sei interessato a scriptare la tua logica durante alcuni di questi eventi, puoi ascoltare e gestire loro, mentre lasciando che il motore faccia il resto. In questo caso, ascolti e gestisci gli eventi relativi ai monete tocc

    • Indica se la moneta è abilitata - Ogni Instance ha un attributo Enabled che definisce se esiste o no l'oggetto nel Mondo3D. Puoi ottenere attributi delle istanze con il metodo 0> Class.Instance:GetAttribute()|GetAttribute()0>.

    • Rileva se un giocatore ha toccato la moneta - Se è abilitata una moneta, il metodo utilizza il servizio del giocatore per controllare se l'oggetto che ha toccato la moneta era in realtà un Giocatore. Quando si verifica un evento di tocco, il motore Roblox passa il parametro otherPart a number1 . Il script controlla se il padre di numberPart 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 la disabilita, aspetta 10 secondi e poi riabilita la moneta per la Collezioni. task.wait() viene utilizzato invece di wait() perché fornisce le migli

      Difinizione dell'evento

      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

    Connessione dell'evento Handler

    Tutti gli oggetti 3D simulati ereditano da BasePart e quindi hanno un evento Touched() . Il seguente loop connetta il gestore onTouchedEvent() a ogni evento di tocco della moneta facendo il Seguendo:

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

    • Connetti il gestore all'evento - In ogni iterazione del loop, la moneta è abilitata per impostazione predefinita, quindi è visibile nel mondo 3D durante l'inizializzazione dell'esperienza. Il metodo onCoinTouched() del gestore è anche connesso all'evento

      Connessione dell'evento

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

Playtest del meccanico

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

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

    Studio's Home tab with the Play button highlighted in the menu bar.
  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.