Unity Player 시스템 설계 정리[TIL 34일차]

장민제·2025년 5월 29일

내일배움캠프

목록 보기
36/41

오늘은 현재 진행중인 Unity 프로젝트에서 구성한 Player 시스템 전체 구조를 정리해보았다. Player 컴포넌트를 중심으로 각각의 기능을 전담하는 모듈을 컴포넌트 기반 설계로 분리하여 유지보수성과 확장성을 높였다.

🧩 핵심 구조

모든 플레이어 관련 로직은 Player 스크립트가 중심이 되며, 아래의 구성요소들을 참조 및 초기화합니다:

[Player] : 중심 허브 역할
 ├── PlayerController         // 입력 처리
 ├── PlayerStatus            // 체력/스태미나 등 상태 관리
 ├── PlayerMovement          // 이동 처리
 ├── PlayerWeaponHandler     // 무기 해제/장착/투척
 ├── PlayerVehicleHandler    // 탈것 호출 및 탑승
 ├── PlayerAnimationHandler  // 애니메이션 상태 설정
 ├── PlayerAudioHandler      // 사운드 처리
 └── PlayerEventHandler      // 커스텀 이벤트 트리거

🧠 Player.cs - 메인 허브

모든 기능 스크립트들을 연결하고 초기화하는 중심 클래스
현재 상태를 나타내는 PlayerState를 관리하여 기능 분기 제어

주요 동작

  • 이동 및 회전
  • 대시, 투척, 자원 채집, 아이템 소비
  • 피해 처리 및 사망 처리

🔄 주요 시스템 연결 예시

🎮 입력 → 동작 연결

  • PlayerController → 사용자 입력 수신
  • PlayerMovement → 이동 및 회전 처리
  • PlayerWeaponHandler → 무기 투척 로직
  • PlayerVehicleHandler → 탈것 호출 및 탑승 제어

🩺 상태 관리

  • PlayerStatus → 체력, 스태미나, 수분 등 자원 관리
  • UseStamina, TakeDamage, SetItemStat 등 주요 기능 제공

🧨 무기 시스템

  • PlayerWeaponHandler → 무기 해금, 교체, 투척 제어
  • WeaponController + Grenade로 투척체 기능 완성

🎥 애니메이션 처리

  • PlayerAnimationHandler → Animator 연결
  • 이동, 대시, 채집, 던지기, 사망 등 트리거 제어
  • 피격 시 시각 효과도 포함 (Coroutine 기반)

🔉 사운드 처리

  • PlayerAudioHandler → 각 행동에 맞는 사운드 처리 (추가 예정)

📌 상태 기반 제어 예시

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);
}

💻 플레이어 동작 화면

📌 설계에서 배운 점

  • 컴포넌트 기반 설계는 각 기능을 분리하여 명확한 책임 분담 가능
  • Player 클래스는 허브 역할만 담당하고 각 기능은 전담 컴포넌트가 수행
  • 애니메이션과 상태, 입력과 로직의 결합을 느슨하게 유지하니 유지보수성이 높음

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

profile
Unity, C#

0개의 댓글