ربط إدخال المستخدم بالإجراءات يمنح المستخدمين تحكمًا أفضل وأكثر بديهية في ميزات لعبتك. في هذا البرنامج التعليمي، ستقوم بربط إجراء إعادة التحميل بمفتاح محدد.
ابدأ
يستخدم هذا البرنامج التعليمي أداة Blaster التي تم إنشاؤها في إنشاء أدوات اللاعب. يمكنك اتباع تلك التعليمات لإنشاء الأداة أو يمكنك تنزيل نموذج Blaster وإدراجه في StarterPack.
يمكن إضافة النماذج إلى مخزونك لاستخدامها بين أي لعبة. لإضافة نموذج إلى لعبتك:
- في متصفح، افتح صفحة النموذج، وانقر على زر الحصول على. سيؤدي ذلك إلى إضافة النموذج إلى مخزونك.
- من قائمة نافذة في الاستوديو أو شريط أدوات علامة التبويب الرئيسية، افتح صندوق الأدوات واختر علامة التبويب المخزون.
- تأكد من أن القائمة المنسدلة على نماذجي.
- اختر نموذج Blaster لإضافته إلى اللعبة.
إنشاء معالج إجراء
أولاً، ستحتاج إلى دالة للتعامل مع متى يتم اكتشاف إدخال المستخدم.
افتح LocalScript ToolController داخل أداة Blaster.

أنشئ متغيرًا لتخزين اسم الإجراء.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)أنشئ دالة باسم onAction تستقبل ثلاثة معطيات: actionName، inputState، و inputObject. ستكون هذه هي الدالة التي تعمل عندما يتم اكتشاف إدخال المستخدم.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endداخل الدالة، تحقق من أن actionName المعطاة تتطابق مع اسم إجراء إعادة التحميل وتأكد من أن inputState هو UserInputState.Begin (الحالة الابتدائية). هذا مهم لأن الدالة ستعمل في كل مرة يتغير فيها inputState، ولكن إعادة التحميل تحتاج فقط إلى الحدوث مرة واحدة.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendلجعل الأمر واضحًا عندما يقوم المستخدم بإعادة التحميل، قم بتغيير TextureId للأداة إلى "rbxassetid://6593020923" للحظة، ثم قم بتغييره مرة أخرى إلى قيمته الأصلية "rbxassetid://92628145".
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
ربط الإجراء
يمكن استخدام ContextActionService لربط دالة بإدخال محدد باستخدام دالة BindAction، التي تقبل عدة معطيات:
- اسم الإجراء.
- الدالة للتعامل مع الإجراء (تسمى أيضًا "استدعاء").
- ما إذا كان يجب عرض زر شاشة اللمس أم لا.
- أي عدد من Enum.KeyCodes لاكتشافها وربطها بالإجراء.
KeyCodes هي قيم تمثل أزرار إدخال مختلفة، مثل مفاتيح لوحة المفاتيح أو أزرار وحدة التحكم. تتوفر قائمة كاملة من الرموز هنا.
احصل على ContextActionService في أعلى البرنامج النصي.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"داخل دالة toolEquipped، استدعِ BindAction ومرر المعطيات التالية:
- اسم الإجراء (RELOAD_ACTION)
- معالج الإجراء (onAction)
- قيمة لإنشاء زر لمسة (true)
- ضغط مفتاح لاكتشافه (Enum.KeyCode.R)
local RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endاختبر اللعبة عن طريق تجهيز الأداة والضغط على مفتاح R على لوحة المفاتيح الخاصة بك. يجب أن يتغير رمز الحقيبة مؤقتًا إلى رمز الانتظار للإشارة إلى أن السلاح يتم إعادة تحميله:
إلغاء ربط الإجراء
عندما يقوم المستخدم بإلغاء تجهيز الأداة، يجب إلغاء ربط الإجراء حتى لا يتمكنوا من إعادة التحميل دون تجهيز الأداة.
أنشئ دالة جديدة تسمى toolUnequipped واستدعِ UnbindAction، مع تمرير اسم الإجراء.
local function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)اربط دالة toolUnequipped بحدث Unequipped حتى تعمل الدالة عندما يتم تشغيل الحدث.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)اختبر اللعبة للتأكد من أن كل شيء يعمل بشكل صحيح. يجب أن تكون قادرًا على إعادة التحميل عندما تكون الأداة مجهزة، ولكن ليس عندما تكون غير مجهزة.
الآن تم الانتهاء من رسومك المتحركة لإعادة التحميل - كالتحدي الإضافي، حاول العد التنازلي لعداد الذخيرة في كل مرة يتم فيها إطلاق البازوكا. يمكنك بعد ذلك إلغاء تنشيط دالة toolActivated عندما لا يكون لدى البندقية ذخيرة، ثم إعادة تنشيطها بمجرد الانتهاء من رسوم إعادة التحميل.