أدوات Tools داخل اللعبة هي أدوات تفاعلية يمكن للاعبين تجهيزها في الجلسات، مثل الأسلحة، العصي السحرية، المصابيح، المفاتيح، والمزيد. يمكنك تصميم الأدوات وإدراجها في مخزون اللاعب أو وضعها في أنحاء العالم كعناصر يمكن جمعها.
إنشاء أداة داخل اللعبة
الكائن Tool هو الأساس لأي أداة في Roblox، لذا ستحتاج إلى إنشاء واحدة. من الأسهل معاينة شكل الأداة عن طريق تصميمها في Workspace، وبعدها يمكنك جعلها عنصر في المخزون أو عنصر تم اكتسابه/تم شراؤه.
مع تحديد Tool الجديد، الوصول إلى نافذة Properties وتخصيص كيفية ظهور الأداة في مخزون اللاعب:
- TextureId — تحدد معرف الأصل الصورة للأداة في مخزون اللاعب.
- ToolTip — اسم التلميح عند التحويم للأداة في مخزون اللاعب.

قرر ما إذا كانت الأداة ستكون أداة فعلية في البيئة ثلاثية الأبعاد (الأكثر شيوعًا) أو أداة غير فعلية تشغل ببساطة مخزون اللاعب وتستجيب لإدخال المستخدم.
أداة فعلية
بعد إنشاء كائن Tool لأداة فعلية، ستحتاج إلى إضافة الأجزاء/الشبكات لتكوين مظهرها في العالم ثلاثي الأبعاد. ستحتاج أيضًا إلى تضمين مقبض يمكن للشخصيات الحمل الإمساك به.
إضافة الأجزاء/الشبكات
يمكن أن تتكون الأدوات داخل اللعبة من قطعة واحدة أو أكثر من Parts و/أو MeshParts. إذا قمت بإنشاء الأداة من قطع متعددة، تذكر أن تربطها معًا باستخدام WeldConstraints أو قيود ميكانيكية بحيث تبقى الأداة سليمة كوحدة واحدة بينما يحملها اللاعب.

تعيين المقبض
لتمكين اللاعبين من حمل الأدوات حولهم، يجب أن يكون أحد أجزاء الأداة باسم Handle. هنا ستتصل الأداة بقطعة نموذج الشخصية الخاصة بـ RightHand (R15) أو Right Arm (R6).
إذا كانت الأداة تتكون من مجرد MeshPart واحدة، ببساطة سَمِّ تلك القطعة Handle. خلاف ذلك، يمكنك تضمين قطعة منفصلة باسم Handle كـ ابن مباشر للوالد Tool ثم توصيلها بقطعة أخرى باستخدام WeldConstraint أو قيود ميكانيكية.
المثال التالي يبين أداة تحتوي على ثلاث عينات: شبكة Handle، و RopeConstraint، وشبكة فانوس تتدلى من الحبل.

ضبط وضعية/اتجاه الإمساك
خاصية Grip للأداة هي CFrame والتي تحدد كيف يتم وضع الأداة وتوجيهها بالنسبة للشخصية التي تمسك بها.

نظرًا لأن وضعية/اتجاه الإمساك المثالية تختلف لكل أداة، ستحتاج إلى تجربة القيم حتى يبدو إمساك أداتك صحيحًا. المثال التالي يبين إعدادات Grip غير صحيحة وصحيحة لفانوس معلق:


أداة غير فعلية
الأداة غير الفيزيائية Tool تشغل ببساطة مخزون اللاعب inventory وتستجيب لإدخالهم. على سبيل المثال، قد تتضمن لعبة تمثيل الأدوار سلسلة من التعويذات السحرية التي يمكن للاعبين "إلقاءها" من خلال مخزونهم.

الأدوات غير الفيزيائية لا تتطلب أي تركيب ثلاثي الأبعاد ولا تستخدم جزء Handle، لذا يجب تعطيل خاصية RequiresHandle للأداة:

إضافة الأدوات إلى لعبة
بمجرد الانتهاء من إنشاء أداتك داخل اللعبة، ستحتاج إلى وضعها في المنطقة الصحيحة من هيكل Explorer. يعتمد المكان الذي تضع فيه الأداة في الهيكل على الاستخدام المقصود منها.
مخزون اللاعب
إذا كنت تريد أن يبدأ جميع اللاعبين بأداة في مخزونهم، ضعها داخل حاوية StarterPack. عند ظهور أي لاعب، يقوم النظام بنسخ الأداة إلى Backpack الخاص بهم. من هناك، يمكن للاعب تجهيز الأداة عن طريق النقر على أيقونة المخزون الخاصة بها أو عن طريق الضغط على المفتاح الساخن المرتبط مثل 1 أو 2.

