테트리스 강좌

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

2단계: 게임 보드 만들기

🎯 이 단계에서 배울 것

게임 보드(10×20)를 코드로 만들고, Awake로 준비·함수로 위치 검사 (약 20~30분)


🔷 구분하기: 내가 만드는 것 vs 엔진(API)이 주는 것

구분 이번 단계 예시 설명
내가 만드는 것 GameBoard 클래스, width/height/grid, IsValidPosition() 우리가 정의하는 “게임 보드 규칙”. 보드 크기, 그리드 저장, “이 위치가 유효한가”는 우리 로직.
엔진(API)이 주는 것 MonoBehaviour, Awake(), Transform, Vector2Int, Debug.Log Unity가 제공하는 타입·함수. Awake()는 엔진이 “가장 먼저 한 번” 불러 주는 자리이고, Transform·Vector2Int는 엔진의 “위치·좌표” 타입.

왜 엔진 것을 쓰나?
Awake()는 엔진이 “준비 단계”로 한 번만 호출해 주는 곳입니다. 여기에 우리 보드 초기화 코드를 넣습니다. Transform은 엔진이 “오브젝트 위치”를 다루는 타입이므로, 우리는 그걸 저장해 두는 변수(grid) 와 우리 규칙(IsValidPosition) 만 만듭니다.


📝 실습

📐 이번 단계 후 예시 구조 (가이드)
아래처럼 만들면 됩니다. Hierarchy에서 트리로 보이는 모습입니다. 실습 후 이 예시로 Hierarchy(위치)를 체크해 보세요.

씬 (Tetris)
├─ Main Camera
└─ GameBoard          ← 빈 오브젝트 + Game Board (Script)

자세한 전체 구조 → 시스템 설계 개요


📌 위치 표기: 설명에서 어디를 눌러야 하는지는 [Hierarchy] (읽는 법: 하이어러키), [Inspector] (읽는 법: 인스펙터), [Project] (읽는 법: 프로젝트) 처럼 트리로 적습니다. → 1단계 - 위치 표기 규칙 · 발음: 영어 용어 발음·표기

📌 작업 씬 제차 확인 (매 단계 필수)
이번 단계 실습을 시작하기 전에 다시 한 번 확인하세요.

1. GameBoard 스크립트

Scripts 폴더 → 우클릭 → Create > C# Script → 이름 GameBoard
GameBoard.cs 더블클릭 → 아래 코드로 전체 교체:

📌 이 단계에서는 나중에 삭제하거나 바꿀 코드를 미리 넣지 않습니다. 지금 필요한 것만 넣고, 6단계 등에서 추가할 때 그때 가서 넣습니다.

📌 코드 주석 — [우리 멤버], [Unity가 호출], [Unity API] 등은 내가 만든 것 / 상속·Unity 것 구분용입니다. 자세한 표기 → 4단계 - 소스코드 구분 표기.

using UnityEngine;

public class GameBoard : MonoBehaviour   // [MonoBehaviour 상속] Unity 부모 클래스
{
    public int width = 10;      // [우리 멤버] 가로 10칸
    public int height = 20;     // [우리 멤버] 세로 20칸
    private Transform[,] grid;  // [우리 멤버] 2차원 배열

    void Awake()   // [Unity가 호출] 씬 로드 시 엔진이 한 번 호출
    {
        grid = new Transform[width, height];
        Debug.Log($"게임 보드 생성: {width}x{height}");   // Debug.Log: [Unity API]
    }

    public bool IsValidPosition(Vector2Int position)   // [우리 메소드]
    {
        return position.x >= 0 && position.x < width &&
               position.y >= 0 && position.y < height;
    }
}

📌 복기: width, height, grid 는 변수(저장소). grid 는 배열(같은 타입을 순서대로). 한 번에 이해 못했어도 변수 · 배열에서 다시 실습해 보세요.

2. GameBoard 스크립트 파일 생성

2-1. Scripts 폴더에서 스크립트 생성

  1. [Project > Assets > Scripts] 로 이동 (Project 창에서 Assets → Scripts 폴더 클릭)

  2. C# 스크립트 생성
    • [Project > Assets > Scripts] 선택 상태에서 우클릭 → “Create” → “C# Script”
  3. 이름 변경
    • 생성된 “NewBehaviourScript”를 F2 또는 더블클릭으로 “GameBoard” 로 변경
    • 결과: [Project > Assets > Scripts > GameBoard.cs]

2-2. 스크립트 코드 작성

  1. GameBoard.cs 파일 열기
    • [Project > Assets > Scripts > GameBoard.cs] 더블클릭
    • 에디터가 열림
  2. 코드 작성
    • 에디터에 기본 코드가 있음
    • 위의 코드로 전체 교체
  3. 저장
    • Ctrl + S (Windows) 또는 Cmd + S (Mac)로 저장
    • 또는 메뉴: File > Save

