Menu
CoddyTech

Update ו-LateUpdate

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

בכל פריים Unity קוראת ל-Update() בכל אחד מהסקריפטים, ורק אחרי שכולם מסיימים היא קוראת ל-LateUpdate() בכל אחד מהסקריפטים. הסדר שבו נקראת Update() של כל אובייקט אינו בשליטתך.

הדבר חשוב בכל מה שתלוי במשהו אחר. מצלמה שמעתיקה את המיקום של השחקן ב-Update() עשויה לפעול לפני שהקריאה ל-Update() של השחקן עצמה הזיזה אותו, ואז היא מעתיקה את המיקום שבו השחקן היה לפני פריים אחד: המצלמה משתרכת צעד אחד מאחור, והשאלה אם זה קורה עשויה להשתנות כשמוסיפים אובייקטים או טוענים מחדש את הסצנה. ב-LateUpdate() ההעתקה מתבצעת תמיד אחרי שהשחקן זז:

public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);

void LateUpdate()
{
    transform.position = player.position + offset;
}

הכלל: הזיזו דברים ב-Update(), ושימו קוד שמגיב למיקום הסופי של דברים, כמו מצלמות, תוויות וכיוון לכיוון מטרה, ב-LateUpdate(). שניהם רצים פעם אחת בכל פריים, ו-Time.deltaTime פירושו אותו הדבר בשניהם.

challenge icon

אתגר

בינוני

השחקן ותג השם שלו מריצים שניהם את הסקריפט Mover. אצל Player, הערך של target ריק, ולכן החצים מזיזים אותו. אצל NameTag, הערך של target הוא השחקן, ולכן התג נמצא offset מעליו.

לחץ על Play והחזק חץ: התג מפגר אחרי השחקן. כאן Update() של התג רץ קודם ומעתיק את המיקום שבו השחקן היה לפני פריים אחד. תקן זאת כך שהתג יהיה בדיוק מעל השחקן בכל פריים, והשאר את תנועת החצים בתוך Update(). לאחר מכן לחץ על Check.

נסו בעצמכם

using UnityEngine;

public class Mover : MonoBehaviour
{
    public Transform target;
    public Vector3 offset;
    public float speed = 4f;

    void Update()
    {
        if (target != null)
        {
            transform.position = target.position + offset;
        }
        else
        {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
            }
        }
    }
}
quiz iconבחנו את עצמכם

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

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