لاحظ أن الأدوات تُنسخ إلى مخزون اللاعب (Backpack) بالترتيب الذي تم إضافتها إلى StarterPack. للحصول على ترتيب أكثر تحكمًا، يمكنك إضافة LocalScript إلى StarterPack ينقل الأدوات مؤقتًا إلى ReplicatedStorage ثم يعيد تربيةها إلى Backpack بالترتيب المحدد في جدول order.
إعادة ترتيب المخزونlocal 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-- إعادة تربية الأدوات إلى المخزون بالترتيب المحددfor i = 1, #order dolocal tool = ReplicatedStorage:FindFirstChild(order[i])if tool thentool.Parent = backpackendend
أداة قابلة للجمع
إذا كنت تريد السماح للاعبين بجمع الأدوات الفيزيائية أثناء استكشافهم للعالم ثلاثي الأبعاد، ضع الأدوات في Workspace تمامًا كما تفعل مع الكائنات ثلاثية الأبعاد العادية. سيتم تجهيز الأدوات المجمعة تلقائيًا وإضافتها إلى مخزون اللاعب (لا تحتاج إلى إضافة كشف تصادم إضافي للشخصيات لالتقاط الأداة).
كما هو مذكور في قسم إضافة الأجزاء/الشبكات، ينبغي ألا تكون قطع الأدوات عادة Anchored، حيث ستلتصق شخصيات اللاعبين في المكان عندما يلتقطون أو يجهزون أداة مثبتة. ومع ذلك، إذا كنت تريد تثبيت أداة قابلة للجمع في مكان معين في العالم ثلاثي الأبعاد، مثل التعويم قليلاً فوق الأرض، يمكنك إضافة Script التالي إلى الأداة لإلغاء تثبيت أجزاءها عند الجمع.
إلغاء تثبيت الأداة عند التجهيز/الجمع
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)
أداة مكتسبة/مشتراة
إذا كنت تريد تعيين الأدوات جوائز عند إتمام اللاعبين لمهام، أو تقديم أدوات للبيع في متجر داخل اللعبة، ضع تلك الأدوات داخل ReplicatedStorage. من هناك، يمكنك Clone() أداة إلى Backpack الخاص باللاعب في الوقت المناسب.

نسخ الأداة إلى مخزون اللاعبlocal Players = game:GetService("Players")local ReplicatedStorage = game:GetService("ReplicatedStorage")local player = Players.LocalPlayerlocal backpack = player:WaitForChild("Backpack")-- إنشاء نسخة من الأداةlocal tool = ReplicatedStorage:FindFirstChild("WaterSpell")if tool thenlocal clone = tool:Clone()clone.Parent = backpack -- يضيف النسخة إلى مخزون اللاعبend
تنفيذ تأثيرات الأداة
بعد إضافة الأدوات إلى لعبتك، يمكنك تنفيذ السكربتات لتمكين اللاعبين من استخدام أدواتهم وأداء الإجراءات المطلوبة. تشير الأحداث المحددة للأداة التالية إلى حالة الأداة وإدخال اللاعب بها.
- Equipped() — يتم إطلاقه عندما يختار اللاعب الأداة من مخزونه.
- Unequipped() — يتم إطلاقه عندما يقوم اللاعب بتبديل الأدوات أو إسقاط الأداة.
- Activated() — يتم إطلاقه عندما يبدأ اللاعب في تفعيل الأداة (ينقر، يلمس، أو يضغط على الزر الخلفي الأيمن على وحدة تحكم اللعبة).
- Deactivated() — يتم إطلاقه عندما يتوقف اللاعب عن إدخال التفعيل (يحرر الزر أو اللمسة).
قالب أحداث الأداة
local tool = script.Parent
local function onEquip()
print(tool.Name, "تم تجهيز الأداة")
end
local function onUnequip()
print(tool.Name, "تم إجراء الأداة")
end
local function onActivate()
print(tool.Name, "تم تفعيل الأداة")
end
local function onDeactivate()
print(tool.Name, "تم إلغاء تفعيل الأداة")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)
تقوم أحداث الأداة بالإطلاق فقط في LocalScripts على جانب العميل لأن الجهاز الخاص باللاعب فقط هو من يعرف متى تحدث الإدخال. كنتيجة لذلك، تتطلب معظم الأدوات كل من LocalScript و Script على جانب الخادم حيث يتعامل كل واحد مع جوانب معينة من سلوك الأداة وRemoteEvent تمرر المعلومات من العميل إلى الخادم (انظر الأحداث عن بُعد والاستدعاءات لمزيد من المعلومات).
كما يلي أمثلة على الأدوات وسلوكياتها التي تتم إدارتها إما بواسطة LocalScript أو Script:
| الأداة | LocalScript | Script |
|---|---|---|
| عصا المبدع | تكتشف أين يقوم اللاعب بتفعيل الأداة (Activated()). | تنشئ جزءًا جديدًا في الموقع داخل العالم ثلاثي الأبعاد حيث نقر اللاعب أو لمسه. |
| عباءة الاختفاء | تكتشف متى يقوم اللاعب بتجهيز الأداة (Equipped()) أو إلغاء تجهيز الأداة (Unequipped()). | تجعل اللاعب غير مرئي لجميع اللاعبين الآخرين بينما تكون العباءة مركبة وتستعيد اللاعب إلى الظهور الكامل عندما يتم إلغاء تجهيز العباءة. |
| القوس العملاق | تكتشف مدى طول تفعيل اللاعب للأداة (الوقت بين Activated() و Deactivated()). | تطلق سهمًا سحريًا بقوة أكبر أو أقل، اعتمادًا على زمن التفعيل المكتشف. |
