Unity/Unity 개발

몬스터 스킬 시스템 설계 및 개선 과정

leedh1211 2025. 5. 12. 22:11

문제점

  • AIController가 과도하게 많은 역할을 맡고 있었다.
    • 스킬 선택, 쿨타임 관리, 이동 로직, 경로 탐색 등 단일 클래스가 모두 처리.
  • 비동기 스킬 실행 간 중복 실행 문제 발생.
    • 스킬 코루틴이 끝나기 전 다른 스킬이 중첩 실행되는 경우 존재.
  • 스킬의 순차 실행 및 조건 제어 어려움
    • 예: 점프 후 범위 스킬 실행 등 복합 스킬 구성에서 흐름 제어가 어려웠음.
  • 스킬의 개별 쿨타임 처리와 우선순위 관리 부족
    • 여러 스킬이 쿨이 끝나면 동시에 발동하는 문제.

시도해본 것

  • MonsterSkillController로 스킬 관련 로직을 분리하여 단일책임원칙을 적용.
    • 쿨타임 관리, 실행 제어, 스킬 코루틴 실행을 전담.
  • BaseMonsterSkillData.ExcuteIEnumerator로 변경하여 코루틴 제어 가능하게 구현.
  • ComboSkillData를 도입하여 스킬 묶음 실행 구조 도입.
    • 예: 점프 → 범위 스킬 → 딜레이 → 투사체 발사
  • 점프 스킬은 Action OnJumpFinished를 통해 실행 완료 이벤트를 활용.
  • 스킬 선택 시 우선순위를 고려하여 가장 쿨다운 시간이 긴 스킬을 우선 실행.

해결 방안

  • 역할 분리
    • AIController: 이동, 경로 탐색, 시야 판별만 담당.
    • SkillController: 스킬 로직과 상태 관리 전담.
  • 스킬 쿨타임 및 우선순위 로직 개선
    • 쿨이 끝난 스킬 중 쿨다운 시간이 긴 스킬을 우선 사용.
    • 실행 후 해당 스킬만 쿨타임 초기화.
  • 비동기 스킬 처리 개선
    • _isUsingSkill 플래그로 중복 실행 방지.
    • 점프 후 스킬 연계 구조에 yield returnAction 조합 적용.
  • 확장성 있는 구조 확보
    • 새로운 스킬은 BaseMonsterSkillData 상속만으로 추가 가능.
    • ComboSkillData 활용으로 페이즈 기반 스킬 구성 용이.

알게 된 것

  • 단일책임원칙을 지키면 코드 유지보수가 현저히 쉬워진다.
  • 코루틴을 통한 스킬 실행 제어는 Action, yield return 조합으로 깔끔하게 구현 가능하다.
  • 스킬 쿨타임 우선순위를 고려한 실행 방식은 실제 게임 플레이의 자연스러움에 직접적인 영향을 준다.
  • 추상화된 SkillData를 통해 다양한 보스 AI 구성 가능성이 열린다.
  • 스킬 실행은 단순 실행보다 흐름 제어 로직을 함께 구성해야 안정성이 확보된다.