[공식문서]
DOTween - Documentation
Nomenclature Tweener A tween that takes control of a value and animates it. Sequence A special tween that, instead of taking control of a value, takes control of other tweens and animates them as a group. Tween A generic word that indicates both a Tweener
dotween.demigiant.com
앞 장에서 Tweener의 사용 방법을 알았으니 이제 Sequence를 더 살펴볼 차례다.
Sequence
공식 문서에서 이야기하는 Sequence는 다음과 같다,
0) 시퀀스는 트위너와 유사하지만, 특정 속성이나 값을 애니메이션화하는 대신 다른 트위너나 시퀀스 그룹을 애니메이션화합니다.
- 1) 시퀀스는 다른 시퀀스를 포함할 수 있으며, 계층 구조의 깊이에 제한이 없습니다.
- 2) 시퀀스에 포함된 트윈 애니메이션들은 반드시 순차적으로 실행될 필요가 없습니다. Insert 메서드를 사용하여 트윈을 겹치게 실행할 수 있습니다.
- 3) 하나의 트윈(시퀀스나 트위너)은 단일 시퀀스에만 포함될 수 있습니다. 동일한 트윈을 여러 시퀀스에서 재사용할 수 없습니다.
- 4) 또한, 메인 시퀀스는 포함된 모든 요소를 제어하므로, 중첩된 트윈들을 개별적으로 제어할 수 없습니다. (시퀀스를 하나의 고정된 영화 타임라인으로 생각하면, 처음 실행되는 순간부터 모든 것이 고정됩니다.)
- 5) 마지막으로, 시퀀스에 추가된 트윈은 무한 반복을 가질 수 없지만, 루트 시퀀스는 가능합니다.)
chat gpt 번역
의미를 분석해 보자면
0) 시퀀스는 트위너와 유사하다는 점은 시퀀스안에 시퀀스를 넣을 수 있는 것처럼
시퀀스와 트위너가 작동되는 방식이 유사한점이 있다는 뜻 같다.
1) 계층 구조에 제한이 없다는 건 시퀀스안에 시퀀스넣고 그안에 시퀀스 넣는 제한이 없다 라는 뜻 같다.
2) 앞 글에서 시퀀스가 queue처럼 작동된다고 말했었는데 자세히 말하면 queue로도 작동되면서도 병렬적으로
insert를 통한 시간의 순서대로 작동되기도한다. (이것에 대해선 뒤에 부연설명 하겠다.)
3) 하나의 트윈은 단일 시퀀스에만 포함 될 수 있다. 이 말은
Sequence MySequence = DOTween.Sequence();
Sequence MySequence2 = DOTween.Sequence();
Tweener MyTweener = transform.DOMoveX(2f, 1f);
MySequence.Append(MyTweener);
MySequence2.Append(MyTweener);
와 같이 하나의 트윈을 두개의 트윈에다가 넣으면 안된다는 뜻이다.
이렇게 작동하면 두 트윈이 동시에 중복 작동되는 것이 아닌 둘중 먼저 작성된 트윈 하나만 작동되고
나머지 하나의 트윈이 스킵되는 것 같다. (하지말라는 건 하지말자.)
4) 트위너가 시퀀스에 합류하는 순간 트위너를 개별적으로 제어할 수 없다는 뜻이다.
즉 시퀀스에 들어간 트위너는 시퀀스의 제어를 통해서만 제어가 된다는 소리다.
5) 시퀀스에 무한으로 반복하는 트위너를 넣을 순 없지만, 시퀀스를 루프시켜서 무한으로 반복시키는 건 가능하다.
Sequence 제어
다음과 같은 함수로 시퀀스의 진행 제어가 가능하다.
특히 Insert는 atposition 시간이 지나서야 트윈이 작동되는 함수인데
Append를 Insert 뒤에 붙이면 Insert 뒤에 종속되어 작동되는지 궁금할 수 있다.
Sequence MySequence = DOTween.Sequence();
Tweener MyTweener = transform.DOMoveX(transform.position.x+ 2f, 1f);
Tweener MyTweener2 = transform.DOMoveX(transform.position.x - 2f, 1f);
MySequence.Append(MyTweener);
MySequence.Append(MyTweener2);
MySequence.Insert(0.3f,pre.transform.DOMoveX(transform.position.x - 2f, 1f));
MySequence.Append(pre.transform.DOMoveX(transform.position.x + 2f, 1f));
(gif 시작이 조금 걸림)
만약 insert에 append가 종속된다면 두 상자가 똑같은 모션을 0.5초 텀을 두고 작동해야 되었지만,
결과는 insert에 종속되지 않고 기존에 쌓아왔던 append 함수 뒤에 쌓이는 것을 볼 수 있다.
자세한 구조는 모르겠지만
append와 join로 묶어서 종속적으로 관리되고
insert는 독립적인 관리되어서 병렬적으로 처리가능 한 것 같다.
몇 초뒤에 다양한 애니메이션들을 병렬적으로 처리하고 싶다면
다양한 애니메이션들을 담은 시퀀스를 만들어서 insert에 넣는 방법을 사용하면 된다.
Sequence 제어 2
시퀀스 사용 도중에 시퀀스를 중지 시키고 싶을 때도 있다.
가령 퍼즈라던가 게임 종료나 재시작으로 인해서 모션을 중지하고 새로시작해야 할 때 말이다.
시퀀스를 위 코드로 제어 가능하다. (공식문서를 읽도록 하자.)
IMPORTANT부분을 분석하자면
트윈들은 기본적으로 autokill 이 활성화 되어있다. (트윈은 트위너 와 시퀀스 모두 포함)
따라서 기본적으로 트윈이 작동되고나서 삭제되겠끔되어 있는데
autokill을 false로 바꿔 작동되고 나서 삭제가 안되게 설정할 수도 있다.
이게 왜 언급되었냐면
DOTween을 처음 사용하다보면 똑같은 애니메이션마다 새로운 트윈을 하나 생성해서 실행시키는 사람이 있다.
시퀀스를 함수에 담은다음 그 함수를 실행시킨다던지
정상적으로 시퀀스가 완료 했더라면 이는 문제가 되지 않는다.
완료후 autokill에 의해서 시퀀스가 비워졌으니
그러나 시퀀스가 완료하기도 전에
시퀀스를 다시 작동 시킨다면 트윈이 중첩되면서 트윈이 망가지게 된다.
만약 트윈을 재사용하지 않고 새롭게 만든다면
게임 재시작 등과 트윈이 완료하기도 전에 연속으로 실행되는 상황에서
원하는 결과로 나오지 않을 가능성이 농후하다.
물론 애니메이션이 중지 될 때 실행 중인 시퀀스를 kill하는 식으로 해결할 수도 있겠지만
시퀀스의 autokill을 비활성화하고
play()와 complete() 혹은 restart()를 통해서 트윈 시작 및 초기화를 한다면
트윈이 중첩되는 것을 방지할 수 있다.
'unity 엔진 > unity 에셋 공부' 카테고리의 다른 글
[DOTween Pro] 2. Tweener (0) | 2024.12.19 |
---|---|
[DOTween Pro] 1. DOTween 개념 정리 및 사용법 (2) | 2024.12.17 |
[DOTween Pro] 0. DOTween 개요 (1) | 2024.12.16 |