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.
Wyzwanie
Średni- W
GameManagerdodajint scoreipublic void BrickBroken(Brick brick), które dodaje wartośćpointscegiełki doscore. - W
Bricknapiszpublic void Hit(): informujeGameManager.Instance, że ta cegiełka została zniszczona, a następnie ją niszczy. - Dodaj
OnCollisionEnterdoBrick: gdy uderzy w niego obiekt oznaczony tagiemBall, wywołajHit().
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.
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.