Oyun içi Tools, oyuncuların oturumlarda donatabileceği etkileşimli araçlardır; bunlar arasında silahlar, sihirli değnekler, el fenerleri, anahtarlar ve daha fazlası bulunur. Araçları tasarlayabilir ve bunları bir oyuncunun envanterine ekleyebilir veya dünyada toplama nesneleri olarak yerleştirebilirsiniz.
Oyun içi bir araç oluşturma
Tool nesnesi, Roblox'taki herhangi bir aracın temelini oluşturur, bu nedenle bir tane oluşturmanız gerekecek. Bir aracın nasıl göründüğünü önizlemenin en kolay yolu, onu Workspace içinde tasarlamaktır; daha sonra bunu bir envanter öğesi veya kazanılan/satın alınan bir öğe haline getirebilirsiniz.
Yeni Tool seçili iken, Properties penceresine erişin ve aracın oyuncunun envanterinde nasıl görüneceğini özelleştirin:
- TextureId — Oyuncunun envanterindeki aracın resim varlık kimliğini belirtir.
- ToolTip — Oyuncunun envanterindeki aracın üzerine gelindiğinde görünen ipucu adıdır.

Aracın 3D ortamda fiziksel bir araç (en yaygın) mı yoksa sadece bir oyuncunun envanterini işgal eden ve onların girdilerine yanıt veren fiziksel olmayan bir araç mı olacağına karar verin.
Fiziksel araç
Fiziksel bir araç için Tool örneğini oluşturduktan sonra, 3D dünyadaki görünümünü oluşturmak için parçalar/mesh'ler eklemeniz gerekecek. Ayrıca, oyuncu karakterlerinin tutma işlemi yapacağı bir tutacak eklemeniz gerekecek.
Parçalar/mesh'ler ekleyin
Oyun içi araçlar bir veya daha fazla Parts ve/veya MeshParts içerebilir. Aracı birden fazla parçadan oluşturuyorsanız, tüm parçaları bir arada tutmak için WeldConstraints veya diğer mekanik kısıtlamalar kullanmayı unutmayın, böylece araç, oyuncu onu taşırken bir bütün olarak kalır.

Tutacağı ayarlayın
Oyuncuların araçları taşımalarını sağlamak için, aracın bir parçasının Handle olarak adlandırılması gerekir. Bu, aracın karakter modelinin RightHand vücut parçasına (R15) veya Right Arm parçasına (R6) bağlanacağı yerdir.
Eğer araç sadece bir MeshPart'tan oluşuyorsa, o parçayı Handle olarak adlandırın. Aksi takdirde, Tool ana nesnesinin doğrudan çocuğu olarak Handle adında ayrı bir parça ekleyebilir ve ardından bunu başka bir parçaya WeldConstraint veya mekanik kısıtlama ile bağlayabilirsiniz.
Aşağıdaki örnek, bir Handle mesh'i, bir RopeConstraint ve ipten sarkan bir fener mesh'i içeren bir aracı göstermektedir.

Tutma pozisyonunu/yönünü ayarlayın
Aracın Grip özelliği, aracın tutan karaktere göre nasıl konumlandığını ve yönlendirildiğini belirten bir CFrame'dir.

Her aracın ideal tutma pozisyonu/yönü farklı olduğundan, aracınızın tutma görünümünü doğru hale getirmek için değerlerle deneme yapmanız gerekecek. Aşağıdaki örnek, sarkan fener için olası yanlış ve doğru Grip ayarlarını göstermektedir:


Fiziksel olmayan araç
Fiziksel olmayan bir Tool, sadece bir oyuncunun envanterini işgal eder ve onların girdilerine yanıt verir. Örneğin, bir rol yapma oyunu, oyuncuların envanterleri aracılığıyla "atabileceği" bir dizi sihirli büyü içerebilir.

Fiziksel olmayan araçlar, herhangi bir 3D bileşen gerektirmez ve Handle parçasını kullanmaz, bu nedenle aracın RequiresHandle özelliğini devre dışı bırakmalısınız:

Oyununuza araç ekleyin
Oyun içi aracınızı oluşturduktan sonra, onu Explorer hiyerarşisinde doğru alana yerleştirmeniz gerekecek. Aracın hiyerarşide nereye yerleştirileceği, kullanım amacına bağlıdır.
Oyuncu envanteri
Eğer tüm oyuncuların envanterinde bir araçla başlamasını istiyorsanız, aracı StarterPack konteynerinin içine yerleştirin. Herhangi bir oyuncu doğduğunda, sistem aracı Backpack'lerine kopyalar. Buradan, oyuncu araca envanter simgesine tıklayarak veya 1 veya 2 gibi ilgili kısayol tuşuna basarak donatabilir.

