الإطلاق
الدرس 2 من 16 في دورة لعبة Unity: تحطيم الطوب على Coddy.
تنتظر الكرة على المضرب حتى يطلقها اللاعب. وحتى ذلك الحين، يضعها البرنامج النصي فوق المضرب في كل إطار، لذا تتحرك أينما تحرك المضرب، ويتذكر bool ما إذا كان قد تم إطلاقها. يضبط الإطلاق linearVelocity الخاص بـ Rigidbody مرة واحدة. تكون الجاذبية معطّلة في Rigidbody الخاص بالكرة، لذا تواصل الكرة منذ ذلك الحين التحليق في خط مستقيم بهذه السرعة حتى تصطدم بشيء ما.
يعمل طُعم الصيد العائم بالطريقة نفسها: يتدلى أسفل طرف القصبة حتى رمي الخيط.
bool cast;
void Update()
{
if (cast) return;
transform.position = rodTip.position + Vector3.down * 1.5f;
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
cast = true;
rb.linearVelocity = new Vector3(4f, 3f, 0f);
}
}تكون قيمة wasPressedThisFrame صحيحة فقط في الإطار الذي يُضغط فيه المفتاح، لذا تُقرأ في Update()، التي تعمل مرة واحدة في كل إطار. يتحرك الطُعم بسرعة تساوي طول المتجه (4, 3, 0)، أي 5 وحدات في الثانية. لإطلاقه بسرعة محددة تمامًا في أي اتجاه، اجعل طول الاتجاه وحدة واحدة باستخدام .normalized، ثم اضربه في السرعة.
التحدي
سهلفي Ball:
- أضف
bool launched. - اكتب
public void Launch(Vector3 direction): تضبطlaunchedعلى true، وتضبطlinearVelocityلـRigidbody على الاتجاه بعد تطبيعه ليصبح طوله وحدة واحدة، مضروبًا فيspeed. - أضف
Update(). ما دامت الكرة لم تُطلَق، ضعها على ارتفاع 0.5 وحدة فوق موضع المضرب، وعند الضغط على Space استدعِLaunch(new Vector3(0.3f, 1f, 0f)).
لا ترتد الكرة بعد، لذا تتوقف تمامًا عند أول جدار تصطدم به: يعالج الدرس التالي ذلك.
اضغط Play، وحرّك المضرب، وأطلِق الكرة، ثم اضغط Check.
جرّب بنفسك
using UnityEngine;
using UnityEngine.InputSystem;
public class Ball : MonoBehaviour
{
public Transform paddle;
public float speed = 9f;
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
// التالي: تبقى الكرة على المضرب حتى يطلقها Space.
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.