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

ثلاثة مسارات

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

يبني هذا الفصل لعبة جري لا نهائي. يركض العداء على طريق ذي ثلاثة مسارات، وينتقل بين المسارات لتفادي العوائق التي تتجه نحوه. في الدروس التالية، تزداد سرعة الطريق، وتظهر المسافة على الشاشة، وينهي الاصطدام الجولة مع زر لإعادة اللعب، ويُحفَظ أفضل أداء. لا يتحرك العداء إلى الأمام أبدًا: بل يبقى عند 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 بمفرده غير ممكن.

challenge icon

التحدي

متوسط

ابدأ لعبة Endless Runner بالعدّاء. يمنح Inspector الكائن Runner قيمة laneWidth مقدارها 2.5 وقيمة laneSpeed مقدارها 15، وتكون قيمة lane هي -1 للمسار الأيسر، و0 للمسار الأوسط، و1 للمسار الأيمن. في Update() الخاصة بـ Runner:

  • كل ضغطة على سهم اليسار أو اليمين تغيّر lane بمقدار واحد في ذلك الاتجاه. ويظل الضغط على المفتاح يغيّرها بمقدار واحد فقط.
  • لا تنخفض قيمة lane أبدًا عن -1 ولا تتجاوز 1.
  • ينزلق العدّاء على المحور x إلى lane * laneWidth بسرعة laneSpeed وحدة في الثانية، مع الحفاظ على قيمتي y وz.

اترك البرامج النصية الثلاثة الأخرى كما هي الآن. اضغط على Play، وانقر على اللعبة وبدّل المسارات، ثم اضغط على Check.

جرّب بنفسك

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 للمسار
    }
}
quiz iconاختبر نفسك

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

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