Gdy stworzono tabelę liderów, gracze potrzebują czegoś do zbierania. Dla tego celu musisz stworzyć 3D przedmiot dla graczy, aby znaleźć w świecie. Poniżej jest wideo procesu, w którym gracze gromadzą przedmioty.
Zbuduj przedmiot
Przedmioty w wersji eksperymentalnej to modele 3D, które gracze używają narzędzia do zbierania. Każdy przedmiot zebrany zniknie i następnie ponownie pojawi się po ograniczonym czasie.
Dla przedmiotu, odwołaj się do swojego dokumentu projektowego gry. Ta seria używa kryształów jako przykładu.
Utwórz obiekt, który można stworzyć z użyciem części lub obiektów znalezionych przez zaufanych użytkowników na rynku.
Jeśli chcesz, załaduj część kryształową za pomocą tego łącza. Aby dodać go, prawy kliknij na Pracę i wybierz Wklej z pliku .
Jeśli używasz własnej części, z grupą wszystkie części w Modelu . Jeden sposób na to, aby to zrobić, to wybrać wszystkie pozycje, prawy kliknięcia na część i wybrać Grupa . To tworzy model, który organizuje twoje części.
Upewnij się, że wszystkie części są zakotwiczone .
Tak więc przedmioty nie mogą być zbierane, gdy znikają, stwórz BoolValue nazyającym się CanHarvest, aby śledzić jego status.
W Proprietades for CanHarvest sprawdź Wartość pola. Sprawdzenie pola wartości uczyni prawdę, co oznacza, że gracze mogą zebrać przedmiot.
Tworzenie narzędzia
Gracze potrzebują czegoś w rodzaju młota lub kopła, aby zebrać przedmioty. W Roblox przedmioty, które gracze mogą używać i wyposażać, nazywane są narzędziami . Ta lekcja używa narzędzia startowego z wszystkimi częściami i animacją, którą możesz dostosować później.
Dodanie narzędzia
Aby użytkownicy mogli używać narzędzia startowego, załaduj i umieść go w StarterPack.
W Explorer, under Workspace, right-click on StarterPack. Then, select Wklej z pliku .
Wybierz zainstalowany plik, starterTool.rbxm.
Zagrajtestuj swoją projekt. Gracze powinni być z narzędziem wyposażeni, gdy tylko rozpoczynać. W grze, naciśnij 1, aby użyć lub usunąć narzędzie. Kliknij lewo, aby to podnieść.
Kodowanie narzędzia
Jeśli narzędzie dotyka owocnego obiektu i gracz ma wystarczająco dużo miejsca w ich torbie, liczba przedmiotów gracza wzrasta o 1 na tablicy ranking. Przydatność owocnego przedmiotu sprawia, że zniknie przez kilka sekund i stanie się niedostępny przez kilka sekund przed ponownym pojawieniem się. To zachęca graczy do odkrywania, zamiast po prostu klikać na ten sam przedmiot.
Konfiguracja Skryptu
W tym momencie dodaj skrypt do narzędzia. Ten skrypt obsługuje to, co dzieje się, gdy narzędzie dotyka owocnego obiektu.
W StarterPack, pod StarterTool, dodaj nowy skrypt o nazwie ToolScript.
W skrypcie napisz komentarz opisowy na górze, a następnie stwórz zmienne do przechowywania części narzędzia i narzędzia samego.
-- Daje graczom przedmiot, gdy dotykają one łupnej częścilocal tool = script.Parentlocal toolPart = tool.Handle
Sprawdzanie pozycji
Kiedy narzędzie dotyka obiektu, sprawdza, czy ten obiekt ma CanHarvest w środku i czy zmiana zmiennej ustawionej na Prawdę.
Utwórz nową funkcję o nazwie onTouch() z parametrem nazyającym się partTouched .
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)endW tej funkcji utwórz lokalną zmienne nazyającą się canHarvest. Następnie użyj funkcji FindFirstChild(), aby zobaczyć, czy istnieje CanHarvestBoolean w rodzicielu tej części.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")endTeraz skrypt musi sprawdzić, czy rzeczywiście coś znaleziono i jeśli tak, to uruchom kod. Aby to zrobić, stwórz if stat, w którym warunkiem jest canHarvest. Jeśli istnieje coś w canHarvest, ta statystyka ocenia się do prawdy.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendW if statement dodaj oświadczenie print , aby zobaczyć, czy skrypt działa. Możesz kodować logikę do gromadzenia przedmiotów po upewnieniu się, że działa.
if canHarvest then-- Używany do testowania, czy kod działaprint("Found an item")endPod funkcją end stwierdzenie, dodaj toolPart.Touched:Connect(onTouch) . To pozwala skryptowi sprawdzić, czy coś dotyka narzędzia (lub w tym przypadku jego uchwytu) i jeśli tak, wywoła onTouch() .
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)Zagraj projekt i użyj narzędzia na owocnym przedmiocie (lewy kliknięcia, aby wyrzucić). Upewnij się, że widzisz wiadomość "Znaleziono przedmiot" w oknie wyjścia.
Wskazówki dotyczące rozwiązywania problemów
Jeśli nie widzisz wiadomość, spróbuj następujące wskazówki.
- Jeśli używasz niestandardowych części i siatek, możliwe jest popełnienie błędu. Skrypt działa tylko wtedy, gdy obiekt CanHarvest jest dzieckiem części, którą narzędzie dotyka.
- Upewnij się, że narzędzie jest w StarterPack, a nie w Workspace.
- Sprawdź, czy część jest zatrzymana.
Otrzymywanie statystyk graczy
Zanim zwiększy przedmioty gracza, narzędzie musi znaleźć lokalizację liczby przedmiotów, które gracz ma na tej ranking. Po uzyskaniu narzędzia dostępu do płyty, może zmienić liczbę przedmiotów gracza.
Najpierw uzyskaj gracza używając narzędzia. W narzędziu skryptu pod local item = toolitem i ponad funkcją niestandardową, wpisywać:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)W następnej linii znajdź statystyki lidera gracza używając funkcji FindFirstChild().
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)Pod local playerStats , twórz zmienne, aby przechować statystyki przedmiotów i przestrzeni.
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
Sprawdzanie czy obiekt można zebrać
Teraz, gdy skrypt narzędzia ma stworzone zmienne playerItems i playerSpaces, możesz zacząć dawać graczom przedmiot. Użyj funkcji stworzonej, aby sprawdzić, czy obiekt dotykający narzędzia może być zebrany, a czy gracz ma wystarczająco dużo miejsca w ich torbie, aby zwiększyć wyświetlanie przedmiotów na liście wyników o jeden.
Skrypt będzie wymagał if statement z dwoma warunkami do spełnienia. Rozpocznij poprzez stworzenie if statement, a następnie dodaj następujące warunki, powiązane z słowem kluczowym and.
- canHarvest.Value == true
- playerItems.Value < playerSpaces.Value
local function onTouch(partTouched)local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenendendendW samym if statement, dodaj do przedmiotów gracza poprzez wpisanie playerItems.Value += 1 .
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endendZagraj w swoją projekt; użyj swojego narzędzia, aby zebrać plon i sprawdzić, że liczba plonów wzrosła.
Zresetowanie przedmiotu
Gdy przedmiot jest zebrany, zostanie on zresetowany w dwóch sposób:
- Przedmiot zniknie i nie będzie można go interakcji
- CanHarvest ustawiony na false
Przedmiot zostanie następnie ponownie wysłany do normy po krótkim czasie. W ten sposób gracze otrzymują tylko jeden przedmiot za każde zbioru i muszą szukać wokół dłużej, gdy oryginał zostanie zresetowany.
Podczas gdy elementy są dodawane, ustaw canHarvest na false. Poprzez uczynienie wartości canHarvest false, skrypt nie będzie nadawał więcej niż jednego elementu na przedmiotuderzone.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendPo ustawieniu wartości na fałszywy, ustaw Transparency części na 1 (niewidoczny), a CanCollide na fałszywy, co oznacza, że gracze nie mogą tego dotykać.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseendWpisz task.wait(5) , aby dać czas na resetowaćpozycji. 5 to sugerowany liczba, a może różni się w zależności od tego, jak długo chcesz swojego doświadczenia.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)endPo czekaniu zrób przeciwnie poprzedniemu kodowi, ustawiając CanHarvest na prawdę i zresetowując Transparency i CanCollide do ich oryginalnych wartości.
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueendZagraj projekt i sprawdzać:
- Gracz otrzymuje tylko 1 przedmiot do zbierania przedmiotu.
- Przedmiot zniknie, a następnie pojawi się po pięciu sekundach.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie, jeśli jeden z czynników nie zdałby się, spróbuj jednego z poniższych.
- Upewnij się, że Transparency i CanCollide są poprawnie wymówione i zaznaczone.
- Upewnij się, że używasz canHarvest.Value i nie możeHarvest = prawdziwy.
Ukończ narzędzie
Ukończona wersja skryptu może być odniesiona poniżej.
local toolPart = script.Parent
local tool = toolPart.Parent
local backpack = tool.Parent
local player = backpack.Parent
local playerStats = player:FindFirstChild("leaderstats")
local playerItems = playerStats:FindFirstChild("Items")
local playerSpaces = playerStats:FindFirstChild("Spaces")
local function onTouch(partTouched)
local canHarvest = partTouched:FindFirstChild("CanHarvest")
if canHarvest then
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
playerItems.Value += 1
canHarvest.Value = false
-- Zresetuj część dotkniętą, zebraną przedmiot
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Zrób, że zebrany przedmiot powróci i będzie ponownie używalny
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)