Menu
CoddyTech

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

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

تجيب 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

التحدي

متوسط

ابدأ العدّاء السريع باستخدام مفتاح المسافة: إلى الأسفل للانحناء، وإلى الأعلى للركض.

  1. في Update()، عندما يكون !running وKeyboard.current.spaceKey.wasPressedThisFrame: عيّن set، وحرّكه إلى الأسفل بمقدار crouch، وسجّل Set.
  2. عندما يكون set وwasReleasedThisFrame: ألغِ تعيين set، وعيّن running، وحرّكه إلى الأعلى بمقدار crouch، وسجّل Go!.
  3. أثناء running، حرّكه على طول المحور +z بسرعة speed وحدة في الثانية.

اضغط على «العب»، واستمر في الضغط على مفتاح المسافة ثم اتركه: ستظهر Set ثم Go! في وحدة التحكم. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;

public class Sprinter : MonoBehaviour
{
    public float speed = 6f;
    public float crouch = 0.3f;

    private bool set;
    private bool running;

    void Update()
    {
        // عند الضغط على Space: انحنِ وسجّل Set. عند تحرير Space: قف وسجّل Go! ثم اركض.
    }
}

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

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