نظام إجراءات الإدخال

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

يتيح لك نظام إجراءات الإدخال عبر المنصات ربط الإجراءات وترتيب التعيينات عبر مدخلات الأجهزة المختلفة في وقت التحرير. بالاشتراك مع السياقات، يمكنك بسهولة تكوين وتحرير نظام إدخال معياري يعمل على أي جهاز في أي مرحلة من اللعب. تشمل حالات الاستخدام:

  • نظام إطلاق نار من منظور الشخص الأول مع إجراءات تتبدل ديناميكيًا اعتمادًا على ما إذا كان اللاعب في وضع المعركة أو وضع المتفرج.
  • نظام قيادة شامل مزود بتسارع/تباطؤ، معززات للسيارة، ومحطات إعادة تعبئة.
  • مفاتيح سريعة لنظام القدرات في لعبة قتال لتبديل الحركات بسلاسة دون أن يفوت اللاعبين ضربة.

سياقات الإدخال

InputContext هو مجموعة من الإجراءات التي تحتوي على إجراءات الإدخال ذات الصلة، على سبيل المثال PlayContext للتحكم في الشخصيات داخل اللعبة وNavContext للتحكم في التنقل حول قوائم واجهة المستخدم. يمكنك تمكين/تعطيل السياقات (وإجراءاتها المقابلة) من خلال خاصية Enabled الخاصة بها، مثل تمكين NavContext عند فتح قائمة الجرد ثم التغيير إلى PlayContext عندما يغلق اللاعب القائمة ويعود إلى اللعب الأساسي.

حتى إذا لم يستخدم اللعبة عدة سياقات إدخال في البداية، يُوصى بإنشاء سياق أساسي على المستوى الأعلى من أي نظام إدخال، على سبيل المثال، مثيل PlayContext للإدخال الذي يحدث أثناء اللعب.

  1. موصى به
    أنشئ Folder باسم Inputs داخل ReplicatedStorage للاحتفاظ بسياقات الإدخال المختلفة.

    مجلد جديد داخل ReplicatedStorage، تم إعادة تسميته إلى Inputs
  2. أدخل InputContext جديدًا في المجلد وأعد تسميته إلى PlayContext.

    مثيل InputContext جديد داخل ReplicatedStorage، تم إعادة تسميته إلى PlayContext
  3. اختياري
    في نافذة الخصائص، قم بتعيين Priority إلى 2000 وتمكين Sink. السياق الذي تم تمكين Sink له يستهلك أحداث الإدخال لتعييناته المرتبطة KeyCodes على مستوى أولويته، مما يمنع تلك المدخلات من الوصول إلى السياقات ذات الأولوية الأقل. هذا عملي لحالات الاستخدام مثل شاشة الجرد التي يجب أن تخفف من مدخلات اللعب المحددة أثناء فتحها. في هذا المثال، تم إعطاء PlayContext أولوية Priority عالية بما يكفي لتغمر مدخلاتها المرتبطة قبل أن تعالجها السياقات الافتراضية PlayerScripts.

    InputContext مع تعيين الأولوية إلى 2000 وتمكين الغمر

إجراءات الإدخال

InputAction تعرف آلية إجراء اللعب مثل "قفز"، "ركض"، أو "إطلاق النار". يتم بعد ذلك ربط هذه الإجراءات بمدخلات الأجهزة باستخدام التعيينات.

يمكن أن تكون InputAction من عدة أنواع اعتمادًا على خاصية Type (Enum.InputActionType). الافتراضي هو Bool، المصمم لاستقبال قيم true/false من الضغط/الإفراج عن المدخلات مثل ButtonA، E، أو MouseLeftButton.

