Alat dalam permainan Tools adalah alat interaktif yang dapat dipakai pemain dalam sesi, seperti senjata, tongkat sihir, senter, kunci, dan lainnya. Anda dapat merancang alat dan menyertakannya dalam inventaris pemain atau menempatkannya di seluruh dunia sebagai barang yang dapat diambil.
Buat alat dalam permainan
Objek Tool adalah dasar dari setiap alat di Roblox, jadi Anda perlu membuat satu. Lebih mudah untuk melihat bagaimana alat terlihat dengan merancangnya di Workspace, dan kemudian Anda dapat menjadikannya item inventaris atau item diperoleh/dibeli.
Dengan Tool baru yang dipilih, akses jendela Properties dan sesuaikan bagaimana alat akan muncul di inventaris pemain:
- TextureId — Menentukan ID aset gambar untuk alat di inventaris pemain.
- ToolTip — Nama tooltip saat hover untuk alat di inventaris pemain.

Tentukan apakah alat akan menjadi alat fisik di lingkungan 3D (yang paling umum) atau alat non-fisik yang hanya mengisi inventaris pemain dan merespons input mereka.
Alat fisik
Setelah membuat instance Tool untuk alat fisik, Anda perlu menambahkan bagian/mesh untuk menyusun penampilannya di dunia 3D. Anda juga perlu menyertakan pegangan yang dipegang oleh karakter pemain grip.
Tambahkan bagian/mesh
Alat dalam permainan dapat terdiri dari satu atau lebih Parts dan/atau MeshParts. Jika Anda membangun alat dari beberapa bagian, ingatlah untuk menghubungkan semuanya menggunakan WeldConstraints atau kendala mekanis sehingga alat tetap utuh sebagai satu kesatuan saat pemain membawanya.

Atur pegangan
Untuk memungkinkan pemain membawa alat, salah satu bagian dari alat perlu dinamai Handle. Ini adalah tempat alat akan terhubung ke RightHand bagian tubuh model karakter (R15) atau bagian Right Arm (R6).
Jika alat terdiri dari hanya satu MeshPart, cukup beri nama bagian itu Handle. Jika tidak, Anda dapat menyertakan bagian terpisah yang dinamai Handle sebagai anak langsung dari Tool induk dan kemudian menghubungkannya ke bagian lain dengan WeldConstraint atau kendala mekanis.
Contoh berikut menunjukkan alat dengan tiga instance: mesh Handle, RopeConstraint, dan mesh lentera yang tergantung dari tali.

Sesuaikan posisi/orientasi pegangan
Properti Grip alat adalah CFrame yang menentukan bagaimana alat diposisikan dan diorientasikan relatif terhadap karakter yang memegangnya.

Karena posisi/orientasi pegangan yang ideal berbeda untuk setiap alat, Anda perlu bereksperimen dengan nilai-nilai hingga pegangan alat Anda terlihat benar. Contoh berikut menunjukkan pengaturan Grip yang mungkin salah dan benar untuk lentera yang tergantung:


Alat non-fisik
Alat non-fisik Tool hanya mengisi inventaris pemain dan merespons input mereka. Misalnya, permainan peran mungkin menampilkan serangkaian mantra sihir yang dapat "dilempar" pemain melalui inventaris mereka.

Alat non-fisik tidak memerlukan komposisi 3D dan tidak menggunakan bagian Handle, jadi Anda harus menonaktifkan properti RequiresHandle alat:

Tambahkan alat ke permainan
Setelah Anda selesai membuat alat dalam permainan Anda, Anda perlu menempatkannya di area yang tepat dalam hierarki Explorer. Di mana Anda menempatkan alat dalam hierarki tergantung pada penggunaannya yang dimaksudkan.
Inventaris pemain
Jika Anda ingin semua pemain memulai dengan alat di inventaris mereka, letakkan di dalam wadah StarterPack. Ketika pemain mana pun muncul, sistem akan menyalin alat ke Backpack mereka. Dari sana, pemain dapat menggunakan alat dengan mengklik ikon inventarisnya atau dengan menekan tombol pintas terkait seperti 1 atau 2.

