[내일배움캠프 Unity 9기]

06/04 TIL 두트윈(feat. 메서드 체이닝)

kyvv 2025. 6. 4. 22:10

"두트윈(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