Menu
CoddyTech

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

جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 45 من 60.

يمنح نظام الإدخال كل جهاز كائنًا. 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

التحدي

متوسط

حلّق بالمنطاد باستخدام Keyboard.current وMouse.current.

  1. أثناء الضغط على rightArrowKey أو dKey مع isPressed، انجرف على طول +x بسرعة drift وحدة في الثانية؛ واستخدم leftArrowKey أو aKey للتحرك على طول -x.
  2. تكون bool burner مفعّلة عند الضغط على spaceKey أو leftButton؛ استدعِ flame.SetActive(burner);.
  3. عند تشغيل الموقد، ارتفع بسرعة rise؛ وعند إطفائه، اهبط بسرعة sink، من دون النزول أبدًا إلى ما دون groundY.

اضغط «العب» وحلّق: اضغط باستمرار على مفتاح المسافة أو زر الفأرة للصعود. ثم اضغط «تحقق».

جرّب بنفسك

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 أو الفأرة
    }
}

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

تدرّب بنفسك: Playground لـ Unity