Gli oggetti di pericolo diminuiscono la salute dei giocatori quando li toccano.Come punto di partenza semplice, questa sezione del tutorial ti insegna a 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 riporti all'inizio dell'esperienza.
Crea un pericolo idrico di base
Per creare il pericolo idrico di base:
Nella finestra Explorer , aggiungi una nuova cartella nella cartella Mondo , quindi rinominala Pericoli .Assicurati che il nome sia scritto correttamente con la casistica corretta, altrimenti il codice non funzionerà.
Nella cartella Pericoli , inserisci una parte blocco e rinominala Pericolo .
Sposta e scala la parte per coprire la linea d'acqua intorno all'isola e alle piattaforme.Ad esempio, il set di esperienza di esempio Island Jump - Scripting imposta Dimensione a 825, 1, 576 e CFrame.Position a 174, -6.5, 38 .
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:
- Imposta Trasparenza a 1. Questo rende l'insidia invisibile, in modo che l'acqua reale appaia come insidia.
- Disabilita CanCollide .Questo dice al motore che altre parti possono passare attraverso il pericolo senza interruzioni, il che significa che i giocatori possono cadere attraverso il pericolo.
- Abilita Ancorato .Questo dice al motore di non cambiare mai la posizione del pericolo a causa di qualsiasi simulazione legata alla fisica, il che significa che i giocatori possono toccare il pericolo senza influenzare la sua posizione.
Crea un Script in ServerScriptService , quindi rinominalo in HazardService .
Sostituisci 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 a 0 quando tocca un pericolo.
Sentiti libero di modificare, aggiungere or Inserireo rimuovere oggetti di pericolo nella tua esperienza per creare ostacoli unici.Fintanto che sono contenuti nella cartella Pericoli , il ciclo di codice connette il gestore eventi a tutti i tuoi pericoli.
Connetti al ciclo di vita del giocatore
Il ciclo di vita del giocatore rappresenta eventi che si verificano quando i giocatori interagiscono nella tua esperienza, come l'adesione, l'uscita o il respawn.Devi connettere i gestori a questi eventi per eseguire correttamente la logica per ciascun evento principale del ciclo di vita.Nello script CoinService , copia e pasta il seguente codice alla fine 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 interromperebbe il ciclo del giocatore, quindi qui sotto dovrebbe essere eseguito in un Filoseparato
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 il conteggio delle monete durante gli eventi di vita appropriati:
- Player.PlayerAdded brucia quando un giocatore si unisce all'esperienza e imposta il conteggio delle monete a 0 .
- Player.CharacterAdded brucia quando viene aggiunto al Mondoil modello del personaggio di un Giocatore. Si verifica dopo PlayerAdded e ogni volta che il giocatore respawna.
- Humanoid.Died brucia 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 del ciclo di vita del giocatore possano essere eseguiti.
- Player.PlayerRemoved brucia 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 dell'esecuzione dell'evento Players.PlayerAdded e poi avere il conteggio delle monete azzerato a zero.Per mitigare questo problema, considera soluzioni come la programmazione del codice o il congelamento del personaggio del Giocatorefino alla fine dell'inizializzazione.Tuttavia, queste soluzioni coinvolgono concetti di scripting più complessi che sono al di là della portata di questo Tutoriale.
Test di gioco
È tempo di vedere se il pericolo del giocatore funziona come previsto. Quando tocchi l'acqua, il tuo personaggio dovrebbe morire e perdere le sue monete. Per testare il tuo Gioco:
Nella barra degli strumenti, 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 classifica viene ripristinato su 0 .