Unity DoTween 플러그인 마스터 가이드

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 AnimationDOTween Path 컴포넌트를 제공합니다.

핵심 메서드 유형

  1. DO로 시작하는 메서드: 트윈 애니메이션을 생성합니다. 예: transform.DOMoveX(100, 1)
  2. Set으로 시작하는 메서드: 트윈의 속성을 설정합니다. 예: myTween.SetLoops(4, LoopType.Yoyo)
  3. On으로 시작하는 메서드: 트윈의 콜백 함수입니다. 예: myTween.OnStart(myStartFunction)

용어 정리

  • Tweener: 개별 애니메이션 유닛
  • Sequence: 여러 Tweener를 순차적으로 실행하는 컨테이너
  • Tween: Tweener + Sequence의 총칭
  • Nested tween: Sequence 내부의 개별 Tweener

애니메이션 조합 방식

Sequence는 AppendJoin을 통해 애니메이션을 유연하게 조합할 수 있습니다.

주요 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: 시퀀스 시작 부분에 추가

주의사항:

  1. 메서드는 시퀀스 생성 직후 또는 일시 중지 상태에서만 호출 가능
  2. 트윈은 완전히 생성된 후에만 시퀀스에 추가 가능
  3. 무한 루프 트윈은 시퀀스에 추가 불가
  4. 콜백과 지연만으로 구성된 시퀀스는 타이머로 사용 가능

애니메이션 콜백

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)

태그: Unity DoTween Tween Sequence Animation

6월 16일 01:59에 게시됨