Crea una meccanica di raccolta monete

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


Ora che hai un mondo 3D, è tempo di aggiungere il tuo primo script. In questa sezione, creerai una meccanica di raccolta monete che consente ai giocatori di raccogliere monete e disabilita temporaneamente le monete dopo che sono state raccolte.

Crea le monete

Prima di poter scrivere qualsiasi script, devi avere oggetti segnaposto nel mondo da utilizzare come monete. Come le piattaforme a forma di stack marino che hai creato nella sezione precedente, le monete possono essere semplici oggetti Part.

Crea le monete
In Workspace > World, crea una nuova cartella chiamata Coins.
All'interno della cartella Coins, crea un Part cilindrico chiamato Coin con BrickColor impostato su Gold, Material impostato su Metal, Size 0.6, 8, 4 e Orientation 90, 0, 0.
Disabilita CanCollide e abilita Anchored.
Quindi duplica il Part Coin diverse volte e distribuisci le copie attorno all'isola e sulle piattaforme in modo che siano raggiungibili dai livelli dello stack marino.
Mantieni ogni copia chiamata Coin.

Crea lo script

Successivamente, farai in modo che le monete rispondano ai giocatori. Il motore di Roblox può rilevare quando qualcosa tocca una moneta, ma devi utilizzare uno script per definire come la moneta dovrebbe reagire.

Crea CoinService
In ServerScriptService, crea uno Script chiamato CoinService con il seguente codice:
```lua
-- 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
-- Definizione del gestore 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("Il giocatore ha raccolto la moneta")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Impostazione dei listener per gli 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 stampa Il giocatore ha raccolto la moneta.

Le seguenti sezioni descrivono come funziona lo script in modo più dettagliato.

Inizializza servizi e variabili

Come con gran parte del codice che probabilmente hai scritto in altre lingue, definisci le variabili di cui hai bisogno più tardi nella parte superiore dello script. Il nostro codice fa quanto segue:

  • Ottieni istanze di servizio - I servizi di Roblox forniscono funzionalità integrate per funzionalità comuni. Lo script prima ottiene istanze del servizio Workspace, che contiene ogni oggetto nel mondo 3D, e del servizio Player, che gestisce e contiene tutti i giocatori connessi al tuo gioco.
  • Ottieni riferimenti a tutte le monete - Lo script quindi interroga lo spazio di lavoro 3D per tutti i riferimenti agli oggetti moneta con il metodo GetChildren(). Questo metodo restituisce un array contenente tutto ciò che è genitore dell'oggetto a 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 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 dell'evento

Il motore di Roblox simula fisicamente il mondo 3D e gestisce gran parte della logica per gestire eventi relativi al rendering, alla fisica e al networking. Quando sei interessato a scrivere la tua logica durante alcuni di questi eventi, puoi ascoltarli e gestirli, lasciando che il motore faccia il resto. In questo caso, ascolti e gestisci eventi relativi alle monete toccate. Lo script definisce la logica per gestire questo evento nel metodo onCoinTouched(), che fa quanto segue:

  • Rileva se la moneta è abilitata - Ogni Instance ha un attributo booleano Enabled che definisce se l'oggetto esiste o meno nel mondo 3D. Puoi ottenere gli attributi delle istanze con il metodo GetAttribute().
  • Rileva se un giocatore ha toccato la moneta - Se una moneta è abilitata, il metodo utilizza il servizio dei giocatori per controllare se l'oggetto che ha toccato la moneta era effettivamente un giocatore. Quando si verifica un evento di tocco, il motore di Roblox passa l'oggetto che ha toccato la moneta come parametro otherPart. Lo script controlla se il genitore di otherPart appartiene a un giocatore.
  • Disabilita la moneta se un giocatore l'ha toccata e la riabilita dopo 10 secondi - Infine, se un giocatore ha toccato la moneta, il metodo disabilita la moneta, attende 10 secondi e poi riabilita la moneta per la raccolta. task.wait() viene utilizzato invece di wait() perché fornisce prestazioni migliori non interrompendo completamente l'esecuzione del codice, consentendo ai compiti in altri thread di essere eseguiti in modo concorrente.
Definizione del Gestore 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("Il giocatore ha raccolto la moneta")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Collega il gestore dell'evento

Tutti gli oggetti 3D simulati ereditano da BasePart e quindi hanno un evento Touched(). Il seguente ciclo collega il gestore onTouchedEvent() a ogni evento di tocco delle monete facendo quanto segue:

  • Ciclo attraverso tutte le monete - Cicla attraverso ciascuna delle monete utilizzando un'iterazione generale.
  • Collega il gestore all'evento - In ogni iterazione del ciclo, la moneta è abilitata per impostazione predefinita, quindi è visibile nel mondo 3D durante l'avvio iniziale del gioco. Il metodo del gestore onCoinTouched() è anche collegato 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 l'oggetto che ha toccato l'oggetto, otherPart.
Collegamento del Gestore dell'Evento
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end

Prova la meccanica

Seleziona Test dal menu a discesa e fai clic su Play. Muovi il tuo personaggio per toccare una moneta. Se tutto funziona, la moneta scompare, la finestra Output stampa Il giocatore ha raccolto la moneta, e la moneta riappare 10 secondi dopo.

La finestra Output di Studio che mostra la conferma che il giocatore ha raccolto una moneta.
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.