Unity - DOTween


DOTween이란?

오브젝트의 애니메이션 혹은 부드럽게 값을 변경할 때 기존의 유니티 내에서 제공하는 애니메이션 기능이나 번거로운 스크립트 작성 대신 함수 몇개로 쉽고 다양한 모션을 줄 수 있는 간편한 API

공식 문서는 다음과 같다. DOTween 공식문서

DOTween은 특정 변수 값들을 일정 시간 원하는 값으로 부드럽게 변화 시켜 주는 역할을 한다.

(float, double, int, uint, long, ulong, Vector2/3/4, Quaternion, Rect, RectOffset, Color, string 등)

Tweener

위와 같이 부드럽게 변환을 시켜주는 애를 Tweener라고 한다. Tweener를 사용하는데는 일반적으로 두 가지 방법이 존재한다.

우선 DOTween 관련 함수를 사용하려면 아래와 같이 네임스페이스를 추가해야 한다.

using DG.Tweening //import

1. DOTween.To 이용

static DOTween.To(getter, setter, to, float duration)

  1. getter - 초기값이 될 변수 혹은 값
  2. setter - 변환되는 값을 매개변수로 하는 함수 정의
  3. to - 목표 값
  4. duration - 변화 시간
DOTween.To(()=> myFloat, x=> myFloat = x, 100, 1);
DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,5), 10);

DOTween.To(() => "", str => myString = str, "hello, world!", 3);

2. 오브젝트 컴포넌트에 연결

1번째 방법보다 더 자주 사용하는 방식으로, 접근 방식이 직관적이기 떄문에 관리가 편리하다.

보통 값 변환을 원하는 컴포넌트의 뒤에 .Do~를 연결해서 사용한다.

주로 사용하는 컴포넌트
Transform(move/rotate/scale)
Material(color / fade)
Text
Camera
Light
Rigidbody

1) Transform : 오브젝트의 기본적인 이동, 회전, 크기 변환을 일정 시간동아 변환한다.

transform.DoMove(Vector3 목표값, float 변화시간, (bool 정수단위 이동여부));
transform.DoRotate(Vector3 목표값, float 변화시간, (RotateMode 회전방식));
transform.DoScale(Vector3 목표값, float 변화시간);

transform.DoLocalMove(...); //로컬 좌표 이동
transform.DoMoveX(...); //x축 이동

.DoShakePosition을 사용하면 충돌 시 흔들리는 효과를 간편하게 낼 수 있다.

2) Material : 오브젝트의 컬러값, 알파값등을 일정 시간동안 부드럽게 변환한다.

.DoColor(Color 목표값, float 변화시간)
.DOFade(float 목표값, float 변화시간)

1

3) Text : 일정 시간동안 텍스트가 타이핑되는 효과를 준다.

.DoText(string 전체텍스트, float 변화시간, (...))

2

그 외에 또 이용할 수 있는 함수들은 여기를 참고하면 된다.

Ease

.SetEase(Ease easeType / AnimationCurve animCurve / EaseFunction customEase)

변환에 부드러움, 다양함을 주기 위해 사용하는 변화량 그래프로 Tweener 뒤에 붙여 설정한다.

box.DOLocalMoveX(400, 1).SetEase(Ease.Linear);

3

4

Tip) 제공하는 종류가 많아 헷갈릴 수 있기 때문에 스크립트를 계속 변경하며 테스트하기 보다는 Ease 변수를 public으로 설정하여 Inspector창에서 값을 변경하는 테스트 방법을 권장한다.

5

Loops

.SetLoops(int loops, LoopType loopType = LoopType.Restart) : 변환을 반복하는 기능

  1. loops : 반복 회수 = -1이면 무한루프
  2. loopType : 반복 형태

box.DOLocalMoveX(200, 1).SetLoops(-1, LoopType.Restart);

7

LoopType 
Incremental종료된 시점을 시작 지점으로 모션이 다시 시작(연속)
Restart처음으로 되돌아가서 다시 시작
Yoyo실행 된 모션이 되감기 되며 다시 시작(반복 횟수는 돌아가는 모션까지 포함해야 함)

Callbacks

모션의 특정 상황에서 원하는 함수를 호출하는 기능(모션 시작, 종료 등)

8

좀 더 유연하게 함수를 호출하고 싶을 때는 람다식을 활용하여 아래와 같이 사용한다

myTween.OnComplete(()=>{
   //ex) 트윈 종료 후 실행
});

기타 설정/제어 함수

myTween.SetDelay(float 시간) //딜레이

myTween.Play() //재생
myTween.Pause() //일시정지
myTween.Rewind() //초기화
myTween.Restart() //재시작