일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- 오블완
- KRAFTON JUNGLE
- 핀토스
- 연결리스트
- 파이썬
- project3
- 추상클래스와인터페이스
- anonymous page
- Unity
- pintos
- User Stack
- kraftonjungle
- 네트워크
- 크래프톤정글4기
- C
- c#
- 알고리즘수업-너비우선탐색2
- 이벤트 함수 실행 순서
- 전쟁-전투
- 크래프톤 정글 4기
- 크래프톤 정글
- 알고리즘
- 다익스트라
- BFS
- 유니티
- TiL
- 크래프톤정글
- 4기
- 티스토리챌린지
Archives
- Today
- Total
말감로그
[Unity] DOTween 본문
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
'Unity' 카테고리의 다른 글
네트워크 동기화 (0) | 2025.02.22 |
---|---|
[Unity] 디자인 패턴 - 오브젝트 풀링 (0) | 2025.02.20 |
[Unity] 유니티 성능 최적화 방법 (렌더링, 메모리) (0) | 2025.01.10 |
[유니티C# 스크립팅 마스터하기] - 4장 이벤트 주도적 프로그래밍 (1) | 2025.01.07 |
[유니티 C# 스크립팅 마스터하기] - 3장 싱글턴과 정적 멤버, 게임 오브젝트와 월드 (0) | 2025.01.06 |