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 wodnegoW 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 HazardServiceW ServerScriptService utwórz skrypt o nazwie HazardService z następującym kodem:```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```
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 CoinServiceW 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):```lualocal function onPlayerAdded(player)-- Zresetuj monety gracza do 0updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild zatrzymałby pętlę gracza, więc poniżej powinno być wykonane w oddzielnym wątkutask.spawn(function()-- Gdy gracz umrzecharacter:WaitForChild("Humanoid").Died:Connect(function()-- Zresetuj monety gracza do 0updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- Inicjalizuj wszystkich graczy dodanych przed połączeniem z wydarzeniem PlayerAddedfor _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.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.