Menu
CoddyTech

לנוע לעבר נקודה

חלק מהיחידה יסודות התכנות ב-Unity במסלול ה-Unity של Coddy. שיעור 27 מתוך 67.

Vector3.MoveTowards(current, target, maxStep) מחזירה נקודה שקרובה יותר ל-target במרחק של עד maxStep. כשהמטרה קרובה יותר מכך, היא מחזירה את המטרה עצמה, ולכן לעולם אינה חורגת ממנה. כשמשתמשים ב-speed * Time.deltaTime כצעד, אובייקט נע במהירות קבועה ועוצר בדיוק על המטרה. רכבל זה גולש לתחנה שלו במהירות של 2 יחידות לשנייה:

public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;

void Update()
{
    transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}

לאחר שהוא מגיע, כל קריאה מאוחרת יותר מחזירה שוב את station, ולכן הרכבל נשאר במקומו, והביטוי transform.position == station הוא true. עבור מספר יחיד, Mathf.MoveTowards פועלת באותו אופן.

Vector3.Lerp(a, b, t) היא הנקודה שנמצאת במרחק של חלק t מהדרך מ-a ל-b: כאשר t = 0.5 היא נמצאת באמצע הדרך. כאשר כותבים Lerp(transform.position, station, 2f * Time.deltaTime) בתוך Update(), היא עוברת בכל פריים חלק מהמרחק הנותר: מהר בהתחלה, ואז לאט יותר ויותר ככל שמתקרבים לסוף, ומתקרבת בהדרגה במקום להגיע במהירות קבועה. השתמשו ב-MoveTowards כשאובייקט חייב לנוע במהירות קבועה ולעצור בדיוק; השתמשו בדפוס Lerp הזה להאטה הדרגתית.

challenge icon

אתגר

בינוני

הרחפן ממתין באוויר עד שתלחץ על Space. מרגע זה הוא טס בקו ישר אל pad, מיקום משטח הנחיתה, במהירות של speed יחידות לשנייה, ונוחת עליו בדיוק. כשהוא נוחת, הוא רושם Landed פעם אחת, ולא שוב בכל פריים לאחר מכן.

לחץ על הפעל, לחץ על Space, ואז לחץ על בדוק.

נסו בעצמכם

using UnityEngine;

public class Drone : MonoBehaviour
{
    public Vector3 pad = new Vector3(0, 0.25f, 0);
    public float speed = 2f;

    void Update()
    {
        // אחרי Space: טוס אל pad במהירות speed, ורשום Landed פעם אחת עם ההגעה
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה יסודות התכנות ב-Unity