Stwórz mechanizm kolekcji monet

*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.


Teraz, gdy masz świat 3D, ten rozdział samouczka nauczy cię, jak dodać swój pierwszy skrypt, aby określić mechanizm zbierania monet.Mechanizm ten pozwala graczom zbierać monety i wyłącza zbieranie monety, jeśli została niedawno zebrana.

Stwórz monety

Zanim będziesz mógł zapisać coś w skrypcie, musisz mieć obiekty placeholder na świecie, które będą używane jako twoje monety.Podobnie jak platformy stosu morza, które stworzyłeś w poprzedniej sekcji, monety mogą być prostymi Part obiektami.

Aby utworzyć monety:

  1. W oknie Eksploratora dodaj nową kartę do katalogu Świat , a następnie zmień nazwę na Monety .

  2. Włóż część cylindra do katalogu Monety , a następnie zmień nazwę części na Moneta .

    Studio's Explorer window with the Coin part highlighted. The hierarchy of the Workspace to World folder to Coins folder to Coin part is also highlighted.
  3. Wybierz część, a następnie w oknie Właściwości ,

    • Ustaw Kolor cegły na Złoto .
    • Ustaw Materiał na Metal .
    • Ustaw rozmiar na .
    • Wyłącz Możliwość kolizji .Oznacza to, że silnik wie, że inne części mogą przejść przez monetę, co oznacza, że gracze mogą przechodzić przez monety, aby je zebrać.
    • Włącz zakotwiczone .Oznacza to, że silnik nigdy nie zmieni pozycji monety z powodu jakiejkolwiek symulacji związanej z fizyką, co oznacza, że gracze mogą dotknąć monety bez wpływu na jej lokalizację.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Powtórz kilka monet i umieść je wokół mapy do celów testowych.

    Studio's Explorer window with multiple Coin parts highlighted under the Coins folder. A view of multiple coins on the island and two gray cylinder sea stacks.

Twoje części cylindra teraz wyglądają jak monety i zapobiegają symulacji fizycznej, ale musisz dodać logikę do monet, aby gracze mogli je zebrać.

Stwórz skrypt

