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), מציין איזה כיוון הוא מעלה; זה הכיוון שמתקבל כברירת מחדל אם לא מציינים אותו.

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()
    {
        // פנה לכיוון שאליו הדבורה נעה מאז הפריים הקודם.
    }
}

כל השיעורים ביחידה פיזיקה ומשחקיות

תרגלו בעצמכם: Unity אונליין