نوع إجراء الإدخالمثال على الاستخدام
Boolإجراءات تم تفعيلها مثل القفز، الإطلاق، الركض، إلخ، مع دعم لعتبات الضغط/الإفراج على المدخلات التناظرية.
Direction1Dإجراءات متغيرة من صفر إلى كامل مثل دواسة تسارع السيارة أو مستوى تكبير نطاق العرض.
Direction2Dحركة اتجاهية ثنائية الأبعاد مثل دوران الكاميرا، أو حركة الشخصية القياسية في Roblox.
Direction3Dحركة اتجاهية ثلاثية الأبعاد مثل مركبة جوية يمكن أن تطفو لأعلى/أسفل، تتسارع/تتباطأ، وتنحرف لليسار/اليمين.
ViewportPositionإحداثيات عرض ثنائية الأبعاد مثل إدخال الفأرة، مثل المؤشرات المخصصة أو استخدام الأشعة لاختيار كائنات العالم.

لاختبار InputAction لركض الشخصية البسيط:

  1. موصى به
    حدد كائن Workspace على المستوى الأعلى في مستكشف ثم، في نافذة الخصائص، قم بتعيين خاصية PlayerScriptsUseInputActionSystem إلى Enabled.

  2. أنشئ InputAction جديدًا داخل سياق PlayContext ضمن ReplicatedStorage. أعد تسميته إلى CharacterSprint للإشارة إلى إجراءه المخصص.

    مثيل InputAction جديد داخل InputContext، تم إعادة تسميته إلى CharacterSprint
  3. في نافذة الخصائص، لاحظ أن Type للإجراء هو Bool (افتراضي). هذا نوع منطقي لركض الشخصية البسيط كإجراء منطقي true/false (الشخصية إما تركض أو لا تركض).

    خاصية النوع لمثيل InputAction تم تعيينها إلى Bool

تعيينات الإدخال

InputBinding تعرف أي تعيين للأجهزة يجب أن يثير InputAction الأصل، على سبيل المثال، ضغط مفتاح، زر وحدة تحكم، أو لمسة على جهاز يدعم اللمس. لضمان التوافق عبر المنصات، يجب أن تحتوي كل InputAction على InputBinding لـ وحدة التحكم، لوحة المفاتيح/الفأرة، واللمس كما هو موضح هنا.

توفر Roblox تركيبات إدخال افتراضية للحركة، والتحكم في الكاميرا، والتفاعل الأساسي مع البيئة — يعرف لاعبو Roblox هذه العناصر بشكل جيد، لذا يجب عليك تجاوزها فقط في حالات محددة. لاحظ أيضًا أن الإدخالات المحجوزة لا يمكن تجاوزها وستعمل دائمًا وفقًا لغرضها المقصود.

الإجراءالفأرة/لوحة المفاتيحوحدة التحكماللمس
فتح قائمة RobloxEscStart button (ButtonStart)غير متاح
وحدة تحكم المطورF9غير متاحغير متاح
وضع ملء الشاشة (Windows)
عرض سطح المكتب (Mac)
F11غير متاحغير متاح
تسجيل الفيديو (Windows)F12غير متاحغير متاح
التقاط صورة الشاشةPrintScreenغير متاحغير متاح

تؤثر Type المعينة لـ InputAction الأصل مباشرة على أنواع الإدخال العامة (مفتاح/زر/لمسة، زناد تناظري، عصا التحكم، إلخ) التي تكون صالحة لمثيلات InputBinding الفرعية. بدورها، تعتمد القيم المرسلة إلى أحداث InputAction المتصلة على نوع الإدخال المختار للتعيين. انظر أحداث الإدخال للحصول على تفاصيل حول العلاقة بين أنواع الإجراءات، التعيينات، والقيم المرجعة.

