لوحة المفاتيح والفأرة
جزء من قسم إنشاء ألعاب حقيقية في رحلة 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.
التحدي
متوسطحلّق بالمنطاد باستخدام Keyboard.current وMouse.current.
- أثناء الضغط على
rightArrowKeyأوdKeyمعisPressed، انجرف على طول +x بسرعةdriftوحدة في الثانية؛ واستخدمleftArrowKeyأوaKeyللتحرك على طول -x. - تكون
bool burnerمفعّلة عند الضغط علىspaceKeyأوleftButton؛ استدعِflame.SetActive(burner);. - عند تشغيل الموقد، ارتفع بسرعة
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 أو الفأرة
}
}
جميع دروس إنشاء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارمنصات متحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامك9نظام الإدخال الجديد
نظاما الإدخاللوحة المفاتيح والفأرةتم الضغط عليه في هذا الإطارإجراءات الإدخالمراجعة: التبديل بين أنظمة الإدخالتدرّب بنفسك: Playground لـ Unity