פנה לכיוון שבו אתה נע
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-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.
אתגר
בינוניהדבורה עפה מפרח לפרח. הסקריפט המוכן Mover מטיס אותה בקווים ישרים, תוך כדי טיפוס או צלילה, ומשאיר אותה במנוחה למשך שנייה אחת על כל פרח; השאר את Mover כפי שהוא. כתוב את FaceMotion כך שהדבורה תפנה לכיוון התעופה שלה:
- היא פונה לכיוון שבו היא נעה מאז הפריים הקודם, במבט מלמעלה.
- היא נשארת זקופה: האף אינו מופנה למעלה או למטה כשהיא מטפסת או צוללת.
- בזמן שהיא במנוחה, היא ממשיכה לפנות לכיוון שאליו פנתה, ולא נרשם שום דבר.
הקוד נכנס ל־LateUpdate(), כך ש־Mover כבר הזיז את הדבורה בפריים הזה. לחץ על Play, ואז על Check.
נסו בעצמכם
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// פנה לכיוון שבו הדבורה נעה מאז הפריים הקודם.
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף