Menu
CoddyTech

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

חלק מהיחידה יסודות התכנות ב-Unity במסלול ה-Unity של Coddy. שיעור 51 מתוך 67.

למערך יש אורך קבוע, שנקבע בעת יצירתו. יוצר אובייקטים אינו יודע מראש כמה אובייקטים הוא ייצור, ולכן הוא שומר אותם בתוך 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

אתגר

בינוני

ה-Stacker צריך לעקוב אחר הקופסאות שהוא יוצר:

  • יש לשמור את הקופסאות בשדה פרטי מסוג List<GameObject> בשם boxes.
  • כל לחיצה יוצרת קופסה ללא סיבוב ומוסיפה אותה לרשימה. מיקום הקופסה הוא מיקום ה-Stacker ועוד 1.5 בציר x לכל קופסה שכבר נמצאת ברשימה: הראשונה במיקום ה-Stacker, הבאה 1.5 ימינה ממנה, וכן הלאה.
  • לחיצה על Space מחזירה את הקופסה החדשה ביותר: יש להסתיר אותה באמצעות SetActive(false) ולהסיר אותה מהרשימה. כשאין קופסאות, לחיצה על Space לא עושה דבר.
  • אחרי כל שינוי ברשימה, יש לרשום ביומן Boxes: ואת מספר הקופסאות, לדוגמה Boxes: 3.

לחצו על Play, לחצו ואז הקישו על Space, ולבסוף לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: List<GameObject> פרטית

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

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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