[TIL] Unity - DOTween - day 68

뭉크의 개발·2023년 10월 23일
0

Unity - Camp

목록 보기
37/70
post-thumbnail

🐧 들어가기 앞서

Unity의 강력한 애니메이션 / 트위닝(inbetweening) 라이브러리인 DOTween에 대해 알게 되었다.


🐧 오늘 배운 것

DOTween은 게임 오브젝트를 쉽게 움직이거나, 스케일을 변경하거나, 회전시키는 등의 다양한 애니메이션 작업을 단순화해주는 라이브러리다. 코드를 통해 세밀한 제어가 가능하며, 성능 또한 뛰어나다.


🐧 기억할 것 & 진행

WithoutDOTween

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을 사용하면 훨씬 간단하게 수행할 수 있다.

WithDOTween

DOMove()

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);

Sequence

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 메소드를 사용하여 애니메이션을 순차적으로 추가한다. 첫 번째 에니메이션이 끝나면, 다음 애니메이션이 시작된다.


Loop

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 요소 생산하기

0개의 댓글