إجراءات الإدخال
جزء من قسم بناء ألعاب حقيقية في رحلة 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.
التحدي
متوسطيرسم المسّاح خريطة لحقل ثلجي يُرى من الأعلى، ويحمل 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
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك9نظام الإدخال الجديد
نظاما الإدخاللوحة المفاتيح والفأرةتم الضغط عليه في هذا الإطارإجراءات الإدخالمراجعة: التبديل بين أنظمة الإدخال