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()
    {
        // Click: أنشئ صندوقًا، وضعه على بُعد 1.5 إضافية إلى اليمين لكل صندوق في القائمة، ثم أضفه وسجّل العدد
    }
}

جميع دروس أساسيات البرمجة النصية في Unity

تدرّب بنفسك: Playground لـ Unity