Obiekty zagrożenia zmniejszają zdrowie graczy, gdy je dotykają.Jako prosty punkt wyjścia ten rozdział samouczka nauczy Cię, jak utworzyć jedną dużą niewidzialną część na tym samym poziomie, co woda w Twoim doświadczeniu, tak aby upadek w niebezpieczeństwie zmienił zdrowie gracza na zero i odrobił go z powrotem na początek doświadczenia.
Stwórz podstawowe zagrożenie wodne
Aby stworzyć podstawowe zagrożenie wodne:
W oknie Eksploratora dodaj nową kartę do katalogu Świat , a następnie zmień nazwę na Hazardy .Upewnij się, że nazwa jest poprawnie wymowna z poprawną pisownią, w przeciwnym razie kod nie będzie działał.
W katalogu Zagrożenia wstaw część bloku i zmień nazwę na Zagrożenie .
Przesuń i skaluj część, aby pokryć linię wodną wokół wyspy i platform.Na przykład zestaw próbek Island Jump - Programowanie doświadczeń ustawia Rozmiar na 825, 1, 576 i CFrame.Position na 174, -6.5, 38.
Wybierz część, a następnie w oknie Właściwości skonfiguruj następujące właściwości, aby zagrożenie było niewidoczne, a gracze mogli przejść przez nie bezpośrednio:
- Ustaw Przezroczystość na 1. To czyni niebezpieczeństwo niewidocznym, tak że rzeczywista woda wydaje się być niebezpieczeństwem.
- Wyłącz Możliwość kolizji .Oznacza to, że silnik wie, że inne części mogą przejść przez niebezpieczeństwo bez przerw, co oznacza, że gracze mogą upaść przez niebezpieczeństwo.
- Włącz zakotwiczone .Oznacza to, że silnik nigdy nie zmieni pozycji zagrożenia z powodu jakiejkolwiek symulacji związanej z fizyką, co oznacza, że gracze mogą dotknąć zagrożenia bez wpływu na jego lokalizację.
Stwórz skrypt w Serwerze skryptowym , a następnie zmień nazwę na HazardService .
Zastąp domyślny kod następującym kodem:
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)endWyjaśnienie koduUsługa HazardService ma wiele podobieństw do CoinService .Jednak zamiast zbierać monetę, gracz ma ustawioną zdrowie na 0, gdy dotknie zagrożenia.
Nie krępuj się modyfikować, dodawać lub usuwać obiektów zagrożenia w swoim doświadczeniu, aby stworzyć unikalne przeszkody.Dopóki znajdują się one w katalogu Zagrożenia , pętla kodowa łączy obsługę zdarzeń z wszystkimi twoimi zagrożeniami.
Połącz z cyklem życia gracza
Cykl życia gracza reprezentuje wydarzenia, które występują, gdy gracze wchodzą w interakcję z Twoim doświadczeniem, takie jak dołączanie, opuszczanie lub odrodzenie.Musisz połączyć obsługujących z tymi wydarzeniami, aby prawidłowo wykonać logikę dla każdego ważnego wydarzenia cyklu życia.W skrypcie CoinService , skopiuj i wklej następujący kod na dole skryptu:
local function onPlayerAdded(player)
-- Zresetuj monety gracza do 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild zatrzymałoby pętelę gracza, więc poniżej powinno być wykonane w oddzielnej wątku
task.spawn(function()
-- Kiedy gracz umiera
character:WaitForChild("Humanoid").Died:Connect(function()
-- Zresetuj monety gracza do 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Zainicjuj dowolnych 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 określa funkcje do odnowienia liczby monet podczas odpowiednich wydarzeń cyklu życia:
- Player.PlayerAdded podpalenia, gdy gracz dołącza do doświadczenia i ustawia liczbę monet na 0.
- pojawia się, gdy model postaci gracza zostanie dodany do świata. Pojawia się po i za każdym razem, gdy gracz odrodzi się.
- Humanoid.Died wypala się, gdy gracz umiera, i ustawia liczbę monet na 0.task.spawn() tworzy oddzielny wątek do obsługi tego, więc inne aspekty cyklu życia gracza mogą się wykonać.
- Player.PlayerRemoved podpalenia, gdy gracz opuszcza doświadczenie, aby oczyścić stan gracza.
- Ten kod zawiera potencjalny problem, w którym gracze mogą zbierać monety przed wykonaniem wydarzenia Players.PlayerAdded, a następnie ich liczby monet zostaną zresetowane do zera.Aby złagodzić ten problem, rozważ rozwiązania takie jak planowanie kodu lub zamrażanie postaci gracza, aż zakończy się inicjalizacja.Jednak rozwiązania te obejmują bardziej złożone koncepcje skryptowania, które są poza zakresem tego samouczka.
Testowanie gry
Nadszedł czas, aby sprawdzić, czy hazard gracza działa tak, jak zakładano. Po dotknięciu wody twoja postać powinna umrzeć i stracić monety. Aby przetestować swoją grę:
Na pasku narzędzi kliknij przycisk Graj . Studio wchodzi w tryb testowania gry.
Przenieś swoją postać, aby zebrać trochę monet, a następnie wskocz do wody.Jeśli twoje skrypty działają prawidłowo, twoja postać umiera, a liczba monet na liście liderów zostaje zresetowana do 0.