Menu
CoddyTech

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

جزء من قسم الفيزياء وأسلوب اللعب في رحلة 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 فهو ما تحصل عليه عند عدم تحديدها.

challenge icon

التحدي

متوسط

اجعل النحلة تواجه الاتجاه الذي تطير فيه، مع إبقائها مستقيمة.

  1. في LateUpdate()، عيّن Vector3 direction = transform.position - lastPosition; وdirection.y = 0;.
  2. فقط عندما يكون direction != Vector3.zero، عيّن transform.rotation = Quaternion.LookRotation(direction);، حتى تحافظ النحلة الساكنة على اتجاه مواجهتها.
  3. أخيرًا، خزّن transform.position في lastPosition.

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

جرّب بنفسك

using UnityEngine;

public class FaceMotion : MonoBehaviour
{
    Vector3 lastPosition;

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

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

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

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