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