Les objets de danger réduisent 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 la chute dans le danger change la santé du joueur à zéro et le réapparaisse au début de l'expérience.
Créer un risque d'eau de base
Pour créer le risque d'eau de base :
Dans la fenêtre Explorateur , ajoutez un nouveau dossier dans le dossier Monde , puis renommez-le en dangers . Assurez-vous que le nom est correctement orthographié avec la bonne police, sinon le code ne fonctionnera pas.
Dans le dangers dossier, insérez une partie de bloc et renommez-le en danger .
Déplacez et redimensionnez la partie pour couvrir la ligne d'eau autour de l'île et des plates-formes. Par exemple, l'expérience d'île de saut Island Jump - Scripting définie la taille Size à 825, 1, 576 et 1> CFrame.Position1> à 4>174, -6.5, 38
Sélectionnez la partie, puis dans la Fenêtre propriétés , configurez les propriétés suivantes pour que le danger soit invisible, et les joueurs puissent passer à travers :
- Définir la transparence à 1 . Cela rend le danger invisible, afin que l'eau réelle apparente le danger.
- Désactivez CanCollide . Cela signale au moteur que d'autres parties peuvent passer à travers le danger sans être endommagées, ce qui signifie que les joueurs peuvent tomber à travers le danger.
- Activer Anchored . Cela signale au moteur de ne jamais changer la position du danger en raison de toute simulation physique, ce qui signifie que les joueurs peuvent toucher le danger sans affecter son emplacement.
Créer un script dans ServerScriptService , puis le renommer 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 set de santé à 0 lorsqu'il touche un danger.
N'hésitez pas à modifier, à ajouter ou à supprimer les objets de danger dans votre expérience pour créer des obstacles uniques. Tant qu'ils sont contenus dans le dangers dossier, le code de boucle de code connecte le gestionnaire d'événements à tous vos dangers.
Connectez-vous au cycle de vie du joueur
Le cycle de vie du joueur représente les événements qui se produisent lorsque les joueurs interagissent dans votre expérience, tels que le rejoindre, quitter ou réapparaître. Vous devez connecter des gestionnaires à ces événements pour exécuter la logique appropriée pour chaque événement majeur du cycle de vie. Dans le script CoinService , copiez et collez le code suivant au bas du script :
local function onPlayerAdded(player)
-- Réinitialisez 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 ci-dessous devrait être fait dans une autre colonne
task.spawn(function()
-- Lorsqu'un joueur meurt
character:WaitForChild("Humanoid").Died:Connect(function()
-- Réinitialisez les pièces du joueur à 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Initialisez n'importe quel joueur ajouté avant de vous 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 de vie appropriés :
- Player.PlayerAdded se déclenche lorsqu'un joueur rejoint l'expérience et définit le nombre de pièces sur 0 .
- Player.CharacterAdded se déclenche lorsqu'un modèle de personnage d'un joueur est ajouté au monde. Il se produit après PlayerAdded et chaque fois que le joueur réapparaît.
- Humanoid.Died les feux quand un joueur meurt, et définie le nombre de pièces sur 0 . task.spawn() crée un fil séparé pour gérer cela, afin que d'autres aspects de la vie du joueur puissent s'exécuter.
- Player.PlayerRemoved se déclenche 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 que l'événement Players.PlayerAdded exécute et réinitialise ensuite le nombre de pièces de joueurs à zéro. Pour mitiger ce problème, considérez des solutions telles que la planification des scripts 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à de la portée de ce tutoriel.
Test de jeu
Il est temps de voir si le joueur se comporte comme prévu. Lorsque vous touchez l'eau, votre personnage doit mourir et perdre ses pièces. Pour tester votre jeu :
Dans la barre de menu, cliquez sur le bouton Jouer . Studio entre en mode playtest.
Déplacez votre personnage pour collecter des pièces, puis sautez dans l'eau. Si vos scripts fonctionnent correctement, votre personnage meurt, et le nombre de pièces sur le tableau de bord se réinitialise à 0 .