Menu
CoddyTech
flag Ar iconالعربيةdown icon

لوحة المفاتيح والفأرة

جزء من قسم بناء ألعاب حقيقية في رحلة 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.

challenge icon

التحدي

متوسط

حلّق بالمنطاد باستخدام 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 أو الفأرة
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس بناء ألعاب حقيقية