Erstellen Sie Spielerhazards

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.


Hazard-Objekte verringern die Gesundheit der Spieler, wenn sie sie berühren. Als einfacher Ausgangspunkt zeigt dieser Abschnitt des Tutorials, wie Sie einen großen unsichtbaren Teil auf der gleichen Ebene wie das Wasser in Ihrem Erlebnis erstellen, so dass das Stürzen in die Gefahr die Spieler:inGesundheit auf null ändert und sie wieder am Anfang des Erlebnisses respawns.

Erstellen Sie eine grundlegende Wassergefahr

Um die grundlegenden Wassergefahren zu erstellen:

  1. In dem Explorer-Fenster , fügen Sie einen neuen Ordner in den World-Ordner hinzu, und benennen Sie ihn dann Hazards um. Stellen Sie sicher, dass der Name mit dem richtigen Groß- und kleinschreibung korrekt geschrieben ist, sonst funktioniert der Code nicht.

  2. In dem Gefahren-Ordner , fügen Sie ein Block-Teil hinzu und benennen Sie ihn Gefahr um.

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Bewegen und skalieren Sie das Teil, um die Wasserlinie auf der Insel und den Plattformen zu abdecken. Zum Beispiel setzt die Insel Sprung - Scripting -Erfahrung Größe auf 825, 1, 576 und 2>CFrame.Position2> auf 5>174, -6.5, 385>.

    A far out view of all of the cylinder sea stacks and the island. A large block part covers the water where a player could land if they fell from a sea stack.
  4. Wähle das Teil aus, dann in dem Eigenschaften-Fenster , konfiguriere die folgenden Eigenschaften, damit die Gefahr unsichtbar ist, und Spieler können durch sie passieren:

    • Setze Transparenz auf 1 . Dies macht den Hazard unsichtbar, so dass das tatsächliche Wasser wie der Hazard erscheint.
    • Deaktivieren Sie KannCollide . Dies sagt dem Engine, dass andere Teile die Gefahr unbeschadet passieren können, wodurch Spieler durch die Gefahr fallen können.
    • Aktivieren Sie Verankert . Dies sagt dem Engine, dass er die Position des Hazards niemals aufgrund einer Physiksimulation ändern wird, wodurch Spieler den Hazard berühren können, ohne seine Position zu beeinflussen.
  5. Erstellen Sie ein Skript in ServerScriptService und benennen Sie es dann in HazardService um.

  6. Ersetzen Sie den Standardcode durch den folgenden Codes:


    local Players = game:GetService("Players")
    local Workspace = game:GetService("Workspace")
    local hazardsFolder = Workspace.World.Hazards
    local hazards = hazardsFolder:GetChildren()
    local function onHazardTouched(otherPart)
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = 0
    end
    end
    end
    for _, hazard in hazards do
    hazard.Touched:Connect(onHazardTouched)
    end

    Der HazardService hat viele Ähnlichkeiten mit CoinService . jedoch, anstatt eine Münze zu sammeln, hat der Spieler seine Gesundheit auf 0 gesetzt, wenn sie einen Gefahr berühren.

    Fühlen Sie sich frei, Gefahren-Objekte in Ihrem Erlebnis zu modifizieren, hinzufügenoder zu entfernen, um einzigartige Hindernisse zu erstellen. Solange sie in den Gefahren-Ordner enthalten sind, verbindet der Code-Loop den Ereignishändler mit all Ihren Gefahren.

Verbinden Sie sich mit dem Spieler-Lebenszyklus

Der Spieler-Lebenszyklus repräsentiert Ereignisse, die beim Interagieren mit Spielern in deiner Erlebnisauftreten, wie z. B. Beitreten, Verlassen oder Respawnen. Du musst Handler mit diesen Ereignissen verbinden, um die Logik für jedes große Lifecycle-Ereignis richtig auszuführen. Im CoinServiceSkript, das. PL: die Skriptskopierst und fügst den folgenden Code in den unteren Teil des Skript, das. PL: die Skriptsein:


local function onPlayerAdded(player)
-- Spieler-Münzen auf 0 zurücksetzen
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild würde die Spieler-Loop stoppen, so dass unten in einem separaten Thread getan werden sollte
task.spawn(function()
-- Wenn ein Spieler stirbt
character:WaitForChild("Humanoid").Died:Connect(function()
-- Spieler-Münzen auf 0 zurücksetzen
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Initialisieren Sie alle Spieler, die vor dem Verbinden mit PlayerAdded hinzugefügt wurden
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)

Der Code definiert Funktionen, um Münzenzähler während der entsprechenden Lebenszyklus-Ereignisse zurückzusetzen:

  • Player.PlayerAdded feuert ab, wenn ein Spieler dem Erlebnis beitritt, und setzt die Münzenanzahl auf 0 .
  • Player.CharacterAdded wird ausgelöst, wenn das Charaktermodell eines Spieler:inder Welt hinzugefügt wird. Es wird nach PlayerAdded und immer wieder, wenn der Spieler respawns.
  • Humanoid.Died feuert ab, wenn ein Spieler stirbt, und setzt die Münzenzahl auf 0 . task.spawn() erstellt einen separaten Thread für die Verarbeitung dieses, so dass andere Aspekte des Spielerlebenszyklus ausgeführt werden können.
  • Player.PlayerRemoved startet, wenn ein Spieler die Erfahrung verlässt, um den Spielerzustand zu bereinigen.
  • 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 die Münzenzähler auf Null zurücksetzen. Um dieses Problem zu verringern, betrachten Sie Lösungen wie Codeskripts oder das Einfrieren des Spieler:inbis zur Initialisierung. jedoch, diese Lösungen beinhalten komplexere Skripts, die über das Umfang dieses Tutorials hinausgehen.

Spieltest

Es ist an der Zeit zu sehen, ob der Spielerhazard wie vorgesehen funktioniert. Wenn Sie das Wasser berühren, sollte Ihr Charakter sterben und ihre Münzen verlieren. Um Ihr Spiel zu testen:

  1. In der Menüleiste klicken Sie auf die Schaltfläche Spielen . Studio betritt den Spieltest-Modus.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Bewegen Sie Ihren Charakter, um einige Münzen zu sammeln, dann springen Sie ins Wasser. Wenn Ihre Skripte richtig funktionieren, stirbt Ihr Charakter, und die Münzenanzahl in der Rangliste wird auf 0 zurückgesetzt.