"두트윈(DOTween)"은 Unity용 고성능 트위닝(tweening) 라이브러리로, 오브젝트의 이동, 회전, 크기, 색상, 알파 값 등의 애니메이션을 간단하고 직관적으로 처리할 수 있게 해줍니다.
(DOTween은 Demigiant에서 만든 라이브러리입니다.)
✅ DOTween의 주요 특징
특징설명
| 고성능 |
Unity 내부에서 메모리를 최소화하고 빠르게 작동하도록 최적화되어 있음. |
| 간편한 문법 |
메서드 체이닝 기반의 직관적인 API 제공. |
| 다양한 트위닝 지원 |
위치, 회전, 스케일, 컬러, 알파, UI 등 다양한 요소 애니메이션 지원. |
| 시퀀스 지원 |
여러 트윈을 순차적으로 또는 동시에 실행 가능. |
| 시간 스케일 무시 가능 |
SetUpdate(true)로 Time.timeScale = 0일 때도 동작 가능. |
| Play, Pause, Kill, Restart 등 제어 기능 풍부 |
애니메이션 상태를 제어하는 다양한 함수 지원. |
✅ 기본 사용법 예시
1. 초기 설정
- Unity 패키지 매니저 또는 Asset Store에서 설치.
- 또는 Tools > DOTween Utility Panel에서 설치 완료 확인 후 Setup.
2. 위치 트윈 (Transform 이동)
transform.DOMove(new Vector3(5, 0, 0), 1f); // 1초 동안 (5,0,0)으로 이동
3. 회전 트윈
transform.DORotate(new Vector3(0, 180, 0), 2f);
4. 스케일 트윈
transform.DOScale(Vector3.zero, 1f); // 1초 동안 점점 작아짐
5. 색상 트윈 (SpriteRenderer 등)
spriteRenderer.DOColor(Color.red, 1f);
✅ 메서드 체이닝 예시
transform.DOMoveX(3f, 1f)
.SetEase(Ease.InOutBounce)
.SetLoops(2, LoopType.Yoyo)
.OnComplete(() => Debug.Log("Move done!"));
- SetEase: 애니메이션 곡선
- SetLoops: 반복 설정 (횟수, 타입)
- OnComplete: 완료 시 콜백
✅ Sequence 사용 예시 (복합 애니메이션)
Sequence seq = DOTween.Sequence();
seq.Append(transform.DOMoveX(3f, 1f))
.Append(transform.DOScale(2f, 0.5f))
.Join(transform.DORotate(new Vector3(0, 180, 0), 1f))
.AppendCallback(() => Debug.Log("Sequence Done"));
- Append: 순차 실행
- Join: 병렬 실행
- AppendCallback: 중간에 함수 삽입
✅ 주의점 및 팁
항목설명
| DOTween 초기화 필수 |
설치 후 DOTween Utility Panel에서 Setup DOTween 필수. |
| PlayMode에서도 잘 동작함 |
TimeScale 0에서도 애니메이션 가능 (SetUpdate(true)) |
| 오브젝트가 파괴되면 트윈도 중단됨 |
SetAutoKill(false)로 방지하거나, Kill() 사용 권장. |
| GC 최소화됨 |
성능에 민감한 프로젝트에서도 부담이 적음. |
| UI 지원 |
RectTransform.DOAnchorPos, CanvasGroup.DOFade 등 UI 요소도 트윈 가능 |
✅ 대표적인 트윈 함수 정리
함수설명
| DOMove, DOMoveX/Y/Z |
위치 이동 |
| DORotate, DOLocalRotate |
회전 |
| DOScale, DOScaleX/Y/Z |
스케일 |
| DOColor |
색상 변경 |
| DOFade |
알파 변경 |
| DOFillAmount |
이미지 채우기 |
| DOAnchorPos |
UI 위치 이동 |
| DOText |
텍스트 애니메이션 (TextMeshPro 등) |
✅ C++에서 메서드 체이닝을 사용하는 대표 사례
1. C++ iostream (입출력 스트림)
#include <iostream>
int main() {
std::cout << "Hello, " << "world!" << std::endl;
return 0;
}
- std::cout은 operator<<를 체이닝할 수 있도록 설계되어 있음.
- operator<<는 참조(보통 ostream&)를 반환하므로, 다음 호출이 이어질 수 있음.
std::ostream& operator<<(std::ostream& os, const char* str);
2. C++ 사용자 정의 클래스에서의 메서드 체이닝
class Builder {
public: Builder& setA(int val) { a = val; return *this; }
Builder& setB(int val) { b = val; return *this; }
void print() const { std::cout << "A: " << a << ", B: " << b << '\n'; }
private: int a = 0; int b = 0;
}; // 사용 예시 Builder obj; obj.setA(10).setB(20).print();
✅ C#에서 메서드 체이닝을 사용하는 대표 사례
1. StringBuilder (System.Text)
using System.Text;
var sb = new StringBuilder();
sb.Append("Hello ")
.Append("World!")
.AppendLine();
Console.WriteLine(sb.ToString());
- Append, AppendLine 등이 모두 StringBuilder 자신을 반환합니다.
2. LINQ 메서드 체이닝
using System.Linq;
var result = Enumerable.Range(1, 10)
.Where(x => x % 2 == 0)
.Select(x => x * x)
.ToList();
foreach (var x in result) Console.WriteLine(x);
- Where, Select, ToList 등 LINQ 메서드들이 체이닝 가능하도록 IEnumerable을 반환.
요약 비교
언어체이닝 사용 예반환 방식
| C++ |
std::cout, 사용자 정의 |
참조 (&) 또는 포인터 (*this) |
| C# |
StringBuilder, LINQ |
자기 자신 또는 IEnumerable |