Menu
CoddyTech

공 놓치기

Coddy의 Unity 게임: 벽돌깨기 코스 레슨. 16개 중 8번째.

패들을 지나친 공은 잃게 됩니다. 이제 패들 아래에는 DeathZone이 있습니다. Is Trigger로 설정된 박스 콜라이더와 DeathZone 태그가 있는 오브젝트입니다. 트리거는 아무것도 막지 않습니다. Rigidbody가 있는 물체가 트리거에 들어오면 OnTriggerEnter(Collider other)를 보냅니다. 공은 생명 수를 관리하고 다음에 일어날 일을 결정하는 GameManager에 공을 잃었다고 알립니다.

물에 빠진 구슬은 스폰 지점에서 다시 시작합니다.

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Water")) Respawn();
}

void Respawn()
{
    rb.linearVelocity = Vector3.zero;
    transform.position = spawnPoint.position;
}

공은 구슬보다 할 일이 적습니다. Update()는 launched가 false인 동안 매 프레임 공을 패들 위에 올려놓으므로, 초기화할 때는 해당 플래그를 해제하고 공을 멈추기만 하면 됩니다. 그러면 다음 프레임에 공이 패들로 돌아오고, Space를 눌러 다시 발사할 수 있습니다.

challenge icon

챌린지

중급
  1. Ball에서 public void ResetToPaddle()을 작성하세요. 공은 더 이상 발사된 상태가 아니며 움직임을 멈춥니다.
  2. Ball에 OnTriggerEnter를 추가하세요. DeathZone 태그가 지정된 오브젝트에 들어가면 GameManager.Instance.BallLost(this)를 호출합니다.
  3. GameManager에 public int lives = 3과 public void BallLost(Ball lost)를 추가하세요. 생명이 하나 줄고, 놓친 공은 패들 위로 돌아갑니다.

아직 게임 오버 기능은 없으므로, 생명은 일단 0 아래로 내려갑니다.

Play를 누르고, 일부러 공을 놓친 다음 다시 발사하고 Check를 누르세요.

직접 해보기

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public int rows = 5;
    public int columns = 9;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int[] rowHits = { 2, 1, 1, 1, 1 };

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
    }

    void BuildWall()
    {
        float left = -(columns - 1) * spacingX / 2f;
        for (int row = 0; row < rows; row++)
        {
            for (int col = 0; col < columns; col++)
            {
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(rowHits[row]);
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임: 벽돌깨기의 모든 레슨