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

في نافذة الخصائص، قم بتعيين 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 للجري البسيط للشخصية:
قم بإنشاء InputAction جديدة داخل السياق PlayContext داخل ReplicatedStorage. أعد تسميتها إلى CharacterSprint للإشارة إلى إجراءها المخصص.

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

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


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


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


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


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


أحداث الإدخال
يمتلك مثيل InputAction ثلاث أحداث مدمجة لمعالجة مدخلات اللاعب القادمة من InputBindings.
- StateChanged — هذا الحدث ينطلق لجميع أنواع إجراءات الإدخال كلما تغيرت الحالة، باستثناء إذا حاولت الحالة الانتقال إلى نفس الحالة.
اعتمادًا على Type للإجراء (Bool، Direction1D، Direction2D، Direction3D، أو ViewportPosition) ونوع الإدخال العام القادم من InputBinding فرعي (مفتاح/زر/نقرة، زناد تماثلي، عصا الإبهام، إلخ)، تُرجع قيم مختلفة إلى معالجات أحداث Pressed، Released، و StateChanged. راجع الجداول التالية لفهم العلاقة بشكل أفضل.
نوع Bool هو الأفضل للإجراءات المعلنة مثل القفز، إطلاق النار، الجري، إلخ مع دعم عتبات الضغط/الإفراج على المدخلات التناظرية.
| أنواع الإدخال الصالحة على InputBindings | المُرجع إلى أحداث InputAction |
|---|---|
| إدخالات بوليانية من مفاتيح لوحة المفاتيح أو أزرار الماوس/وحدة التحكم الأساسية من خلال خاصية KeyCode للربط، أو ضغط/إفراج GuiButton من خلال خاصية UIButton للربط. |
|
| كميات الإدخال المتغيرة من المدخلات التناظرية مثل زنادات وحدة التحكم (ButtonL2/ButtonR2) من خلال خاصية KeyCode للربط. |
|
لربط الأحداث لإجراء جري الشخصية البسيط:
قم بإدخال Script جديدة في شجرة CharacterSprint، جنبًا إلى جنب مع روابط الإدخال المختلفة. ثم قم بتعيين RunContext إلى Client وأعد تسميته إلى OnActivate.

الصق الكود التالي في سكрипت OnActivate. لاحظ الاتصال بحدث Pressed في السطور 13‑15 التي تضاعف سرعة المشي للشخصية عند الضغط على رابط إدخال الجري، والاتصال بحدث Released في السطور 16‑18 التي تعيد سرعة المشي إلى الافتراضيات عند الإفراج عن رابط إدخال الجري.
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)اختبر لعبتك واختبر إجراء الجري للشخصية مع الروابط التي اخترتها مسبقًا: LeftShift لوحدة المفاتيح، ButtonY لوحدة التحكم، وزر SprintButton على الشاشة لأجهزة اللمس. تذكر أنه يمكنك استخدام محاكي وحدة التحكم لاختبار إدخالات وحدة التحكم مباشرة في Roblox Studio.
تغييرات السياقات
بمجرد أن يكون لديك سياق إدخال مثل PlayContext، يمكنك تفعيل/إلغاء تفعيله أثناء اللعب من خلال البرمجة، وتغيير Priority لتحديد أي الإجراءات تأخذ الأولوية على الآخرين، و Sink للمدخلات من أن تتم معالجتها داخل السياقات ذات الأولوية الأقل.
لتسهيل تبديل السياقات من سكريبتات أخرى، قم بإدخال BindableEvent جديدة في مجلد الإدخالات الخاص بك داخل ReplicatedStorage وأعد تسميتها إلى ContextEvent.

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

داخل سكريبت 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 thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("لم يتم العثور على InputContext!")endend)مع وجود سكريبت UpdateContext في مكانه، يمكنك الآن تحديث InputContext مكشوفة من خلال إطلاق الحدث القابل للتوصيل، على سبيل المثال من LocalScript التي تدير GuiButton داخل حاوية ScreenGui.
زر السكريبتlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- إطلاق حدث قابل للتوصيل مع السياق المدخل المستهدف وحالة التفعيلcontextEvent:Fire("PlayContext", true)end)
الروابط الافتراضية
توفر Roblox تركيبات إدخال افتراضية للحركة، والتحكم في الكاميرا، والتفاعل الأساسي مع البيئة — يعرف لاعبو Roblox هذه العناصر بشكل جيد، لذا يجب عليك تجاوزها فقط في حالات محددة. لاحظ أيضًا أن الإدخالات المحجوزة لا يمكن تجاوزها وستعمل دائمًا وفقًا لغرضها المقصود.
| الإجراء | الفأرة/لوحة المفاتيح | وحدة التحكم | اللمس |
|---|---|---|---|
| فتح قائمة Roblox | Esc | Start button (ButtonStart) | غير متاح |
| وحدة تحكم المطور | F9 | غير متاح | غير متاح |
| وضع ملء الشاشة (Windows) عرض سطح المكتب (Mac) | F11 | غير متاح | غير متاح |
| تسجيل الفيديو (Windows) | F12 | غير متاح | غير متاح |
| التقاط صورة الشاشة | PrintScreen | غير متاح | غير متاح |