Araçların, StarterPack'e eklendikleri sıraya göre oyuncunun envanterine (Backpack) kopyalandığını unutmayın. Daha kontrollü bir sıralama için, StarterPack'e bir LocalScript ekleyebilir ve araçları geçici olarak ReplicatedStorage'ye taşıyıp ardından order tablosunda belirtilen sıraya göre Backpack'e yeniden ebeveyn yapabilirsiniz.
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
-- Belirtilen sırada araçları sırt çantasına yeniden ebeveyn yap
for i = 1, #order do
local tool = ReplicatedStorage:FindFirstChild(order[i])
if tool then
tool.Parent = backpack
end
endToplanabilir araç
Eğer oyuncuların 3D dünyayı keşfettikçe fiziksel araçları toplamalarına izin vermek istiyorsanız, araçları normal 3D nesneler gibi Workspace'e yerleştirin. Toplanan araçlar otomatik olarak donatılacak ve oyuncunun envanterine eklenecektir (karakterlerin aracı almak için ekstra çarpışma algılama eklemenize gerek yoktur).
Parçalar/mesh'ler ekleyin bölümünde belirtildiği gibi, araç parçaları genellikle Anchored olmamalıdır, çünkü oyuncu karakterleri sabitlenmiş bir aracı aldıklarında veya donattıklarında yerlerinde sıkışıp kalır. Ancak, bir toplanabilir aracı 3D dünyada belirli bir yere, örneğin yerden hafifçe yukarıda süzülerek sabitlemek istiyorsanız, araca toplandığında parçalarını serbest bırakacak aşağıdaki Script'i ekleyebilirsiniz.
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)Kazanılan/satın alınan araç
Eğer oyuncular görevleri tamamladıklarında araçları ödül olarak ayarlamak veya oyun içi mağazada araçlar satmak istiyorsanız, bu araçları ReplicatedStorage'in içine yerleştirin. Oradan, uygun zamanda oyuncunun Backpack'ine bir aracı Clone() ile kopyalayabilirsiniz.

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player = Players.LocalPlayer
local backpack = player:WaitForChild("Backpack")
-- Aracın bir kopyasını oluştur
local tool = ReplicatedStorage:FindFirstChild("WaterSpell")
if tool then
local clone = tool:Clone()
clone.Parent = backpack -- Kopyayı oyuncunun sırt çantasına ekler
endAraç etkilerini uygulama
Oyununuza araçlar ekledikten sonra, oyuncuların araçlarını kullanmalarını ve istenen eylemleri gerçekleştirmelerini sağlamak için betikler uygulayabilirsiniz. Aşağıdaki araçlara özgü olaylar, aracın durumunu ve oyuncunun onunla olan girdisini gösterir.
- Equipped() — Oyuncu aracı sırt çantasından seçtiğinde tetiklenir.
- Unequipped() — Oyuncu araçları değiştirdiğinde veya aracı bıraktığında tetiklenir.
- Activated() — Oyuncu aracı etkinleştirmeye başladığında (tıklar, dokunur veya bir oyun kumandasında arka sağ tetikleyiciye basar) tetiklenir.
- Deactivated() — Oyuncu etkinleştirme girdisini durdurduğunda (düğmeyi veya dokunmayı bıraktığında) tetiklenir.
local tool = script.Parent
local function onEquip()
print(tool.Name, "aracı donatıldı")
end
local function onUnequip()
print(tool.Name, "aracı donatılmadı")
end
local function onActivate()
print(tool.Name, "aracı etkinleştirildi")
end
local function onDeactivate()
print(tool.Name, "aracı devre dışı bırakıldı")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)Araç olayları yalnızca istemci tarafı LocalScripts içinde tetiklenir, çünkü yalnızca oyuncunun cihazı girdi olduğunda ne zaman olduğunu bilir. Sonuç olarak, çoğu araç, aracın davranışının belirli yönlerini yöneten bir LocalScript ve bir sunucu tarafı Script gerektirir ve bir RemoteEvent, istemciden sunucuya bilgi iletir (daha fazla bilgi için uzaktan olaylar ve geri çağırmalar bölümüne bakın).
Aşağıda, ya bir LocalScript ya da bir Script tarafından yönetilen örnek araçlar ve bunların davranışları bulunmaktadır:
| Araç | LocalScript | Script |
|---|---|---|
| Yaratıcının Değneği | Oyuncunun aracı etkinleştirdiği yeri algılar (Activated()). | Oyuncunun dokunduğu veya tıkladığı 3D dünyadaki konumda yeni bir parça oluşturur. |
| Görünmezlik Pelerini | Oyuncunun aracı donattığını (Equipped()) veya aracı çıkardığını (Unequipped()) algılar. | Pelerin donatıldığında oyuncuyu diğer tüm oyunculara görünmez yapar ve pelerin çıkarıldığında oyuncunun tam görünürlüğünü geri getirir. |
| Mega Yay | Oyuncunun aracı ne kadar süreyle etkinleştirdiğini algılar (zaman Activated() ile Deactivated() arasındaki süre). | Algılanan etkinleştirme süresine bağlı olarak daha güçlü veya daha zayıf bir sihirli ok fırlatır. |