3. GameBoard 오브젝트 생성

3-1. 빈 GameObject 생성

  1. [Hierarchy] 창 확인 (화면 왼쪽, 씬 오브젝트 트리)

  2. 빈 GameObject 생성
    • [Hierarchy] 빈 공간 우클릭 → “Create Empty”
    • 또는 [메뉴 > GameObject > Create Empty]
  3. 이름 변경
    • 생성된 “GameObject”를 F2 또는 [Inspector] 맨 위 이름 칸에서 “GameBoard” 로 변경
    • 결과: [Hierarchy > GameBoard]

3-2. GameBoard 스크립트 추가

  1. 스크립트 드래그 앤 드롭
    • [Project > Assets > Scripts > GameBoard.cs] 를 클릭하고 잡은 상태로
    • [Hierarchy > GameBoard] 위로 드래그하여 놓기
    • 스크립트가 추가됨
  2. 스크립트 추가 확인
    • [Hierarchy > GameBoard] 클릭
    • [Inspector > Game Board (Script)] 가 보이면 성공!

또는 Add Component 방법:

3-3. Transform 위치 설정 — 논리 좌표와 맞추기

  1. [Hierarchy > GameBoard] 클릭

  2. [Inspector > GameBoard > Transform] 에서 Position 확인
    • X: 0, Y: 0, Z: 0 으로 두세요.
    • 이렇게 해야 논리 그리드 (0,0)~(9,19) 와 씬(월드) 좌표가 일치합니다. (블록·보드 배경이 나중에 같은 좌표계를 쓰게 됩니다.)
  3. 값이 다르다면
    • Position 필드에 0, 0, 0 을 입력해 (0, 0, 0)으로 맞춥니다.
    • GameBoard를 다른 위치에 두고 싶다면 7단계 보드 논리좌표와 시각 일치에서 좌표 헬퍼를 쓰면 됩니다.

💡 요약: GameBoard Position (0, 0, 0) = 논리 좌표와 씬 좌표를 같게 둔 상태. 이걸로 두면 6단계에서 보드 시각화(배경)를 붙일 때도 좌표가 정확히 맞습니다.

3-4. 게임 실행 및 확인

  1. Play 버튼 클릭
    • Unity 에디터 상단의 ▶ (Play) 버튼 클릭
  2. Console 창 확인
    • Console 창에서 “게임 보드 생성: 10x20” 메시지 확인
    • 메시지가 보이면 GameBoard가 정상적으로 작동하는 것!
  3. 게임 정지
    • ▶ (Play) 버튼을 다시 클릭하여 정지

참고:

💡 이번 단계에서 익히는 개념

📌 복기: 변수(width, height, grid) = 저장소, 배열(grid) = 같은 타입을 순서대로. 한 번에 이해 못했어도 변수 · 배열에서 다시 실습해 보세요.

📖 기초 개념 학습 (복기 → 점진적 실습)

📌 복기로 위 개념을 떠올린 뒤, 아래 기초 개념 문서에서 점진적으로 확장된 실습을 진행하세요. 단계가 올라갈수록 같은 개념이 조금씩 확장되므로, 차근차근 따라 하면 됩니다.

개념 문서 이번 단계와의 연결
함수 할 일을 묶은 함수. 문서 안 실습으로 함수 정의·호출해 보기
배열 2차원 배열 grid. 1차원·2차원 배열 실습으로 익히기
MonoBehaviour Awake()가 Start()보다 먼저 한 번 실행. 실행 순서 실습
클래스 GameBoard 클래스 = 변수(width, height, grid) + 함수(IsValidPosition). Player 클래스 실습

📐 이 단계 확장 실습 (전용 씬에서 점진적 연습): 2단계 확장 실습 01 - Awake와 배열·범위 검사
→ 단계별 확장 실습 전체 목차: 단계별 확장 실습 (목차)

✅ 확인 사항

📖 기초 개념 학습으로 이어가기

위 표의 기초 개념 학습을 진행한 뒤, 좌표 처리 방식이 궁금하면 좌표 처리 가이드에서 점진적으로 이어가세요.

✅ 다음 단계 전 점검: 작업 씬이 Tetris인지 재차 확인하세요. Tetris가 아니면 씬 이름 변경 방법을 따라 Tetris로 바꾼 뒤 다음 단계로 넘어가세요.


← 이전 단계: 1단계 - Unity 기초 다음 단계: 3단계 - 테트리스 블록 만들기 →