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.
Wyzwanie
ŚredniStacker powinien śledzić tworzone przez siebie pudełka:
- Przechowuj pudełka w prywatnym polu
List<GameObject>o nazwieboxes. - 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ładBoxes: 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
}
}
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
1Twój pierwszy skrypt
Witaj, UnityUmieść sześcianPoruszaj się w każdej klatceObracaj się co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian2Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPodsumowanie: Winda5Transformacje i hierarchia
Rodzice i dzieciSkalaPatrz na obiektyPoruszanie się w kierunku punktuPodsumowanie: Księżyc krążący po orbicie3Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski o nazwachPrzyciski myszyPowtórka: naładowany skok6Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePodsumowanie: włącznik światła9Prefabrykaty i tworzenie obiektów
Prefabrykaty i InstantiateTworzenie obiektów według timeraTworzenie obiektów w siatceListy obiektówNiszczenie obiektówLosowe tworzenie obiektówPowtórka: fajerwerki