حافظ على السرعة
الدرس 3 من 19 في دورة لعبة Unity: كاسر الطوب على Coddy.
لا تتباطأ كرة لعبة Brick Breaker أبدًا. تؤدي مادة الفيزياء PhysicsMaterial معظم العمل: فمعامل الارتداد 1 يحافظ على سرعة الكرة كاملة بعد كل ارتداد، والاحتكاك 0 يمنع الجدران من إبطائها. لا تحتوي الجدران على مادة، ويحسب Unity متوسط قيم المصادمين افتراضيًا: قيمة الكرة 1 وقيمة الجدار 0 تجعل سرعة الكرة بعد الارتداد نصف سرعتها. يتيح bounceCombine = Maximum وfrictionCombine = Minimum اعتماد قيم الكرة نفسها.
مع ذلك، لا تزال الفيزياء غير دقيقة تمامًا: فالمضرب المتحرك يضيف سرعته، وتتراكم الأخطاء الصغيرة على مدى مئات الارتدادات. لذلك، في كل خطوة فيزيائية، تحافظ الكرة على اتجاهها وتُضبط سرعتها من جديد:
rb.linearVelocity = rb.linearVelocity.normalized * 7f;إذا تباطأت الكرة إلى وحدتين في الثانية، فستعود سرعتها إلى 7 في الخطوة التالية.
التحدي
سهلاجعل الكرة ترتد إلى الأبد بسرعة واحدة.
- في
Awake()فيBall، أنشئnew PhysicsMaterial("Bouncy")واجعل الارتدادية 1، والاحتكاكين 0، وbounceCombine = PhysicsMaterialCombine.MaximumوfrictionCombine = PhysicsMaterialCombine.Minimum؛ ثم عيّنه إلىGetComponent<Collider>().material. - أضف
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