오늘은 현재 진행중인 Unity 프로젝트에서 구성한 Player 시스템 전체 구조를 정리해보았다. Player 컴포넌트를 중심으로 각각의 기능을 전담하는 모듈을 컴포넌트 기반 설계로 분리하여 유지보수성과 확장성을 높였다.
모든 플레이어 관련 로직은 Player 스크립트가 중심이 되며, 아래의 구성요소들을 참조 및 초기화합니다:
[Player] : 중심 허브 역할
├── PlayerController // 입력 처리
├── PlayerStatus // 체력/스태미나 등 상태 관리
├── PlayerMovement // 이동 처리
├── PlayerWeaponHandler // 무기 해제/장착/투척
├── PlayerVehicleHandler // 탈것 호출 및 탑승
├── PlayerAnimationHandler // 애니메이션 상태 설정
├── PlayerAudioHandler // 사운드 처리
└── PlayerEventHandler // 커스텀 이벤트 트리거
모든 기능 스크립트들을 연결하고 초기화하는 중심 클래스
현재 상태를 나타내는 PlayerState를 관리하여 기능 분기 제어
PlayerState 열거형을 통해 상태에 따라 행동을 제한하고 분기 처리합니다.
public enum PlayerState
{
Idle, Walk, Dash, Gathering, Throw, Vehicle, Death
}
public bool CanMove => CurState != PlayerState.Vehicle && CurState != PlayerState.Gathering && CurState != PlayerState.Death && CurState != PlayerState.Throw;
void FixedUpdate()
{
if (CanMove)
playerMovement.Move(playerController.MoveDirection, playerStatus.MoveSpeed);
}
void Update()
{
if (CanMove)
playerMovement.Rotate(playerController.LookDirection);
}


이렇게 구성해서 플레이어를 구축해나가니 확실히 새로운 기능들을 추가할 때 큰 어려움이 없이 잘 진행되었던거 같다.