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:
W oknie Explorer dodaj nowy katalog do katalogu World i zmień go na Coins .
Umieść część cylinder w katalogu Monety , a następnie zmień nazwę części na Coin .
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ę.
Zduplikuj kilka dodatkowych monet i umieść je na mapie w celach testowych.
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:
W oknie Explorer , Przycisk serwera i kliknij przycisk ⊕ . Wyświetlony zostanie menu kontekstowe.
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.
Zmień nazwę skryptu na CoinService .
Zastąp standardowy kod następujązym kodem:
-- Początkowa inicjalizacja usług i zmiennelocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Definiowanie identyfikatora wydarzenialocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Gracz dotknął monetycoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Ustawienie słuchaczy wydarzeńfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endTeraz, gdy gracz dotyka monety, moneta zniknie przez 10 sekund, a wyjście z wydruku Player collected coin .
Wyja?nienie koduPoniż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 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 zmiennelocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal 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") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Gracz dotknął monetycoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
Łą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ądzeniemfor _, coin in coins docoin: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:
W menu Kliknij przycisk Graj. Studio wchodzi w tryb testu.
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ę.