문제점
- SpriteRenderer로 출력되는 스프라이트의 실제 보이는 영역과, spriteRenderer.bounds 혹은 sprite.rect로 계산한 영역이 불일치했다.
- 유니티에서 Import된 Sprite는 Trim 처리가 되어 있을 수 있고, 이 경우 sprite.rect는 원래 텍스처 크기를 기준으로 하고, sprite.textureRect는 실제 비어있지 않은 부분만 나타낸다.
- 그래서 sprite.textureRect를 기준으로 BoxCollider2D의 size를 설정해야 시각적으로 정확한 충돌 범위를 맞출 수 있다.
- 추가로 sprite.pivot 값을 고려하여 offset도 조정해야 실제 스프라이트 중심과 맞는 Collider를 만들 수 있었다.
- 문제는 여기서 끝나지 않았다. Sprite가 바뀌는 타이밍과 Collider를 갱신하는 타이밍이 달라서, spriteRenderer.sprite가 null이거나, 아직 bounds가 정확히 계산되지 않았을 수 있었다. 이런 경우 Collider 값이 초기화되지 않거나 잘못 세팅되었다.
시도한 것
- sprite.textureRect / sprite.pixelsPerUnit을 활용한 width/height 계산
- pivot / rect.size를 이용한 offset 계산
- Init()에서 Sprite 세팅 직후 Collider 설정을 호출
해결방안
- spriteRenderer.sprite가 null이 아닌지 확인하는 조건 추가
- Sprite 설정 직후 한 프레임 대기하거나 LateUpdate() 혹은 Coroutine에서 Collider 재계산 시도
- 최종적으로 Sprite 교체 → Collider size, offset 설정을 한 함수에서 처리
아쉬운점
자동화를 진행하여 작업하고 싶었으나, 이미지구조가 자동화를 하기에 어려움이 있었다. 이미지를 모두 Trim을 짜서 잡거나, 연산을 몹시 복잡하게 끌고가야해서 결국 하드코딩으로 값을 넣어준것이 아쉽다.
'Unity > Unity 개발' 카테고리의 다른 글
| Unity에서 컴포넌트 참조 방식 비교 및 최적화 전략 (1) | 2025.05.20 |
|---|---|
| 탑다운 게임에서 곡사포 형식의 투사체 발사 구현 (0) | 2025.05.14 |
| 몬스터 스킬 시스템 설계 및 개선 과정 (0) | 2025.05.12 |
| A* 경로 탐색 알고리즘 적용 (0) | 2025.05.12 |
| 몬스터 프리팹 구조 설계 "프리팹 1개 주입 방식 vs 몬스터별 프리팹 방식" (1) | 2025.05.08 |