Menu
CoddyTech

الحلبة

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

يبني هذا الفصل لعبة «الهروب من الساحة». تتفادى الصيادين في ساحة محاطة بجدران بينما تتدفق موجات منهم إلى الداخل، وتنتهي الجولة بعد ثلاث إصابات، وعندما تنتهي الموجة الأخيرة يُفتح مخرج. تتكون اللعبة من خمسة سكريبتات موجودة في المشروع منذ البداية: Player وHunter وSpawner وHealth وExit. السكريبتات الأربعة الأخيرة فارغة الآن، ويملأ كل درس أحدها.

يتحرك اللاعب باستخدام القوى بدلًا من سرعة يضبطها بنفسه، لذا تضيف قوة دفع الصياد حركته إلى حركة اللاعب بدلًا من أن تُمحى. إن الدفع وحده سيزيد سرعته إلى الأبد، لذا يخفض linearDamping جزءًا من سرعته في كل خطوة: يستقر الدفع الثابت عند سرعة قصوى تساوي تقريبًا التسارع مقسومًا على التخميد. تدفع هذه المزلجة الهوائية إلى الأمام ما دامت مفتاح المسافة مضغوطًا:

[SerializeField] private float accel = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.linearDamping = 2f;
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
    }
}

عندما يكون التسارع 12 والتخميد 2، تبلغ المزلجة سرعتها القصوى عند نحو 6 وحدات في الثانية، وعند ترك مفتاح المسافة يوقفها التخميد بدلًا من أن يتركها تنزلق إلى الأبد. يتجاهل ForceMode.Acceleration الكتلة، لذا تتسارع المزلجة الثقيلة تمامًا مثل الخفيفة. يحتوي مصادم المزلجة على مادة فيزيائية بلا احتكاك: فلو أُضيف احتكاك الأرضية إلى التخميد، لكانت سرعتها القصوى أقل.

challenge icon

التحدي

متوسط

ابدأ Arena Escape: ينزلق اللاعب بفعل القوى.

  1. في Start()، بعد سطر GetComponent، اضبط rb.linearDamping = accel / topSpeed;، لكي تتباطأ الحركة تدريجيًا بالقرب من topSpeed.
  2. في FixedUpdate()، أنشئ new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).
  3. مرّر حاصل ضرب normalized في accel إلى rb.AddForce باستخدام ForceMode.Acceleration.

اضغط «العب» وانزلق في أنحاء الساحة. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float accel = 18f;
    [SerializeField] private float topSpeed = 6f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // اضبط التخميد، ثم حرّك اللاعب باستخدام مفاتيح الأسهم
    }
}

جميع دروس الفيزياء وأسلوب اللعب

تدرّب بنفسك: Playground لـ Unity