Menu
CoddyTech

פנה לכיוון שבו אתה נע

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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