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

الساحة

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

يبني هذا الفصل لعبة Arena Escape. تتفادى الصيادين في ساحة مسوّرة بينما تتدفق موجات منهم، وتنتهي الجولة بعد ثلاث إصابات، وما إن تنتهي الموجة الأخيرة حتى يُفتح مخرج. تتكون اللعبة من خمسة scripts موجودة في المشروع منذ البداية: 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 الكتلة، لذا تتسارع المزلجة الثقيلة تمامًا مثل الخفيفة. لهيكل المزلجة PhysicsMaterial عديم الاحتكاك: فلو أضيف احتكاك الأرضية إلى التخميد، لكانت سرعتها القصوى أقل.

challenge icon

التحدي

متوسط

ابدأ Arena Escape باللاعب. يحدّد Inspector للبرنامج النصي Player القيمة accel (18) وtopSpeed (6). كتلة اللاعب 2، وله مادة عديمة الاحتكاك، وتظل البرامج النصية الأربعة الأخرى فارغة في الوقت الحالي.

  • في Start، اضبط linearDamping الخاص بـ Rigidbody على accel / topSpeed، بحيث تستقر سرعة اللاعب عند نحو topSpeed.
  • في كل خطوة فيزيائية، ادفع اللاعب باستخدام الأسهم: اليسار واليمين على طول x، والأعلى والأسفل على طول z، باستخدام ForceMode.Acceleration وتسارع مقداره accel.
  • طبّع اتجاه الأسهم، بحيث لا تكون الحركة القطرية أسرع من الحركة في خط مستقيم.

اضغط على Play وتحرك في الساحة، ثم اضغط على Check.

جرّب بنفسك

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()
    {
        // اضبط التخميد، ثم حرّك اللاعب باستخدام مفاتيح الأسهم
    }
}
quiz iconاختبر نفسك

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

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