-
캐릭터 이동 충돌 처리 2카테고리 없음 2025. 4. 4. 12:17
좋아! "부드러운 벽 밀기"는 흔히 슬라이딩(Sliding) 이라고 부르고, 캐릭터가 대각선으로 이동할 때 벽에 딱 멈추는 게 아니라, 가능한 방향으로만 축 이동하게 하는 방식이야. 예를 들어, ↘️ 방향으로 가다가 오른쪽에 벽이 있으면 아래쪽으로만 미끄러지듯 이동하게 돼.
🔧 기본 로직 (2D 기준)
- 입력으로 dx, dy 방향을 받는다 (보통 -1, 0, 1)
- 먼저 x축 이동을 시도한다.
- x축 이동이 가능하면 이동.
- y축 이동도 같은 방식으로 시도한다.
- 각각의 방향에서 충돌 시 이동을 막는다.
🧠 예제 (Python 스타일, Pygame 또는 직접 구현 상정)
def move_player(player, dx, dy, is_wall): # X축 이동 먼저 new_x = player.x + dx if not is_wall(new_x, player.y): player.x = new_x # Y축 이동 new_y = player.y + dy if not is_wall(player.x, new_y): player.y = new_y
is_wall(x, y) 함수는 좌표에 벽이 있는지 확인하는 함수고, player는 x, y를 가진 객체라고 보면 돼.
🧱 예시 상황
- 플레이어가 (5, 5)에 있고
- 오른쪽 (6, 5)에 벽이 있고
- 아래 (5, 6)은 비어 있음
- 키 입력으로 dx = 1, dy = 1 (↘️)
처리 순서:
- x축 이동 시도 → (6, 5)는 벽 → 이동 안 됨 ❌
- y축 이동 시도 → (5, 6)은 가능 → 이동 ⭕
결과 위치: (5, 6)
→ 부드럽게 아래로 미끄러짐.
🎮 실제 게임에선?
엔진에 따라:
- Godot: move_and_slide() 사용하면 자동 슬라이딩 처리됨.
- Unity: Rigidbody2D.Cast, Rigidbody2D.velocity, 혹은 CharacterController.Move로 구현 가능.
- 직접 구현: 위 로직처럼 축 우선 이동을 하면 됨.
필요하면 너가 쓰는 엔진/프레임워크 기준으로 코드 예제도 더 줄게!
혹시 3D도 필요하면 그것도 설명 가능해.