하나의 스크립트에 이동 관련 코드를 모두 넣으면, 가독성과 유지보수성이 떨어진다.
이동 상태들을 여러 스크립트로 분리하고, 상태머신으로 각각의 상태들을 관리한다면, 추후 새로운 상태를 넣을 때 상태 스크립트를 작성하고 상태머신에 등록만 하면 된다.
이동은 상태패턴으로 구현하겠다.
상태패턴으로 상태 흐름을 관리하고, 실제 기능 수행은 기능 컴포넌트로 구현하겠다.
인터페이스/클래스 구조

인터페이스/클래스별 역할 정리
IState
- 상태가 기본적으로 가져야 할 기능 정의
BaseState
- IState를 구현
- 모든 상태가 가져야 할 기능 컴포넌트를 가진다.
PlayerGroundState
- BaseState를 상속받는 클래스
- 땅에서 공통적으로 처리해야 하는 기능 컴포넌트를 가진다.
PlayerAirState
- BaseState를 상속받는 클래스
- 공중에서 공통적으로 처리해야 하는 기능 컴포넌트를 가진다.
PlayerIdleState, PlayerWalkState, PlayerRunState
- PlayerGroundState를 상속받는 클래스
- 대기, 걷기, 뛰기 처리에 필요한 기능 컴포넌트를 가진다.
PlayerJumpStartState, PlayerJumpLoopState, PlayerJumpLandState
- PlayerAirState를 상속받는 클래스
- 점프 시작/중/착지에 필요한 기능 컴포넌트를 가진다.
기능 컴포넌트
유지보수를 위해 "이동하기", "점프하기", "애니메이션 재생하기"와 같이 특정 기능을 수행하는 것을 클래스로 분리시켜 봤다.
PlayerMovement
- 플레이어 (수평) 이동 처리 클래스
- 플레이어 이동 = 대기, 걷기, 뛰기
VerticalVelocity
- 플레이어 수직 이동 처리 클래스
- 수직 이동 = 중력 이동, 점프 이동
AnimationController
- 애니메이션 처리 클래스
- 애니메이션 처리 = 애니메이션 재생, 애니메이션 재생 완료 여부 판단
InputReader
- 플레이어 입력 처리 클래스
- 플레이어 입력 = w, a, s, d, 마우스 좌클릭, 마우스 우클릭
'개인 프로젝트 > ProjectA' 카테고리의 다른 글
| [개인 프로젝트] ProjectA - 인터페이스, 클래스 (0) | 2026.06.08 |
|---|---|
| [개인 프로젝트] ProjectA - 이동 방식 설정 (0) | 2026.05.30 |
| [개인 프로젝트] ProjectA - 게임 기획, 개발 일정 (0) | 2026.05.01 |