말감로그

[Unity] DOTween 본문

Unity

[Unity] DOTween

habbn 2025. 2. 5. 22:42
728x90

DOTween은 Unity에서 트윈(Tween) 애니메이션을 쉽게 적용할 수 있도록 도와주는 강력한 애니메이션 라이브러리

기존의 Lerp, Coroutine을 사용하는 방식보다 더 직관적이고 성능 최적화된 애니메이션 처리를 제공한다.

 

DOTween 설치하기

https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676

 

DOTween (HOTween v2) | 애니메이션 도구 | Unity Asset Store

Use the DOTween (HOTween v2) tool from Demigiant on your next project. Find this & more animation tools on the Unity Asset Store.

assetstore.unity.com

 


DOTween의 주요 특징

1. 부드러운 애니메이션 처리

  • Transform(Position, Rotation, Scale)뿐만 아니라 UI 요소, 색상, 숫자, 재질(Property) 등 다양한 요소를 애니메이션화할 수 있음.
  • 애니메이션을 체인(Chaining) 방식으로 연결하여 복잡한 애니메이션도 간단하게 구현 가능.
transform.DOMove(new Vector3(5, 2, 0), 1f).SetEase(Ease.OutQuad);

 

2.  최적화된 애니메이션 성능

  • 메모리 재사용(Object Pooling) 기법을 적용하여 GC(Garbage Collection) 발생을 최소화
  • 기존의 Coroutine을 사용하는 방식보다 CPU 부하가 적고 FPS 하락을 줄이는 데 유리
  • 내부적으로 Time.timeScale을 컨트롤하여 정밀한 타이밍 제어 가능.

3.간결한 코드

  • Coroutine 없이 한 줄의 코드로 애니메이션을 쉽게 구현 가능
  • 애니메이션을 연속으로 실행하는 체이닝(Chaining) 지원
  • OnComplete(), SetLoops(), SetEase() 등의 다양한 옵션 제공
transform.DOMoveX(5, 1f) .OnComplete(() => spriteRenderer.DOColor(Color.red, 0.5f));

4. 다양한 Ease(Easing) 지원

  • 움직임의 속도를 자연스럽게 조절하는 Ease(이징) 함수 제공
  • 부드러운 가속/감속 효과 (Ease.InOutQuad, Ease.OutBounce 등)
  • 커스텀 이징 함수 지원 가능
 
transform.DOMove(new Vector3(5, 2, 0), 1f).SetEase(Ease.OutBounce);

 


DOTween이 코루틴보다 퍼포먼스적으로 최적화된 이유

1. GC(Garbage Collection) 발생이 적음

- 코루틴의 문제점

  • IEnumerator를 반환하는 코루틴은 실행될 때마다 새로운 개체(Iterator)를 생성
  • 반복문을 통해 매 프레임마다 yield return을 실행하면서 GC(가비지 컬렉션) 발생 가능성 증가
  • 특히 WaitForSeconds와 같은 객체는 매번 새로 생성되므로 메모리 할당이 지속적으로 발생

-  DOTween의 최적화 방식

  • DOTween은 내부적으로 메모리를 미리 할당하고 재사용(Pooling)하는 방식을 사용
  • 애니메이션을 실행할 때마다 새로운 객체를 생성하는 것이 아니라, 기존 트윈(Tween)을 재사용하여 메모리 낭비를 최소화

-> 코루틴은 반복 실행할 때마다 새로운 오브젝트를 생성하지만, DOTween은 메모리 할당을 최소화하고 재사용하여 GC 발생을 줄인다.

 

2. 더 높은 성능의 타이밍 제어 (FixedUpdate vs Time.deltaTime)

- 코루틴의 문제점

  • 코루틴은 Time.deltaTime을 기반으로 실행되며, 프레임이 불규칙할 경우 애니메이션이 끊길 가능성이 있음
  • WaitForSeconds는 정확한 타이밍 제어가 어려움
  • FixedUpdate에서 실행하면 프레임에 따라 타이밍이 일정하지 않을 수 있음

- DOTween의 최적화 방식

  • 고유한 타이머 시스템을 사용하여 Time.timeScale과 관계없이 부드러운 애니메이션 적용
  • 프레임 속도에 영향을 받지 않고 일정한 속도로 트윈을 진행할 수 있음

-> DOTween은 보다 정밀한 타이밍을 제공하여, 프레임이 흔들려도 애니메이션이 자연스럽게 유지됨

 

3. 간결한 코드로 인해 오버헤드 감소

- 코루틴의 문제점

  • 애니메이션을 구현할 때 코루틴은 여러 줄의 코드가 필요하고 유지보수가 어려움
  • 여러 애니메이션을 동시에 실행하려면 여러 개의 코루틴을 관리해야 함
  • 복잡한 체이닝 애니메이션을 만들 경우 각각의 타이밍을 수동으로 조절해야 하는 번거로움

- DOTween의 최적화 방식

  • 한 줄의 코드로도 복잡한 애니메이션을 구현 가능
  • SetEase(), OnComplete(), SetLoops() 등을 활용하여 더 직관적이고 효율적인 코드 작성 가능
  • 체이닝(Chaining) 기능을 지원하여 여러 애니메이션을 간단하게 연결 가능
// 코루틴 방식 (비효율적)
IEnumerator MoveObject()
{
    while (Vector3.Distance(transform.position, target) > 0.1f)
    {
        transform.position = Vector3.Lerp(transform.position, target, Time.deltaTime * 5f);
        yield return null;
    }
}

// DOTween 방식 (최적화된 방식)
transform.DOMove(target, 1f).SetEase(Ease.OutQuad);

 

 

-->DOTween은 더 간결한 코드로 인해 유지보수와 최적화가 용이하며, 애니메이션 실행 속도도 빠름.

 

Ease  이름 설명 애니메이션 느낌
Linear 일정한 속도 꾸준히 움직임 (기계적)
InSine 처음 느리고 점점 빨라짐 천천히 시작
OutSine 빠르게 시작, 천천히 끝 부드럽게 멈춤
InOutSine 천천히 시작 → 빨라짐 → 부드럽게 멈춤 감성적 자연스러움
InQuad 점점 가속 빠르게 진입
OutQuad 빠르게 시작 후 감속 빠르게 치고 빠짐
InOutQuad 가속 → 감속 일반적인 자연 움직임
InCubic 점점 더 빠르게 점점 강하게 진입
OutCubic 점점 더 느리게 감속 끝연출
InOutCubic 가속-감속 고급진 부드러움
InBack 시작 전 약간 뒤로 당겼다 튕김 "두둥" 진입 효과
OutBack 튀어나갔다가 멈춤 팝업/버튼 애니 추천
InOutBack 앞뒤로 튕기며 등장 강한 강조 연출
InElastic 점점 빨라지며 탄성처럼 튀면서 도착 와장창! 등 극적 효과
OutElastic 도착하면서 튕기듯 흔들림 과장된 팝업 느낌
InOutElastic 양쪽에서 흔들리며 등장 장난감처럼 튀는 느낌
InBounce 바닥에서 튀듯이 진입 무게감 있는 도약
OutBounce 튀면서 멈춤 떨어뜨리는 느낌
InOutBounce Bounce 진입과 종료 재미있는 연출용
728x90