벽돌 깨기
Coddy의 Unity 게임: 벽돌깨기 코스 레슨. 16개 중 6번째.
벽돌에는 Rigidbody가 없지만 공에는 Rigidbody가 있고, Unity는 충돌이 발생하면 두 오브젝트 모두에 OnCollisionEnter를 보냅니다. 따라서 벽돌은 자신이 부딪힌 것을 감지할 수 있습니다. 벽돌의 스크립트에서 gameObject는 벽돌이고 collision.gameObject는 벽돌에 부딪힌 오브젝트입니다.
점수는 GameManager가 관리하며, 벽돌은 프리팹의 복사본입니다. 프리팹은 씬 외부에 있는 에셋이므로, 해당 필드가 Inspector에서 씬의 GameManager를 가리키도록 할 수 없습니다. GameManager는 Awake()에서 정적 GameManager.Instance를 자기 자신으로 설정하므로, 프리팹의 복사본을 포함해 어떤 스크립트에서든 GameManager에 접근할 수 있습니다.
플레이어가 부딪히면 산산조각 나는 꽃병:
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에 이 벽돌이 부서졌다고 알린 다음, 벽돌을 파괴합니다.Brick에OnCollisionEnter를 추가합니다.Ball태그가 지정된 오브젝트가 벽돌에 부딪히면Hit()을 호출합니다.
Play를 누르고, 벽돌을 몇 개 부순 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// 다음: 공이 벽돌을 깨고 해당 점수를 얻습니다.
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.