Attualmente, i giocatori possono cadere da qualsiasi piattaforma senza conseguenze. Questa sezione ti guiderà nella creazione di un grande pericolo invisibile all'altezza dell'acqua nel tuo gioco. Quando un giocatore cade nel pericolo, la sua salute viene ridotta a zero e rinasce all'inizio del gioco.
Crea un pericolo d'acqua di base
Crea un pericolo d'acqua di baseIn Workspace > World, crea una nuova cartella chiamata Hazards.All'interno della cartella Hazards, crea un blocco Part chiamato Hazard con Size 825, 1, 576 e CFrame.Position 174, -6.5, 38 in modo che il blocco copra l'acqua intorno all'isola e alle piattaforme.Imposta Transparency su 1 in modo che il blocco sia invisibile e l'acqua reale appaia come il pericolo, disabilita CanCollide affinché i giocatori cadano attraverso di esso nell'acqua e abilita Anchored affinché la fisica non lo muova.
Rileva quando i giocatori toccano il pericolo
Il pericolo non fa nulla finché non scrivi uno script che ascolta Touched e riduce la salute del giocatore a zero.
Crea HazardServiceIn ServerScriptService, crea un Script chiamato HazardService con il seguente codice:```lualocal Players = game:GetService("Players")local Workspace = game:GetService("Workspace")local hazardsFolder = Workspace.World.Hazardslocal hazards = hazardsFolder:GetChildren()local function onHazardTouched(otherPart)local character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.Health = 0endendendfor _, hazard in hazards dohazard.Touched:Connect(onHazardTouched)end```
Il HazardService ha molte similitudini con il CoinService. Tuttavia, invece di raccogliere una moneta, al giocatore viene impostata la salute a 0 quando tocca un pericolo.
Sentiti libero di modificare, aggiungere o rimuovere oggetti pericolosi nel tuo gioco per creare ostacoli unici. Finché sono contenuti nella cartella Hazards, il ciclo di codice collega il gestore degli eventi a tutti i tuoi pericoli.
Collega al ciclo di vita del giocatore
Il ciclo di vita del giocatore rappresenta eventi che si verificano quando i giocatori interagiscono nel tuo gioco, come unirsi, lasciare o rinascere. Devi collegare gestori a questi eventi per eseguire logica per ogni evento principale del ciclo di vita.
Aggiungi gestori del ciclo di vita a CoinServiceIn ServerScriptService, aggiungi il seguente codice in fondo allo Script esistente di CoinService (non sostituire alcuno dei codici esistenti — aggiungi questo dopo):```lualocal function onPlayerAdded(player)-- Ripristina i gettoni del giocatore a 0updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild fermerebbe il ciclo di gioco, quindi ciò di seguito dovrebbe essere eseguito in un thread separatotask.spawn(function()-- Quando un giocatore muorecharacter:WaitForChild("Humanoid").Died:Connect(function()-- Ripristina i gettoni del giocatore a 0updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- Inizializza eventuali giocatori aggiunti prima di collegarsi all'evento PlayerAddedfor _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)```
Il codice definisce funzioni per ripristinare i conteggi dei gettoni durante i giusti eventi del ciclo di vita:
- Players.PlayerAdded si attiva quando un giocatore entra nel gioco e imposta il conteggio dei gettoni a 0.
- Player.CharacterAdded si attiva quando il modello del personaggio di un giocatore viene aggiunto al mondo. Si verifica dopo PlayerAdded e ogni volta che il giocatore rinasce.
- Humanoid.Died si attiva quando un giocatore muore e imposta il conteggio dei gettoni a 0. task.spawn() crea un thread separato per gestirlo, quindi altri aspetti del ciclo di vita del giocatore possono essere eseguiti.
- Player.PlayerRemoved si attiva quando un giocatore lascia il gioco per pulire lo stato del giocatore.
- Questo codice contiene un problema potenziale in cui i giocatori potrebbero raccogliere gettoni prima che l'evento Players.PlayerAdded venga eseguito e poi avere i loro conteggi di gettoni ripristinati a zero. Per mitigare questo problema, considera soluzioni come la programmazione del codice o il congelamento del personaggio del giocatore fino al termine dell'inizializzazione. Tuttavia, queste soluzioni comportano concetti di scripting più complessi che vanno oltre l'ambito di questo tutorial.
Prova di gioco
Seleziona Test dal menu a discesa e clicca su Gioca. Raccogli alcuni gettoni, poi salta nell'acqua. Il tuo personaggio dovrebbe morire e rinascere all'inizio, con il conteggio dei gettoni ripristinato a 0.