[Unity] DOTween

muchan
muchan
∙∙조회 30
[Unity] DOTween

Unity DOTween이란?

DOTween은 Unity에서 애니메이션(Tween)을 쉽고 빠르게 구현할 수 있도록 도와주는 라이브러리이다. 복잡한 코루틴이나 Update문 없이도 오브젝트의 이동, 회전, 크기 변경, UI 애니메이션 등을 간단한 코드로 만들 수 있다.

DOTween의 장점

  • 간단한 코드로 애니메이션 구현 가능
  • 성능이 우수하고 사용이 편리함
  • 이동, 회전, 크기 변경, 색상 변경 등 다양한 기능 제공
  • 여러 애니메이션을 순차 또는 동시에 실행 가능

연습해보기

이번 프로젝트에서 DOTween 을 이용해 화면이 닫혔다가 다시 열리는 Iris Transition 효과를 구현했다.

코드

csharp
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;

public class DayTransitionUI : MonoBehaviour
{
    [SerializeField]
    private Image irisImage;

    [SerializeField]
    private float closeDuration = 0.8f;

    [SerializeField]
    private float openDuration = 0.8f;

    [SerializeField]
    private PlayerMovement playerMovement;

    private Material irisMaterial;

    private void Awake()
    {
        irisMaterial = Instantiate(irisImage.material);
        irisImage.material = irisMaterial;
        irisMaterial.SetFloat("_Radius", 1f);
        irisImage.gameObject.SetActive(false);
    }

    public void PlayTransition(System.Action onMidpoint)
    {
        irisImage.gameObject.SetActive(true);
        playerMovement.SetDead(true);
        Sequence seq = DOTween.Sequence();
        seq.Append(
            DOTween
                .To(
                    () => irisMaterial.GetFloat("_Radius"),
                    v => irisMaterial.SetFloat("_Radius", v),
                    0f,
                    closeDuration
                )
                .SetEase(Ease.InQuart)
        );
        seq.AppendCallback(() => onMidpoint?.Invoke());
        seq.AppendInterval(1f);
        seq.AppendCallback(() => playerMovement.SetDead(false));
        seq.Append(
            DOTween
                .To(
                    () => irisMaterial.GetFloat("_Radius"),
                    v => irisMaterial.SetFloat("_Radius", v),
                    1f,
                    openDuration
                )
                .SetEase(Ease.OutQuart)
        );
        seq.OnComplete(() => irisImage.gameObject.SetActive(false));
    }
}

값 Tweening

csharp
seq.Append(
            DOTween
                .To(
                    () => irisMaterial.GetFloat("_Radius"),
                    v => irisMaterial.SetFloat("_Radius", v),
                    0f,
                    closeDuration
                )
                .SetEase(Ease.InQuart)
        );

DOTween.To()는 특정 값을 일정 시간 동안 부드럽게 변경한다

이 코드에서는 쉐이더의 _Radius값을 1->0 으로 변경하여 화면이 점점 닫히는 효과를 만든다.

이런식으로 검은색 화면이 원으로 줄어드는 연출을 할 수 있다.