Narzędzia w grze Tools 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 zaprojektować narzędzia i umieścić je w ekwipunku gracza lub rozmieścić je po świecie jako przedmioty do zbierania.
Stwórz narzędzie w grze
Obiekt Tool jest podstawą każdego narzędzia w Roblox, więc musisz 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/kupionym.
W hierarchii Eksploratora najedź na Workspace, kliknij przycisk ⊕ i wstaw Tool.

Z nowo wybranym 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 zasobu obrazu dla narzędzia w ekwipunku gracza.
- ToolTip — Nazwa podpowiedzi wyświetlana po najechaniu 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 ich wejście.
Fizyczne narzędzie
Po utworzeniu instancji Tool dla fizycznego narzędzia, będziesz musiał dodać części/siatki, aby skomponować jego wygląd w świecie 3D. Będziesz także musiał dołączyć uchwyt, który postacie graczy trzymają.
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 elementów, pamiętaj, aby połączyć je wszystkie razem 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 RightHand części ciała modelu postaci (R15) lub części Right Arm (R6).
Jeśli narzędzie składa się tylko z jednej MeshPart, po prostu nazwij tę część Handle. W przeciwnym razie możesz dołączyć osobną część nazwaną Handle jako bezpośrednie dziecko rodzica Tool, a następnie przymocować ją do innej części za pomocą WeldConstraint lub ograniczenia mechanicznego.
Poniższy przykład pokazuje narzędzie z trzema instancjami: siatką Handle, RopeConstraint i siatką latarni, która wisi na linie.

Dostosuj pozycję/orientację uchwytu
Właściwość Grip narzędzia to CFrame, która określa, jak narzędzie jest umiejscowione i orientowane w stosunku do postaci, która je trzyma.

Ponieważ idealna pozycja/orientacja uchwytu różni się dla każdego narzędzia, będziesz musiał eksperymentować z wartościami, aż uchwyt twojego narzędzia będzie wyglądał poprawnie. Poniższy przykład pokazuje możliwe niepoprawne i poprawne ustawienia Grip dla wiszącej latarni:


Niefizyczne narzędzie
Niefizyczne Tool po prostu zajmuje miejsce w ekwipunku gracza i reaguje na ich wejście. Na przykład, gra fabularna może zawierać szereg 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:

Dodaj narzędzia do gry
Gdy skończysz tworzyć swoje narzędzie w grze, będziesz musiał umieścić je w odpowiednim miejscu w hierarchii Eksploratora. Gdzie umieścisz narzędzie w hierarchii, zależy od jego zamierzonego użycia.
Ekwipunek gracza
Jeśli chcesz, aby wszyscy gracze zaczynali z narzędziem w swoim ekwipunku, umieść je w kontenerze StarterPack. Gdy jakikolwiek gracz się pojawi, system kopiuje narzędzie do jego Backpack. Stamtąd gracz może wyposażyć narzędzie, klikając jego ikonę w ekwipunku lub naciskając powiązany klawisz skrótu, taki jak 1 lub 2.

Zauważ, że narzędzia są kopiowane do ekwipunku gracza (Backpack) w kolejności, w jakiej zostały dodane do StarterPack. Aby uzyskać bardziej kontrolowaną kolejność, 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 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 umożliwić graczom zbieranie fizycznych narzędzi podczas eksploracji świata 3D, umieść narzędzia w Workspace, tak jak normalne obiekty 3D. Zebrane narzędzia będą automatycznie wyposażane i dodawane 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ędzi nie powinny być zazwyczaj Anchored, ponieważ postacie graczy utkną w miejscu, gdy podniosą lub wyposażą zakotwiczone narzędzie. Jednak jeśli chcesz zakotwiczyć kolekcjonerskie narzędzie w określonym miejscu w świecie 3D, takim jak unoszenie się nieco nad ziemią, możesz dodać następujący Script do narzędzia, aby odkotwiczyć 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/kupione
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 w ReplicatedStorage. Stamtąd możesz Clone() narzędzie do Backpack gracza w odpowiednim czasie.

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player = Players.LocalPlayer
local backpack = player:WaitForChild("Backpack")
-- Utwórz klon narzędzia
local tool = ReplicatedStorage:FindFirstChild("WaterSpell")
if tool then
local clone = tool:Clone()
clone.Parent = backpack -- Dodaje klon do plecaka gracza
endWdrażanie efektów narzędzi
Po dodaniu narzędzi do swojej gry, możesz wdrożyć skrypty, aby umożliwić graczom korzystanie z ich narzędzi i wykonywanie pożądanych akcji. Następujące zdarzenia specyficzne dla narzędzi wskazują stan narzędzia i wejście gracza z nim.
- Equipped() — Wywoływane, gdy gracz wybiera narzędzie z plecaka.
- Unequipped() — Wywoływane, gdy gracz zmienia narzędzia lub upuszcza narzędzie.
- Activated() — Wywoływane, gdy gracz zaczyna aktywować narzędzie (klika, dotyka lub naciska tylny prawy spust na kontrolerze).
- Deactivated() — Wywoływane, gdy gracz przestaje aktywować (zwalnia przycisk lub dotyk).
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)Zdarzenia narzędzi wywołują się tylko w skryptach po stronie klienta LocalScripts, ponieważ tylko urządzenie gracza wie, kiedy występuje wejście. W związku z tym większość narzędzi wymaga zarówno LocalScript, jak i skryptu po stronie serwera Script, gdzie każdy z nich obsługuje określone aspekty zachowania narzędzia, a RemoteEvent przekazuje informacje z klienta do serwera (zobacz zdarzenia zdalne i wywołania zwrotne po więcej informacji).
Poniżej znajdują się przykłady narzędzi i ich zachowań zarządzanych przez LocalScript lub Script:
| Narzędzie | LocalScript | Script |
|---|---|---|
| Różdżka Twórcy | Wykrywa, gdzie gracz aktywuje narzędzie (Activated()). | Tworzy nową część w miejscu w świecie 3D, gdzie gracz dotknął lub kliknął. |
| Peleryna Niewidzialności | Wykrywa, kiedy gracz wyposaża narzędzie (Equipped()) lub zdejmuje narzędzie (Unequipped()). | Sprawia, że gracz staje się niewidzialny dla wszystkich innych graczy, gdy peleryna jest wyposażona, i przywraca gracza do pełnej widoczności, gdy peleryna jest zdjęta. |
| Mega-Łuk | Wykrywa, jak długo gracz aktywuje narzędzie (czas między Activated() a Deactivated()). | Strzela magiczną strzałą o większej lub mniejszej mocy, w zależności od wykrytego czasu aktywacji. |