Menu
CoddyTech

Разбей

Урок 6 из 19 курса Игра в 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), который добавляет brick.points к счёту.
  2. В Brick напиши public void Hit(): GameManager.Instance.BrickBroken(this);, затем Destroy(gameObject);
  3. В OnCollisionEnter класса Brick вызови Hit(), когда объект имеет тег Ball.

Нажми «Играть» и запусти мяч: каждый кирпич, в который он попадает, исчезает. Затем нажми «Проверить».

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

using UnityEngine;

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

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

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

Потренируйтесь самостоятельно: Песочница Unity