Narzędzia Tools w grze to interaktywne narzędzia, które gracze mogą wyposażyć w sesjach, takie jak broń, magiczne różdżki, latarki, klucze i inne. Możesz projektować narzędzia i dodawać je do ekwipunku gracza lub umieszczać je w świecie jako przedmioty do podnoszenia.
Stwórz narzędzie w grze
Obiekt Tool jest podstawą każdego narzędzia w Roblox, więc będziesz musiał stworzyć jeden. Łatwiej jest podglądać, jak wygląda narzędzie, projektując je w Workspace, a później możesz uczynić je przedmiotem ekwipunku lub przedmiotem zdobytym/zakupionym.
W hierarchii Eksploratora najedź na Workspace, kliknij przycisk ⊕, a następnie wstaw Tool.

Z wybranym nowym Tool, uzyskaj dostęp do okna Właściwości i dostosuj, jak narzędzie będzie wyglądać w ekwipunku gracza:
- TextureId — Określa identyfikator obrazu zasobu dla narzędzia w ekwipunku gracza.
- ToolTip — Nazwa podpowiedzi wyświetlana po najechaniu myszką na narzędzie w ekwipunku gracza.

Zdecyduj, czy narzędzie będzie fizycznym narzędziem w środowisku 3D (najczęściej) czy niefizycznym narzędziem, które po prostu zajmuje miejsce w ekwipunku gracza i reaguje na jego wejście.
Fizyczne narzędzie
Po utworzeniu instancji Tool dla fizycznego narzędzia, będziesz musiał dodać części/siatki, aby nadać mu wygląd w 3D. Będziesz także musiał dołączyć uchwyt, którym postacie gracza będą mogły trzymać narzędzie.
Dodaj części/siatki
Narzędzia w grze mogą składać się z jednej lub więcej Parts i/lub MeshParts. Jeśli skonstruujesz narzędzie z wielu części, pamiętaj, aby połączyć je wszystkie za pomocą WeldConstraints lub innych ograniczeń mechanicznych, aby narzędzie pozostało w całości, gdy gracz je nosi.

Ustaw uchwyt
Aby umożliwić graczom noszenie narzędzi, jedna część narzędzia musi być nazwana Handle. To tutaj narzędzie będzie przymocowane do części modelu postaci RightHand (R15) lub Right Arm (R6).
Jeśli narzędzie składa się z jednej MeshPart, po prostu nazwij tę część Handle. W przeciwnym razie możesz dodać osobną część nazwaną Handle jako bezpośrednie dziecko rodzica Tool i następnie połączyć ją z inną częścią za pomocą WeldConstraint lub ograniczenia mechanicznego.
Poniższy przykład pokazuje narzędzie z trzema instancjami: siatką Handle, RopeConstraint i siatką latarki, która zwisa z liny.

Dostosuj położenie/orientację chwytu
Właść Grip narzędzia jest CFrame, która określa, jak narzędzie jest umiejscowione i zorientowane względem postaci, która je trzyma.

Ponieważ idealne położenie/orientacja chwytu są różne dla każdego narzędzia, będziesz musiał eksperymentować z wartościami, aż wygląd chwytu twojego narzędzia będzie poprawny. Poniższy przykład pokazuje możliwe nieprawidłowe i prawidłowe ustawienia Grip dla wiszącej latarki:


Niefizyczne narzędzie
Niefizyczne Tool po prostu zajmuje miejsce w ekwipunku gracza i reaguje na jego wejście. Na przykład, gra fabularna może zawierać serię magicznych zaklęć, które gracze mogą "rzucać" przez swój ekwipunek.

Niefizyczne narzędzia nie wymagają żadnej kompozycji 3D i nie wykorzystują części Handle, więc powinieneś wyłączyć właściwość RequiresHandle narzędzia:

Dodawanie narzędzi do gry
Po zakończeniu tworzenia swojego narzędzia w grze, będziesz musiał umieścić je w odpowiednim miejscu w hierarchii Eksploratora. Miejsce, w którym umieszczasz narzędzie w hierarchii, zależy od zamierzonego użycia.
Ekwipunek gracza
Jeśli chcesz, aby wszyscy gracze zaczynali z narzędziem w swoim ekwipunku, umieść je wewnątrz kontenera StarterPack. Gdy którykolwiek gracz się pojawi, system kopiuje narzędzie do jego Backpack. Stamtąd gracz może wyposażyć narzędzie, klikając ikonę w ekwipunku lub naciskając przypisaną do niego kombinację klawiszy, taką jak 1 lub 2.

