테트리스 강좌

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

충돌 감지 (Collision Detection)

📖 개념 설명

충돌 감지는 두 오브젝트가 겹치는지, 또는 특정 위치에 이미 무언가 있는지 확인하는 것입니다.

bool ValidMove(Vector2Int offset)
{
    Vector2Int newPos = position + offset;
    
    if (!gameBoard.IsValidPosition(newPos))
        return false;
    
    if (!gameBoard.IsCellEmpty(newPos))
        return false;
    
    return true;
}

🛠️ 실습: 이동 가능 여부 확인하기

목표: 간단한 1차원 보드에서 “이동 가능한지” 확인하는 함수를 만들어 봅니다.

이 실습 전용 씬 만들기 (환경 설정)

먼저 이 실습 전용 씬을 만든 뒤 아래 순서로 진행합니다. (자세한 씬 만드는 방법은 개념 실습 테스트 환경 가이드의 씬 만드는 방법 참고.)

이 실습만 할 전용 씬이 없으면 아래 순서로 한 번만 만듭니다. (이미 ConceptTest_Collision 씬이 있으면 File → Open Scene으로 열고 아래 실습만 이어서 하세요.)

  1. File → New Scene → Basic (Built-in) 또는 Empty → Create
  2. File → Save As → 저장 위치: Assets/Scenes → 파일 이름: ConceptTest_Collision → Save
  3. 아래 실습은 모두 이 씬에서 진행합니다. (다른 문서로 왔다 갔다 하지 않습니다.)

수행 과정

  1. Unity에서 새 C# 스크립트 생성
    • 이름: CollisionTest
  2. 다음 코드 작성 ```csharp using UnityEngine;

public class CollisionTest : MonoBehaviour { // 간단한 보드: 0~4 위치, occupied[i]가 true면 그 칸에 블록 있음 private bool[] occupied = new bool[5];

void Start()
{
    occupied[2] = true;  // 2번 칸에는 이미 블록이 있다고 가정
    
    Debug.Log("1번 칸으로 이동 가능? " + CanMoveTo(1));
    Debug.Log("2번 칸으로 이동 가능? " + CanMoveTo(2));
    Debug.Log("5번 칸으로 이동 가능? " + CanMoveTo(5));  // 범위 밖
}

bool CanMoveTo(int position)
{
    // 범위 확인
    if (position < 0 || position >= 5)
        return false;
    
    // 이미 블록이 있으면 이동 불가
    if (occupied[position])
        return false;
    
    return true;
} } ```
  1. 빈 GameObject에 스크립트 추가 후 Play
    • 1번 칸: true (이동 가능)
    • 2번 칸: false (이미 블록 있음)
    • 5번 칸: false (범위 밖)
  2. 정리: 테트리스의 ValidMove도 “새 위치가 범위 안인지, 비어 있는지”를 이렇게 확인합니다.

← 개념 목록으로