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

واجه الاتجاه الذي تتحرك فيه

جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 42 من 63.

يحتاج 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 هو ما تحصل عليه عند عدم تحديدها.

challenge icon

التحدي

متوسط

تطير النحلة من زهرة إلى زهرة. يُحرّكها سكربت Mover الجاهز بخطوط مستقيمة، صعودًا أو هبوطًا أثناء الطريق، ويجعلها تستريح ثانية واحدة على كل زهرة؛ اترك Mover كما هو. اكتب FaceMotion بحيث تواجه النحلة الاتجاه الذي تطير فيه:

  • تواجه الاتجاه الذي تحركت فيه منذ الإطار السابق، عند النظر إليها من الأعلى.
  • تبقى منتصبة: لا يرتفع أنفها ولا ينخفض أثناء صعودها أو هبوطها.
  • أثناء استراحتها، تحافظ على اتجاهها، ولا يُسجَّل أي شيء.

يوضع الكود في LateUpdate()، لذلك يكون Mover قد حرّك النحلة بالفعل في هذا الإطار. اضغط Play، ثم Check.

جرّب بنفسك

using UnityEngine;

public class FaceMotion : MonoBehaviour
{
    Vector3 lastPosition;

    void Start()
    {
        lastPosition = transform.position;
    }

    void LateUpdate()
    {
        // اجعل الوجه يتجه في الاتجاه الذي تحركت فيه النحلة منذ الإطار السابق.
    }
}
quiz iconاختبر نفسك

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

جميع دروس الفيزياء وأسلوب اللعب