Menu
CoddyTech

Rozbij

Lekcja 6 z 16 w kursie Gra w Unity: Zbijanie klocków w Coddy.

Cegły nie mają komponentu Rigidbody, ale piłka go ma, a Unity wysyła komunikat OnCollisionEnter do obu obiektów biorących udział w kolizji. Dzięki temu cegła może sama wykryć uderzenie. W skrypcie cegły gameObject oznacza cegłę, a collision.gameObject — obiekt, który w nią uderzył.

Wynik należy do GameManagera, a cegły są kopiami prefabrykatu. Prefabrykat jest zasobem poza sceną, więc jego pola nie mogą wskazywać na GameManagera ze sceny w oknie Inspector. GameManager przypisuje sobie statyczne GameManager.Instance w Awake(), dzięki czemu każdy skrypt może uzyskać do niego dostęp — także kopie prefabrykatu.

Wazon, który rozbija się, gdy gracz na niego wpada:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player")) Shatter();
}

public void Shatter()
{
    Destroy(gameObject);
}

Destroy(gameObject) usuwa wazon. Destroy(collision.gameObject) usunęłoby gracza, a Destroy(this) usuwa tylko skrypt, pozostawiając wazon na miejscu. Umieszczenie kodu niszczenia we własnej publicznej metodzie pozwala także innemu kodowi — na przykład bombie lub ulepszeniu — rozbić wazon.

challenge icon

Wyzwanie

Średni
  1. W GameManager dodaj int score i public void BrickBroken(Brick brick), które dodaje wartość points cegiełki do score.
  2. W Brick napisz public void Hit(): informuje GameManager.Instance, że ta cegiełka została zniszczona, a następnie ją niszczy.
  3. Dodaj OnCollisionEnter do Brick: gdy uderzy w niego obiekt oznaczony tagiem Ball, wywołaj Hit().

Naciśnij Play, zniszcz kilka cegiełek, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class Brick : MonoBehaviour
{
    public int points = 10;

    // Następnie: piłka rozbija cegłę i zdobywa za nią punkty.
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra w Unity: Zbijanie klocków