ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 캐릭터 이동 충돌 처리 2
    카테고리 없음 2025. 4. 4. 12:17

    좋아! "부드러운 벽 밀기"는 흔히 슬라이딩(Sliding) 이라고 부르고, 캐릭터가 대각선으로 이동할 때 벽에 딱 멈추는 게 아니라, 가능한 방향으로만 축 이동하게 하는 방식이야. 예를 들어, ↘️ 방향으로 가다가 오른쪽에 벽이 있으면 아래쪽으로만 미끄러지듯 이동하게 돼.


    🔧 기본 로직 (2D 기준)

    1. 입력으로 dx, dy 방향을 받는다 (보통 -1, 0, 1)
    2. 먼저 x축 이동을 시도한다.
    3. x축 이동이 가능하면 이동.
    4. y축 이동도 같은 방식으로 시도한다.
    5. 각각의 방향에서 충돌 시 이동을 막는다.

    🧠 예제 (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 (↘️)

    처리 순서:

    1. x축 이동 시도 → (6, 5)는 벽 → 이동 안 됨 ❌
    2. y축 이동 시도 → (5, 6)은 가능 → 이동 ⭕

    결과 위치: (5, 6)
    → 부드럽게 아래로 미끄러짐.


    🎮 실제 게임에선?

    엔진에 따라:

    • Godot: move_and_slide() 사용하면 자동 슬라이딩 처리됨.
    • Unity: Rigidbody2D.Cast, Rigidbody2D.velocity, 혹은 CharacterController.Move로 구현 가능.
    • 직접 구현: 위 로직처럼 축 우선 이동을 하면 됨.

    필요하면 너가 쓰는 엔진/프레임워크 기준으로 코드 예제도 더 줄게!
    혹시 3D도 필요하면 그것도 설명 가능해.

Designed by Tistory.