لربط التعيينات لركض الشخصية البسيط:

  1. أدخل InputBinding جديدًا في إجراء CharacterSprint وأعد تسميته إلى KeyboardBinding. ثم قم بتعيين خاصية KeyCode للتعيين إلى LeftShift.

  2. أدخل InputBinding ثانيًا في إجراء CharacterSprint وأعد تسميته إلى GamepadBinding. ثم قم بتعيين خاصية KeyCode للتعيين إلى ButtonY.

  3. داخل حاوية ScreenGui داخل StarterGui، أنشئ زر على الشاشة، وأعد تسميته إلى SprintButton، وقم بتحديد موضعه/حجمه كما تريد.

  4. أدخل InputBinding ثالثًا في إجراء CharacterSprint وأعد تسميته إلى TouchBinding. ثم، في نافذة الخصائص، اربط خاصية UIButton للتعيين بزر SprintButton الذي أنشأته سابقًا داخل StarterGui.

أحداث الإدخال

تحتوي مثيل InputAction على ثلاث أحداث مدمجة للتعامل مع إدخال اللاعب القادم من InputBindings.

  • Pressed — يتم تشغيل هذا الحدث فقط عندما يتم تعيين Type لإجراء الإدخال إلى Bool، وفقط عندما ينتقل الحالة من false إلى true.
  • Released — يتم تشغيل هذا الحدث فقط عندما يتم تعيين Type لإجراء الإدخال إلى Bool، وفقط عندما ينتقل الحالة من true إلى false.
  • StateChanged — يتم تشغيل هذا الحدث لجميع أنواع إجراءات الإدخال كلما تغيرت الحالة، باستثناء إذا كانت الحالة تحاول الانتقال إلى نفس الحالة.

اعتمادًا على Type لإجراء الإدخال (Bool، Direction1D، Direction2D، Direction3D، أو ViewportPosition) ونوع الإدخال العام القادم من InputBinding الفرعية (مفتاح/زر/لمسة، زناد تناظري، عصا التحكم، إلخ)، يتم إرجاع قيم مختلفة إلى معالجات أحداث Pressed، Released، وStateChanged. افحص الجداول التالية لفهم العلاقة بشكل أفضل.

نوع Bool هو الأفضل للإجراءات المفعلة مثل القفز، الإطلاق، الركض، إلخ، مع دعم لعتبات الضغط/الإفراج على المدخلات التناظرية.

أنواع الإدخال الصالحة على InputBindingsالمُرجع إلى حدث InputAction(ات)
مدخلات منطقية من مفاتيح لوحة المفاتيح أو أزرار الفأرة/وحدة التحكم الأساسية من خلال خاصية KeyCode للتعيين، أو ضغط/إفراج GuiButton من خلال خاصية UIButton للتعيين.
  • حدث Pressed:
    • true عند الضغط
  • حدث Released:
    • true عند الإفراج
  • حدث StateChanged:
    • true (مضغوط) أو false (مفرج)
مدخلات متغيرة من المدخلات التناظرية مثل زنادات وحدة التحكم (ButtonL2/ButtonR2) من خلال خاصية KeyCode للتعيين.

لربط الأحداث لركض الشخصية البسيط:

  1. أدخل Script جديدًا في شجرة CharacterSprint، بجانب التعيينات المختلفة. ثم قم بتعيين RunContext إلى Client وأعد تسميته إلى OnActivate.

  2. الصق الكود التالي في نص OnActivate. لاحظ الاتصال بحدث Pressed في الأسطر 1315 الذي يضاعف سرعة مشي الشخصية عندما يتم الضغط على تعيين إدخال الركض، والاتصال المقابل بحدث Released في الأسطر 1618 الذي يعيد تعيين سرعة المشي إلى الافتراضي عندما يتم الإفراج عن تعيين إدخال الركض.

    OnActivate (Client Script)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. اختبر لعبتك واختبر إجراء الركض للشخصية مع التعيينات التي اخترتها سابقًا: LeftShift للوحة المفاتيح، ButtonY لوحدة التحكم، وزر SprintButton على الشاشة للأجهزة التي تدعم اللمس. تذكر أنه يمكنك استخدام محاكي وحدة التحكم لاختبار مدخلات وحدة التحكم مباشرة في Roblox Studio.

