본문 바로가기
유니티 최고/유니티 기초

[Unity]애니메이션 간편 툴 DoTween Sequence 사용하기 (DoTween 순서대로 실행)

by Lee_story_.. 2024. 4. 24.
728x90

 

 

이전 글에서 DoTween을 다운받아 시작해 보았습니다!

간단하게 오브젝트에 대해서 움직여 보고, 그래프에 대해서 알아보았습니다.

 

[Unity]애니메이션 간편 툴 DoTween 사용해보기 & Ease 그래프 + 기본 transform

게임을 개발하다보니 다양한 이펙트, 움직임들을 기획하게 되었습니다. 갑자기 확 나타나는 ui는 뭔가 밋밋했기에 만들기로 하였고, 이전글에서는 애니메이션으로 개발을 진행했던 경험이 있었

ljhyunstory.tistory.com

 

 

 

이번엔 조금 더 나아가 다양한 애니메이션을 하나의 액터에 적용시켜 줄때 어떻게 해야하는지 알아보겠습니다.

 

 

 

여러 애니메이션을 사용하는방법은 

그저 여러 애니메이션을 동시에 적용시켜 주면 됩니다...?

 

아래의 두 DO 함수를 사용하면

        gameObject.transform.DOScale(new Vector3(2f, 2f, 2f), 1f).SetLoops(-1, LoopType.Yoyo);
        gameObject.transform.DORotate(new Vector3(180f, 180f, 180f), 1f).SetLoops(-1, LoopType.Yoyo);

 

 

 

 

아래처럼 동작하게 됩니다. 

 

 

 

하지만! 오브젝트에대해서 커지는 애니메이션 다음 회전하고, 회전이 끝나면 이동하게끔! 

구성하기 위해서는 위와 같은 방법으로는 무리....

 

 

애니메이션을 순차적으로 실행시키는데에는 2가지 방법이 있습니다. 

 

 

 

첫번째는 Chained callbacks 함수들을 사용하는 방법!


앞글에서는 소개하지 못하였지만 Do함수들을 배치하고 난 후 실행하게 되면 

씬 자체에 DoTween이라는 DontDestroy 오브젝트가 생성됩니다. 

 

내부를 살펴보면 현재 트윈들의 상태와 세팅에 대해서 알려주는데....

 

여기서 트윈이란??   >>> Do함수들을 사용해서 오브젝트를 조작하게 되면,

이것을 DoTween에서 Tween이라는 객체를 이용하여 실행하는데 아래의 인스펙터 창에서 확인 가능합니다. 

 

 

아래처럼 지정할수도 있습니다!

Tween tw = transform.DOScale(new Vector3(2f, 2f, 2f), 2f)

 

 

 

 

 

이제 Chained callbacks 함수에 대해 알아봅시다.

콜백 함수는 현재 진행중인 트윈에 대해서 주시하고있다 특정 상황에 도달하면 동작하는 함수들입니다. 

 

 

위 함수들이 바로 콜백함수들로 생성시, 플래이시, 정지시, 완료시 등 다양한 상태에 대해서 처리를 해 줄 수 있습니다. 

 

 

이 중 OnComplete를 코드로 사용해보면 아래처럼 구성 가능합니다.

Tween tw = transform.DOScale(new Vector3(2f, 2f, 2f), 2f)
                .OnComplete(() =>
                {
                    gameObject.transform.DORotate(new Vector3(180f, 180f, 180f), 2f);

                    
                });

 

 

 

 

 

 

물론 인스펙터창에서 아래처럼 구성 가능하기도 하지만 약간의 제약사항이 있는것 같습니다...

(다양한 변수가 필요한 함수들을 사용할 수 없다...?)

 

 

위 의 방법들로 callBack함수들을 만들어 주면 아래처럼!

 

 

 

 

하지만 이러한 방법도 여러개의 애니메이션을 결합하는데에는 문제가 있습니다 .

 

이러한 부분에 대해서 DoTween에서는 하나의 방법에 대해서 지원하는데

 

 

 

바로 Sequence!


 

 

Sequence 클래스 (System.Activities.Statements)

