카테고리 없음

캐릭터 이동 충돌 처리

denny 2025. 4. 4. 12:16

좋은 질문이야! 게임에서 캐릭터가 키보드 입력으로 이동 중 벽에 부딪혔을 때는 충돌 처리(Collision Detection)충돌 반응(Collision Response) 를 통해 처리해.

기본적인 흐름은 이래:


🔁 1. 이동 시도

  • 키보드 입력을 받아 캐릭터의 새 위치를 계산.
# 예시 (2D 기준, 오른쪽 이동)
new_x = player.x + player.speed
new_y = player.y

⛔ 2. 충돌 감지 (Collision Detection)

  • 새 위치에 벽(혹은 다른 장애물)이 있는지 확인.
  • 벽은 일반적으로 tile map이나 collider object로 설정돼 있어.
if not is_wall(new_x, new_y):
    player.x = new_x
    player.y = new_y
  • is_wall(x, y) 함수는 해당 좌표에 벽이 있는지 검사하는 로직.

🔄 3. 충돌 반응 (Collision Response)

  • 벽에 부딪히면 이동을 막거나, 위치를 조정해줘야 함.
  • 이동 방향에 따라 축 단위로만 충돌을 처리하면 부드러운 벽 밀기(slide) 도 구현 가능.

예를 들어:

# x축 이동 먼저
temp_x = player.x + dx
if not is_wall(temp_x, player.y):
    player.x = temp_x

# y축 이동
temp_y = player.y + dy
if not is_wall(player.x, temp_y):
    player.y = temp_y

이렇게 하면 대각선으로 이동할 때 벽에 걸쳐도, 가능한 축 방향으로는 움직일 수 있음.


✅ 팁

  • 물리 엔진(예: Unity의 Rigidbody2D, Godot의 KinematicBody2D 등)을 쓰면 충돌 처리가 많이 자동화됨.
  • 직접 처리할 땐 충돌 상자(AABB, Circle 등)와 거리 계산도 자주 씀.

혹시 어떤 엔진이나 프레임워크 쓰고 있어? Unity, Godot, Pygame, 직접 구현 등? 거기에 맞춰 더 구체적으로 알려줄게!