Menu
CoddyTech

Rozbij

Lekcja 6 z 19 w kursie Gra w Unity: Brick Breaker 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

Piłka rozbija cegły i zdobywa za nie punkty.

  1. W GameManager dodaj int score; oraz public void BrickBroken(Brick brick), które dodaje brick.points do wyniku.
  2. W Brick napisz public void Hit(): GameManager.Instance.BrickBroken(this);, a następnie Destroy(gameObject);
  3. W OnCollisionEnter klasy Brick wywołaj Hit(), gdy obiekt ma tag Ball.

Naciśnij „Graj” i wystrzel piłkę: każda cegła, w którą uderzy, zniknie. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

    // Następnie: piłka rozbija cegłę i zdobywa przypisane jej punkty.
}

Wszystkie lekcje w sekcji Gra w Unity: Brick Breaker

Poćwicz samodzielnie: Edytor online Unity