Niszczenie obiektów
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 52 z 67.
Destroy(obj) usuwa GameObject ze sceny wraz z jego dziećmi. Drugi argument opóźnia usunięcie: Destroy(obj, 2f) usuwa go 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. Jeśli chodzi o obiekt, przekaż GameObject. W skrypcie gameObject oznacza obiekt, do którego jest przypisany 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 instrukcje po Destroy nadal się wykonują, a obiekt nadal można znaleźć do końca klatki.
Wyzwanie
ŚredniChute upuszcza monetę co sekundę; ta część jest już napisana. Zmień kod tak, aby:
- każda moneta znikała 3 sekundy po pojawieniu się, dzięki czemu nigdy nie ma więcej niż 3 monet naraz;
- naciśnięcie spacji niszczyło sam zsyp, aby nie pojawiały się kolejne monety. Monety, które już wypadły, nadal znikają w odpowiednim czasie.
Naciśnij Play, obserwuj przez kilka sekund, naciśnij spację, a następnie Check.
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 zrzutnię
}
}
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