Разрушение
Урок 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) удаляет только скрипт, оставляя вазу стоять. Если оставить разрушение в отдельном публичном методе, другой код — например, бомба или усиление — тоже сможет разбить вазу.
Задание
Средне- В
GameManagerдобавьint scoreиpublic void BrickBroken(Brick brick), которая добавляетpointsкирпича кscore. - В
Brickнапишиpublic void Hit(): он сообщаетGameManager.Instance, что этот кирпич разбит, а затем уничтожает кирпич. - Добавь
OnCollisionEnterвBrick: когда объект с тегомBallударяет его, вызовиHit().
Нажми Play, разбей несколько кирпичей, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// Далее: мяч разбивает кирпич, и за него начисляются очки.
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.