콘텐츠로 이동

플레이어 이동

목적

키보드 입력을 받아 탑다운 8방향으로 이동합니다. 일반 뱀서라이크의 단순 정속 이동 대신 플랫포머의 단단한 입력 응답을 탑다운 핵앤슬래시에 맞게 적용했습니다. 이동은 즉시 시작되고 입력을 놓으면 짧게 멈추며, 방향 전환 중 생기던 옆 미끄러짐을 억제합니다.

이전 버전은 속도 계산만 빠르고 캐릭터·카메라 표현은 거의 같아 플레이어가 개선을 알아차리기 어려웠습니다. 현재는 이동 규칙과 별도의 PlayerMovementFeedback이 출발·급정지·역선회·대시를 시각적으로 구분합니다.

조작

  • 이동 기본값: WASD
  • 회피 이동 기본값: Space
  • K키 설정 화면에서 이동과 대시를 다른 키로 자유롭게 바꿀 수 있습니다.
  • 대각선 이동 속도는 정규화되어 직선 이동과 같습니다.
  • 입력 순간 기본 속도의 68%를 확보하고 60 FPS 기준 한 프레임 안에 기본 속도의 90% 이상으로 진입합니다.
  • 손을 떼면 강하게 감속하며 남은 속도가 50px/s 이하일 때 정확히 정지시켜 저속 미끄러짐을 없앱니다.
  • 90도 선회에서는 기존 방향의 횡속도를 별도 그립으로 제거하고, 정반대 입력에서는 이전 속도의 18%만 보존해 즉시 반전합니다.
  • 회피는 입력 방향을 잠그고 0.14초간 2.35배 속도를 내며 기본 재사용 대기시간은 0.85초입니다.
  • 회피가 끝난 뒤의 관성은 0.08초·최대 1.08배로 줄여 회피 직후에도 입력 방향을 빠르게 되찾습니다.
  • 화면 왼쪽 아래의 대시 카드에서 READY, 사용 중, 남은 재사용 시간과 충전 게이지를 확인합니다.
  • 카메라 추적 응답은 10에서 18로 높여 캐릭터는 즉시 멈췄는데 화면만 늦게 밀리는 느낌을 줄였습니다.
  • 진행 방향으로 캐릭터가 최대 5px 기울고 카메라가 최대 30px 앞을 보여 이동 의도가 즉시 읽힙니다.
  • 출발은 청록 전방 펄스, 급정지는 주황 원형 브레이크, 큰 방향 전환은 가로 선회 신호로 구분됩니다.
  • 대시 중에는 캐릭터 방향 변형, 최대 10점·9px 폭의 청록 궤적과 1.45배 카메라 리드가 동시에 나타납니다.

구성

Player (CharacterBody2D)
├─ Movement (Node)
├─ MovementFeedback (Node2D)
│  └─ VelocityTrail (Line2D, runtime)
├─ Body (Polygon2D)
├─ Heading (Polygon2D)
├─ CollisionShape2D
└─ Camera2D

PlayerCharacter는 물리 이동과 런타임 스탯 적용을 담당하고, PlayerMovement는 입력, 가속·제동, 선회, 회피 상태만 담당합니다. step_velocity()가 입력 방향과 현재 속도를 받아 결과 속도를 반환하므로 이동 수치를 독립 테스트하거나 다른 캐릭터에 재사용할 수 있습니다.

PlayerMovementFeedback은 완성된 속도와 공개 이동 스냅샷만 읽습니다. 충돌·좌표·대시 쿨타임을 계산하지 않고 Body·Heading·Camera2D의 표현과 Line2D 궤적만 갱신합니다. Enabled를 끄거나 Node를 제거하면 원래 표현으로 복원되며 이동 결과는 변하지 않습니다.

설정

Player/Movement Node를 선택하면 이동 속도, 일반·선회·역선회 가속, 제동, 초동 속도 비율, 정지 스냅, 횡방향 그립, 반전 속도 보존율, 회피 속도·시간·쿨다운과 회피 종료 관성을 각각 조절할 수 있습니다. 현재 기본값은 이동 속도 280px/s, 일반 가속 6,500, 선회 12,000, 제동 16,000, 역선회·횡그립 18,000입니다.

기본 스탯은 최대 체력 100, 방어 0, 이동 속도 280입니다. 캐릭터 장비와 로드아웃apply_equipment_modifiers 계약을 통해 작전 시작 시 수정합니다. 현재 기본 장비 적용 후 값은 최대 체력 125, 방어 3, 이동 속도 300입니다.

get_movement_snapshot()은 정지 스냅·횡그립·반전 보존율을 포함한 조정값과 회피 준비·사용 중·남은 재사용 시간·준비 비율·종료 관성 상태를 복사해 제공합니다. DashCooldownHud는 이 공개 Dictionary만 15Hz로 읽으며 플레이어 내부 Node나 입력을 직접 참조하지 않습니다. 자동 테스트는 16ms 한 스텝에서 90% 이상 초동, 완전 정지, 180도 역선회, 횡미끄러짐 10% 이하의 90도 선회와 회피 종료 관성·HUD 재사용 표시를 입력 장치 없이 step_velocity()로 검증합니다.

get_feedback_snapshot()은 출발·브레이크·선회·대시 신호, 궤적 점 수·폭, Body 오프셋과 카메라 리드 거리를 공개합니다. 실제 입력 E2E는 Space 대시 뒤 표현 강도 0.55 이상, 궤적 2점 이상, 카메라 리드 8px 이상을 플레이어 인식 하한으로 검사합니다.

의존성

  • 프로젝트 move_left, move_right, move_up, move_down, dash Action
  • 선택 기능인 K 키 설정과 영구 바인딩
  • game/scenes/game.gd의 플레이어 설치 지점
  • FeatureManifest.player_enabled
  • 장비가 켜진 경우 apply_equipment_modifiers(modifiers) 공개 계약

비활성화

game/core/feature_manifest.tres를 열고 Player Enabled를 끕니다. 그러면 실행 시 플레이어 Scene을 생성하지 않습니다.

검색 별칭

캐릭터 이동, WASD, 키 변경, 속도 변경, 초동 가속, 급선회, 감속, 제동, 정지 스냅, 횡그립, 역선회, 대시, 회피, 대시 쿨타임 UI, 대시 준비, READY, 대시 관성, 탑뷰 핵앤슬래시, 플랫포머 스타일, 쫄깃한 조작감, 조작감이 티 안 남, 카메라 리드, 이동 궤적, 출발 펀치, 브레이크 신호, Space, K 키 설정