테트리스 강좌

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

좌표 처리 간단 가이드 (초보자용)

📍 왜 좌표 처리가 필요한가요?

테트리스 게임에서 블록의 위치를 정확히 맞춰야 합니다.
하지만 복잡하게 생각할 필요 없습니다!


🎯 핵심 원리 (간단하게!)

1. 게임 보드는 격자입니다

게임 보드 (10칸 x 20칸):
  0  1  2  3  4  5  6  7  8  9  ← x축 (가로)
0 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
1 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
2 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
...
19[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
↑
y축 (세로)

간단하게 생각:


2. 블록 위치를 정수로 만들기

문제: 블록 위치가 (5.2, 10.8)처럼 소수점일 수 있습니다
해결: 반올림해서 정수로 만들기

// 위치가 (5.2, 10.8)일 때
int x = Mathf.RoundToInt(5.2);  // → 5
int y = Mathf.RoundToInt(10.8); // → 11

// 이제 (5, 11) 위치로 사용

Mathf.RoundToInt() 설명:


3. 실제 사용 예시

ValidMove 함수에서:

// 자식 블록의 위치를 정수로 반올림
int roundX = Mathf.RoundToInt(children.transform.position.x);
int roundY = Mathf.RoundToInt(children.transform.position.y);

// 보드 범위 확인
if (roundX < 0 || roundX >= 10 || roundY < 0 || roundY >= 20)
{
    return false;  // 범위 밖!
}

AddToGrid 함수에서:

// 자식 블록의 위치를 정수로 반올림
int roundX = Mathf.RoundToInt(children.transform.position.x);
int roundY = Mathf.RoundToInt(children.transform.position.y);

// 그리드에 저장
grid[roundX, roundY] = children;

💡 왜 이렇게 간단한가요?

웹사이트 방식의 장점:

복잡한 방식 (사용 안 함):

간단한 방식 (웹사이트 방식):


🎮 실제 예시

Spawner 위치 설정

방법 1: Inspector에서 직접 설정

방법 2: 코드에서 설정

transform.position = new Vector3(5, 17, 0);

왜 (5, 17)인가요?


블록 위치 확인

ValidMove 함수:

// 블록 위치를 정수로 반올림
int x = Mathf.RoundToInt(블록위치.x);
int y = Mathf.RoundToInt(블록위치.y);

// 보드 범위 확인
if (x < 0 || x >= 10 || y < 0 || y >= 20)
{
    return false;  // 범위 밖!
}

간단하게 생각:


🔧 셀 정렬 (중요!)

블록을 만들 때 셀 위치를 정수로 맞춰야 합니다!

BlockSnapper 사용법

  1. BlockSnapper 컴포넌트 추가
    • 블록 선택 (I_Block, O_Block, T_Block 등)
    • Inspector에서 Add Component → BlockSnapper 추가
  2. 셀 정렬 실행
    • Inspector에서 우클릭 → “Snap to Grid” 클릭
    • 모든 자식 Square가 정수 좌표로 정렬됨
  3. 정렬 확인
    • Inspector에서 우클릭 → “Validate Block” 클릭
    • “✅ 블록이 올바르게 배치되었습니다!” 확인

왜 중요한가요?


✅ 체크리스트

좌표 처리가 올바른지 확인:


🎯 핵심 정리

  1. 게임 보드는 격자: (0, 0)부터 (10, 20)까지
  2. 위치를 정수로: Mathf.RoundToInt() 사용
  3. 직접 숫자 사용: (5, 17)처럼 그냥 숫자로
  4. 복잡하게 생각하지 마세요!

웹사이트 방식 = 간단하게! 🎮