Menu
CoddyTech

مضغوط، مستمر الضغط، محرر

جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 19 من 85.

يمكن لـ Unity أن تخبرك بثلاثة أمور مختلفة عن مفتاح، ويُستفسر عن كل منها داخل Update():

  • Input.GetKeyDown(KeyCode.Space): هل ضُغط على مفتاح Space في هذا الإطار؟ تكون النتيجة true في إطار واحد عند كل ضغطة.
  • Input.GetKey(KeyCode.Space): هل مفتاح Space مضغوط الآن؟ تكون النتيجة true في كل إطار ما دام مفتاح Space مضغوطًا.
  • Input.GetKeyUp(KeyCode.Space): هل أُفلت مفتاح Space في هذا الإطار؟ تكون النتيجة true في إطار واحد، عندما يُرفع الإصبع عن المفتاح.

اضغط باستمرار على Space لمدة نصف ثانية عند 60 إطارًا في الثانية، وستكون GetKey true في 30 إطارًا، وGetKeyDown في أولها، وGetKeyUp في الإطار الذي يلي آخرها. المدفع الذي يطلق مرة واحدة لكل ضغطة يستعلم عن GetKeyDown؛ أما باستخدام GetKey، فستؤدي ضغطة واحدة إلى إطلاق 30 طلقة:

public int shots = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        shots++;
        Debug.Log("Shots fired: " + shots);
    }
}

يُستخدم GetKeyUp لما يحدث عندما يرفع اللاعب إصبعه عن المفتاح، مثل انتهاء الركض السريع. تُجيب المؤشرات الثلاثة عن الإطار الحالي فقط، ولهذا يجب أن تكون داخل Update(): فهي تعمل في كل إطار، بينما تعمل Start() مرة واحدة، وقد تفوتها بذلك جميع الضغطات تقريبًا.

challenge icon

التحدي

سهل

يُشحَن المقلاع أثناء الضغط على مفتاح المسافة، ويعرض مقدار الشحنة عند إفلاته.

  1. في Update()، طالما أن Input.GetKey(KeyCode.Space) تساوي true، أضِف Time.deltaTime إلى charge.
  2. عند Input.GetKeyUp(KeyCode.Space)، سجّل "Charge: " + charge، ثم عيّن charge إلى 0.

اضغط «العب»، واستمر في الضغط على مفتاح المسافة ثم أفلت المفتاح: سيعرض Console سطرًا مثل Charge: 1.5. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;

public class Slingshot : MonoBehaviour
{
    float charge = 0f;

    void Update()
    {
        // أثناء الضغط باستمرار على Space: تزداد charge بمقدار 1 كل ثانية.
        // عند إفلات Space: سجّل قيمة charge، ثم أعدها إلى 0.
    }
}

جميع دروس أساسيات البرمجة النصية في Unity

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