In-game Tools zijn interactieve tools die spelers kunnen uitrusten in sessies, zoals wapens, toverstokken, zaklampen, sleutels en meer. Je kunt tools ontwerpen en ze opnemen in de inventaris van een speler of ze in de wereld plaatsen als pickups.
Maak een in-game tool
Het Tool object is de basis van elke tool in Roblox, dus je moet er een maken. Het is gemakkelijker om een tool te previewen door deze te ontwerpen in de Workspace, en later kun je het een inventaris item of een verdiend/aangekocht item maken.
Met de nieuwe Tool geselecteerd, open je het Properties venster en pas je aan hoe de tool eruit zal zien in de inventaris van de speler:
- TextureId — Specificeert de afbeelding asset ID voor de tool in de inventaris van een speler.
- ToolTip — De tooltip naam bij hover voor de tool in de inventaris van een speler.

Bepaal of de tool een fysieke tool in de 3D omgeving (meest gebruikelijk) of een niet-fysieke tool zal zijn die simpelweg de inventaris van een speler bezet en reageert op hun input.
Fysieke tool
Nadat je de Tool instantie voor een fysieke tool hebt gemaakt, moet je onderdelen/mesh toevoegen om het uiterlijk in de 3D wereld samen te stellen. Je moet ook een handvat opnemen dat door de spelerspersonages vastgegrepen kan worden.
Voeg onderdelen/mesh toe
In-game tools kunnen bestaan uit een of meer Parts en/of MeshParts. Als je de tool uit meerdere stukken bouwt, vergeet dan niet om ze allemaal met elkaar te verbinden met WeldConstraints of andere mechanische beperkingen zodat de tool intact blijft als een eenheid terwijl de speler deze meedraagt.

Stel het handvat in
Om spelers in staat te stellen tools mee te nemen, moet een onderdeel van de tool Handle worden genoemd. Dit is waar de tool aan het RightHand lichaamsdeel (R15) of Rechter Arm deel (R6) van het karaktermodel wordt bevestigd.
Als de tool uit slechts één MeshPart bestaat, noem dat onderdeel dan eenvoudig Handle. Anders kun je een apart onderdeel met de naam Handle opnemen als een direct kind van de bovenliggende Tool en het vervolgens aan een ander onderdeel bevestigen met een WeldConstraint of mechanische beperking.
Het volgende voorbeeld toont een tool met drie instanties: de Handle mesh, een RopeConstraint, en een lantaarn mesh die aan het touw hangt.

Pas de grippositie/orientatie aan
De Grip eigenschap van de tool is een CFrame die specificeert hoe de tool is gepositioneerd en georiënteerd ten opzichte van het karakter dat deze vasthoudt.

Aangezien de ideale grippositie/orientatie voor elke tool anders is, moet je experimenteren met de waarden totdat de grip van je tool er correct uitziet. Het volgende voorbeeld toont mogelijke onjuiste en correcte Grip instellingen voor de hangende lantaarn:


Niet-fysieke tool
Een niet-fysieke Tool bezet simpelweg de inventaris van een speler en reageert op hun input. Bijvoorbeeld, een rollenspel kan een reeks magische spreuken bevatten die spelers kunnen "uitvoeren" via hun inventaris.

Niet-fysieke tools vereisen geen 3D samenstelling en maken geen gebruik van een Handle onderdeel, dus je moet de RequiresHandle eigenschap van de tool deactiveren:

Voeg tools toe aan een spel
Zodra je klaar bent met het maken van je in-game tool, moet je deze op de juiste plaats in de Explorer hiërarchie plaatsen. Waar je de tool in de hiërarchie plaatst, hangt af van het beoogde gebruik.
Speler inventaris
Als je wilt dat alle spelers met een tool in hun inventaris beginnen, plaats deze dan in de StarterPack container. Wanneer een speler spawnt, kopieert het systeem de tool naar hun Backpack. Van daaruit kan de speler de tool uitrusten door op het inventaricon te klikken of door de bijbehorende sneltoets te drukken, zoals 1 of 2.

