Twórz zagrożenia 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 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:

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

  2. W katalogu Zagrożenia wstaw część bloku i zmień nazwę na Zagrożenie .

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

    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 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ę.
  5. Stwórz skrypt w Serwerze skryptowym , a następnie zmień nazwę na HazardService .

  6. Zastąp domyślny kod następującym 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

    Usł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ę:

  1. Na pasku narzędzi kliknij przycisk Graj . Studio wchodzi w tryb testowania gry.

    Play button highlighted in Studio's playtesting options.
  2. 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.