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 mondo 3D, è tempo di aggiungere il tuo primo script. In questa sezione, creerai una meccanica di raccolta delle monete che consente ai giocatori di raccogliere monete e disabilita temporaneamente le monete dopo che sono state raccolte.

Crea le monete

Prima di poter scriptare qualcosa, devi avere oggetti segnaposto nel mondo da usare come monete. Come le piattaforme delle scogliere marittime che hai creato nella sezione precedente, le monete possono essere semplici oggetti Part.

Crea le monete

In Workspace > World, crea una nuova cartella chiamata Monete.
All'interno della cartella Monete, crea un Part cilindrico chiamato Moneta con BrickColor impostato su Oro, Material impostato su Metallo, Dimensioni 0.6, 8, 4 e Orientamento 90, 0, 0.
Disabilita CanCollide ed abilita Anchored.
Poi duplica il Part Moneta più volte e distribuisci le copie intorno all'isola e sulle piattaforme affinché siano accessibili dai livelli delle scogliere marittime.
Mantieni ogni copia chiamata Moneta.

Crea lo script

Successivamente, faremo in modo che le monete rispondano ai giocatori. Il motore 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 di 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
-- Definizione del gestore di 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("Il giocatore ha raccolto la moneta")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Impostazione dei listener 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 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 variabili di cui hai bisogno in seguito nella parte superiore dello script. Il nostro codice fa quanto segue:

  • Ottieni istanze di servizi - I servizi di Roblox forniscono funzionalità integrate per funzionalità comuni. Lo script ottiene prima 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 poi interroga lo spazio di lavoro 3D per tutte le referenze agli oggetti moneta utilizzando il metodo GetChildren(). Questo metodo restituisce un array contenente tutto ciò che è genitore all'oggetto a cui è associato, che in questo caso è la cartella Workspace.World.Coins che hai creato in precedenza.
  • Definisci una variabile globale - La variabile COOLDOWN viene utilizzata successivamente per definire quanto tempo disabilitare una moneta dopo che è stata raccolta.
Inizializzazione dei 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
...

Definisci il gestore di eventi

Il motore 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 scriptare la tua logica durante alcuni di questi eventi, puoi ascoltarli e gestirli, mentre lasci al motore il resto. In questo caso, ascolti e gestisci gli 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 Roblox passa l'oggetto che ha toccato la moneta come parametro otherPart. Lo script verifica se il genitore di otherPart appartiene a un giocatore.
  • Disabilita la moneta se un giocatore la tocca e la riabilita dopo 10 secondi - Infine, se un giocatore ha toccato la moneta, il metodo disabilita la moneta, aspetta 10 secondi e poi riabilita la moneta per la raccolta. task.wait() è usato al posto di wait() perché fornisce migliori prestazioni non interrompendo completamente l'esecuzione del codice, consentendo nell'altro thread di eseguire altre attività contemporaneamente.
Definizione del gestore di 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("Il giocatore ha raccolto la moneta")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Collega il gestore di eventi

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 contatto di una moneta facendo quanto segue:

  • Scorri tutte le monete - Scorri 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'inizio 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 contatto, passa anche l'oggetto che ha toccato l'oggetto, otherPart.
Collegare il gestore di eventi

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 di output di Studio che mostra 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.