إجراءات الإدخال
جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 47 من 60.
إن اختبار المفاتيح واحدًا تلو الآخر يربط النص البرمجي بلوحة المفاتيح. يعبّر الإجراء عن فعل اللاعب بدلًا من ذلك، ويحدّد المشروع المفاتيح والعصي والأزرار التي تفعّله. يأتي مشروع Unity 6 جديد ومعه مجموعة من الإجراءات (الأصل InputSystem_Actions، المضبوط ليكون مجموعة الإجراءات على مستوى المشروع)، وتضم خريطة Player فيه Move (مفاتيح WASD والأسهم والعصا اليسرى لوحدة التحكم)، وLook (الفأرة أو العصا اليمنى)، وAttack (زر الفأرة الأيسر وEnter)، وInteract (E، عند الاستمرار في الضغط عليه)، وCrouch (C)، وJump (Space وزر الجنوب في وحدة التحكم)، و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.
التحدي
متوسطحرّك المسّاح وازرع الأعلام باستخدام إجراءات المشروع.
- في
Start()، عيّنmoveActionوjumpActionوattackActionباستخدامInputSystem.actions.FindAction("Move")و"Jump"و"Attack". - في
Update()، حرّك المسّاح باستخدامmoveAction.ReadValue<Vector2>()مضروبًا فيspeed، واجعل مركبة y على محور z. - استدعِ
Plant()عندjumpAction.WasPressedThisFrame()، واستدعِPullUp()عند الضغط على Attack.
اضغط على «العب»، وازرع ثلاثة أعلام، ثم انقر لاقتلاع أحدها. بعد ذلك اضغط على «تحقق».
جرّب بنفسك
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 InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// ابحث عن إجراءات Move وJump وAttack
}
void Update()
{
// تحرّك باستخدام Move، واستدعِ Plant() عند الضغط على Jump، وPullUp() عند الضغط على Attack
}
void Plant()
{
if (flags == 0) return;
Vector3 spot = new Vector3(transform.position.x, 0.75f, transform.position.z);
planted.Add(Instantiate(flagPrefab, spot, Quaternion.identity));
flags--;
Debug.Log("Flags left: " + flags);
}
void PullUp()
{
if (planted.Count == 0) return;
GameObject last = planted[planted.Count - 1];
planted.RemoveAt(planted.Count - 1);
Destroy(last);
flags++;
Debug.Log("Flags left: " + flags);
}
}
جميع دروس إنشاء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارمنصات متحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامك9نظام الإدخال الجديد
نظاما الإدخاللوحة المفاتيح والفأرةتم الضغط عليه في هذا الإطارإجراءات الإدخالمراجعة: التبديل بين أنظمة الإدخالتدرّب بنفسك: Playground لـ Unity