Menu
CoddyTech

Listy obiektów

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

Tablica ma stałą długość, ustaloną w chwili jej utworzenia. Generator nie wie z góry, ile obiektów utworzy, więc przechowuje je w List<T>: tablicy C#, która się powiększa. Znajduje się ona w System.Collections.Generic, a T to typ przechowywanych w niej 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ę; w przypadku tablicy używa się Length. Odczyt działa tak 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 w dół.

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

Spraw, aby każde kliknięcie dodawało pudełko do listy.

  1. Dodaj using System.Collections.Generic; oraz pole List<GameObject> boxes = new List<GameObject>();.
  2. Po kliknięciu utwórz boxPrefab w miejscu transform.position + new Vector3(boxes.Count * 1.5f, 0, 0), bez obrotu, i dodaj je do boxes.
  3. Zapisz w logu "Boxes: " + boxes.Count.

Naciśnij „Graj” i kliknij trzy razy: trzy pudełka ustawią się w rzędzie. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

    void Update()
    {
        // Kliknięcie: utwórz pudełko, przesuwając je o 1.5 dalej w prawo za każde pudełko na liście, dodaj je do listy i wypisz liczbę pudełek w logu
    }
}

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity