Unity의 강력한 애니메이션 / 트위닝(inbetweening) 라이브러리인 DOTween에 대해 알게 되었다.
DOTween은 게임 오브젝트를 쉽게 움직이거나, 스케일을 변경하거나, 회전시키는 등의 다양한 애니메이션 작업을 단순화해주는 라이브러리다. 코드를 통해 세밀한 제어가 가능하며, 성능 또한 뛰어나다.
public class WithoutDOTweenExample : MonoBehaviour
{
public float speed = 1f;
void Update()
{
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, new Vector3(10, 0, 0), step);
}
}
위 코드는 객체를 이동시키는 단순한 방법이다. transform.position을 직접 조작한다.
객체를 (10, 0, 0)으로 이동시킬 수 있다.
그러나 위 방식은 매 프레임마다 Update()함수를 호출하여 오브젝트의 위치를 변경시킨다.
이때, DOTween을 사용하면 훨씬 간단하게 수행할 수 있다.
using DG.Tweening;
public class WithDOTweenExample : MonoBehaviour
{
void Start()
{
transform.DOMove(new Vector3(10, 0, 0), 1);
}
}
DOMove() 함수는 목표 위치, 걸리는 시간만 지정한다면 알아서 부드럽게 움직이도록 해준다.
transform.DOMove(new vector3(x, y, z), time);
using DG.Tweening;
public class SequenceExample : MonoBehaviour
{
void Start()
{
Sequence s = DOTween.Sequence();
s.Append(transform.DOMoveX(10, 1)); // x축으로 10만큼 이동하는데 1초 걸림
s.Append(transform.DOScale(new Vector3(2,2,2), 1)); // 스케일을 (2,2,2)로 변경하는데 1초 걸림
// 실행 순서: x축 이동 -> 스케일 변경
}
}
Append 메소드를 사용하여 애니메이션을 순차적으로 추가한다. 첫 번째 에니메이션이 끝나면, 다음 애니메이션이 시작된다.
using DG.Tweening;
public class LoopExample : MonoBehaviour
{
void Start()
{
transform.DOMoveX(10, 1).SetLoops(-1);
// x축으로 10만큼 이동하는데 이를 무한 반복함 (-1은 무한 반복을 의미)
}
}
위 코드에서 SetLoops 메소드는 애니메이션을 지정된 횟수만큼 반복하도록 설정한다.
using DG.Tweening;
public class PauseExample : MonoBehaviour
{
private Tween myTween;
void Start()
{
myTween = transform.DOMoveX(10, 5);
// x축으로 10만큼 이동하는데 이를 저장해둔다.
Invoke("PauseMyTween", 3f);
// "PauseMyTween" 함수를 3초 후에 호출한다.
// 즉, 원래라면 총 걸리는 시간인 5초 중간에 멈추게 됨.
}
void PauseMyTween()
{
myTween.Pause();
// 저장해둔 트윈 애니메이션을 일시정지한다.
}
}
위 코드에서 Pause 메소드는 현재 실행중인 트윈 애니메이션을 일시 정지한다.
ween 객체(myTween)를 따로 저장해두었다가 이를 이용해 Pause 메소드를 호출하는 것이다.
즉, Tween 객체를 따로 관리하면 나중에 재생, 재시작 등의 제어도 가능하다.
DOTween 라이브러리를 활용하면 캐릭터 이동, 공격 모션, 아이템 획득 시의 에펙트 등 게임 내 다양한 상황에서 부드럽고 자연스러운 애니메이션 효과를 구현할 수 있다.
이를 통해 게임 내 요소들의 움직임을 보다 생동감 있게 만들 수 있으며, 사용자 경험(UX) 역시 크게 개선될 것으로 예상된다.
UI 요소 생산하기