لوحة المفاتيح والفأرة
جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 44 من 56.
يمنح نظام الإدخال كل جهاز كائنًا. Keyboard.current هو لوحة المفاتيح، وكل مفتاح فيها عنصر تحكم له اسم: spaceKey أو aKey أو upArrowKey أو Keyboard.current[Key.Space] لأي مفتاح باستخدام قيمة Key الخاصة به. Mouse.current هو الفأرة، ويحتوي على leftButton وrightButton وposition. تكون قيمة isPressed لأحد عناصر التحكم هي true في كل إطار يكون فيه مضغوطًا، كما كان الحال مع Input.GetKey. تغوص هذه الغواصة وتصعد باستخدام الأسهم، وتضيء مصباح البحث ما دام زر الفأرة مضغوطًا:
using UnityEngine;
using UnityEngine.InputSystem;
public class Submarine : MonoBehaviour
{
public float diveSpeed = 2f;
public Light searchlight;
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard == null) return; // لا توجد لوحة مفاتيح موصولة
if (keyboard.downArrowKey.isPressed)
transform.position += Vector3.down * diveSpeed * Time.deltaTime;
if (keyboard.upArrowKey.isPressed)
transform.position += Vector3.up * diveSpeed * Time.deltaTime;
searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
}
}current هو الجهاز الذي استُخدم أخيرًا، وتكون قيمته null عند عدم وجود جهاز: قد لا تحتوي الهواتف أو أجهزة الألعاب على لوحة مفاتيح، وتمنع عمليات التحقق من القيم الفارغة البرنامج النصي من طرح استثناء في تلك الأجهزة. لا تحتوي لوحة المفاتيح على محاور، لذا فإن سهم الأسفل وS مفتاحان منفصلان: تختبر الغواصة التي ينبغي أن تغوص أيضًا عند الضغط على S التعبير keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. تعطي Mouse.current.position.ReadValue() موضع المؤشر على هيئة Vector2 بوحدات بكسل الشاشة، بدءًا من الزاوية السفلية اليسرى، مثل Input.mousePosition.
التحدي
متوسطحلّق بالمنطاد باستخدام Input System. يحتوي نصه البرمجي على drift (2) وrise (3) وsink (1) وgroundY (2) وflame، وهو لهب الموقد أسفل المنطاد.
- عند الضغط باستمرار على السهم الأيمن أو D، ينجرف المنطاد إلى اليمين (على طول +x) بسرعة
driftوحدة في الثانية؛ وعند الضغط باستمرار على السهم الأيسر أو A، ينجرف إلى اليسار. - يكون الموقد مشتعلًا عند الضغط باستمرار على Space أو زر الفأرة الأيسر. أظهِر
flameفقط عندما يكون مشتعلًا. - عندما يكون الموقد مشتعلًا، يرتفع المنطاد بسرعة
riseوحدة في الثانية. وعندما يكون مطفأً، يهبط بسرعةsinkوحدة في الثانية، ولا ينخفض أبدًا عنgroundY.
استخدم Keyboard.current وMouse.current. أُعِدّ هذا المشروع مثل مشروع Unity 6 جديد (Active Input Handling: Input System Package)، لذا تُلقي الفئة Input استثناء InvalidOperationException هنا. اضغط على Play وحلّق، ثم اضغط على Check.
جرّب بنفسك
using UnityEngine;
using UnityEngine.InputSystem;
public class Balloon : MonoBehaviour
{
public float drift = 2f;
public float rise = 3f;
public float sink = 1f;
public float groundY = 2f;
public GameObject flame;
void Update()
{
// انجرف باستخدام مفاتيح الأسهم أو A وD، وأشعل اللهب باستخدام Space أو الفأرة
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك9نظام الإدخال الجديد
نظاما الإدخاللوحة المفاتيح والفأرةتم الضغط عليه في هذا الإطارإجراءات الإدخالمراجعة: التبديل بين أنظمة الإدخال