유니티에서 스파인 최적화

lenore·2026년 2월 10일

Spine에서 Skeleton Animation이 UI보다 최적화 면에서 더 유리합니다.

주요 차이점

Skeleton Animation의 장점:

  • 드로우콜 최적화: 여러 sprite들이 하나의 skeleton으로 묶여 batching되어 드로우콜이 적음
  • 메모리 효율: 애니메이션 데이터가 bone transform 정보만 저장하므로 용량이 작음
  • 동적 변경 용이: 런타임에 skin, attachment 교체가 효율적
  • 물리/IK 지원: procedural animation 구현 가능

Spine Graphic (SkeletonGraphic)의 특징:

  • Unity UI Canvas 시스템과 통합되어 UI 요소로 작동
  • Canvas의 batching 시스템을 따르므로 다른 UI 요소들과 함께 처리
  • Rect Transform 기반으로 UI 레이아웃에 적합
  • 추가 오버헤드: Canvas rebuilding, raycast target 등의 UI 시스템 비용 발생

최적화 권장사항

게임 내 캐릭터/오브젝트: SkeletonAnimation 사용

  • 월드 공간에서 렌더링
  • MeshRenderer 기반으로 더 가벼움

UI 요소 (체력바 위 아이콘 등): SkeletonGraphic 사용

  • Canvas 시스템과의 통합 필요시에만
  • UI sorting/masking이 필요한 경우

단순 성능만 고려한다면 SkeletonAnimation이 항상 더 최적화되어 있습니다.

Canvas 시스템이 무거운 이유

1. Canvas Rebuilding (재구축)

UI 요소가 변경될 때마다:
- 전체 Canvas의 메쉬를 다시 계산
- 레이아웃을 다시 배치
- Spine 애니메이션은 매 프레임 변경됨 → 매 프레임 Canvas 재구축!

2. Raycast Target (클릭 감지)

  • Canvas는 기본적으로 모든 UI 요소에서 터치/클릭 감지
  • 매 프레임 raycast 연산 수행
  • Skeleton Animation은 이런 체크가 없음

3. Batching 방식 차이

Skeleton Animation:
Sprite A + Sprite B + Sprite C → 1 드로우콜

Skeleton Graphic:
Button + Text + Spine + Image → Canvas가 모두 합침
→ 하지만 재질/텍스처 달라지면 다시 분리
→ Canvas 전체를 관리하는 오버헤드 추가

4. RectTransform 계산

  • UI는 앵커, 피벗, 사이즈 등 복잡한 레이아웃 계산
  • Transform만 쓰는 Skeleton Animation보다 무거움

비유

  • Skeleton Animation = 혼자 달리는 선수 (가벼움)
  • Skeleton Graphic = 버스 타고 가는 선수 (버스 운영 비용 추가)

UI 시스템 전체를 관리해야 해서 무거운 겁니다!

Raycast 연산이란?

"마우스/터치가 UI를 클릭했는지 체크하는 계산"

동작 방식

매 프레임마다:
1. 마우스 위치에서 광선(Ray)을 쏨
2. 모든 UI 요소를 순회하며 "이 UI가 맞았나?" 체크
3. 맞은 UI 찾으면 클릭 이벤트 발생

문제점

Canvas에 UI가 100개 있으면:
- 매 프레임 100개 전부 체크
- Spine Graphic도 체크 대상에 포함
- 애니메이션 중이어도 계속 체크

Skeleton Animation:
- 클릭 체크 안 함 (UI 아니니까)
- 필요하면 Collider2D로 직접 구현

예시

Canvas 안에:
[버튼] [텍스트] [Spine캐릭터] [이미지] [슬라이더]

마우스 클릭 시:
"버튼 맞았나? X"
"텍스트 맞았나? X"  
"Spine 맞았나? X"
"이미지 맞았나? O" ← 찾았다!

Raycast = "광선 쏴서 뭐 맞았나 확인"
UI는 이걸 매 프레임 자동으로 하니까 무겁습니다!

profile
VFX Artist in Korea

0개의 댓글