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

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

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

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


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

لا تتطلب الأدوات غير المادية أي تكوين ثلاثي الأبعاد ولا تستخدم جزء 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.Parent
for _, item in backpack:GetChildren() do
if item:IsA("Tool") then
item.Parent = ReplicatedStorage
end
end
-- إعادة توجيه الأدوات إلى الحقيبة بالترتيب المحدد
for i = 1, #order do
local tool = ReplicatedStorage:FindFirstChild(order[i])
if tool then
tool.Parent = backpack
end
endأداة قابلة للجمع
إذا كنت ترغب في السماح للاعبين بجمع أدوات مادية أثناء استكشافهم للعالم ثلاثي الأبعاد، ضع الأدوات في 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.LocalPlayer
local backpack = player:WaitForChild("Backpack")
-- إنشاء نسخة من الأداة
local tool = ReplicatedStorage:FindFirstChild("WaterSpell")
if tool then
local 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()). | تطلق سهمًا سحريًا بقوة أكبر أو أقل، اعتمادًا على وقت التفعيل المكتشف. |

