רשימות של אובייקטים
חלק מהיחידה יסודות התכנות ב-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.
אתגר
בינוניה-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: " ואת מספר התיבות
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות התכנות ב-Unity
1הסקריפט הראשון שלך
שלום, Unityהצב את הקובייהזוז בכל פרייםהסתובב בכל שנייהנווט בעזרת המקשיםסיכום: נהג בקובייה4וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן10מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: מתעד מחזור החיים6אובייקטי משחק ורכיבים
הפניות ב-Inspectorקבלת רכיברכיבים חסריםהוספת רכיבRequireComponentהצגה והסתרהסיכום: מתג תאורה9תבניות ומופעים
תבניות ויצירת מופעיםהופעה לפי טיימרהופעה ברשתרשימות של אובייקטיםהשמדההופעות אקראיותסיכום: זיקוקים