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

تم الضغط عليه في هذا الإطار

جزء من قسم بناء ألعاب حقيقية في رحلة 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 مرة واحدة لكل ضغطة على مفتاح المسافة.

challenge icon

التحدي

متوسط

ينتظر العداء في مكعبات الانطلاق. يحتوي البرنامج النصي على 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! ثم اركض.
    }
}
quiz iconاختبر نفسك

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

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