Tworzenie zagrożeń dla graczy

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.


Obecnie gracze mogą spaść z dowolnej platformy bez konsekwencji. Ta sekcja przeprowadzi cię przez tworzenie dużego niewidocznego zagrożenia na tym samym poziomie co woda w twojej grze. Gdy gracz wpadnie w zagrożenie, jego zdrowie zostaje zredukowane do zera, a on respawnuje na początku gry.

Tworzenie podstawowego zagrożenia wodnego

Tworzenie podstawowego zagrożenia wodnego

W Workspace > World utwórz nowy folder o nazwie Hazards.
Wewnątrz folderu Hazards stwórz blok Part o nazwie Hazard z rozmiarem 825, 1, 576 i CFrame.Position 174, -6.5, 38, aby blok pokrywał wodę wokół wyspy i platform.
Ustaw przezroczystość na 1, aby część była niewidoczna, a prawdziwa woda wydawała się zagrożeniem, wyłącz CanCollide, aby gracze mogli przechodzić przez nią do wody, oraz włącz Anchored, aby fizyka jej nie poruszała.

Wykrywanie, kiedy gracze dotykają zagrożenia

Zagrożenie nic nie robi, dopóki nie napiszesz skryptu, który nasłuchuje Touched i obniża zdrowie gracza do zera.

Tworzenie HazardService

W ServerScriptService utwórz skrypt o nazwie HazardService z następującym kodem:
```lua
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
```

HazardService ma wiele podobieństw do CoinService. Jednak zamiast zbierać monetę, zdrowie gracza zostaje ustawione na 0, gdy dotknie zagrożenia.

Nie krępuj się modyfikować, dodawać lub usuwać obiekty zagrożenia w swojej grze, aby stworzyć unikalne przeszkody. Dopóki są one zawarte w folderze Hazards, kod łączy procedurę wywoławczą z wszystkimi twoimi zagrożeniami.

Połączenie z cyklem życia gracza

Cykl życia gracza reprezentuje zdarzenia, które występują, gdy gracze wchodzą w interakcje w twojej grze, takie jak dołączenie, opuszczenie lub respawn. Musisz podłączyć procedury do tych zdarzeń, aby wykonać logikę dla każdego głównego zdarzenia cyklu życia.

Dodaj procedury cyklu życia do CoinService

W ServerScriptService dołącz następujący kod na końcu istniejącego skryptu CoinService (nie zastępuj żadnego z istniejących kodów — dodaj to po nim):
```lua
local function onPlayerAdded(player)
-- Zresetuj monety gracza do 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild zatrzymałby pętlę gracza, więc poniżej powinno być wykonane w oddzielnym wątku
task.spawn(function()
-- Gdy gracz umrze
character:WaitForChild("Humanoid").Died:Connect(function()
-- Zresetuj monety gracza do 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inicjalizuj wszystkich graczy dodanych przed połączeniem z wydarzeniem 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)
```

Kod definiuje funkcje do resetowania liczby monet w odpowiednich zdarzeniach cyklu życia:

  • Players.PlayerAdded wywołuje się, gdy gracz dołącza do gry, i ustawia liczbę monet na 0.
  • Player.CharacterAdded wywołuje się, gdy model postaci gracza jest dodawany do świata. Zachodzi po PlayerAdded i za każdym razem, gdy gracz respawnuje.
  • Humanoid.Died wywołuje się, gdy gracz umiera, i ustawia liczbę monet na 0. task.spawn() tworzy oddzielny wątek do obsługi tego, aby inne aspekty cyklu życia gracza mogły działać.
  • Player.PlayerRemoved wywołuje się, gdy gracz opuszcza grę, aby oczyścić stan gracza.
  • W tym kodzie istnieje potencjalny problem, w którym gracze mogą zbierać monety przed wykonaniem zdarzenia Players.PlayerAdded, a następnie mają swoje liczby monet zresetowane do zera. Aby złagodzić ten problem, rozważ rozwiązania takie jak planowanie kodu lub zamrożenie postaci gracza, dopóki inicjalizacja sie nie skończy. Jednak te rozwiązania wiążą się z bardziej złożonymi pojęciami skryptowymi, które są poza zakresem tego samouczka.

Testowanie gry

Wybierz Test z rozwijanej listy i kliknij Play. Zbierz kilka monet, a następnie skocz do wody. Twoja postać powinna umrzeć i respawnować na początku, a liczba monet powinna zostać zresetowana do 0.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.