Im Moment können Spieler von jeder Plattform ohne Konsequenzen fallen. In diesem Abschnitt zeigen wir Ihnen, wie Sie eine große unsichtbare Gefahr auf der gleichen Höhe wie das Wasser in Ihrem Spiel erstellen. Wenn ein Spieler in die Gefahr fällt, wird seine Gesundheit auf null reduziert und er respawned am Anfang des Spiels.
Erstellen Sie eine grundlegende Wassergefahr
Erstellen Sie eine grundlegende WassergefahrIn Workspace > World erstellen Sie einen neuen Ordner mit dem Namen Hazards.Innerhalb des Hazards-Ordners erstellen Sie ein Block-Teil mit dem Namen Hazard mit Size 825, 1, 576 und CFrame.Position 174, -6.5, 38, sodass das Teil das Wasser um die Insel und Plattformen abdeckt.Setzen Sie die Transparenz auf 1, damit das Teil unsichtbar ist und das tatsächliche Wasser als Gefahr erscheint, deaktivieren Sie CanCollide, damit die Spieler hindurchfallen können, und aktivieren Sie Anchored, damit die Physik es nicht bewegt.
Erkennen, wenn Spieler die Gefahr berühren
Die Gefahr tut nichts, bis Sie ein Skript schreiben, das Touched abhört und die Gesundheit des Spielers auf null setzt.
Erstellen Sie HazardServiceIn ServerScriptService erstellen Sie ein Skript mit dem Namen HazardService mit dem folgenden Code:```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```
Der HazardService hat viele Ähnlichkeiten mit dem CoinService. Allerdings wird anstatt einen Coin zu sammeln, die Gesundheit des Spielers auf 0 gesetzt, wenn er eine Gefahr berührt.
Fühlen Sie sich frei, Gefahrenobjekte in Ihrem Spiel zu modifizieren, hinzuzufügen oder zu entfernen, um einzigartige Hindernisse zu schaffen. Solange sie im Ordner Hazards enthalten sind, verbindet die Code-Schleife den Ereignis-Handler mit all Ihren Gefahren.
Mit dem Lebenszyklus des Spielers verbinden
Der Lebenszyklus des Spielers stellt Ereignisse dar, die eintreten, wenn Spieler in Ihrem Spiel interagieren, zum Beispiel beim Beitreten, Verlassen oder Respawnen. Sie müssen Handler mit diesen Ereignissen verbinden, um Logik für jedes wichtige Lebenszyklusereignis auszuführen.
Fügen Sie Lebenszyklus-Handler zu CoinService hinzuIn ServerScriptService fügen Sie den folgenden Code ans Ende des vorhandenen CoinService-Skripts hinzu (ersetzen Sie keinen der vorhandenen Codes — fügen Sie dies danach hinzu):```lualocal function onPlayerAdded(player)-- Setzen Sie die Münzen des Spielers auf 0 zurückupdatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild würde die Spieler-Schleife stoppen, also sollte das unten in einem separaten Thread geschehentask.spawn(function()-- Wenn ein Spieler stirbtcharacter:WaitForChild("Humanoid").Died:Connect(function()-- Setzen Sie die Münzen des Spielers auf 0 zurückupdatePlayerCoins(player, function(_)return 0end)end)end)end)end-- Initialisieren Sie alle Spieler, die hinzugefügt wurden, bevor Sie sich mit dem PlayerAdded-Ereignis verbindenfor _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)```
Der Code definiert Funktionen, um die Münzzahlen während der entsprechenden Lebenszyklusevents zurückzusetzen:
- Players.PlayerAdded wird ausgelöst, wenn ein Spieler dem Spiel beitritt und setzt die Münzzahl auf 0.
- Player.CharacterAdded wird ausgelöst, wenn das Charaktermodell eines Spielers zur Welt hinzugefügt wird. Es passiert nach PlayerAdded und jedes Mal, wenn der Spieler respawnt.
- Humanoid.Died wird ausgelöst, wenn ein Spieler stirbt, und setzt die Münzzahl auf 0. task.spawn() erstellt einen separaten Thread für die Bearbeitung, damit andere Aspekte des Spielerlebenszyklus ausgeführt werden können.
- Player.PlayerRemoved wird ausgelöst, wenn ein Spieler das Spiel verlässt, um den Spielstatus des Spielers aufzuräumen.
- Dieser Code enthält ein potenzielles Problem, bei dem Spieler Münzen sammeln könnten, bevor das Ereignis Players.PlayerAdded ausgeführt wird, und dann ihre Münzzahlen auf null zurückgesetzt werden. Um dieses Problem zu mindern, sollten Lösungen wie Code-Planung oder das Einfrieren des Charakters des Spielers in Betracht gezogen werden, bis die Initialisierung abgeschlossen ist. Diese Lösungen umfassen jedoch komplexere Skripting-Konzepte, die über den Rahmen dieses Tutorials hinausgehen.
Spielen
Wählen Sie Test aus dem Dropdown-Menü und klicken Sie auf Play. Sammeln Sie ein paar Münzen und springen Sie dann ins Wasser. Ihr Charakter sollte sterben und am Anfang respawnen, wobei die Münzzahl auf 0 zurückgesetzt wird.