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

إجراءات الإدخال

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

إن اختبار المفاتيح واحدًا تلو الآخر يربط السكربت بلوحة المفاتيح. ويُسمّي الإجراء ما يفعله اللاعب بدلًا من ذلك، ويحدّد المشروع المفاتيح والعصي والأزرار التي تُفعّله. يأتي مشروع Unity 6 جديد مزوّدًا بمجموعة منها (الأصل InputSystem_Actions، المعيّن كإجراءات على مستوى المشروع)، وتحتوي خريطة Player فيه على Move (WASD والأسهم والعصا اليسرى لوحدة التحكم)، وLook (الفأرة أو العصا اليمنى)، وAttack (زر الفأرة الأيسر وEnter)، وInteract (E، عند الضغط المطوّل)، وCrouch (C)، وJump (المسافة وزر الجنوب في وحدة التحكم)، وPrevious وNext (1 و2)، وSprint (Left Shift). تكون هذه الإجراءات مفعّلة منذ البداية، ويسترجع InputSystem.actions.FindAction("Jump") أحدها باسمه. تتحرك هذه الرافعة المخلبية ذات المنظور الجانبي على المحورين x وy، وتلتقط الأشياء عند الضغط على Jump:

using UnityEngine;
using UnityEngine.InputSystem;

public class ClawCrane : MonoBehaviour
{
    public float speed = 3f;

    private InputAction moveAction;
    private InputAction jumpAction;

    void Start()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;

        if (jumpAction.WasPressedThisFrame())
            Debug.Log("Grab!");
    }
}

يُعثَر على الإجراءات مرة واحدة في Start، وتُحفَظ في حقول InputAction. يعيد Move قيمة Vector2: يمثّل x الاتجاهين الأيمن والأيسر، ويمثّل y الاتجاهين الأعلى والأسفل على المفاتيح، وتكون القيمة مطبّعة، لذا فإن الضغط على W وD معًا يعطي (0.71, 0.71) بدلًا من (1, 1). وبما أن منظور الرافعة جانبي، فإنها تستخدم قيمة y للارتفاع؛ أما اللعبة التي تُرى من الأعلى فتستخدمها للمحور z. تستجيب إجراءات الأزرار مثل المفاتيح: WasPressedThisFrame() وWasReleasedThisFrame() وIsPressed(). ثمة خطآن يؤديان إلى استثناء: إذا كُتب الاسم خطأً، فستعيد FindAction القيمة null (ويحدث NullReferenceException عند أول قراءة)، كما أن استخدام ReadValue<Vector3>() مع Move يؤدي إلى InvalidOperationException بمجرد الضغط على أي مفتاح، لأن Move يحمل قيمة Vector2.

challenge icon

التحدي

متوسط

يرسم المسّاح خريطة لحقل ثلجي يُرى من الأعلى، ويحمل flags (3) ليغرسها في طريقه. يحتوي البرنامج النصي على speed (4)، وflags، وflagPrefab، وقائمة planted. استخدم إجراءات المشروع:

  • يحرّك Move المسّاح عبر الثلج بسرعة speed وحدة في الثانية: إلى اليمين واليسار على المحور x، وإلى الأعلى والأسفل على المحور z.
  • كل ضغطة على Jump تغرس علماً: نسخة من flagPrefab عند إحداثيي x وz للمسّاح، وعند y بقيمة 0.75، وتُضاف إلى planted. يُستهلك واحد من flags ويُسجَّل العدد المتبقي، مثل Flags left: 2. عندما لا يتبقى أي علم، لا يغرس Jump شيئاً.
  • كل ضغطة على Attack (نقرة بالزر الأيسر) تقتلع آخر علم غُرس: يُدمَّر ويُزال من القائمة، وتزداد flags بمقدار واحد، ويُسجَّل السطر نفسه.

اضغط Play، واغرس ثلاثة أعلام ثم اقتلع واحداً، وبعدها اضغط Check.

جرّب بنفسك

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class Surveyor : MonoBehaviour
{
    public float speed = 4f;
    public int flags = 3;
    public GameObject flagPrefab;

    private List<GameObject> planted = new List<GameObject>();

    void Start()
    {
        // اعثر على إجراءات Move وJump وAttack
    }

    void Update()
    {
        // امشِ باستخدام Move، واغرس علمًا عند Jump، واقتلع علمًا عند Attack
    }
}
quiz iconاختبر نفسك

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

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