개인 프로젝트/ProjectA

[개인 프로젝트] ProjectA - 이동 구현 설계

RꞮbble 2026. 6. 7. 23:28

 

하나의 스크립트에 이동 관련 코드를 모두 넣으면, 가독성과 유지보수성이 떨어진다. 

이동 상태들을 여러 스크립트로 분리하고, 상태머신으로 각각의 상태들을 관리한다면, 추후 새로운 상태를 넣을 때 상태 스크립트를 작성하고 상태머신에 등록만 하면 된다. 

 

이동은 상태패턴으로 구현하겠다. 

 

상태패턴으로 상태 흐름을 관리하고, 실제 기능 수행기능 컴포넌트로 구현하겠다. 

 

 

인터페이스/클래스 구조 

 

 

 

인터페이스/클래스별 역할 정리

IState

  • 상태가 기본적으로 가져야 할 기능 정의 

 

BaseState

  • IState를 구현
  • 모든 상태가 가져야 할 기능 컴포넌트를 가진다. 

 

PlayerGroundState

  • BaseState를 상속받는 클래스 
  • 땅에서 공통적으로 처리해야 하는 기능 컴포넌트를 가진다. 

 

PlayerAirState

  • BaseState를 상속받는 클래스 
  • 공중에서 공통적으로 처리해야 하는 기능 컴포넌트를 가진다. 

 

PlayerIdleState, PlayerWalkState, PlayerRunState

  • PlayerGroundState를 상속받는 클래스
  • 대기, 걷기, 뛰기 처리에 필요한 기능 컴포넌트를 가진다. 

 

PlayerJumpStartState, PlayerJumpLoopState, PlayerJumpLandState

  • PlayerAirState를 상속받는 클래스 
  • 점프 시작/중/착지에 필요한 기능 컴포넌트를 가진다. 

 

 

기능 컴포넌트 

유지보수를 위해 "이동하기", "점프하기", "애니메이션 재생하기"와 같이 특정 기능을 수행하는 것을 클래스로 분리시켜 봤다. 

 

PlayerMovement

  • 플레이어 (수평) 이동 처리 클래스 
    • 플레이어 이동 = 대기, 걷기, 뛰기 

 

VerticalVelocity

  • 플레이어 수직 이동 처리 클래스
    • 수직 이동 = 중력 이동, 점프 이동 

 

AnimationController

  • 애니메이션 처리 클래스
    • 애니메이션 처리 = 애니메이션 재생, 애니메이션 재생 완료 여부 판단 

 

InputReader 

  • 플레이어 입력 처리 클래스 
    • 플레이어 입력 = w, a, s, d, 마우스 좌클릭, 마우스 우클릭