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.
Wyzwanie
ŚredniSpraw, aby każde kliknięcie dodawało pudełko do listy.
- Dodaj
using System.Collections.Generic;oraz poleList<GameObject> boxes = new List<GameObject>();. - Po kliknięciu utwórz
boxPrefabw miejscutransform.position + new Vector3(boxes.Count * 1.5f, 0, 0), bez obrotu, i dodaj je doboxes. - 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
1Podstawy C# w Unity
Witaj, UnityZmienneLiczby dziesiętne wymagają fTekst w konsoliZmienne, które pamiętająIf i elsePorównywanie liczbPowtórka: Zbieracz monet4Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski z nazwamiPrzyciski myszyPowtórka: naładowany skok7Pętle i metody
Powtarzaj za pomocą forPętle wewnątrz pętliNapisz metodęMetody, które zwracają wynikTablicePowtórka: schody10Wyszukiwanie obiektów
Wyszukiwanie po nazwieTagiWyszukiwanie po typieReferencje lepsze niż wyszukiwanieNull w UnityPowtórka: najbliższa moneta13Projekt: Unikaj bloków
BiegaczBloki z nieba2Wpraw to w ruch
Umieść sześcianPoruszaj w każdej klatceObracaj co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian5Wektory
Dodawanie wektorówKierunkiPrzestrzeń lokalna i globalnaPrędkość po przekątnejOdległość między obiektamiVector3 to strukturaPodsumowanie: pilot drona8Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePowtórka: włącznik światła11Prefaby i tworzenie obiektów
Prefaby i InstantiateTworzenie obiektów według timeraTworzenie obiektów w siatceListy obiektówCofnij najnowszyNiszczenieLosowe tworzenie obiektówPowtórka: fajerwerkiPoćwicz samodzielnie: Edytor online Unity