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)
- getter - 초기값이 될 변수 혹은 값
- setter - 변환되는 값을 매개변수로 하는 함수 정의
- to - 목표 값
- 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 변화시간)
3) Text : 일정 시간동안 텍스트가 타이핑되는 효과를 준다.
.DoText(string 전체텍스트, float 변화시간, (...))
그 외에 또 이용할 수 있는 함수들은 여기를 참고하면 된다.
Ease
.SetEase(Ease easeType / AnimationCurve animCurve / EaseFunction customEase)
변환에 부드러움, 다양함을 주기 위해 사용하는 변화량 그래프로 Tweener 뒤에 붙여 설정한다.
box.DOLocalMoveX(400, 1).SetEase(Ease.Linear);
Tip) 제공하는 종류가 많아 헷갈릴 수 있기 때문에 스크립트를 계속 변경하며 테스트하기 보다는 Ease 변수를 public으로 설정하여 Inspector창에서 값을 변경하는 테스트 방법을 권장한다.
Loops
.SetLoops(int loops, LoopType loopType = LoopType.Restart) : 변환을 반복하는 기능
- loops : 반복 회수 = -1이면 무한루프
- loopType : 반복 형태
box.DOLocalMoveX(200, 1).SetLoops(-1, LoopType.Restart);
LoopType | |
---|---|
Incremental | 종료된 시점을 시작 지점으로 모션이 다시 시작(연속) |
Restart | 처음으로 되돌아가서 다시 시작 |
Yoyo | 실행 된 모션이 되감기 되며 다시 시작(반복 횟수는 돌아가는 모션까지 포함해야 함) |
Callbacks
모션의 특정 상황에서 원하는 함수를 호출하는 기능(모션 시작, 종료 등)
좀 더 유연하게 함수를 호출하고 싶을 때는 람다식을 활용하여 아래와 같이 사용한다
myTween.OnComplete(()=>{
//ex) 트윈 종료 후 실행
});
기타 설정/제어 함수
myTween.SetDelay(float 시간) //딜레이
myTween.Play() //재생
myTween.Pause() //일시정지
myTween.Rewind() //초기화
myTween.Restart() //재시작