Let op dat tools in de inventaris van de speler (Backpack) worden gekopieerd in de volgorde waarin ze aan StarterPack zijn toegevoegd. Voor een meer gecontroleerde ordening kun je een LocalScript aan StarterPack toevoegen die tijdelijk de tools naar ReplicatedStorage verplaatst en ze vervolgens opnieuw aan Backpack plaatst in de volgorde die is opgegeven in de order tabel.
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
-- Herplaats tools naar de rugzak in de opgegeven volgorde
for i = 1, #order do
local tool = ReplicatedStorage:FindFirstChild(order[i])
if tool then
tool.Parent = backpack
end
endVerzamelbare tool
Als je spelers wilt toestaan om fysieke tools te verzamelen terwijl ze de 3D wereld verkennen, plaats de tools dan in de Workspace zoals normale 3D objecten. Verzamelde tools worden automatisch uitgerust en toegevoegd aan de inventaris van de speler (je hoeft geen extra botsingsdetectie toe te voegen voor personages om de tool op te pakken).
Zoals opgemerkt in de voeg onderdelen/mesh toe sectie, moeten toolonderdelen doorgaans niet Anchored zijn, aangezien spelerspersonages vast komen te zitten wanneer ze een verankerde tool oppakken of uitrusten. Als je echter een verzamelbare tool op een specifieke plaats in de 3D wereld wilt verankeren, zoals iets boven de grond zwevend, kun je de volgende Script aan de tool toevoegen om zijn onderdelen te ontankeren bij verzameling.
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)Verdiende/aangekochte tool
Als je tools wilt instellen als beloningen voor wanneer spelers taken voltooien, of tools wilt aanbieden te koop in een in-game winkel, plaats die tools dan in ReplicatedStorage. Van daaruit kun je Clone() een tool naar de Backpack van de speler op het juiste moment.

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player = Players.LocalPlayer
local backpack = player:WaitForChild("Backpack")
-- Maak een kloon van de tool
local tool = ReplicatedStorage:FindFirstChild("WaterSpell")
if tool then
local clone = tool:Clone()
clone.Parent = backpack -- Voegt kloon toe aan de rugzak van de speler
endImplementeer tool effecten
Nadat je tools aan je spel hebt toegevoegd, kun je scripts implementeren om spelers in staat te stellen hun tools te gebruiken en de gewenste acties uit te voeren. De volgende tool-specifieke evenementen geven de status van de tool en de input van de speler ermee aan.
- Equipped() — Vindt plaats wanneer de speler de tool selecteert uit hun rugzak.
- Unequipped() — Vindt plaats wanneer de speler van tool wisselt of de tool laat vallen.
- Activated() — Vindt plaats wanneer de speler begint de tool te activeren (klikt, tikt of drukt op de achter-rechter trigger op een gamepad).
- Deactivated() — Vindt plaats wanneer de speler stopt met de activatie-input (laat de knop of aanraking los).
local tool = script.Parent
local function onEquip()
print(tool.Name, "tool uitgerust")
end
local function onUnequip()
print(tool.Name, "tool niet meer uitgerust")
end
local function onActivate()
print(tool.Name, "tool geactiveerd")
end
local function onDeactivate()
print(tool.Name, "tool gedeactiveerd")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)Toegepaste tool evenementen worden alleen geactiveerd in client-side LocalScripts omdat alleen het apparaat van de speler weet wanneer input plaatsvindt. Als gevolg hiervan vereisen de meeste tools zowel een LocalScript als een server-side Script waar elk bepaalde aspecten van het gedrag van de tool afhandelt en een RemoteEvent informatie van de client naar de server doorgeeft (zie remote events and callbacks voor meer informatie).
Hieronder volgen voorbeeldtools en hun gedragingen beheerd door ofwel een LocalScript of een Script:
| Tool | LocalScript | Script |
|---|---|---|
| Creator's Wand | Detecteert waar de speler de tool activeert (Activated()). | Maakt een nieuw onderdeel op de locatie binnen de 3D wereld waar de speler aanraakte of klikte. |
| Invisibility Cloak | Detecteert wanneer de speler de tool uitrust (Equipped()) of de tool niet meer uitrust (Unequipped()). | Maakt de speler onzichtbaar voor alle andere spelers terwijl de cloak is uitgerust en herstelt de speler naar volledige zichtbaarheid wanneer de cloak niet meer is uitgerust. |
| Mega‑Bow | Detecteert hoe lang de speler de tool activeert (tijd tussen Activated() en Deactivated()). | Schoot een magische pijl met grotere of kleinere kracht, afhankelijk van de gedetecteerde activatietijd. |
