Gli oggetti pericolo riducono la salute dei giocatori quando li toccano. Come punto di partenza semplice, questa sezione del tutorial ti insegna come creare una grande parte invisibile allo stesso livello dell'acqua nella tua esperienza, in modo che cadere nel pericolo cambi la salute del Giocatorea zero e lo riapparire all'inizio dell'esperienza.
Crea un pericolo d'acqua di base
Per creare il pericolo d'acqua di base:
Nella finestra Explorer, aggiungi una nuova cartella nella cartella World, quindi rinominala in Hazards. Assicurati che il nome sia scritto correttamente con la casella corretta, altrimenti il codice non funzionerà.
Nella cartella Pericoli, inserisci una parte blocco e rinominala in Pericolo.
Sposta e ridimensiona la parte per coprire la linea d'acqua intorno all'isola e alle piattaforme. Ad esempio, l'esperienza di scripting Island Jump - Scripting imposta Size su 825, 1, 576 e 1>CFrame.Position1> su 4>174, -6.5, 384> .
Seleziona la parte, quindi nella Finestra Proprietà , configura le seguenti proprietà in modo che il pericolo sia invisibile, e i giocatori possano passare attraverso di esso in modo sicuro:
- Imposta Trasparenza su 1 . Ciò rende il pericolo invisibile, in modo che l'acqua reale appaia essere il pericolo.
- Disabilita CanCollide . Questo dice al motore che altre parti possono passare attraverso il pericolo ininterrotto, il che significa che i giocatori possono cadere attraverso il pericolo.
- Abilita Anchored . Ciò consente al motore di non cambiare mai la posizione del pericolo a causa di qualsiasi simulazione fisica, il che significa che i giocatori possono toccare il pericolo senza influire sulla sua posizione.
Crea uno Script in ServerScriptService, quindi rinominalo in HazardService.
Remplace il codice predefinito con il seguente codice:
local 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)endSpiegazione del codiceIl HazardService ha molte somiglianze con CoinService . Tuttavia, invece di raccogliere una moneta, il giocatore ha il loro set di salute impostato su 0 quando tocca un pericolo.
Sentiti libero di modificare, aggiungere or Inserireo rimuovere oggetti pericolo nella tua esperienza per creare ostacoli unici. Fintanto che sono contenuti nella cartella Pericoli , il loop di codice connette l'evento handler a tutti i tuoi pericoli.
Connetti al ciclo di vita del giocatore
Il ciclo di vita del giocatore rappresenta gli eventi che si verificano quando i giocatori interagiscono nella tua esperienza, come unirsi, lasciare o respawnare. Devi connettere i gestori a questi eventi per eseguire correttamente la logica per ogni grande evento di ciclo di vita. Nel script CoinService , copia e pasta il seguente codice nella parte inferiore dello script:
local function onPlayerAdded(player)
-- Ripristina le monete del giocatore a 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild interrompe il ciclo del giocatore, quindi di seguito dovrebbe essere fatto in un Filo
task.spawn(function()
-- Quando un giocatore muore
character:WaitForChild("Humanoid").Died:Connect(function()
-- Ripristina le monete del giocatore a 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inizializza qualsiasi giocatore aggiunto prima di connettersi all'evento PlayerAdded
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)
Il codice definisce funzioni per ripristinare i conti delle monete durante gli eventi di vita appropriati:
- Player.PlayerAdded quando un giocatore si unisce all'esperienza, e imposta il numero di monete su 0 .
- Class.Player.CharacterAdded``Class.Player.PlayerAdded|PlayerAdded quando il modello di personaggio di un Giocatoreviene aggiunto al Mondo. Si verifica dopo Class.Player.PlayerAdded|PlayerAdded e ogni volta che il giocatore respawna.
- Humanoid.Died fa fuoco quando un giocatore muore, e imposta il conteggio delle monete su 0 . task.spawn() crea un thread separato per gestire questo, in modo che altri aspetti della vita del giocatore possano essere eseguiti.
- Player.PlayerRemoved fire quando un giocatore lascia l'esperienza per pulire lo stato del giocatore.
- Questo codice contiene un potenziale problema in cui i giocatori potrebbero raccogliere monete prima che l'evento Players.PlayerAdded esegua e poi hanno i loro conti monete ripristinati a zero. Per mitigare questo problema, considera soluzioni come la programmazione del codice o la congelatura del personaggio fino all'esecuzione dell'Giocatore. Tuttavia, queste soluzioni coinvolgono concetti di script più complessi che sono oltre la portata di questo Tutoriale.
Playtest
È ora di vedere se il pericolo del giocatore funziona come previsto. Quando tocchi l'acqua, il tuo personaggio dovrebbe morire e perdere le loro monete. Per testare il tuo Gioco:
Nella barra dei menu, fai clic sul pulsante Gioca . Studio entra in modalità playtest.
Sposta il tuo personaggio per raccogliere alcune monete, quindi salta nell'acqua. Se i tuoi script funzionano correttamente, il tuo personaggio muore e il conteggio delle monete sulla leaderboard si ripristina a 0 .