Stwórz mechanikę zbierania 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 świat, czas dodać swój pierwszy skrypt. W tej sekcji stworzysz mechanikę zbierania monet, która pozwala graczom zbierać monety i tymczasowo dezaktywować monety po ich zebraniu.

Stwórz monety

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

Stwórz monety

W Workspace > World, stwórz nowy folder o nazwie Monety.
Wewnątrz folderu Monety, stwórz cylinder Part o nazwie Moneta z kolorem BrickColor ustawionym na Złoty, materiałem ustawionym na Metal, rozmiar 0.6, 8, 4, i orientacją 90, 0, 0.
Wyłącz CanCollide i włącz Anchored.
Następnie zduplikuj element Moneta kilka razy i rozrzuć duplikaty po wyspie i na platformach, aby były osiągalne z poziomów platform podwodnych.
Każde duplikat nazwij Moneta.

Stwórz skrypt

Następnie sprawisz, że monety będą reagować na graczy. Silnik Roblox może wykryć, gdy coś dotyka monety, ale musisz użyć skryptu, aby zdefiniować, jak moneta powinna zareagować.

Stwórz CoinService

W ServerScriptService stwórz skrypt o nazwie CoinService z następującym kodem:
```lua
-- 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 handlera 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("Gracz zebrał monetę")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Ustawianie nasłuchiwaczy zdarzeń
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 znika na 10 sekund, a dziennik wyjściowy drukuje Gracz zebrał monetę.

Następujące sekcje opisują, jak działa skrypt w większych szczegółach.

Inicjalizuj usługi i zmienne

Podobnie jak w wielu kodach, które prawdopodobnie pisałeś w innych językach, definiujesz zmienne, których potrzebujesz później, na początku skryptu. Nasz kod wykonuje następujące czynności:

  • Uzyskiwanie instancji 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 3D świecie, oraz usługi Player, która zarządza i zawiera wszystkich graczy połączonych z twoją grą.
  • Uzyskiwanie odniesień do wszystkich monet - Skrypt następnie przeszukuje 3D workspace w celu uzyskania wszystkich odniesień do obiektów monet za pomocą metody GetChildren(). Ta metoda zwraca tablicę zawierającą wszystko, co jest zgrupowane z obiektem, z którym jest związana, którym w tym przypadku jest folder Workspace.World.Coins, który stworzyłeś wcześniej.
  • Definiuje zmienną globalną - Zmienna COOLDOWN jest używana później do zdefiniowania, jak długo dezaktywować monetę po jej zebraniu.
Inicjalizowanie 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
...

Definiuje handler zdarzeń

Silnik Roblox fizycznie symuluje 3D świat i obsługuje wiele logiki dotyczącej zdarzeń związanych z renderowaniem, fizyką i siecią. Kiedy chcesz skryptować swoją własną logikę podczas niektórych z tych wydarzeń, możesz nasłuchiwać i je obsługiwać, pozwalając silnikowi na resztę. W tym przypadku nasłuchujesz i obsługujesz zdarzenia związane z dotykaniem monet. Skrypt definiuje logikę obsługi tego zdarzenia w metodzie onCoinTouched(), która wykonuje następujące czynności:

  • Wykrywa, czy moneta jest włączona - Każda Instance ma atrybut boolean Enabled, który definiuje, czy obiekt istnieje w 3D świecie. 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. Kiedy występuje zdarzenie dotyku, silnik Roblox przekazuje obiekt, który dotknął monety jako parametr otherPart. Skrypt sprawdza, czy rodzic obiektu otherPart należy do gracza.
  • Dezaktywuje monetę, jeśli gracz ją dotknął, i włącza ją ponownie po 10 sekundach - Na koniec, jeśli gracz dotknął monety, metoda dezaktywuje monetę, czeka 10 sekund i ponownie aktywuje monetę do zbierania. task.wait() jest używane zamiast wait(), ponieważ zapewnia lepszą wydajność, nie przerywając całkowicie wykonywania kodu, pozwalając na równoległe uruchamianie zadań w innych wątkach.
Definiowanie handlera 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("Gracz zebrał monetę")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Podłącz handler zdarzeń

Wszystkie symulowane obiekty 3D dziedziczą po BasePart i dlatego mają zdarzenie Touched(). Następująca pętla łączy handler onTouchedEvent() z każdym zdarzeniem dotyku monety, wykonując następujące czynności:

  • Pętla przez wszystkie monety - Pętla przez każdą z monet używając ogólnej iteracji.
  • Połączenie handlera z zdarzeniem - W każdej iteracji pętli moneta jest włączona domyślnie, więc jest widoczna w 3D świecie podczas początkowego startu gry. Metoda handlera onCoinTouched() jest także podłączona do zdarzenia Touched monety, aby uruchomiła się za każdym razem, gdy zdarzenie występuje. Kiedy silnik wykrywa dotyk, również przekazuje obiekt, który dotknął obiektu, otherPart.
Podłączanie handlera zdarzeń

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

Testuj mechanikę

Wybierz Test z rozwijanego menu i kliknij Graj. Przesuń swoją postać, aby dotknęła monety. Jeśli wszystko działa, moneta znika, okno Wyjściowe drukuje Gracz zebrał monetę, a moneta pojawia się ponownie po 10 sekundach.

Okno Wyjściowe studia, które wyświetla potwierdzenie, że gracz zebrał monetę.
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.