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

المضرب

الدرس 1 من 16 في دورة لعبة Unity: تحطيم الطوب على Coddy.

في هذه الدورة، ستبني لعبة كسر الطوب ثلاثية الأبعاد: مضربًا في الأسفل، وكرة ترتد بين الجدران، وجدارًا من الطوب لتكسيره. يضيف كل درس ميزة واحدة: الطوب، والأرواح، والمستويات، وشاشة انتهاء اللعبة، ومعززات القوة التي توسّع المضرب أو تقسّم الكرة. المشهد جاهز: تنظر الكاميرا إلى ساحة اللعب من الأمام، وتتحرك جميع العناصر في المستوى x وy عند z = 0. أما السكريبتات Paddle وBall وBrick وGameManager وPowerUp فهي هياكل أولية قصيرة في الوقت الحالي.

للمضرب مكوّن Rigidbody حركي، ويُحرَّك باستخدام MovePosition في FixedUpdate، كي ترى الفيزياء حركته وتتمكن ارتدادات الكرة من الاستفادة من ذلك لاحقًا. لا تتوقف الأجسام الحركية أبدًا بفعل المصادمات التي لا تحتوي على Rigidbody، لذا لن تمنعه الجدران الجانبية من الحركة؛ إذ يُبقيه السكريبت داخل الحدود. إن حصر المركز عند الجدار سيُبقي نصف الجسم داخل الجدار، لذا يكون الحد عند الجدار مطروحًا منه نصف حجم الجسم. تعمل عربة المصعد هذه في عمود يمتد من y = 0 إلى y = 12 بالطريقة نفسها على المحور y:

float halfHeight = transform.localScale.y / 2f;
Vector3 target = rb.position + Vector3.up * input * liftSpeed * Time.fixedDeltaTime;
target.y = Mathf.Clamp(target.y, 0f + halfHeight, 12f - halfHeight);
rb.MovePosition(target);

هنا تكون قيمة input هي 1 عند الصعود، و-1 عند النزول، و0 فيما عدا ذلك. تبقى عربة ارتفاعها وحدتان ومركزها بين 1 و11، لذا تتوقف نهايتاها تمامًا عند 0 و12. يكون طول كل ضلع في العنصر البدائي Cube وحدة واحدة، لذا تمثل localScale.y ارتفاع العربة، وقراءتها في كل خطوة تُبقي الحدود صحيحة إذا تغيّر الحجم أثناء تشغيل اللعبة.

challenge icon

التحدي

سهل

اكتب حركة المضرب في FixedUpdate() الخاصة بـ Paddle:

  1. أنشئ float input: تكون القيمة -1 عند الضغط على السهم الأيسر أو A، و1 عند الضغط على السهم الأيمن أو D، و0 خلاف ذلك.
  2. احسب الموضع المستهدف: موضع Rigidbody بعد تحريكه إلى اليمين بمقدار input * speed * Time.fixedDeltaTime.
  3. قيّد قيمة x للموضع المستهدف بحيث تتوقف نهايتا المضرب عند الوجهين الداخليين للجدارين، -wallX وwallX. عرض المضرب هو transform.localScale.x.
  4. حرّكه إلى هناك باستخدام rb.MovePosition.

اضغط Play، وحرّك المضرب حتى يلامس كلا الجدارين، ثم اضغط Check.

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // تقع الأوجه الداخلية للجدارين الجانبيين عند -wallX وwallX

    Rigidbody rb;

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

    void FixedUpdate()
    {
        // تحرّك باستخدام مفاتيح الأسهم أو A وD، وابقَ بين الجدارين.
    }
}
quiz iconاختبر نفسك

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

جميع دروس لعبة Unity: تحطيم الطوب