Menu
CoddyTech

Разрушение

Урок 6 из 16 курса Игра в Unity: арканоид на Coddy.

У кирпичей нет Rigidbody, но у мяча он есть, и Unity отправляет OnCollisionEnter обоим объектам при столкновении. Поэтому кирпич может сам заметить удар. В скрипте кирпича gameObject — это кирпич, а collision.gameObject — объект, который в него попал.

Счёт хранится в GameManager, а кирпичи — это копии префаба. Префаб — это ресурс за пределами сцены, поэтому его поля не могут ссылаться на GameManager сцены в Inspector. В Awake() GameManager присваивает статическому GameManager.Instance ссылку на себя, поэтому любой скрипт может получить к нему доступ, в том числе копии префаба.

Ваза, которая разбивается, когда игрок в неё врезается:

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

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

Destroy(gameObject) удаляет вазу. Destroy(collision.gameObject) удалил бы игрока, а Destroy(this) удаляет только скрипт, оставляя вазу стоять. Если оставить разрушение в отдельном публичном методе, другой код — например, бомба или усиление — тоже сможет разбить вазу.

challenge icon

Задание

Средне
  1. В GameManager добавь int score и public void BrickBroken(Brick brick), которая добавляет points кирпича к score.
  2. В Brick напиши public void Hit(): он сообщает GameManager.Instance, что этот кирпич разбит, а затем уничтожает кирпич.
  3. Добавь OnCollisionEnter в Brick: когда объект с тегом Ball ударяет его, вызови Hit().

Нажми Play, разбей несколько кирпичей, затем нажми Check.

Попробуйте сами

using UnityEngine;

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

    // Далее: мяч разбивает кирпич, и за него начисляются очки.
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Игра в Unity: арканоид