학습 동기
몬스터가 사망했을 때 아이템과 골드를 드롭하고, 일정 시간 후 플레이어에게 빨려들어가는 연출을 구현하고자 했다. 또한 드롭된 아이템을 자동으로 인벤토리에 추가하거나 골드를 증가시키는 시스템이 필요했다.
학습 내용
1. 드롭 시스템 기본 구조
- EnemyDropHandler 스크립트에서 드롭 아이템과 골드 프리팹을 Instantiate()로 생성
- 일정 시간 후 MoveToPlayer() 함수를 통해 아이템이 플레이어 방향으로 가속 이동
- 도착 시 HandlePickup()에서 아이템 종류별 처리 (스킬북, 룬, 포션, 골드)
2. 드롭 애니메이션
- DOTween을 사용하여 아이템이 사망 지점에서 살짝 튀어나온 뒤 1초 후 빨려들어감
- AggressiveTrackPlayer()에서 속도를 점점 증가시켜 부드러운 연출 구현
3. 아이템 처리 방식
- 아이템 종류별로 프리팹을 분리하여 DefaultSkillPrefab, DefaultRunePrefab, DefaultPotionPrefab에 할당
- 아이템 획득 시 인벤토리 UI에 동적으로 생성 + DraggableItem.Setup(itemData) 호출
문제해결
문제 1: NullReferenceException
- dropItemPrefab 또는 itemData가 null인 상태에서 접근함
- 원인: 드롭 확률 결과로 itemData가 null일 수 있음
- 해결: null 체크 및 로그 추가로 예외 방지
문제 2: ArgumentOutOfRangeException
- 드롭 리스트가 비어 있음에도 Random.Range(0, count) 호출
- 해결: 리스트가 비어있을 경우 null 반환하도록 방어 로직 추가
느낀점
처음에는 단순히 Instantiate()만으로 구현하면 끝날 줄 알았지만, 드롭 시스템은 디테일이 많았다.
특히 Inspector에서의 프리팹 할당이나 null 체크 같은 기본적인 실수가 많은 예외를 유발함을 다시 한번 깨달았다.
애니메이션과 플레이어 추적 로직이 잘 어울릴 때 몰입감이 올라가기 때문에, 단순한 시스템이라도 연출 완성도를 높이는 게 중요하다고 느꼈다.
'Unity > Unity 개발' 카테고리의 다른 글
| 벡터 이미지에 도트 셰이더 적용하기 (0) | 2025.07.10 |
|---|---|
| 튜토리얼 시스템과 스킬 연동 (1) | 2025.07.09 |
| 튜토리얼 시스템 구조 설계 및 구현 (0) | 2025.07.08 |
| NPCController 구조 설계 정리 (0) | 2025.07.07 |
| 대화 다이얼로그 & 상호작용 토글 UI (0) | 2025.07.04 |