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.
Wyzwanie
ŚredniPiłka rozbija cegły i zdobywa za nie punkty.
- W
GameManagerdodajint score;orazpublic void BrickBroken(Brick brick), które dodajebrick.pointsdo wyniku. - W
Bricknapiszpublic void Hit():GameManager.Instance.BrickBroken(this);, a następnieDestroy(gameObject); - W
OnCollisionEnterklasy Brick wywołajHit(), gdy obiekt ma tagBall.
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