Gli Tools in gioco sono strumenti interattivi che i giocatori possono equipaggiare durante le sessioni, come armi, bacchette magiche, torce, chiavi e altro ancora. Puoi progettare strumenti e includerli nell'inventario di un giocatore o posizionarli nel mondo come oggetti da raccogliere.
Crea uno strumento in gioco
L'oggetto Tool è la base di qualsiasi strumento in Roblox, quindi dovrai crearne uno. È più semplice visualizzare come appare uno strumento progettandolo in Workspace, e in seguito puoi farne un elemento dell'inventario oppure un oggetto guadagnato/acquistato.
Con il nuovo Tool selezionato, accedi alla finestra Proprietà e personalizza come apparirà lo strumento nell'inventario del giocatore:
- TextureId — Specifica l'ID dell'immagine dell'asset per lo strumento nell'inventario di un giocatore.
- ToolTip — Il nome del tooltip al passaggio del mouse per lo strumento nell'inventario di un giocatore.

Decidi se lo strumento sarà un strumento fisico nell'ambiente 3D (la scelta più comune) o uno strumento non fisico che occupa semplicemente l'inventario di un giocatore e risponde ai loro input.
Strumento fisico
Dopo aver creato l'istanza Tool per uno strumento fisico, dovrai aggiungere parti/mesh per comporre il suo aspetto nel mondo 3D. Dovrai anche includere una maniglia che i personaggi dei giocatori afferrano.
Aggiungi parti/mesh
Gli strumenti in gioco possono consistere in una o più Parts e/o MeshParts. Se costruisci lo strumento di più pezzi, ricorda di collegarli tutti insieme utilizzando WeldConstraints o altri vincoli meccanici in modo che lo strumento rimanga intatto come un'unità mentre il giocatore lo porta in giro.

Imposta la maniglia
Per consentire ai giocatori di portare gli strumenti in giro, una parte dello strumento deve essere chiamata Handle. Qui è dove lo strumento si attaccherà alla parte RightHand del modello del personaggio (R15) o alla parte Right Arm (R6).
Se lo strumento è composto da un'unica MeshPart, basta chiamare quella parte Handle. Altrimenti, puoi includere una parte separata chiamata Handle come figlio diretto del genitore Tool e poi collegarla a un'altra parte con un WeldConstraint o vincolo meccanico.
Il seguente esempio mostra uno strumento con tre istanze: la mesh Handle, un RopeConstraint e una mesh di una lanterna che pende dalla corda.

Regola la posizione/orientamento della presa
La proprietà Grip dello strumento è un CFrame che specifica come lo strumento è posizionato e orientato rispetto al personaggio che lo tiene.

Poiché la posizione/orientamento ideale della presa è diversa per ogni strumento, dovrai sperimentare con i valori fino a quando la presa del tuo strumento non appare corretta. Il seguente esempio mostra impostazioni Grip possibili errate e corrette per la lanterna appesa:


Strumento non fisico
Uno strumento Tool non fisico occupa semplicemente l'inventario di un giocatore e risponde al loro input. Ad esempio, un gioco di ruolo potrebbe presentare una serie di incantesimi magici che i giocatori possono "lanciare" tramite il loro inventario.

Gli strumenti non fisici non richiedono alcuna composizione 3D e non utilizzano una parte Handle, quindi dovresti disattivare la proprietà RequiresHandle dello strumento:

Aggiungi strumenti a un gioco
Una volta che hai finito di creare il tuo strumento in gioco, dovrai posizionarlo nell'area corretta dell'albero Explorer. Dove posizioni lo strumento nell'albero dipende dal suo uso previsto.
Inventario del giocatore
Se vuoi che tutti i giocatori inizino con uno strumento nel loro inventario, mettilo dentro il contenitore StarterPack. Quando un qualsiasi giocatore viene generato, il sistema copia lo strumento nel loro Backpack. Da lì, il giocatore può equipaggiare lo strumento cliccando sulla sua icona nell'inventario o premendo il tasto di scelta rapida associato, come 1 o 2.

