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.


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:

  1. 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ł.

  2. W Oпаści składce, wklej część blok i zmień ją nazwę Oпаści.

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. 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>.

    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. 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ę.
  5. Utwórz Skrypt w ServerScriptService i zmień go na HazardService .

  6. Zastąp standardowy kod następujązym kodem:


    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 . 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ę:

  1. W menu Kliknij przycisk Graj. Studio wchodzi w tryb testu.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. 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 .