이전 글에서 DoTween을 다운받아 시작해 보았습니다!
간단하게 오브젝트에 대해서 움직여 보고, 그래프에 대해서 알아보았습니다.
이번엔 조금 더 나아가 다양한 애니메이션을 하나의 액터에 적용시켜 줄때 어떻게 해야하는지 알아보겠습니다.
여러 애니메이션을 사용하는방법은
그저 여러 애니메이션을 동시에 적용시켜 주면 됩니다...?
아래의 두 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사용방법과는 다르지만 이용한다는 부분에서 봐주시면 될 것 같습니다!
사용함수는 아래와 같습니다.
약간 리스트 느낌으로 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에 대해 정리된 참고 블로그!
Dotween 기능에 대한 정리 참고 블로그!
틀린점이 있다면 댓 달아주세요!
'유니티 최고 > 유니티 기초' 카테고리의 다른 글
[Unity]포스트 프로세싱(Post Processing)란 (0) | 2024.08.28 |
---|---|
[Unity]시네마틱 카메라 사용하기 (Cinemachine) (0) | 2024.05.13 |
[Unity]애니메이션 간편 툴 DoTween 사용해보기 & Ease 그래프 + 기본 transform (0) | 2024.04.22 |
유니티(Unity) Legacy 와 TextMesh Pro의 차이 & 글꼴(Font) 지정하기 (0) | 2024.04.17 |
유니티(Unity) 상속에 대해서 + 사용법 (0) | 2024.04.05 |
댓글