Menu
CoddyTech

הסתובב בצורה חלקה

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 45 מתוך 71.

הגדרה ישירה של transform.rotation לסיבוב חדש מסובבת אובייקט בתוך פריים יחיד. Quaternion.RotateTowards(current, goal, maxDegrees) מחזירה את current כשהוא מסובב לכיוון goal בזווית שאינה עולה על maxDegrees, ולעולם לא מעבר ליעד. כשמשתמשים ב-turnSpeed * Time.deltaTime כצעד, האובייקט מסתובב בקצב קבוע ועוצר בדיוק ביעד שלו, בדומה לפעולה של MoveTowards עבור מיקומים. החמנייה הזאת עוקבת אחר השמש בקצב של 30 מעלות לשנייה:

public Transform sun;
public float turnSpeed = 30f;

void Update()
{
    Quaternion goal = Quaternion.LookRotation(sun.position - transform.position);
    transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);
}

כשמרחק השמש הוא 90 מעלות, לחמנייה נדרשות 3 שניות, 30 מעלות בכל פעם. היא מסתובבת בדרך הקצרה, והיעד מחושב מחדש בכל פריים, כך שהיא עוקבת אחר שמש נעה.

Quaternion.Slerp(a, b, t) הוא הסיבוב שנמצא במרחק יחסי t לאורך הדרך מ-a ל-b, כפי ש-Vector3.Lerp פועלת עבור נקודות. כשכותבים Slerp(transform.rotation, goal, 5f * Time.deltaTime) בתוך Update(), האובייקט מסתובב בכל פריים בחלק מהזווית הנותרת: מהר בהתחלה, ולאט יותר ויותר ככל שמתקרבים ליעד, בלי קצב קבוע ולעולם בלי להגיע אליו לגמרי. ההאטה הזאת מתאימה למצלמה או לראש שמסתובב. כשקצב הסיבוב הוא כלל במשחק, למשל תותח שמסתובב 60 מעלות בשנייה, השתמשו ב-RotateTowards.

challenge icon

אתגר

בינוני

גרמו לינשוף להסתובב בצורה חלקה לכיוון שאליו מצביע כל חץ.

  1. הוסיפו Quaternion goal; והגדירו אותו ל-transform.rotation בתוך Start().
  2. בעת Input.GetKeyDown של כל חץ, הגדירו את goal, לדוגמה goal = Quaternion.LookRotation(Vector3.right);: למעלה +z, ימינה +x, למטה -z, שמאלה -x.
  3. בכל פריים, הגדירו transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);.

לחצו על "שחק" ולחצו על החצים. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class Owl : MonoBehaviour
{
    public float turnSpeed = 180f;

    void Update()
    {
        // למעלה, ימינה, למטה, שמאלה: הסתובב כדי לפנות לכיוונים +z, +x, -z, -x במהירות של turnSpeed מעלות לשנייה.
    }
}

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

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