Zbieraj przedmioty

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

Po utworzeniu tabeli liderów gracze potrzebują czegoś do zebrania.Aby to zrobić, musisz stworzyć przedmiot 3D, który gracze znajdą w świecie.Poniżej jest wideo procesu zbierania przedmiotów przez graczy.

Zbuduj przedmiot

Przedmioty w doświadczeniu są modelami 3D, które gracze używają narzędzia do zbierania.Każdy przedmiot, po zebraniu, znika, a następnie pojawia się po ograniczonej ilości czasu.

Dla przedmiotu, odwołaj się do dokumentu projektu gry. Ta seria wykorzystuje kryształy jako przykład.

  1. Stwórz obiekt, korzystając z części lub obiektów znalezionych przez zaufanych użytkowników na rynku.

    Jeśli chcesz, pobierz część kryształową za pomocą tego łącza. Aby ją dodać, kliknij prawym przyciskiem myszy na przestrzeni roboczej i wybierz Wstaw z pliku .

  2. Jeśli używasz własnej części, połącz wszystkie części w model .Jednym ze sposobów zrobienia tego jest wybranie wszystkich elementów, kliknięcie prawym przyciskiem myszy na części i wybranie Grupy .Tworzy to model, który organizuje twoje części.

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

  4. Więc przedmioty nie mogą być zbierane, gdy znikają, stwórz Wartość Boola o nazwie CanHarvest, aby śledzić jego status.

  5. W właściwościach dla CanHarvest sprawdź pasek Wartość . Sprawdzenie pudełka wartości czyni prawdziwym boolean, co oznacza, że gracze mogą zbierać przedmiot.

Stwórz narzędzie

Gracze potrzebują czegoś w rodzaju siekiery lub łopaty, aby zebrać przedmioty.W Roblox przedmioty, które gracze mogą wyposażyć i używać, nazywane są narzędziami .Ta lekcja wykorzystuje narzędzie startowe ze wszystkimi częściami i animacją, która została już wykonana i możesz ją dostosować później.

Dodaj narzędzie

Aby gracze mogli korzystać z narzędzia startowego, pobierz i umieść je w pakiecie startowym.

  1. Pobierz narzędzie startowe poniżej.

  2. W Explorer, w sekcji Przestrzeń robocza, kliknij prawym przyciskiem myszy na StarterPack. Następnie wybierz Wklej z pliku .

  3. Wybierz pobrany plik, starterTool.rbxm .

  4. Przetestuj swój projekt.Gracze powinni być wyposażeni w narzędzie tak szybko, jak tylko rozpoczynać.W grze naciśnij 1, aby wyposażyć lub schować narzędzie.Kliknij lewym przyciskiem myszy, aby je skręcić.

Zakoduj narzędzie

Jeśli narzędzie uderzy w zbieralny obiekt, a gracz ma wystarczająco dużo miejsca w swojej torbie, liczba przedmiotów gracza wzrośnie o 1 na liście liderów.Zbieranie przedmiotu sprawia, że znika na kilka sekund i staje się niedostępne na kilka sekund przed ponownym pojawieniem się.Zachęca to graczy do odkrywania, aby znaleźć więcej przedmiotów, zamiast po prostu kliknąć ten sam przedmiot.

Ustaw skrypt

Na tym etapie dodaj skrypt do narzędzia. Ten skrypt obsługuje to, co dzieje się, gdy narzędzie dotyka obiektu do zbierania.

  1. W pakiecie startowym, pod narzędziem startowym, dodaj nowy skrypt o nazwie ToolScript.

  2. W skrypcie napisz komentarz opisowy na górze, a następnie utwórz zmienne, aby przechować część narzędzia i samo narzędzie.


    -- Daje graczom przedmiot, gdy dotkną zbieralnej części
    local tool = script.Parent
    local toolPart = tool.Handle

Sprawdź przedmioty

Zawsze, gdy narzędzie dotknie obiektu, sprawdza, czy obiekt ten ma w środku CanHarvest i czy zmienna boolean jest ustawiona na Prawdę.

  1. Stwórz nową funkcję o nazwie onTouch() z parametrem o nazwie partTouched.


    local tool = script.Parent
    local toolPart = tool.Handle
    local function onTouch(partTouched)
    end
  2. W tej funkcji utwórz lokalną zmienną o nazwie canHarvest.Następnie użyj funkcji FindFirstChild(), aby sprawdzić, czy istnieje CanHarvest boolean w rodzicu tej części.


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    end
  3. Teraz skrypt musi sprawdzić, czy rzeczywiście znaleziono coś i jeśli tak, uruchom kod.Aby to zrobić, utwórz oświadczenie if, w którym warunek jest canHarvest.Jeśli coś istnieje w canHarvest, to oświadczenie ocenia się na prawdę.


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    end
    end
  4. W oświadczeniu if dodaj oświadczenie o wydruku, aby sprawdzić, czy skrypt działa. Możesz skodować logikę do zbierania przedmiotów po tym, jak będziesz pewien, że działa.


    if canHarvest then
    -- Używany do testowania, czy kod działa
    print("Found an item")
    end
  5. Pod oświadczeniem funkcji end, dodaj toolPart.Touched:Connect(onTouch).To pozwala skrypcie sprawdzić, czy coś dotyka narzędzia (lub w tym przypadku jego uchwytu) i jeśli tak, to wywołuje onTouch().


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    print("Found an item")
    end
    end
    toolPart.Touched:Connect(onTouch)
  6. Odtwórz projekt i użyj narzędzia na przedmiocie zbieralnym (lewy klik, aby się poruszyć). Upewnij się, że zobaczysz w oknie Wyjście wiadomość "Znaleziono przedmiot" w oknie Wyjście.

