تم الضغط عليه في هذا الإطار
جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 45 من 56.
تجيب isPressed عن سؤال «هل هو مضغوط الآن؟» في كل إطار أثناء الضغط المستمر. أما إذا كان المطلوب تنفيذ شيء مرة واحدة عند كل ضغطة، فلدى عنصر التحكم إجابتان إضافيتان: تكون wasPressedThisFrame بقيمة true فقط في الإطار الذي يُضغط فيه المفتاح أو الزر، وتكون wasReleasedThisFrame كذلك فقط في الإطار الذي يُرفع فيه. وهما تحلان محل Input.GetKeyDown وInput.GetKeyUp، وكذلك GetMouseButtonDown وGetMouseButtonUp. ينخفض ختم المطاط هذا عند ضغط زر الفأرة ويرتفع عند إفلاته:
using UnityEngine;
using UnityEngine.InputSystem;
public class Stamp : MonoBehaviour
{
public float drop = 0.5f;
private int stamps;
void Update()
{
Mouse mouse = Mouse.current;
if (mouse.leftButton.wasPressedThisFrame)
{
transform.position += Vector3.down * drop;
stamps++;
Debug.Log("Stamp " + stamps);
}
if (mouse.leftButton.wasReleasedThisFrame)
{
transform.position += Vector3.up * drop;
}
}
}إذا استمر الضغط على الزر نصف ثانية، فسيُسجّل Stamp 1 مرة واحدة، وسينخفض الختم مرة واحدة ثم يعود إلى الأعلى مرة واحدة. أما مع استخدام isPressed في أول if، فستُسجّل الضغطة نفسها نحو 30 ختمًا، وسيغوص الختم 15 وحدة في المكتب. تعمل المفاتيح بالطريقة نفسها: تكون Keyboard.current.spaceKey.wasPressedThisFrame بقيمة true مرة واحدة لكل ضغطة على مفتاح المسافة.
التحدي
متوسطينتظر العداء في مكعبات الانطلاق. يحتوي البرنامج النصي على speed (6) وcrouch (0.3).
- عند الضغط على مفتاح المسافة، ينحني العداء داخل المكعبات: يتحرك إلى الأسفل بمقدار
crouchوحدة، ويُسجَّلSet. - عند رفع الإصبع عن مفتاح المسافة بعد ذلك، يقف العداء مجددًا (إلى الأعلى بمقدار
crouchوحدة)، ويُسجَّلGo!ويبدأ الركض: ومنذ ذلك الحين يركض على طول المحور +z بسرعةspeedوحدة في الثانية. - يؤدي الضغط المستمر على مفتاح المسافة إلى تسجيل
Setمرة واحدة، لا مرة في كل إطار. بعد أن يبدأ العداء بالركض، لا يعود لمفتاح المسافة أي تأثير.
اقرأ مفتاح المسافة باستخدام Keyboard.current. اضغط على Play، وأبقِ مفتاح المسافة مضغوطًا ثم اتركه، وبعدها اضغط على Check.
جرّب بنفسك
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
void Update()
{
// عند الضغط على Space: انحنِ وسجّل Set. عند إفلات Space: قف وسجّل Go! ثم اركض.
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك9نظام الإدخال الجديد
نظاما الإدخاللوحة المفاتيح والفأرةتم الضغط عليه في هذا الإطارإجراءات الإدخالمراجعة: التبديل بين أنظمة الإدخال