[Unity] DOTween
![[Unity] DOTween](/_next/image?url=https%3A%2F%2Fdata.develog.develrocket.com%2Fupload%2Fdevelog%2Fuser_1777093328305%2F1780401254046-x5y1k6%2F_____2026-06-02_205320.png&w=3840&q=75)
본문 로딩 중...
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!
DOTween은 Unity에서 애니메이션(Tween)을 쉽고 빠르게 구현할 수 있도록 도와주는 라이브러리이다. 복잡한 코루틴이나 Update문 없이도 오브젝트의 이동, 회전, 크기 변경, UI 애니메이션 등을 간단한 코드로 만들 수 있다.
이번 프로젝트에서 DOTween 을 이용해 화면이 닫혔다가 다시 열리는 Iris Transition 효과를 구현했다.
코드
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
seq.Append(
DOTween
.To(
() => irisMaterial.GetFloat("_Radius"),
v => irisMaterial.SetFloat("_Radius", v),
0f,
closeDuration
)
.SetEase(Ease.InQuart)
);
DOTween.To()는 특정 값을 일정 시간 동안 부드럽게 변경한다
이 코드에서는 쉐이더의 _Radius값을 1->0 으로 변경하여 화면이 점점 닫히는 효과를 만든다.

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