Wskazówki dotyczące rozwiązywania problemów

Jeśli nie widzisz wiadomość, spróbuj następujących wskazówek.

  • Jeśli używasz niestandardowych części i siatek, można wystąpić błąd.Skrypt działa tylko wtedy, gdy obiekt CanHarvest jest dzieckiem części, której narzędzie dotyka.
  • Upewnij się, że narzędzie jest w pakiecie startowym, a nie w przestrzeni roboczej.
  • Sprawdź, czy część jest zakotwiczone.

Zdobądź statystyki gracza

Zanim zwiększy się przedmioty gracza, narzędzie musi znaleźć lokalizację tego, ile przedmiotów ma gracz w rankingtego gracza.Gdy narzędzie uzyska dostęp do ranking, może zmienić liczbę przedmiotów danego gracza.

  1. Najpierw uzyskaj gracza za pomocą narzędzia. W ToolScript, pod local item = toolitem i nad niestandardową funkcją, wpisywać:


    local item = toolitem
    local backpack = tool.Parent
    local player = backpack.Parent
    local function onTouch(partTouched)
  2. Na następnej linii znajdź statystyki lidera gracza za pomocą funkcji FindFirstChild().


    local backpack = tool.Parent
    local player = backpack.Parent
    local playerStats = player:FindFirstChild("leaderstats")
    local function onTouch(partTouched)
  3. Poniżej local playerStats, utwórz zmienne, aby przechować statystyki przedmiotów i przestrzeni


    local playerStats = player:FindFirstChild("leaderstats")
    local playerItems = playerStats:FindFirstChild("Items")
    local playerSpaces = playerStats:FindFirstChild("Spaces")

Sprawdź, czy można zebrać obiekt

Teraz, gdy skrypt narzędzia ma zmienne playerItems i playerSpaces utworzone, możesz zacząć dawać graczom przedmiot.Użyj funkcji utworzonej, aby sprawdzić, czy obiekt, który dotyka narzędzia, może zostać zebrany, a czy gracz ma wystarczająco dużo miejsca w torbie, aby zwiększyć przedmioty wyświetlane na tablicy wyników o jeden.

  1. Skrypt będzie potrzebował oświadczenia if z dwoma warunkami do spełnienia.Zacznij od utworzenia oświadczenia if, następnie dodaj następujące warunki, połączone z kluczowym słowem 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 samej deklaracji if dodaj do przedmiotów gracza, wpisując playerItems.Value += 1.


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    end
    end
  3. Odtwórz swój projekt; wykorzystaj narzędzie, aby zebrać przedmiot, i sprawdź, czy liczba przedmiotów wzrosła.

Zresetuj przedmiot

Gdy przedmiot zostanie zebrany, zostanie zresetowany na dwa sposoby:

  • Przedmiot zniknie i nie będzie interaktywny
  • CanHarvest ustawione na fałsz

Przedmiot wróci do normy po krótkim czasie.W ten sposób gracze otrzymują tylko jeden przedmiot za każde zbieranie i muszą poszukać więcej, gdy oryginalne zostaną zresetowane.

  1. Pod miejscem, gdzie dodawane są przedmioty, ustaw canHarvest na fałsz.Poprzez ustawienie wartości canHarvest fałsz tak szybko, jak tylko gracze zbiorą przedmiot, skrypt nie da więcej niż jednego przedmiotu na każde trafienie narzędzia.


    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łsz ustaw przejrzystość części na 1 (niewidzialną) i CanCollide na fałsz, co oznacza, że gracze nie mogą go dotknąć.


    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 zresetowanie przedmiotu. 5 to sugerowana liczba, a może się różnić przez długość, jaką chcesz dla 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 oczekiwaniu zrób odwrotnie od poprzedniego kodu, ustawiając CanHarvest na prawdę i odnowiając przejrzystość i możliwość kolizji do ich oryginalnych wartości.


    task.wait(5)
    canHarvest.Value = true
    partTouched.Transparency = 0
    partTouched.CanCollide = true
    end
  5. Odtwórz projekt i sprawdzać:

    • Gracz otrzymuje tylko 1 przedmiot za zebranie przedmiotu.
    • Przedmiot znika, a następnie pojawia się po upływie pięciu sekund.

Wskazówki dotyczące rozwiązywania problemów

W tym momencie, jeśli jedna z kontroli nie zdała, wypróbuj jedną z poniższych.

  • Sprawdź, czy przejrzystość i CanCollide są właściwie wymówione i dużą literą.
  • Upewnij się, że używasz canHarvest.Value, a nie canHarvest = true.

Ukończ skrypt narzędziowy

Zakończona wersja skryptu może być odwołana 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 partTouched, zebrany przedmiot
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Przywróć zebrany przedmiot i ponownie go użyj
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)