Vector3 הוא מבנה נתונים
חלק מהיחידה יסודות התכנות ב-Unity במסלול ה-Unity של Coddy. שיעור 22 מתוך 67.
Vector3 הוא struct, סוג של טיפוס שלא נלמד במסלול C#. struct הוא ערך, כמו int: כשמקצים אותו, נוצרת העתקה שלו בשלמותו. אחרי Vector3 b = a; b.x = 9;, הערך של a.x לא משתנה, כי b הוא עותק נפרד. (מחלקה פועלת אחרת: שני משתנים יכולים להפנות לאותו אובייקט משותף.)
transform.position היא מאפיין, וקריאה שלו מחזירה לך עותק של המיקום. לכן transform.position.x = 0; ישנה עותק שנזרק מיד, ו-C# מסרבת לקמפל אותו: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. הפתרון הוא להעתיק את המיקום, לשנות את העותק ולהקצות אותו בחזרה. הרץ הזה חוזר לנתיב האמצעי כשלוחצים על Space:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // העתק
p.x = 0; // שנה את העותק
transform.position = p; // הקצה אותו בחזרה
}אם משמיטים את השורה האחרונה, הקוד מתקמפל, אבל שום דבר לא זז: רק העותק השתנה. transform.localScale ושאר המאפיינים מסוג Vector3 פועלים באותו אופן.
אתגר
קלהמזחלת נופלת במהירות של fall יחידות לשנייה, והחצים מחליקים אותה לאורך ציר x. שתי שורות אמורות להשאיר אותה על הרצפה (y לעולם לא נמוך מ־0.5) ובין הקירות (x מ־-4 עד 4), אבל הסקריפט לא מתקמפל.
לחץ על Play כדי לראות את השגיאות. תקן את שתי השורות על ידי עבודה עם עותק של המיקום, תוך שמירה על מה שהן עושות, ואז לחץ על Check.
נסו בעצמכם
using UnityEngine;
public class Sled : MonoBehaviour
{
public float speed = 4f;
public float fall = 3f;
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
transform.position += new Vector3(h * speed, -fall, 0) * Time.deltaTime;
// השאר את המזחלת על הרצפה ובין הקירות.
transform.position.y = Mathf.Max(transform.position.y, 0.5f);
transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות התכנות ב-Unity
1הסקריפט הראשון שלך
שלום, Unityהצב את הקובייהזוז בכל פרייםהסתובב בכל שנייהנווט בעזרת המקשיםסיכום: נהג בקובייה4וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן10מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: מתעד מחזור החיים