ربط إدخال المستخدم بالإجراءات يمنح المستخدمين تحكمًا أفضل وأكثر حدسية في ميزات تجربتك. في هذا البرنامج التعليمي، ستقوم بربط إجراء إعادة تحميل بمفتاح معين.
ابدأ
يستخدم هذا البرنامج التعليمي أداة Blaster التي تم إنشاؤها في إنشاء أدوات اللاعب. يمكنك اتباع تلك التعليمات لإنشاء الأداة أو يمكنك تنزيل نموذج Blaster وإدراجه في StarterPack.
يمكن إضافة النماذج إلى مخزونك ليتم استخدامها بين أي تجربة. لإضافة نموذج إلى تجربتك:
- في متصفح، افتح صفحة النموذج، انقر فوق زر الحصول. هذا يضيف النموذج إلى مخزونك.
- من قائمة نافذة في البرنامج أو شريط أدوات علامة التبويب الصفحة الرئيسية، افتح Toolbox وحدد علامة التبويب المخزون.
- تأكد من أن القائمة المنسدلة على نمو009ردي.
- حدد نموذج 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 عندما لا يكون لدى البندقية أي ذخيرة، ثم إعادة تفعيلها مرة واحدة بعد انتهاء رسوم التحميل.