تغييرات السياق

بمجرد أن يكون لديك سياق إدخال مثل PlayContext، يمكنك تمكينه/تعطيله أثناء اللعب من خلال البرمجة، وتغيير Priority الخاصة به لتحديد أي الإجراءات تأخذ الأولوية على الأخرى، وSink المدخلات من أن تتم معالجتها ضمن السياقات ذات الأولوية الأقل.

  1. لتسهيل تبديل السياقات من نصوص أخرى، أدخل BindableEvent جديدًا في مجلد الإدخالات الخاص بك داخل ReplicatedStorage وأعد تسميته إلى ContextEvent.

  2. أنشئ Script جديدًا على نفس المستوى، وقم بتعيين RunContext إلى Client، وأعد تسميته إلى UpdateContext.

  3. داخل نص UpdateContext، الصق الكود التالي:

    UpdateContext (Client Script)
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    -- الاتصال بحدث قابل للتوصيل
    contextEvent.Event:Connect(function(targetContext, enabled)
    local context = inputsFolder:FindFirstChild(targetContext)
    if context then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("InputContext غير موجود!")
    end
    end)
  4. مع وجود نص UpdateContext في مكانه، يمكنك الآن تحديث InputContext المسماة عن طريق إطلاق الحدث القابل للتوصيل، على سبيل المثال من LocalScript الذي يشغل GuiButton داخل حاوية ScreenGui.

    نص الزر
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- إطلاق الحدث القابل للتوصيل مع السياق المستهدف وحالة التمكين
    contextEvent:Fire("PlayContext", true)
    end)

عرض التعيينات

بمجرد إعدادك لـ الإجراءات والتعيينات، ستحتاج عادةً إلى إظهار للاعبين، عبر تلميحات مساعدة على الشاشة، أي مفتاح أو زر يثير كل إجراء:


يوفر نظام إجراءات الإدخال طريقتين:

  • موصى به
    InputActionLabel — كائن GuiObject بدون كود، يمكن سحبه وإفلاته يعرض تلقائيًا الإدخال الصحيح لكل منصة.
  • متوسط
    PreferredBinding — خاصية InputAction للقراءة فقط للمبدعين الذين يريدون السيطرة الكاملة على كيفية عرض التعيينات في واجهة المستخدم المخصصة.

InputActionLabel هو GuiObject يمكنك إدراجه في أي ScreenGui أو SurfaceGui. بمجرد تعيين خاصية InputAction للإشارة إلى مثيل InputAction موجود، فإنه يحل تلقائيًا ويعرض التعيين الصحيح لجهاز الإدخال الحالي للاعب — لا حاجة للبرمجة. عندما يقوم اللاعب بتبديل الأجهزة (على سبيل المثال، التقاط وحدة تحكم بعد استخدام لوحة مفاتيح) أو إعادة تعيين تحكم، يتم تحديث التسمية على الفور.

لإضافة InputActionLabel:

  1. داخل حاوية ScreenGui داخل StarterGui، أدخل InputActionLabel تمامًا مثل أي GuiObject آخر.

  2. في نافذة الخصائص، قم بتعيين خاصية InputAction إلى مثيل InputAction الذي تريد عرضه (على سبيل المثال، إجراء "الركض" الخاص بك تحت ReplicatedStorage) وقم بتحديد موضعه/حجمه كما تريد.

  3. عندما تحل التسمية ما يجب عرضه، تتحقق من التالي بالترتيب:

    1. صور مخصصة — إذا كانت خاصية InputBindings الفرعية قد تم تعيينها إلى DisplayImage، فإن التسمية تعرض تلك الصور مباشرة.

    2. صور مفاتيح المنصة — في حالة عدم وجود صور مخصصة، فإن التسمية تعرض الصور المقدمة من المنصة لـ InputBindings من خلال UserInputService:GetImageForKeyCode()، إذا كانت تلك الصور متاحة. تظهر التعيينات المركبة مع المعدلات عدة أيقونات مع فواصل +.

    3. أسماء مخصصة — في حالة عدم توفر صور، إذا كانت خاصية InputBindings الفرعية قد تم تعيينها إلى DisplayName، فإن التسمية تعرض ذلك النص باستخدام خصائص نمط التسمية.

    4. سلاسل مفاتيح المنصة — في حالة عدم توفر كل ما سبق، فإن التسمية تعرض السلاسل المقدمة من المنصة من خلال UserInputService:GetStringForKeyCode().

    5. إذا لم يتم تعيين أي InputAction أو لم يكن هناك أي InputBinding فرعي موجود، فإن التسمية تعرض أيقونة عنصر نائب.