Aby monety były zbieralne, chcesz reagować na dotyk graczy.Silnik Roblox może powiadomić Cię, gdy coś dotknie monety, ale musisz to zadeklarować w skrypcie.Aby utworzyć skrypt:

  1. W oknie Eksploratora przewiń nad ServerScriptService i kliknij przycisk . Wyświetla się menu kontekstowe.

  2. Z menu kontekstowego wybierz Skrypt .Nowa skrypt wyświetla się pod ServerScriptService , który mówi silnikowi, aby uruchomił skrypt na serwerze i zapobiega dostępowi klientów do kodu.

    Studio's Explorer window with both ServerScriptService's plus icon and Script object highlighted.
  3. Zmień nazwę skryptu na CoinService .

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Zastąp domyślny kod następującym kodem:


    -- Inicjalizacja usług i zmiennych
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Definiowanie obsługi zdarzenia
    local function onCoinTouched(otherPart, coin)
    if coin:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Gracz dotknął monety
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    print("Player collected coin")
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Konfiguracja słuchaczy wydarzeń
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Teraz, za każdym razem, gdy gracz dotknie monety, moneta znika na 10 sekund, a dziennik wyjściowy drukuje Player collected coin .

    Następujące sekcje opisują, jak skrypt działa w bardziej szczegółowy sposób.

    Uruchom usługi i zmienne

    Podobnie jak w przypadku wielu kodów, które prawdopodobnie napisałeś w innych językach, określasz zmienne, których potrzebujesz później na górze skryptu.Nasz kod robi obserwuje:

    • Uzyskaj instancje usług - usługi Roblox zapewniają wbudowaną funkcjonalność dla wspólnych funkcji.Skrypt najpierw uzyskuje instancje usługi Workspace, która zawiera każdy obiekt w świecie 3D, oraz usługi Player, która zarządza i zawiera wszystkie graczy połączonych z Twoim doświadczeniem.

    • Uzyskaj odniesienia do wszystkich monet - Skrypt następnie wyszukuje przestrzeń roboczą 3D dla wszystkich odniesień do obiektów monety za pomocą metody GetChildren().Ta metoda zwraca tablicę zawierającą wszystko powiązane z obiektem, z którym jest powiązana, co w tym przypadku jest katalogiem Workspace.World.Coins, który utworzyłeś wcześniej.

    • Definiuje globalną zmienną - zmienna COOLDOWN jest używana później do określenia, jak długo wyłączyć monetę po jej zebraniu.

      Inicjalizacja usług i zmiennych

      local Workspace = game:GetService("Workspace")
      local Players = game:GetService("Players")
      local coinsFolder = Workspace.World.Coins
      local coins = coinsFolder:GetChildren()
      local COOLDOWN = 10
      ...

    Określ obsługę zdarzenia

    Silnik Roblox fizycznie symuluje świat 3D i obsługuje dużo logiki związanej z obsługą wydarzeń związanych z renderowaniem, fizyką i sieciowaniem.Kiedy jesteś zainteresowany programowaniem własnej logiki podczas niektórych z tych wydarzeń, możesz je słuchać i obsługiwać, pozostawiając silnikowi resztę.W tym przypadku słuchasz i obsługujesz zdarzenia związane z dotyknięciem monet.Skrypt określa logikę obsługi tego wydarzenia w metodzie onCoinTouched(), która wykonuje obserwujeczynności:

    • Wykrywa, czy moneta jest włączona - Każdy ma atrybut booleanowy, który określa, czy obiekt istnieje w świecie 3D, czy nie.Możesz uzyskać atrybuty instancji za pomocą metody GetAttribute().

    • Wykrywa, czy gracz dotknął monety - Jeśli moneta jest włączona, metoda używa usługi gracza, aby sprawdzić, czy obiekt, który dotknął monety, był rzeczywiście graczem.Gdy wystąpi zdarzenie dotykowe, silnik Roblox przekazuje obiekt, który dotknął monety, jako parametr otherPart.Skrypt sprawdza, czy rodzic otherPart należy do gracza.

    • Wyłącza monetę, jeśli gracz ją dotknął, i ponownie ją aktywuje po 10 sekundach - Wreszcie, jeśli gracz dotknął monety, metoda wyłącza monetę, czeka 10 sekund, a następnie ponownie aktywuje monetę do kolekcja.task.wait() jest używany zamiast wait(), ponieważ zapewnia lepsze osiągi, nie wstrzymując całkowicie wykonania kodu, umożliwiając wykonywanie zadań w innych wątkach równocześnie.

      Definiowanie menedżera zdarzeń

      local function onCoinTouched(otherPart, coin)
      if coin:GetAttribute("Enabled") then
      local character = otherPart.Parent
      local player = Players:GetPlayerFromCharacter(character)
      if player then
      -- Gracz dotknął monety
      coin.Transparency = 1
      coin:SetAttribute("Enabled", false)
      print("Player collected coin")
      task.wait(COOLDOWN)
      coin.Transparency = 0
      coin:SetAttribute("Enabled", true)
      end
      end
      end

    Połącz obsługę zdarzenia

    Wszystkie symulowane obiekty 3D dziedziczą od BasePart i dlatego mają wydarzenie Touched().Poniższy cykl łączy menadżera onTouchedEvent() z wydarzeniem dotknięcia każdej monety poprzez wykonanie obserwuje:

    • Pętla przez wszystkie monety - Pętla przez każdą z monet za pomocą ogólnej iteracji.

    • Połącz obsługę z wydarzeniem - W każdej iteracji pętla włącza domyślnie monetę, więc jest ona widoczna w świecie 3D podczas początkowego uruchomienia doświadczenia.Metoda obsługi onCoinTouched() jest również połączona z wydarzeniem Touched monety, aby uruchamiała się za każdym razem, gdy wystąpi to wydarzenie.Kiedy silnik wykrywa dotknięcie, przekazuje również obiekt, który dotknął obiektu, otherPart .

      Łączenie menedżera zdarzeń

      for _, coin in coins do
      coin:SetAttribute("Enabled", true)
      coin.Touched:Connect(function(otherPart)
      onCoinTouched(otherPart, coin)
      end)
      end

Przetestuj mechanikę

Nadszedł czas, aby sprawdzić, czy mechanizm kolekcji monet działa tak, jak zakładano. Aby przetestować swoje doświadczenia:

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

    Play button highlighted in Studio's playtesting options.
  2. Przesuń postać, aby dotknąć monety.Jeśli twoje skrypty działają poprawnie, okno Wyjście wyświetla Player collected coin, a moneta znika na 10 sekund przed ponownym pojawieniem się.

    Studio's Output window that displays confirmation that the player collected a coin.