Menu
CoddyTech

רשימות של אובייקטים

חלק מהיחידה יסודות הסקריפטים ב-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.

challenge icon

אתגר

בינוני

הוסף תיבה לרשימה בכל לחיצה.

  1. הוסף using System.Collections.Generic; ואת השדה List<GameObject> boxes = new List<GameObject>();.
  2. בלחיצה, צור מופע של boxPrefab במיקום transform.position + new Vector3(boxes.Count * 1.5f, 0, 0), ללא סיבוב, והוסף אותו אל boxes.
  3. רשום ביומן "Boxes: " + boxes.Count.

לחץ על "שחק" ולחץ שלוש פעמים: שלוש תיבות עומדות בשורה. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: רשימה פרטית מסוג List<GameObject>

    void Update()
    {
        // לחיצה: צור קופסה במרחק של 1.5 יחידות נוספות ימינה עבור כל קופסה ברשימה, הוסף אותה לרשימה ורשום ביומן את מספר הקופסאות
    }
}

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

תרגלו בעצמכם: Unity אונליין