Nota che gli strumenti vengono copiati nell'inventario del giocatore (Backpack) nell'ordine in cui sono stati aggiunti a StarterPack. Per un ordinamento più controllato, puoi aggiungere uno LocalScript a StarterPack che sposta temporaneamente gli strumenti in ReplicatedStorage e poi li riposiziona in Backpack nell'ordine specificato nella tabella order.
Riordina l'inventariolocal ReplicatedStorage = game:GetService("ReplicatedStorage")local order = {"WaterSpell", "FireSpell", "AirSpell", "EarthSpell"}local backpack = script.Parentfor _, item in backpack:GetChildren() doif item:IsA("Tool") thenitem.Parent = ReplicatedStorageendend-- Ripristina strumenti nello zaino nell'ordine specificatofor i = 1, #order dolocal tool = ReplicatedStorage:FindFirstChild(order[i])if tool thentool.Parent = backpackendend
Strumento collezionabile
Se desideri consentire ai giocatori di raccogliere strumenti fisici mentre esplorano il mondo 3D, posiziona gli strumenti in Workspace proprio come oggetti 3D normali. Gli strumenti raccolti verranno automaticamente equipaggiati e aggiunti all'inventario del giocatore (non è necessario aggiungere ulteriori rilevamenti delle collisioni affinché i personaggi afferrino lo strumento).
Come accennato nella sezione aggiungi parti/mesh, le parti degli strumenti non dovrebbero essere tipicamente Anchored, poiché i personaggi dei giocatori rimarranno bloccati in posizione quando raccoglieranno o equipaggeranno uno strumento ancorato. Tuttavia, se desideri ancorare uno strumento collezionabile in un luogo specifico nel mondo 3D, come fluttuare leggermente sopra il terreno, puoi aggiungere il seguente Script allo strumento per disancorare le sue parti al momento della raccolta.
Disancora lo strumento all'equipaggiamento/raccolta
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)
Strumento guadagnato/acquistato
Se desideri impostare strumenti come premi quando i giocatori completano compiti, o offrire strumenti in vendita in un negozio in gioco, metti quegli strumenti dentro ReplicatedStorage. Da lì, puoi Clone() uno strumento nell'Backpack del giocatore al momento giusto.

Clona lo strumento nell'inventario del giocatorelocal Players = game:GetService("Players")local ReplicatedStorage = game:GetService("ReplicatedStorage")local player = Players.LocalPlayerlocal backpack = player:WaitForChild("Backpack")-- Crea un clone dello strumentolocal tool = ReplicatedStorage:FindFirstChild("WaterSpell")if tool thenlocal clone = tool:Clone()clone.Parent = backpack -- Aggiunge il clone allo zaino del giocatoreend
Implementa gli effetti degli strumenti
Dopo aver aggiunto strumenti al tuo gioco, puoi implementare script per consentire ai giocatori di utilizzare i loro strumenti e compiere le azioni desiderate. I seguenti eventi specifici degli strumenti indicano lo stato dello strumento e l'input del giocatore con esso.
- Equipped() — Si attiva quando il giocatore seleziona lo strumento dal proprio zaino.
- Unequipped() — Si attiva quando il giocatore cambia strumenti o abbandona lo strumento.
- Activated() — Si attiva quando il giocatore inizia ad attivare lo strumento (clicca, tocca o preme il grilletto posteriore destro su un controller).
- Deactivated() — Si attiva quando il giocatore interrompe l'input di attivazione (rilascia il bottone o il tocco).
Template per eventi dello strumento
local tool = script.Parent
local function onEquip()
print(tool.Name, "strumento equipaggiato")
end
local function onUnequip()
print(tool.Name, "strumento disarmato")
end
local function onActivate()
print(tool.Name, "strumento attivato")
end
local function onDeactivate()
print(tool.Name, "strumento disattivato")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)
Gli eventi dello strumento si attivano solo negli LocalScripts sul lato client, poiché solo il dispositivo del giocatore sa quando si verifica un input. Di conseguenza, la maggior parte degli strumenti richiede sia uno LocalScript che uno Script sul lato server, in cui ciascuno gestisce determinati aspetti del comportamento dello strumento e un RemoteEvent passa informazioni dal client al server (vedi eventi remoti e callback per ulteriori informazioni).
Di seguito sono riportati esempi di strumenti e i loro comportamenti gestiti da uno LocalScript o uno Script:
| Strumento | LocalScript | Script |
|---|---|---|
| Bacchetta del Creatore | Rileva dove il giocatore attiva lo strumento (Activated()). | Crea una nuova parte nella posizione del mondo 3D dove il giocatore ha toccato o cliccato. |
| Mantello dell'Invisibilità | Rileva quando il giocatore equipaggia lo strumento (Equipped()) o dissimula lo strumento (Unequipped()). | Rende il giocatore invisibile a tutti gli altri giocatori mentre il mantello è equipaggiato e ripristina la piena visibilità del giocatore quando il mantello è dissimulato. |
| Super Arco | Rileva quanto a lungo il giocatore attiva lo strumento (tempo tra Activated() e Deactivated()). | Scocca una freccia magica con potere maggiore o minore, a seconda del tempo di attivazione rilevato. |
