Obiekty niebezpieczeństwa zmniejszają zdrowie graczy, gdy je dotykają. Jako prosty punkt wyjścia, ten sekcja tutorialu nauczy cię, jak stworzyć jedną wielką niewidzialną część na tym samym poziomie co woda w twoim doświadczeniu, aby spaść w niebezpieczeństwo zmieniło zdrowie gracza na zero i respawns go do początku doświadczenia.
Utwórz podstawowy zagrożenie wody
Aby stworzyć podstawowe zagrożenie dla wody:
W oknie Explorer, dodaj nowy plik do World-klawiatury, a następnie zmień go Hazards, aby upewnić się, że nazwa jest poprawnie wpisana z poprawną wielkością, aby kod nie zadziałał.
W Oпаści składce, wklej część blok i zmień ją nazwę Oпаści.
Przenieś i skala część, aby pokryć linię wody wokół wyspy i platform. Na przykład, doświadczenie Island Jump - Scripting wybiera Rozmiar na 825, 1, 576 i 2> CFrame.Position2> na 5>174, -6.5, 385>.
Wybierz część, a następnie w oknie Właściwości skonfiguruj następujące właściwości, aby hazard był niewidoczny, a gracze mogli bezpiecznie przejść przez niego:
- Ustaw Przezroczystość na 1 . To sprawia, że hazard jest niewidoczny, więc rzeczywista woda wydaje się być hazardem.
- Wyłącz Możliwość kolidy . To powiadamia silnik, że inne części mogą przejść przez niezagrożenie, co oznacza, że gracze mogą spaść przez niezagrożenie.
- Włącz Zakotwiczone . To powoduje, że silnik nigdy nie zmieni pozycji zagrożenia z powodu jakiejkolwiek simulacji fizycznej, co oznacza, że gracze mogą dotykać zagrożenia bez wpływu na jego lokalizację.
Utwórz Skrypt w ServerScriptService i zmień go na HazardService .
Zastąp standardowy kod następujązym 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 koduHazardService ma wiele podobieństw do CoinService . Jnak zamiast zbierać monetę, gracz ma swoje ustawione do 0 zdrowia gdy dotyka niebezpieczeństwa.
Nie стесняйте się zmieniać, dodawać lub usuwać obiektów niebezpieczeństwa w swoim doświadczeniu, aby stworzyć unikalne przeszkodzenia. Dzięki temu, że są one umieszczone w Hazards ordynatorze, kodeksowy pętelowy połączenie pozwala na połączenie wszystkich hazardów.
Połącz z cykl życia gracza
Odżywianie gracza reprezentuje wydarzenia, które następują, gdy gracze interagują w Twoim doświadczeniu, takie jak dołączanie, opuszczanie lub respawning. Musisz połączyć ręczniki z tymi wydarzeniami, aby właściwie wykonalić logikę dla każdego głównego wydarzenia odżywiania. W CoinService skrypcie kopiuj i wklej następujący kod w dnie skryptu:
local function onPlayerAdded(player)
-- Zresetuj monety gracza do 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild zatrzyma pętli gracza, więc poniżej należy to zrobić w odrębnym wątku
task.spawn(function()
-- Gdy gracz umiera
character:WaitForChild("Humanoid").Died:Connect(function()
-- Zresetuj monety gracza do 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Zainicjatyzuj dowolnych graczy dodanych przed połączeniem się 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 definuje funkcje służące do zresetowania liczby monet podczas odpowiednich wydarzeń życia długiego:
- Player.PlayerAdded zapala się, gdy gracz dołącza do doświadczenia, i ustawia liczbę monet na 0 .
- Player.CharacterAdded uruchamia się, gdy model postaci gracza zostanie dodany do świata. Dzieje się to po PlayerAdded i każdym razem, gdy gracz respawnuje.
- Humanoid.Died działa, gdy gracz umiera, i ustawia liczbę monet na 0 . task.spawn() tworzy osobny wątek do tego, aby wykonać to, więc inne aspekty życia gracza mogą być wykonane.
- Player.PlayerRemoved działa, gdy gracz opuści doświadczenie, aby usunąć stan gracza.
- Ten kod zawiera potencjalny problem, w którym gracze mogliby zbierać monety przed wydarzeniem Players.PlayerAdded i następnie mieć ich liczby monet zresetowane do zera. Aby mitigować ten problem, rozważaj rozwiązania, takie jak kodeksowanie lub zamrażanie postaci gracza do czasu zakończenia inicjatywy. Ale te rozwiązania wiążą się z bardziej złożonymi koncepcjami skryptów, które są
Playtest
Pora sprawdzić, czy hazard gracza działa tak, jak powinien. Gdy dotykasz wody, twoja postać powinna umrzeć i stracić monety. Aby przetestować swoją grę:
W menu Kliknij przycisk Graj. Studio wchodzi w tryb testu.
Przenieś swojego postaci, aby zebrać kilka monet, a następnie wskakuj do wody. Jeśli twoje skrypty działają poprawnie, twoja postać umiera, a liczba monet na tablicy wyników zostaje zresetowana do 0 .