רשימות של אובייקטים
חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 65 מתוך 85.
למערך יש אורך קבוע, שנקבע בעת יצירתו. מחולל לא יודע מראש כמה אובייקטים הוא ייצור, ולכן הוא שומר אותם בתוך List<T>: מערך של C# שיכול לגדול. הוא נמצא בתוך System.Collections.Generic, ו-T הוא סוג הפריט שהוא מכיל. המזרקה הזאת זוכרת כל מטבע שהיא יוצרת:
using System.Collections.Generic;
using UnityEngine;
public class CoinFountain : MonoBehaviour
{
public GameObject coinPrefab;
List<GameObject> coins = new List<GameObject>();
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject coin = Instantiate(coinPrefab, transform.position, Quaternion.identity);
coins.Add(coin);
Debug.Log(coins.Count + " coins");
}
}
}Add מוסיפה פריט לסוף, ו-Count מציינת כמה פריטים יש, בעוד שלמערך יש Length. הקריאה לפריטים פועלת כמו במערך: coins[0] הוא המטבע הראשון, ו-foreach (GameObject c in coins) עוברת על כולם. coins.Remove(coin) מסירה את הפריט הזה, ו-coins.RemoveAt(0) מסירה את הראשון; הפריטים שאחריו זזים מקום אחד קדימה.
צריך ליצור את הרשימה עצמה באמצעות new. שדה שמוגדר כך: List<GameObject> coins; מכיל null, והקריאה הראשונה ל-Add נעצרת עם NullReferenceException.
אתגר
בינוניהוסף תיבה לרשימה בכל לחיצה.
- הוסף
using System.Collections.Generic;ואת השדהList<GameObject> boxes = new List<GameObject>();. - בלחיצה, צור מופע של
boxPrefabבמיקוםtransform.position + new Vector3(boxes.Count * 1.5f, 0, 0), ללא סיבוב, והוסף אותו אלboxes. - רשום ביומן
"Boxes: " + boxes.Count.
לחץ על "שחק" ולחץ שלוש פעמים: שלוש תיבות עומדות בשורה. לאחר מכן לחץ על "בדיקה".
נסו בעצמכם
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes: רשימה פרטית מסוג List<GameObject>
void Update()
{
// לחיצה: צור קופסה במרחק של 1.5 יחידות נוספות ימינה עבור כל קופסה ברשימה, הוסף אותה לרשימה ורשום ביומן את מספר הקופסאות
}
}
כל השיעורים ביחידה יסודות הסקריפטים ב-Unity
1יסודות C# ב-Unity
שלום, Unityמשתניםמספרים עשרוניים צריכים fטקסט ב-Consoleמשתנים ששומרים ערכיםאם ואחרתהשוואת מספריםחזרה: אוסף המטבעות5וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן8אובייקטי משחק ורכיבים
הפניות ב-Inspectorקבלת רכיברכיבים חסריםהוספת רכיבRequireComponentהצגה והסתרהחזרה: מתג תאורה11פריפאבים ויצירת מופעים
פריפאבים ויצירת מופעיםיצירה לפי טיימריצירה ברשתרשימות של אובייקטיםהסרת האחרון שנוצרהשמדהיצירות אקראיותסיכום: זיקוקים6טרנספורמציות והיררכיה
הורים וילדיםלהניף את הדגלקנה מידהלהסתכל על דבריםלנוע לעבר נקודהסיכום: הירח המקיף12מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: יומן מחזור החייםתרגלו בעצמכם: Unity אונליין