Zbieranie przedmiotów

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

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.

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

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

  3. Upewnij się, że wszystkie części są zakotwiczone .

  4. Tak więc przedmioty nie mogą być zbierane, gdy znikają, stwórz BoolValue nazyającym się CanHarvest, aby śledzić jego status.

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

  1. Załaduj narzędzie startowe poniżej.

  2. W Explorer, under Workspace, right-click on StarterPack. Then, select Wklej z pliku .

  3. Wybierz zainstalowany plik, starterTool.rbxm.

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

  1. W StarterPack, pod StarterTool, dodaj nowy skrypt o nazwie ToolScript.

  2. 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ęści
    local tool = script.Parent
    local 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ę.

  1. Utwórz nową funkcję o nazwie onTouch() z parametrem nazyającym się partTouched .


    local tool = script.Parent
    local toolPart = tool.Handle
    local function onTouch(partTouched)
    end
  2. W 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")
    end
  3. Teraz 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 then
    end
    end
  4. W 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ła
    print("Found an item")
    end
  5. Pod 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 then
    print("Found an item")
    end
    end
    toolPart.Touched:Connect(onTouch)
  6. 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.

  1. Najpierw uzyskaj gracza używając narzędzia. W narzędziu skryptu pod local item = toolitem i ponad funkcją niestandardową, wpisywać:


    local item = toolitem
    local backpack = tool.Parent
    local player = backpack.Parent
    local function onTouch(partTouched)
  2. W następnej linii znajdź statystyki lidera gracza używając funkcji FindFirstChild().


    local backpack = tool.Parent
    local player = backpack.Parent
    local playerStats = player:FindFirstChild("leaderstats")
    local function onTouch(partTouched)
  3. 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.

  1. 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 then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    end
    end
    end
  2. W samym if statement, dodaj do przedmiotów gracza poprzez wpisanie playerItems.Value += 1 .


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    end
    end
  3. Zagraj 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.

  1. 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 then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    end
    end
  2. Po 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 then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    end
  3. Wpisz 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 then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    task.wait(5)
    end
  4. Po 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 = true
    partTouched.Transparency = 0
    partTouched.CanCollide = true
    end
  5. Zagraj 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)