DoTween 개요
DoTween은 무료 버전과 Pro 버전으로 나뉩니다.
- 공식 웹사이트: http://dotween.demigiant.com/index.php
- 무료 버전 다운로드: http://dotween.demigiant.com/download.php
- Pro 버전 다운로드: http://dotween.demigiant.com/pro.php
- 공식 문서: http://dotween.demigiant.com/documentation.php
Pro 버전은 시각적 편집이 가능한 DOTween Animation과 DOTween Path 컴포넌트를 제공합니다.
핵심 메서드 유형
- DO로 시작하는 메서드: 트윈 애니메이션을 생성합니다. 예:
transform.DOMoveX(100, 1) - Set으로 시작하는 메서드: 트윈의 속성을 설정합니다. 예:
myTween.SetLoops(4, LoopType.Yoyo) - On으로 시작하는 메서드: 트윈의 콜백 함수입니다. 예:
myTween.OnStart(myStartFunction)
용어 정리
- Tweener: 개별 애니메이션 유닛
- Sequence: 여러 Tweener를 순차적으로 실행하는 컨테이너
- Tween: Tweener + Sequence의 총칭
- Nested tween: Sequence 내부의 개별 Tweener
애니메이션 조합 방식
Sequence는 Append와 Join을 통해 애니메이션을 유연하게 조합할 수 있습니다.
주요 Sequence 메서드
sequence.Append(Tween tween): 시퀀스 끝에 트윈을 추가하여 순차 실행sequence.AppendCallback(TweenCallback cb): 시퀀스 끝에 콜백 추가sequence.AppendInterval(float interval): 시퀀스 끝에 지연 시간 추가sequence.Insert(float time, Tween tween): 특정 시간에 트윈을 삽입 (겹침 실행)sequence.InsertCallback(float time, TweenCallback cb): 특정 시간에 콜백 삽입sequence.Join(Tween tween): 마지막으로 추가된 트윈과 동시 실행sequence.Prepend,sequence.PrependCallback,sequence.PrependInterval: 시퀀스 시작 부분에 추가
주의사항:
- 메서드는 시퀀스 생성 직후 또는 일시 중지 상태에서만 호출 가능
- 트윈은 완전히 생성된 후에만 시퀀스에 추가 가능
- 무한 루프 트윈은 시퀀스에 추가 불가
- 콜백과 지연만으로 구성된 시퀀스는 타이머로 사용 가능
애니메이션 콜백
DoTween은 다양한 생명주기 콜백을 제공합니다.
// 완료 시 콜백
transform.DOMoveX(4, 1).OnComplete(MyCallback);
// 제거 시 콜백
transform.DOMoveX(4, 1).OnKill(MyCallback);
// 재생 시작 시 콜백
transform.DOMoveX(4, 1).OnPlay(MyCallback);
// 일시 중지 시 콜백
transform.DOMoveX(4, 1).OnPause(MyCallback);
// 되감기 시 콜백
transform.DOMoveX(4, 1).OnRewind(MyCallback);
// 초기 시작 시 콜백
transform.DOMoveX(4, 1).OnStart(MyCallback);
// 각 루프 완료 시 콜백
transform.DOMoveX(4, 1).OnStepComplete(MyCallback);
// 매 프레임 업데이트 시 콜백
transform.DOMoveX(4, 1).OnUpdate(MyCallback);
// 경로 웨이포인트 변경 시 콜백
void Start() {
transform.DOPath(waypoints, 1).OnWaypointChange(MyCallback);
}
void MyCallback(int waypointIndex) {
Debug.Log("Waypoint index changed to " + waypointIndex);
}
실전 예제: 떠오르는 텍스트 효과
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
public class FlyText : MonoBehaviour {
public void FlyTo(Graphic graphic) {
RectTransform rt = graphic.rectTransform;
Color c = graphic.color;
c.a = 0;
graphic.color = c;
Sequence mySequence = DOTween.Sequence();
Tweener move1 = rt.DOMoveY(rt.position.y + 20, 0.5f);
Tweener move2 = rt.DOMoveY(rt.position.y + 40, 0.5f);
Tweener alpha1 = graphic.DOColor(new Color(c.r, c.g, c.b, 1), 0.5f);
Tweener alpha2 = graphic.DOColor(new Color(c.r, c.g, c.b, 0), 0.5f);
mySequence.Append(move1);
mySequence.Join(alpha1);
mySequence.AppendInterval(1);
mySequence.Append(move2);
mySequence.Join(alpha2);
}
}
실전 예제: 팝업 애니메이션
function ShowWindows(uiobj) {
local rt = uiobj.transform
rt.transform.position = Vector3.New(0, 0, 0)
rt.transform.localScale = Vector3.New(1, 1, 1)
local scaleTime = 0.05
local m_scale = rt:DOScale(Vector3(1.1, 1.1, 1), scaleTime)
m_scale:SetEase(DG.Tweening.Ease.Linear)
m_scale:SetLoops(2, DG.Tweening.LoopType.Yoyo)
m_scale = rt:DOScale(Vector3(0.9, 0.9, 1), scaleTime)
m_scale:SetEase(DG.Tweening.Ease.Linear)
m_scale:SetLoops(2, DG.Tweening.LoopType.Yoyo)
rt.transform:DOShakePosition(scaleTime, Vector3(10, 10, 10))
}
트윈 제어 및 속성 설정
void acTest() {
_tweener = _imageTrans.DOLocalMoveX(10, 9);
_tweener.PlayForward();
_tweener.PlayBackwards();
_tweener.SetEase(Ease.Linear);
_tweener.SetLoops(-1); // 무한 반복
_tweener.OnComplete(TweenComplete);
}
텍스트 타이핑 효과
void PrintStr() {
string str = "Printing characters!";
_text = GetComponent<Text>();
_text.DOText(str, 5);
_text.DOBlendableColor(Color.yellow, 5);
}
화면 흔들기 효과
void Shake() {
transform.DOShakePosition(2f, new Vector3(2, 2, 3));
transform.DOShakeScale(2, new Vector3(3, 3, 3));
}
트윈 일시 중지 방법
세 가지 방식으로 트윈을 일시 중지할 수 있습니다.
// 1. DOTween 정적 메서드
DOTween.PauseAll();
DOTween.Pause("badoom");
DOTween.Pause(someTransform);
// 2. Tweener 인스턴스 메서드
myTween.Pause();
// 3. 컴포넌트 DO 메서드
transform.DOPause();
고급 속성 설정: TweenParams
// TweenParams로 재사용 가능한 설정 생성
TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);
// 여러 트윈에 동일한 설정 적용
transformA.DOMoveX(15, 1).SetAs(tParms);
transformB.DOMoveY(10, 1).SetAs(tParms);
tolua 환경에서의 사용
function StepComplete()
logError("Single loop complete callback!")
end
function Complete()
logError("Animation complete callback!")
end
Panel.Light[1]:GetComponent('Image'):DOFade(0, 2)
Panel.Light[1]:GetComponent('Image'):DOColor(Color.New(1, 1, 1, 0.5), 2)
Panel.Light[1].transform:DOLocalMoveY(-300, -100, false):SetEase(DG.Tweening.Ease.Linear):SetLoops(-1):OnStepComplete(StepComplete)
local sequence = DG.Tweening.DOTween.Sequence()
sequence:Append(Panel.Light[1]:GetComponent("Image"):DOFade(1, 1.5))
sequence:Append(Panel.Light[1]:GetComponent("Image"):DOFade(0, 1.5))
sequence:Play()
sequence:OnComplete(Complete)