[Unity] DOTween (2)

suhan0304·2024년 6월 25일

유니티 - DOTween

목록 보기
4/5
post-thumbnail

Sequence를 다루기 전에 DOTween.Init으로 DOTween의 초기 설정을 해줄 수 있다. 생략해도 무방하지만 공부하는 김에 알고 있으면 나쁠 게 없다.

공식 문서는 위와 같지만 쉽게 설명하자면 아래와 같다.

DOTween.Init(false,true,LogBehaviour.Verbose).SetCapacity(200, 50);
// autoKillMode : 한 번 사용한 Dotween을 다시 재사용할지 결정
// useSafeMode : 약간 느리지만 실행되는 동안, 실행 대상이 파괴 될 경우와 같이 예외 상황을 자동으로 처리
// LogBehaviour : 오류 메시지 기록을 설정
// SetCapacity : 용량이 부족할 경우 자동으로 추가, 적절하게 사용시 성능 이점

익숙해지면 Tweener 별로 추가적인 설정이 가능하다.


Ease Type

저번에 InOutBounce를 사용해서 EaseType을 지정해줬는데 EaseType에 대해서도 아래 그래프를 참고하면 좋다.


Sequence

Tween을 순차적으로 실행하려면 어떻게 할까?

  • On 람다를 이용해 콜백 함수를 설정한다.

Cube.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class Cube : MonoBehaviour
{
    private Vector3 targetPos = new Vector3(0, 5, 0);
    private Vector3 targetScale = new Vector3(2, 2, 2);
    void Start()
    {
        transform
            .DOScale(1.5f, 2f)      // DO 대상의 변화를 직접 지시
            .SetEase(Ease.InCirc)   // Set 추가 설정
            .OnComplete(() => transform.DOMove(targetPos, 2.0f)); // On 람다를 이용한 콜백 함수
    }
}

  • OnComplete : Tween의 실행이 종료가 될 시 다음 함수 실행

On 콜백 함수는 종류가 많으므로 적절한 상황에 맞는 함수를 붙여서 사용하자.


추가적으로 Auto Kill Mode를 True로 하면 아래와 같이 Tweener을 매개변수화 해서 재사용이 가능하다.

void Start()
{  DOTween.Init(false,true,LogBehaviour.Verbose);

    Tweener tw = transform
        .DOScale(1.5f, 2f)
        .SetEase(Ease.InCirc)
        .OnComplete(() => transform.DOMove(targetPos, 2.0f));
        
	tw.Play();
}

굳이 init 함수를 호출하지 않더라도 아래와 같이 Tweener에 별도로 AutoKill 설정이 가능하다.

Tweener tw = transform
    .DOScale(1.5f, 2f)
    .SetEase(Ease.InCirc)
    .OnComplete(() => transform.DOMove(targetPos, 2.0f)).SetAutoKill(false); 

tw.Play();

tw.kill()로 죽이는 것도 잊지 말자. 즉, AutoKill은 성능에 영향을 줄 수 있다는 것을 기억하고 있자


Tween의 순차 실행을 간편하게 해주는 Sequnece를 다뤄보자. 시퀀스에 대한 개념은 기존의 UVS로 DOTween을 사용했을때 다뤘기 때문에 스크립트로 시퀀스를 어떻게 사용하는지에 대해서만 알아보자.

  • Append : 트윈을 시퀀스 마지막에 추가
  • Insert : 일정 시간에 시각
  • Join : 앞에 추가된 트윈과 동시 시작
  • Prerend : 맨 처음에 추가

Cube.cs

public class Cube : MonoBehaviour
{
    void Start()
    {
        Sequence seq = DOTween.Sequence();

        seq.Append(transform.DOMove(new Vector3(0f, 5f, 0f), 2f));
        seq.Join(transform.DORotate(new Vector3(0f, -180f, 0f), 2f));
        seq.Append(transform.DORotate(new Vector3(0f, 360f, 0f), 2f));
        seq.Insert(4.0f, transform.DOScale(new Vector3(1.5f, 1.5f, 1.5f), 1.0f));
        seq.Prepend(transform.DOScale(new Vector3(0.5f, 0.5f, 0.5f), 2.0f));
    }
}

이런식으로 스크립트로 시퀀스를 구현 가능하다.


DOTween의 기본적인 사용법에 대해 알아봤다. 진짜 코루틴과 lerp, Position, animator & motion을 쓸 때와 비교하면 개발 속도나 코드의 가시성 면에서 굉장히 유리하다. 또한 여러 개의 애니메이션 (Tween)을 동시 실행이 시퀀스를 통해 굉장히 간단하게 이루어진다는 것이 굉장히 개발 과정에서 유리할 것 같다. DOTween을 활용해 여러 예제를 만들어보면서 연습용으로 Clicker류 게임도 만들어 보면 좋을 것 같다.

profile
Be Honest, Be Harder, Be Stronger

0개의 댓글