테트리스 강좌

초등학생도 쉽게 따라할 수 있는 Unity 테트리스 게임 개발 강좌 자료

확장하기 01: 게임 시작 카운트다운 (3, 2, 1, Go!)

💬 이 실습을 하기 전에

코루틴이 어렵게 느껴져도 걱정하지 마세요. 이 실습에서는 코드를 그대로 복사해서 Spawner에 넣고, Canvas에 텍스트 하나만 만들어서 연결하면 됩니다. “왜 이렇게 하면 되는지”는 나중에 천천히 이해해도 괜찮습니다. 먼저 화면에 3, 2, 1, Go! 가 나오는 걸 보는 것이 중요합니다.


📌 이 실습은?

게임이 시작될 때 화면에 3 → 2 → 1 → Go! 를 보여 준 뒤, 그다음에 첫 블록이 나오게 하는 연습입니다.

필요한 것: 8단계까지 완료한 Tetris 씬, Canvas에 카운트다운용 텍스트 하나.


🎯 목표 (한 줄 요약)


🛠️ 1. UI 준비 (Canvas에 카운트다운 텍스트)

아래 순서대로 하면 됩니다. 한 단계씩 진행하세요.

  1. Hierarchy에서 Canvas 선택 → 우클릭 → UI → Text - TextMeshPro (또는 Text - Legacy).
  2. 이름을 CountdownText 로 바꾼다.
  3. Rect Transform: 화면 중앙에 두기 (Anchor 중앙, Pos X/Y 0, Width 400, Height 150 정도).
  4. 폰트 크기: 80~120 정도로 키워서 “3”, “2”, “1”, “Go!” 가 잘 보이게 한다.
  5. 정렬: 가운데 정렬 (Horizontal & Vertical Alignment: Center).
  6. 처음에는 비어 있거나 “3”이 보이기 전까지 숨겨 두려면, GameObject.SetActive(false) 로 나중에 켜도 된다. 아래 코드에서는 처음에 비활성으로 두고, 코루틴 시작할 때 SetActive(true) 로 켠 뒤, 끝나면 SetActive(false) 로 끈다.

(TextMeshPro를 쓰면 TMP_Text, Legacy Text를 쓰면 Text 타입으로 연결하면 됩니다. 아래 예시는 TMP_Text 기준입니다.)


🛠️ 2. Spawner 수정 (코루틴으로 카운트다운 후 스폰)

Spawner.cs를 아래 전체 코드로 통째로 교체해도 됩니다. (기존 Spawner에 이미 있는 내용 + 카운트다운만 추가된 버전입니다.)

바뀐 점만 요약하면:

using UnityEngine;
using TMPro;
using System.Collections;

public class Spawner : MonoBehaviour
{
    public GameObject[] tetrisBlockPrefabs;
    public Transform spawnPoint;

    [Header("카운트다운 (선택)")]
    public TMP_Text countdownText;   // Inspector에서 CountdownText 연결. 비워 두면 카운트다운 없이 바로 스폰

    private GameBoard gameBoard;
    private GameController gameController;

    void Start()
    {
        gameBoard = FindObjectOfType<GameBoard>();
        gameController = FindObjectOfType<GameController>();

        if (countdownText != null)
            StartCoroutine(CountdownThenSpawn());   // 카운트다운 후 첫 블록 스폰
        else
            SpawnNext();   // countdownText가 없으면 기존처럼 바로 스폰
    }

    /// <summary>3, 2, 1, Go! 표시 후 SpawnNext() 한 번 호출.</summary>
    IEnumerator CountdownThenSpawn()
    {
        countdownText.gameObject.SetActive(true);   // 텍스트 켜기

        countdownText.text = "3";
        yield return new WaitForSeconds(1f);   // 1초 기다린 뒤 아래로

        countdownText.text = "2";
        yield return new WaitForSeconds(1f);

        countdownText.text = "1";
        yield return new WaitForSeconds(1f);

        countdownText.text = "Go!";
        yield return new WaitForSeconds(0.5f);

        countdownText.gameObject.SetActive(false);   // 텍스트 끄기
        SpawnNext();   // 이제 첫 블록 생성
    }

    public void SpawnNext()
    {
        if (gameBoard.IsGameOver())
        {
            Debug.Log("Game Over!");
            gameController.GameOver();
            Time.timeScale = 0;
            return;
        }
        int randomIndex = Random.Range(0, tetrisBlockPrefabs.Length);
        Instantiate(
            tetrisBlockPrefabs[randomIndex],
            spawnPoint.position,
            Quaternion.identity
        );
    }
}

✅ 동작 확인


❓ 막혔을 때 확인해 보세요

증상 확인할 것
카운트다운이 안 보임 Canvas에 CountdownText를 만들었는지, Spawner Inspector에서 Countdown Text 칸에 그 오브젝트를 연결했는지 확인.
“3”만 보이고 안 바뀜 Spawner 스크립트에 using System.Collections; 가 있는지 확인. IEnumerator 를 쓰려면 필요합니다.
컴파일 에러 (IEnumerator, TMP_Text 등) 위 코드를 통째로 붙여 넣었는지, using TMPro; 와 using System.Collections; 가 맨 위에 있는지 확인.

💡 정리 (나중에 이해해도 됩니다)


← 확장하기 목차 02 줄 사라짐 이펙트 →