Menu
CoddyTech

حافظ على السرعة

الدرس 3 من 19 في دورة لعبة Unity: كاسر الطوب على Coddy.

لا تتباطأ كرة لعبة Brick Breaker أبدًا. تؤدي مادة الفيزياء PhysicsMaterial معظم العمل: فمعامل الارتداد 1 يحافظ على سرعة الكرة كاملة بعد كل ارتداد، والاحتكاك 0 يمنع الجدران من إبطائها. لا تحتوي الجدران على مادة، ويحسب Unity متوسط قيم المصادمين افتراضيًا: قيمة الكرة 1 وقيمة الجدار 0 تجعل سرعة الكرة بعد الارتداد نصف سرعتها. يتيح bounceCombine = Maximum وfrictionCombine = Minimum اعتماد قيم الكرة نفسها.

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

rb.linearVelocity = rb.linearVelocity.normalized * 7f;

إذا تباطأت الكرة إلى وحدتين في الثانية، فستعود سرعتها إلى 7 في الخطوة التالية.

challenge icon

التحدي

سهل

اجعل الكرة ترتد إلى الأبد بسرعة واحدة.

  1. في Awake() في Ball، أنشئ new PhysicsMaterial("Bouncy") واجعل الارتدادية 1، والاحتكاكين 0، وbounceCombine = PhysicsMaterialCombine.Maximum وfrictionCombine = PhysicsMaterialCombine.Minimum؛ ثم عيّنه إلى GetComponent<Collider>().material.
  2. أضف FixedUpdate(): إذا كانت الكرة قد انطلقت، فاجعل rb.linearVelocity = rb.linearVelocity.normalized * speed;

اضغط «العب» وأطلق الكرة: سترتد عن كل جدار دون أن تتباطأ. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;
    bool launched;

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

    void Update()
    {
        if (launched) return;
        transform.position = paddle.position + Vector3.up * 0.5f;
        if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
    }

    public void Launch(Vector3 direction)
    {
        launched = true;
        rb.linearVelocity = direction.normalized * speed;
    }
}

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

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