Menu
CoddyTech

Listy obiektów

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 51 z 67.

Tablica ma stałą długość, ustalaną w chwili jej utworzenia. Spawner nie wie z góry, ile obiektów utworzy, więc przechowuje je w List<T>: tablicy w C#, która może rosnąć. Znajduje się ona w System.Collections.Generic, a T to typ przechowywanych elementów. Ta fontanna zapamiętuje każdą utworzoną monetę:

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 dodaje element na końcu, a Count podaje ich liczbę, podczas gdy w przypadku tablicy służy do tego Length. Odczyt działa tak samo jak w przypadku tablicy: coins[0] to pierwsza moneta, a foreach (GameObject c in coins) odwiedza je wszystkie. coins.Remove(coin) usuwa ten element, a coins.RemoveAt(0) usuwa pierwszy; elementy znajdujące się za nim przesuwają się o jedno miejsce.

Sama lista musi zostać utworzona za pomocą new. Pole zapisane jako List<GameObject> coins; przechowuje null, a pierwsze wywołanie Add kończy się wyjątkiem NullReferenceException.

challenge icon

Wyzwanie

Średni

Stacker powinien śledzić tworzone przez siebie pudełka:

  • Przechowuj pudełka w prywatnym polu List<GameObject> o nazwie boxes.
  • Każde kliknięcie tworzy pudełko bez obrotu i dodaje je do listy. Pudełko pojawia się w pozycji obiektu Stacker, przesuniętej o 1.5 wzdłuż osi x za każde pudełko już znajdujące się na liście: pierwsze przy obiekcie Stacker, następne 1.5 na prawo od niego i tak dalej.
  • Spacja usuwa najnowsze pudełko: ukryj je za pomocą SetActive(false) i usuń z listy. Jeśli nie ma pudełek, naciśnięcie Spacji nic nie robi.
  • Po każdej zmianie listy wyświetl w logu Boxes: i liczbę pudełek, na przykład Boxes: 3.

Naciśnij Play, kliknij i naciśnij Spację, a następnie Check.

Spróbuj swoich sił

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: prywatna lista List<GameObject>

    void Update()
    {
        // Click: utwórz pudełko, przesuwając je o 1.5 dalej w prawo za każde pudełko na liście, i dodaj je do listy
        // Space: ukryj najnowsze pudełko i usuń je z listy
        // Po każdej zmianie wypisz w logu "Boxes: " oraz liczbę pudełek
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy skryptów w Unity