ثلاثة مسارات
جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 27 من 60.
يبني هذا الفصل لعبة ركض لا نهائي. يركض اللاعب على طريق ذي ثلاثة مسارات، وينتقل بينها لتفادي العوائق القادمة نحوه. خلال الدروس التالية، تزداد سرعة الطريق، وتظهر المسافة على الشاشة، وينهي الاصطدام الركضة مع زر للركض مجددًا، ويُحفَظ أفضل أداء. لا يتحرك اللاعب إلى الأمام أبدًا: بل يبقى عند z = 0 وتتحرك العوائق نحوه، لذا لا ينتهي الطريق أبدًا. تحتوي اللعبة على أربعة نصوص برمجية، Runner وSpawner وObstacle وGameManager، والثلاثة الأخيرة فارغة حاليًا.
لا يُوجَّه اللاعب في المسارات كما تُوجَّه السيارة: فهو يكون دائمًا في واحد من بضعة أماكن محددة. احتفظ بالمكان على هيئة عدد صحيح، وغيّر العدد عند الضغط على مفتاح، واحسب الموقع انطلاقًا منه. تخدم منصة منظّف النوافذ هذه الطوابق الخمسة لمبنى، يفصل بينها 3 وحدات:
[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
floor = Mathf.Clamp(floor, 0, 4);
Vector3 p = transform.position;
p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
transform.position = p;
}تجعل GetKeyDown كل ضغطة تنقل المنصة طابقًا واحدًا، بينما تؤدي GetKey إلى إضافة طابق مع كل إطار يظل فيه المفتاح مضغوطًا. تحافظ Mathf.Clamp على العدد ضمن حدود المبنى، لذا لا يفعل الضغط على الأعلى في الطابق العلوي شيئًا، وينقلك الضغط التالي على الأسفل مباشرةً إلى الطابق 3. تحرّك Mathf.MoveTowards المنصة نحو طابقها بسرعة moveSpeed وحدة في الثانية، وتتوقف عنده تمامًا، بدلًا من القفز إليه في إطار واحد. يكون الموقع نسخةً تُغيَّر ثم تُسنَد من جديد، لأنه لا يمكن تعيين transform.position.y بمفرده.
التحدي
متوسطاجعل الأسهم تنقل العداء بين ثلاثة مسارات.
- في
Update()الخاصة بـRunner، استخدمlane--عندInput.GetKeyDown(KeyCode.LeftArrow)، وlane++عند ضغط السهم الأيمن. - أبقِه على الطريق:
lane = Mathf.Clamp(lane, -1, 1);. - انسخ
transform.positionإلىp، وحرّكp.xنحوlane * laneWidthباستخدامMathf.MoveTowardsبسرعةlaneSpeed * Time.deltaTime، ثم أعد تعيينp.
اضغط «العب»، ثم انقر على اللعبة وبدّل المسارات: سينزلق العداء بينها. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public float laneSpeed = 15f;
private int lane = 0; // -1 هو المسار الأيسر، و0 هو المسار الأوسط، و1 هو المسار الأيمن
void Update()
{
// غيّر المسارات باستخدام مفاتيح الأسهم، ثم انزلق نحو قيمة x للمسار
}
}
جميع دروس إنشاء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارمنصات متحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامكتدرّب بنفسك: Playground لـ Unity