Perhatikan bahwa alat disalin ke inventaris pemain (Backpack) dalam urutan mereka ditambahkan ke StarterPack. Untuk pengurutan yang lebih terkontrol, Anda dapat menambahkan LocalScript ke StarterPack yang sementara memindahkan alat ke ReplicatedStorage kemudian mengubah induknya ke Backpack dalam urutan yang ditentukan dalam tabel 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
-- Mengubah induk alat ke backpack dalam urutan yang ditentukan
for i = 1, #order do
local tool = ReplicatedStorage:FindFirstChild(order[i])
if tool then
tool.Parent = backpack
end
endAlat koleksi
Jika Anda ingin memungkinkan pemain mengumpulkan alat fisik saat mereka menjelajahi dunia 3D, letakkan alat di Workspace seperti objek 3D biasa. Alat yang dikumpulkan akan secara otomatis digunakan dan ditambahkan ke inventaris pemain (Anda tidak perlu menambahkan deteksi tabrakan tambahan agar karakter dapat mengambil alat).
Seperti yang disebutkan di bagian tambahkan bagian/mesh, bagian alat biasanya tidak boleh Anchored, karena karakter pemain akan terjebak di tempat saat mereka mengambil atau menggunakan alat yang terikat. Namun, jika Anda ingin mengaitkan alat koleksi ke tempat tertentu di dunia 3D, seperti melayang sedikit di atas tanah, Anda dapat menambahkan Script berikut ke alat untuk menghapus pengaitannya saat diambil.
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)Alat yang diperoleh/dibeli
Jika Anda ingin menetapkan alat sebagai penghargaan ketika pemain menyelesaikan tugas, atau menawarkan alat untuk dijual di toko dalam permainan, letakkan alat tersebut di dalam ReplicatedStorage. Dari sana, Anda dapat Clone() alat ke Backpack pemain pada waktu yang tepat.

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player = Players.LocalPlayer
local backpack = player:WaitForChild("Backpack")
-- Buat salinan alat
local tool = ReplicatedStorage:FindFirstChild("WaterSpell")
if tool then
local clone = tool:Clone()
clone.Parent = backpack -- Menambahkan salinan ke backpack pemain
endTerapkan efek alat
Setelah menambahkan alat ke permainan Anda, Anda dapat menerapkan skrip untuk memungkinkan pemain menggunakan alat mereka dan melakukan tindakan yang diinginkan. Peristiwa spesifik alat berikut menunjukkan status alat dan input pemain dengannya.
- Equipped() — Ditembak saat pemain memilih alat dari backpack mereka.
- Unequipped() — Ditembak saat pemain mengganti alat atau menjatuhkan alat.
- Activated() — Ditembak saat pemain mulai mengaktifkan alat (mengklik, mengetuk, atau menekan pemicu belakang kanan pada gamepad).
- Deactivated() — Ditembak saat pemain menghentikan input aktivasi (melepaskan tombol atau sentuhan).
local tool = script.Parent
local function onEquip()
print(tool.Name, "alat dipakai")
end
local function onUnequip()
print(tool.Name, "alat dilepas")
end
local function onActivate()
print(tool.Name, "alat diaktifkan")
end
local function onDeactivate()
print(tool.Name, "alat dinonaktifkan")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)Peristiwa alat hanya terjadi di LocalScripts sisi klien karena hanya perangkat pemain yang tahu kapan input terjadi. Akibatnya, sebagian besar alat memerlukan baik LocalScript dan Script sisi server di mana masing-masing menangani aspek tertentu dari perilaku alat dan RemoteEvent mengirimkan informasi dari klien ke server (lihat peristiwa dan callback jarak jauh untuk informasi lebih lanjut).
Berikut adalah contoh alat dan perilakunya yang dikelola oleh baik LocalScript atau Script:
| Alat | LocalScript | Script |
|---|---|---|
| Tongkat Pembuat | Mendeteksi di mana pemain mengaktifkan alat (Activated()). | Membuat bagian baru di lokasi dalam dunia 3D di mana pemain menyentuh atau mengklik. |
| Jubah Ketidaknampakan | Mendeteksi saat pemain menggunakan alat (Equipped()) atau melepas alat (Unequipped()). | Menjadikan pemain tidak terlihat bagi semua pemain lain saat jubah dipakai dan mengembalikan pemain ke visibilitas penuh saat jubah dilepas. |
| Mega-Panah | Mendeteksi berapa lama pemain mengaktifkan alat (waktu antara Activated() dan Deactivated()). | Menembakkan panah sihir dengan kekuatan lebih besar atau lebih kecil, tergantung pada waktu aktivasi yang terdeteksi. |
