Menu
CoddyTech

Danh sách đối tượng

Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 65 trên 85.

Mảng có độ dài cố định, được xác định khi tạo. Bộ tạo vật thể không biết trước sẽ tạo bao nhiêu đối tượng, nên nó lưu chúng trong List<T>: mảng của C# có thể tăng kích thước. Nó nằm trong System.Collections.Generic, còn T là kiểu của phần tử mà nó chứa. Đài phun nước này ghi nhớ mọi đồng xu nó tạo ra:

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 thêm một phần tử vào cuối danh sách, còn Count cho biết có bao nhiêu phần tử, trong khi mảng dùng Length. Bạn đọc phần tử như với mảng: coins[0] là đồng xu đầu tiên, còn foreach (GameObject c in coins) lần lượt duyệt qua tất cả. coins.Remove(coin) xóa phần tử đó, còn coins.RemoveAt(0) xóa phần tử đầu tiên; các phần tử phía sau nó lùi xuống một vị trí.

Bạn phải tạo chính danh sách bằng new. Một trường được khai báo là List<GameObject> coins; sẽ chứa null, và lần gọi Add đầu tiên sẽ dừng lại với lỗi NullReferenceException.

challenge icon

Thử thách

Trung bình

Mỗi lần nhấp sẽ thêm một hộp vào danh sách.

  1. Thêm using System.Collections.Generic; và trường List<GameObject> boxes = new List<GameObject>();.
  2. Khi nhấp chuột, tạo một hộp tại transform.position + new Vector3(boxes.Count * 1.5f, 0, 0), không xoay hộp và thêm hộp đó vào boxes.
  3. Ghi nhật ký "Boxes: " + boxes.Count.

Nhấn Play rồi nhấp chuột ba lần: ba hộp sẽ xếp thành một hàng. Sau đó nhấn Check.

Tự làm thử

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: một danh sách (list) List<GameObject> riêng tư

    void Update()
    {
        // Nhấp chuột: tạo một hộp, đặt hộp mới lệch sang phải thêm 1.5 cho mỗi hộp trong danh sách, thêm hộp mới vào danh sách rồi ghi số lượng vào nhật ký
    }
}

Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity

Tự luyện tập: Playground Unity