Les objets de danger diminuent la santé des joueurs lorsqu'ils les touchent.En tant que point de départ simple, cette section du tutoriel vous apprend à créer une grande partie invisible au même niveau que l'eau dans votre expérience, afin que tomber dans le danger change la santé du joueur à zéro et les réapparaisse à partir du début de l'expérience.
Créer un danger d'eau de base
Pour créer le danger d'eau de base :
Dans la fenêtre Explorateur , ajoutez un nouveau dossier dans le dossier Monde , puis renommez-le Dangers .Assurez-vous que le nom est orthographié correctement avec la bonne casse, sinon le code ne fonctionnera pas.
Dans le dossier dangers , insérez une partie de bloc et renommez-la danger .
Déplacez et redimensionnez la pièce pour couvrir la ligne d'eau autour de l'île et des plates-formes.Par exemple, l'expérience de test Saut de l'île - Programmation définie comme Taille à et CFrame.Position à .
Sélectionnez la partie, puis dans la fenêtre propriétés , configurez les propriétés suivantes afin que le danger soit invisible et que les joueurs puissent le traverser directement :
- Définir la transparence à . Cela rend le danger invisible, de sorte que l'eau réelle semble être le danger.
- Désactivez CanCollide .Cela indique au moteur que d'autres parties peuvent passer à travers le danger sans interruption, ce qui signifie que les joueurs peuvent tomber dans le danger.
- Activer Ancré .Cela indique au moteur de ne jamais modifier la position du danger en raison de toute simulation liée à la physique, ce qui signifie que les joueurs peuvent toucher le danger sans affecter sa localisation.
Créez un script dans ServerScriptService , puis renommez-le en HazardService .
Remplacez le code par défaut par le code suivant :
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)endExplication du codeLe HazardService a de nombreuses similitudes avec CoinService .Cependant, au lieu de collecter une pièce, le joueur a son ensemble de santé réglé sur 0 lorsqu'il touche un danger.
N'hésitez pas à modifier, ajouter ou supprimer des objets d'avertissement dans votre expérience pour créer des obstacles uniques.Tant qu'ils sont contenus dans le dossier dangers , la boucle de code se connecte au gestionnaire d'événements à toutes vos dangers.
Se connecter au cycle de vie du joueur
Le cycle de vie du joueur représente des événements qui se produisent lorsque les joueurs interagissent dans votre expérience, tels que l'adhésion, le départ ou la réapparition.Vous devez connecter des gestionnaires à ces événements pour exécuter correctement la logique pour chaque événement majeur du cycle de vie.Dans le script CoinService , copiez et collez le code suivant en bas du script :
local function onPlayerAdded(player)
-- Réinitialiser les pièces du joueur à 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild arrêterait la boucle du joueur, donc ce qui suit devrait être fait dans une colonne séparée
task.spawn(function()
-- Lorsqu'un joueur meurt
character:WaitForChild("Humanoid").Died:Connect(function()
-- Réinitialiser les pièces du joueur à 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Initialiser n'importe quel joueur ajouté avant de se connecter à l'événement 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)
Le code définit des fonctions pour réinitialiser le nombre de pièces pendant les événements de cycle appropriés :
- Player.PlayerAdded feux lorsqu'un joueur rejoint l'expérience et définit le nombre de pièces à 0.
- Player.CharacterAdded feux lorsque le modèle de caractère d'un joueur est ajouté au monde. Il se produit après PlayerAdded et chaque fois que le joueur réapparaît.
- Humanoid.Died feux lorsqu'un joueur meurt et défini le nombre de pièces à 0.task.spawn() crée une colonne séparée pour gérer cela, afin que d'autres aspects du cycle de vie du joueur puissent s'exécuter.
- Player.PlayerRemoved feux lorsqu'un joueur quitte l'expérience pour nettoyer l'état du joueur.
- Ce code contient un problème potentiel où les joueurs pourraient collecter des pièces avant l'exécution de l'événement Players.PlayerAdded et où leurs comptes de pièces seraient ensuite réinitialisés à zéro.Pour atténuer ce problème, envisagez des solutions telles que la planification du code ou le gel du personnage du joueur jusqu'à la fin de l'initialisation.Cependant, ces solutions impliquent des concepts de script plus complexes qui sont au-delà du scope de ce tutoriel.
Test de jeu
Il est temps de voir si le danger pour le joueur fonctionne comme prévu. Lorsque vous touchez l'eau, votre personnage doit mourir et perdre ses pièces. Pour tester votre jeu :
Dans la barre d'outils, cliquez sur le bouton Jouer . Studio entre en mode de test de jeu.
Déplacez votre personnage pour collecter quelques pièces, puis sautez dans l'eau.Si vos scripts fonctionnent correctement, votre personnage meurt et le nombre de pièces sur le classement est réinitialisé à 0 .