Utwórz mechanizm kolekcjonowania 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 3D, ta sekcja tutorialu nauczy cię, jak dodać swój pierwszy skrypt, aby zdefiniować mechanizm zbierania monet. Ten mechanizm pozwala graczom zbierać monety i wyłącza zbieranie monety, jeśli została niedawno zebrana.

Utwórz Monety

Zanim możesz coś skryptować, musisz mieć obiekty placeholder w świecie, aby używać ich jako swoich monet. Podobnie jak platformy stack na morzu, monety mogą być prostymi obiektami Part.

Aby stworzyć monety:

  1. W oknie Explorer dodaj nowy katalog do katalogu World i zmień go na Coins .

  2. Umieść część cylinder w katalogu Monety , a następnie zmień nazwę części na Coin .

    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 KolorKlocka na Złoto .
    • Ustaw Materiał na Metal .
    • Ustaw Rozmiar na 0,6, 8, 4 .
    • Wyłącz Możliwość kolidy . To powiadamia silnik, że inne części mogą przejść przez monety, co oznacza, że gracze mogą przejść przez monety, aby je zebrać.
    • Włącz Zakotwiczone . To powiadamia silnik, aby nigdy nie zmieniał pozycji monety z powodu jakiejkolwiek simulacji fizycznej, co oznacza, że gracze mogą dotykać 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. Zduplikuj kilka dodatkowych monet i umieść je na mapie w celach 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ą simulacji fizyki, ale musisz dodać logikę monet, aby gracze mogli je zbierać.

Utwórz Skrypt

Aby monety były zbieralne, chcesz reagować na graczy, którzy je dotykają. Silnik Roblox może powiadomić cię, gdy coś dotyka monety, ale musisz to zadeklarować w skrypcie. Aby stworzyć skrypt:

  1. W oknie Explorer , Przycisk serwera i kliknij przycisk . Wyświetlony zostanie menu kontekstowe.

  2. Z menu kontekstowego wybierz Skrypt. Nowy skrypt wyświetlony jest pod ServerScriptService, który informuje silnik, aby uruchomił skrypt na serwerze i zapobiecł klientom dostępu 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 standardowy kod następujązym kodem:


    -- Początkowa inicjalizacja usług i zmienne
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Definiowanie identyfikatora wydarzenia
    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
    -- Ustawienie słuchaczy wydarzeń
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Teraz, gdy gracz dotyka monety, moneta zniknie przez 10 sekund, a wyjście z wydruku Player collected coin .

    Poniższe sekcje opisują, jak skrypt działa bardziej szczegółowo.

    Początkowe inicjalizowanie usług i zmienne

    Podobnie jak z dużą częścią kodu, który prawdopodobnie napisałeś w innych językach, definujesz zmienne, które potrzebujesz później na górze skryptu. Nasz kod robi obserwujerzeczy:

    • Uzyskaj instancje usług - Usługi Roblox zapewniają zintegrowaną funkcjonalność dla popularnych funkcji. Skrypt najpierw uzyska instancje usługi Workspace, która zawiera wszystkie obiekty w świecie 3D, i usługi Player, która zarządza i zawiera wszystkich graczy połączonych z twoim doświadczeniem.

    • Uzyskaj odniesienia do wszystkich monet - Skrypt wtedy zapytuje 3D-przestrzeń dla wszystkich odniesień do obiektów monet z metodą GetChildren() . Ta metoda zwraca wszystkie elementy związane z obiektem, który w tym przypadku jest Workspace.World.Coins-katalogiem.

    • Definiuje globalną zmienną - zmiana COOLDOWN używana jest później do określenia czasu trwania wyłączenia monety po jej zebraniu.

      Początkowe inicjalizowanie usług i zmienne

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

    Definiowanie Handlera Wydarzeń

    Silnik Roblox fizycznie simuluje świat 3D i obsługuje wiele z logiki, aby zarządzać wydarzeniami związanymi z renderowaniem, fizyką i siecią. Gdy jesteś zainteresowany programowaniem własnej logiki podczas niektórych z tych wydarzeń, możesz słuchać i zarządzać nimi, pozwal

    • Wykrywa, czy moneta jest włączona - Każdy Instance ma atrybut Enabled, który określa, czy istnieje obiekt w świecie 3D. Możesz uzyskać atrybuty instancji z metodą 0> Class.Instance:GetAttribute()|GetAttribute()0>.

    • 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, jest rzeczywiście graczem. Gdy się zdarza wydarzenie dotykające, silnik Roblox przesyła obiekt, który dotknął monety jako parametr otherPart ". Skrypt sprawdza, c

    • Wyłącza monetę, jeśli gracz ją dotyka, i ponownie włącza ją po 10 sekundach - W końcu, jeśli gracz dotyka monety, metoda ją wyłącza, czeka 10 sekund, a następnie ponownie włącza monetę dla kolekcja. task.wait() jest

      Definiowanie Handlera Wydarzeń

      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

    Łączenie z Handlowcem Wydarzeń

    Wszystkie simulowane obiekty 3D dziedziczą się z BasePart i zatem mają Touched() wydarzenie. Poniższy pętel połącza rękawiczkę onTouchedEvent() z każdym zdarzeniem dotykającym monety, wykonując obserwujekroki:

    • Loop przez wszystkie monety - Loop przez każdą z monet, używając ogólnego itera.

    • Połącz rękawiczkę z wydarzeniem - W każdym cyklu kęsia jest włączony domyślnie, więc widoczny w 3D podczas początkowego uruchomienia eksperymentu. Metoda onCoinTouched() rękawiczki jest również połą

      Łączenie z własnym urządzeniem

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

Zagraj w Mechanic

Pora sprawdzić, czy mechanizm zbierania monet działa tak, jak powinien. Aby przetestować swoją własną doświadczenie:

  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 dotknąć monety. Jeśli twoje skrypty działają poprawnie, okienko Wyjście wyświetla Player collected coin, a moneta zniknie po 10 sekundach przed ponownym pojawieniem się.

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