Pamiętaj, że narzędzia są kopiowane do ekwipunku gracza (Backpack) w kolejności, w jakiej zostały dodane do StarterPack. Aby uzyskać bardziej kontrolowany porządek, możesz dodać LocalScript do StarterPack, który tymczasowo przenosi narzędzia do ReplicatedStorage, a następnie ponownie przypisuje je do Backpack w kolejności określonej w tabeli order.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local order = {"WaterSpell", "FireSpell", "AirSpell", "EarthSpell"}
local backpack = script.Parent
for _, item in backpack:GetChildren() do
if item:IsA("Tool") then
item.Parent = ReplicatedStorage
end
end
-- Przypisz ponownie narzędzia do plecaka w określonej kolejności
for i = 1, #order do
local tool = ReplicatedStorage:FindFirstChild(order[i])
if tool then
tool.Parent = backpack
end
endKolekcjonerskie narzędzie
Jeśli chcesz pozwolić graczom zbierać fizyczne narzędzia podczas eksploracji świata 3D, umieść narzędzia w Workspace tak jak normalne obiekty 3D. Zebrane narzędzia zostaną automatycznie wyposażone i dodane do ekwipunku gracza (nie musisz dodawać dodatkowej detekcji kolizji, aby postacie mogły chwycić narzędzie).
Jak wspomniano w sekcji dodaj części/siatki, części narzędzia nie powinny zazwyczaj być Anchored, ponieważ postacie graczy utkną w miejscu, gdy podniosą lub wyposażą przymocowane narzędzie. Jeśli jednak chcesz przymocować narzędzie kolekcjonerskie w określonym miejscu w świecie 3D, takim jak unoszenie się tuż nad ziemią, możesz dodać następujący Script do narzędzia, aby odblokować jego części po zebraniu.
local tool = script.Parent
tool.Equipped:Connect(function()
for _, part in tool:GetDescendants() do
if part:IsA("BasePart") and part.Anchored then
part.Anchored = false
end
end
end)Narzędzie zdobyte/zakupione
Jeśli chcesz ustawić narzędzia jako nagrody za wykonanie zadań przez graczy lub oferować narzędzia na sprzedaż w sklepie w grze, umieść te narzędzia wewnątrz ReplicatedStorage. Stamtąd możesz Clone() narzędzie do plecaka gracza w odpowiednim czasie.

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player = Players.LocalPlayer
local backpack = player:WaitForChild("Backpack")
-- Stwórz klon narzędzia
local tool = ReplicatedStorage:FindFirstChild("WaterSpell")
if tool then
local clone = tool:Clone()
clone.Parent = backpack -- Dodaje klon do plecaka gracza
endWdrożenie efektów narzędzi
Po dodaniu narzędzi do swojej gry, możesz wdrożyć skrypty, aby umożliwić graczom korzystanie ze swoich narzędzi i wykonywanie pożądanych akcji. Poniższe wydarzenia specyficzne dla narzędzi wskazują stan narzędzia oraz wejście gracza z nim.
- Equipped() — Wywołuje się, gdy gracz wybiera narzędzie z plecaka.
- Unequipped() — Wywołuje się, gdy gracz zmienia narzędzia lub upuszcza narzędzie.
- Activated() — Wywołuje się, gdy gracz zaczyna aktywować narzędzie (kliknięcia, dotknięcia lub naciskanie tylnego prawego spustu na gamepadzie).
- Deactivated() — Wywołuje się, gdy gracz przestaje aktywować (zwalnia przycisk lub dotknięcie).
local tool = script.Parent
local function onEquip()
print(tool.Name, "narzędzie wyposażone")
end
local function onUnequip()
print(tool.Name, "narzędzie zdjęte")
end
local function onActivate()
print(tool.Name, "narzędzie aktywowane")
end
local function onDeactivate()
print(tool.Name, "narzędzie dezaktywowane")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)Wydarzenia narzędzi wywołują się tylko w skryptach po stronie klienta LocalScripts, ponieważ tylko urządzenie gracza wie, kiedy zachodzi wejście. W związku z tym, większość narzędzi wymaga zarówno LocalScript, jak i skryptu po stronie serwera Script, przy czym każdy z nich obsługuje różne aspekty zachowania narzędzia, a RemoteEvent przekazuje informacje z klienta do serwera (zobacz wydarzenia zdalne i wywołania zwrotne po więcej informacji).
Poniżej znajdują się przykładowe narzędzia i ich zachowania zarządzane przez LocalScript lub Script:
| Narzędzie | LocalScript | Script |
|---|---|---|
| Różdżka Stwórcy | Wykrywa, gdzie gracz aktywuje narzędzie (Activated()). | Tworzy nową część w miejscu w świecie 3D, gdzie gracz dotknął lub kliknął. |
| Płaszcz Niewidzialności | Wykrywa, gdy gracz wyposażai narzędzie (Equipped()) lub zdejmuje narzędzie (Unequipped()). | Sprawia, że gracz staje się niewidzialny dla wszystkich innych graczy, gdy płaszcz jest wyposażony, i przywraca gracza do pełnej widoczności, gdy płaszcz jest zdjęty. |
| Mega‑Łuk | Wykrywa, jak długo gracz aktywuje narzędzie (czas między Activated() i Deactivated()). | Strzela magiczną strzałą o większej lub mniejszej mocy, w zależności od wykrytego czasu aktywacji. |