Vector3 הוא מבנה נתונים
חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 29 מתוך 85.
Vector3 הוא 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. הפתרון הוא להעתיק את המיקום, לשנות את העותק ולהשיב אותו למאפיין. הדמות הזו חוזרת לנתיב האמצעי כשלוחצים על מקש הרווח:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // צור עותק
p.x = 0; // שנה את העותק
transform.position = p; // הקצה אותו בחזרה
}אם משמיטים את השורה האחרונה, הקוד מתקמפל, אבל שום דבר לא זז: רק העותק השתנה. transform.localScale ושאר המאפיינים מסוג Vector3 פועלים באותו אופן.
אתגר
קלתקנו את הסקריפט של המזחלת כדי שיתקמפל, כך שהיא תישאר על הרצפה ובין הקירות.
- החליפו את שתי השורות שמגדירות את
transform.position.yואת.xבעותק:Vector3 p = transform.position;. - הגדירו
p.y = Mathf.Max(p.y, 0.5f);וגםp.x = Mathf.Clamp(p.x, -4f, 4f);, ואזtransform.position = p;.
לחצו על "שחק": המזחלת נוחתת על הרצפה והקירות עוצרים אותה. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
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יסודות C# ב-Unity
שלום, Unityמשתניםמספרים עשרוניים צריכים fטקסט ב-Consoleמשתנים ששומרים ערכיםאם ואחרתהשוואת מספריםחזרה: אוסף המטבעות5וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן8אובייקטי משחק ורכיבים
הפניות ב-Inspectorקבלת רכיברכיבים חסריםהוספת רכיבRequireComponentהצגה והסתרהחזרה: מתג תאורה6טרנספורמציות והיררכיה
הורים וילדיםלהניף את הדגלקנה מידהלהסתכל על דבריםלנוע לעבר נקודהסיכום: הירח המקיף12מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: יומן מחזור החייםתרגלו בעצמכם: Unity אונליין