نظام عمل الإدخال

*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 الافتراضية.

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

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

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

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

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

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

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

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

الروابط الإدخالية

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

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

لربط الروابط لإجراء جري الشخصية البسيط:

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

  2. لضمان عدم تدخل قفل الماوس Shift مع الربط، اختر StarterPlayer في المستعرض وتعطيل خاصية EnableMouseLockOption في نافذة الخصائص.

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

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

  5. قم بإدخال 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)

الروابط الافتراضية

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

الإجراءالفأرة/لوحة المفاتيحوحدة التحكماللمس
فتح قائمة RobloxEscStart button (ButtonStart)غير متاح
وحدة تحكم المطورF9غير متاحغير متاح
وضع ملء الشاشة (Windows)
عرض سطح المكتب (Mac)
F11غير متاحغير متاح
تسجيل الفيديو (Windows)F12غير متاحغير متاح
التقاط صورة الشاشةPrintScreenغير متاحغير متاح
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.