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 פירושו אותו הדבר בשניהם.
אתגר
בינוניהשחקן ותג השם שלו מריצים שניהם את הסקריפט 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);
}
}
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות התכנות ב-Unity
1הסקריפט הראשון שלך
שלום, Unityהצב את הקובייהזוז בכל פרייםהסתובב בכל שנייהנווט בעזרת המקשיםסיכום: נהג בקובייה4וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן10מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: מתעד מחזור החיים