مدير إجراءات الإدخال

أداة مدير إجراءات الإدخال هي واجهة موحدة على شكل مصفوفة لتصميم، تدقيق، وتوسيع بنية الإدخال الخاصة بك.

للوصول إليها، انتقل إلى قائمة نافذة في الاستوديو واختر إدخال ⟩ مدير إجراءات الإدخال. إذا كانت لعبتك تستخدم بالفعل السياقات أو الإجراءات أو التعيينات، فسيقوم المدير تلقائيًا بمسح DataModel واستخراج تلك المثيلات الموجودة إلى شبكة المحرر. سيتم تلقائيًا ملء أي مثيلات جديدة ذات صلة بالإدخال في مجلد Inputs داخل ReplicatedStorage.

مجلد داخل ReplicatedStorage باسم Inputs

لتكوين إعداد إدخال لـ ركض الشخصية كما هو موضح في الأقسام أعلاه:

  1. موصى به
    حدد كائن Workspace على المستوى الأعلى في مستكشف ثم، في نافذة الخصائص، قم بتعيين خاصية PlayerScriptsUseInputActionSystem إلى Enabled.

  2. داخل حاوية ScreenGui داخل StarterGui، أنشئ زر على الشاشة، وأعد تسميته إلى SprintButton، وقم بتحديد موضعه/حجمه كما تريد.

  3. في مدير إجراءات الإدخال، مرر فوق رأس عمود السياق وانقر على زر . أدخل اسمًا مناسبًا للسياق الجديد مثل PlayContext واضغط Enter. يظهر InputContext بالاسم المطابق في ReplicatedStorage.

    مثيل InputContext جديد داخل ReplicatedStorage باسم PlayContext
  4. مرر فوق السياق الجديد وانقر على زر . من قائمة المنبثقة، اختر Bool، أدخل CharacterSprint كاسم للإجراء، واضغط Enter. يظهر InputAction بالاسم المطابق تحت السياق.

    مثيل InputAction جديد داخل InputContext باسم CharacterSprint
  5. في صف CharacterSprint الجديد، قم بتعيين التعيينات لكل نوع إدخال:

    1. لوحة المفاتيح والفأرة — انقر على زر السهم واختر LeftShift من قائمة الاختيار.
    2. اللمس — انقر على الخلية ثم، في مستكشف الهيكلي، انقر على كائن SprintButton الذي أدخلته سابقًا في ScreenGui.
    3. وحدة التحكم — انقر على زر السهم واختر ButtonY من قائمة الاختيار.
  6. أدخل Script جديدًا في شجرة CharacterSprint، بجانب التعيينات المختلفة. ثم قم بتعيين RunContext إلى Client وأعد تسميته إلى OnActivate.

  7. الصق الكود التالي في نص OnActivate. لاحظ الاتصال بحدث Pressed في الأسطر 1315 الذي يضاعف سرعة مشي الشخصية عندما يتم الضغط على تعيين إدخال الركض، والاتصال المقابل بحدث Released في الأسطر 1618 الذي يعيد تعيين سرعة المشي إلى الافتراضي عندما يتم الإفراج عن تعيين إدخال الركض.

    OnActivate (Client Script)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.