정의된 하나의 순서에 따라 자식 작업 집합을 실행합니다.

learn.microsoft.com

 

 

물론 위의 Sequence사용방법과는 다르지만 이용한다는 부분에서 봐주시면 될 것 같습니다!

 

 

사용함수는 아래와 같습니다.

약간 리스트 느낌으로 Tween들을 추가, 삽입, 조인(동시실행) 등의 기능들이 존재합니다. 

 

 

 

각각의 함수들은 아래와 같은 기능들을가지고 있습니다.

 

Append의 경우는 가장 뒤 시퀀스에 트윈을 추가해주는 함수

.Append(gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2f))

 

Join은 앞선 트윈과 동시에 진행하는 함수

.Join(gameObject.transform.DOScale(new Vector3(0.5f, 0.5f, 0.5f), 2f))

 

Insert는 특정시간에 트윈을 실행시키는 함수

.Insert(1f, gameObject.transform.DOScale(new Vector3(3f, 3f, 3f), 2f));

 

Prepend는 가장 앞에 트윈을 추가해주는 함수

.Prepend(gameObject.transform.DOScale(new Vector3(3f, 3f, 3f), 2f));

 

 

 

코드로 작성해 보면 

        Sequence Testseq = DOTween.Sequence();
        Testseq.SetAutoKill(false)
            .Append(gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2f))
            .Join(gameObject.transform.DOScale(new Vector3(0.5f, 0.5f, 0.5f), 2f))
            .Append(gameObject.transform.DOMove(new Vector3(-4f, -4f, -4f), 2f))
            .Join(gameObject.transform.DOScale(new Vector3(3f, 3f, 3f), 2f));

 

단순히 append로 트윈들을 추가해줄 수 있고,  동시에 진행하게끔 Join해줄 수 있고,

 

동작도 굳!

 

 

 

 

이렇게 생성해준 시퀀스는 한번 실행하면 삭제되버립니다.

 

왜?  >>   기본적으로 Dotween에서는 트윈이 생성되면 완료와 동시에 삭제되게끔 SetAutoKill를 활성화 해놓았기 때문!

 

설정값에서 변경해줄 수도 있지만.... (트윈이 쌓여버리면 엄청난 과부하가 발생할지도..)

 

 

그렇기에 시퀀스에 대해서 여러번 사용할 것이라면 아래처럼 설정하여,

다시 생성하는 비효율 요소를 없애 주는것도 좋아 보입니다! 

.SetAutoKill(false)

 

 

 

이 외에도 시퀀스에 위에서 확인한OnStart, OnRewind 등의 콜백함수들을 이어 사용할 수 있고,

 

트윈 사이에 공백기를 부여 할 수 있는 SetDelay를 사용할 수 있습니다!

.SetDelay(3f);

 

 

 

아직 모르는게 많지만... 지금은 여기까지!

 

 

저에게는 생소한 툴이라 정보가 많이 없을줄 알았는데, 생각보다 많은 분들이 사용하는 툴인것 같습니다.

정리된 글들도 많이 있어서 하나하나 비교하며 읽어봐야할 것 같습니다!

(어떻게 사용하는지 팁같은게 되게 중요할 것 같습니다...)

 

 

여기까지 끝!

 

 

 

 

Sequence에 대해 정리된 참고 블로그!

 

[Asset] Unity3D 'DOTween' 2 : Sequence와 팁

※ 1편 [ Sequence ] 하나의 변환을 가진 Tween들을 시간과 순서에 맞춰 배열하여 연속된 하나의 장면을 ...

blog.naver.com

 

 

 

Dotween 기능에 대한 정리 참고 블로그!

 

[Unity/C#]DOTween의 모든것

1. DOTween? > tween: 오브젝트의 시간당 변화 or 두 지점을 이어주는 뜻 Unity에서 움직임을 보다 편리하게 설정해주기 위한 라이브러리 아래 전처리문 등록 필수 2. DOTween 계열 DOTween은 아래 계열 함수

velog.io

 

 

 

 

 

 

 

틀린점이 있다면 댓 달아주세요!

 

 

댓글