Niszczenie
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 67 z 85.
Destroy(obj) usuwa GameObject ze sceny wraz z jego dziećmi. Drugi argument pozwala opóźnić usunięcie: Destroy(obj, 2f) usuwa obiekt za 2 sekundy, a skrypt, który wywołał tę funkcję, działa dalej od razu. To działo strzela po naciśnięciu spacji, a każda wystrzelona przez nie kula znika 2 sekundy później:
public GameObject bulletPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
Destroy(bullet, 2f);
}
}Przekaż kopię, a nie prefabrykat: Destroy(bulletPrefab) zostanie odrzucone z komunikatem Destroying assets is not permitted to avoid data loss. Przekaż też GameObject, jeśli chodzi ci o obiekt. Wewnątrz skryptu gameObject oznacza obiekt, na którym znajduje się skrypt, więc Destroy(gameObject) usuwa ten obiekt, a Destroy(this) usuwa tylko skrypt i pozostawia obiekt na miejscu.
Usunięcie nigdy nie następuje natychmiast. Unity usuwa obiekt na końcu bieżącej klatki, po wywołaniach Update() i LateUpdate() w tej klatce, więc linie kodu po Destroy nadal się wykonują, a obiekt można znaleźć do końca klatki.
Wyzwanie
ŚredniUsuń stare monety i pozwól, by spacja usuwała zsyp.
- Zachowaj nową monetę:
GameObject coin = Instantiate(...);, a następnie wywołajDestroy(coin, 3f);. - Po naciśnięciu
Input.GetKeyDown(KeyCode.Space)wywołajDestroy(gameObject);.Destroy(this)usunęłoby tylko skrypt.
Naciśnij „Graj”: każda moneta znika po 3 sekundach, a spacja zatrzymuje tworzenie kolejnych. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class CoinChute : MonoBehaviour
{
public GameObject coinPrefab;
public float interval = 1f;
float timer;
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
Instantiate(coinPrefab, transform.position, Quaternion.identity);
timer -= interval;
}
// Space: zniszcz zsyp
}
}
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