واجه الاتجاه الذي تتحرك فيه
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 44 من 71.
يحتاج transform.LookAt إلى نقطة لينظر إليها. غالبًا ما يكون لديك بدلًا من ذلك اتجاه: سرعة، أو الرياح، أو الطريقة التي تحرك بها شيء ما. تُرجع Quaternion.LookRotation(direction) الدوران الذي يشير فيه الأمام (السهم الأزرق للمحور z) على امتداد ذلك الاتجاه، مع إبقاء أعلى الجسم متجهًا نحو أعلى العالم. يشير السهم المنطلق في الهواء إلى أعلى في البداية، ثم يميل مع سقوطه، لأن سرعته تفعل ذلك:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (rb.linearVelocity != Vector3.zero)
{
transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
}
}الاتجاه وحده هو ما يهم، وليس المقدار: يعطي (1, 0, 2) و(3, 0, 6) الدوران نفسه. ليس للمتجه الصفري اتجاه، لذا فإن LookRotation(Vector3.zero) يسجل Look rotation viewing vector is zero ويُرجع Quaternion.identity، ما يجعل الجسم يستدير فجأة ليواجه +z. لهذا يتحقق السهم من ذلك أولًا: عندما يتوقف، يحافظ على اتجاهه السابق. يعطي LookAt(target.position) الدوران نفسه الذي يعطيه LookRotation(target.position - transform.position).
يميل الجزء الصاعد أو الهابط من الاتجاه بالأمام إلى أعلى أو أسفل معه. ولجسم يجب أن يبقى منتصبًا، مثل شخص يمشي صعودًا على منحدر، اجعل y في الاتجاه يساوي 0 أولًا، لكي يستدير الجسم حول y فقط. وتحدد الوسيطة الثانية، LookRotation(direction, Vector3.up)، الاتجاه الذي يُعدّ إلى أعلى؛ أما Vector3.up فهو ما تحصل عليه عند عدم تحديدها.
التحدي
متوسطاجعل النحلة تواجه الاتجاه الذي تطير فيه، مع إبقائها مستقيمة.
- في
LateUpdate()، عيّنVector3 direction = transform.position - lastPosition;وdirection.y = 0;. - فقط عندما يكون
direction != Vector3.zero، عيّنtransform.rotation = Quaternion.LookRotation(direction);، حتى تحافظ النحلة الساكنة على اتجاه مواجهتها. - أخيرًا، خزّن
transform.positionفيlastPosition.
اضغط «العب»: ستدور النحلة باتجاه كل زهرة تطير إليها. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// اجعل النحلة تتجه نحو الاتجاه الذي تحركت فيه منذ الإطار السابق.
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity