Learning
When: 1학년 8월 21일
How:
수업 시간에 DOTween을 사용하는 법을 배웠는데, 원래 사용하는 법은 알았지만 Sequence를 이용하는 방법은 처음 알기도 했고, 원래 알고 있던 transform.DOMove() 이렇게 transform에 즉각적으로 메서드를 쓰는 방식보다 가독성이나 유연성이 훨씬 뛰어나기 때문에 조금 복잡한 움직임을 구현할 때는 이 방식을 써야겠다는 생각이 들어 공부하게 되었습니다.
Understanding:
- 정의 : Sequence는 DOTween에 사용되는 클래스 중 하나인데, 순서대로 tween을 사용할 때 사용할 수 있습니다.
영어의 뜻 그대로 순서인데, 오브젝트를 하나만 사용할 때는 그냥 DOMove().DOMove() 이렇게 연결시켜도 되고
그냥 한 줄을 더 쓸 수도 있지만, 만약 2개의 오브젝트를 순서대로 움직일 때는 코루틴을 쓰거나 따로
하나의 오브젝트의 Tween이 끝날 때 다른 오브젝트를 호출시켜야 합니다. 하지만 시퀀스를 사용하면
"이 오브젝트의 Tween을 실행한 후, 이 오브젝트의 Tween을 실행해!" 이런 명령을 할 수 있습니다.
그리고 가독성도 향상되며 직접 하는 것이 아니라 시키는 것이기 때문에 유연성도 좋아,
움직임이 좀 복잡하다 싶으면 시퀀스를 쓰는 것이 좋습니다.
- 사용법 : 아래의 코드와 같이 인스턴스 생성을 해주고, 생성된 인스턴스를 사용하여 명령을 내리면 됩니다.
참고로 1초 동안 Tween을 한다고 1초 후에 코드의 다음 줄이 실행되는 것은 아닙니다.
실행은 한 번에 다 되지만 순서가 있어 Tween은 자신의 순서가 돼야 실행됩니다.
Sequence sequence = DOTween.Sequence();
- Append() :
아래의 코드는 네모 2개 중 하나의 x좌표를 1초 동안 0으로 바꾸고, 끝나면 남은 하나의 x좌표를 1초 동안 0으로
바꾸는 코드입니다.
Sequence sequence = DOTween.Sequence();
sequence.Append(square1.DOMoveX(0, 1));
sequence.Append(square2.DOMoveX(0, 1)); // square1 Tween 끝나고 실행
- Join() :
만약 동시에 하고 싶다면 Join을 사용할 수 있습니다. Append는 그 전의 Tween이 전부 실행된 후에 실행되지만,
Join은 그것과 상관없이 바로 실행됩니다.
Sequence sequence = DOTween.Sequence();
sequence.Append(square1.DOMoveX(0, 1));
sequence.Join(square2.DOMoveX(0, 1)); // 안 기다리고 실행
- Insert() :
원하는 시간대에 실행시킬 수도 있습니다. 인수의 맨 앞에 몇 초나 지난 후에 실행할지를 인수로 설정할 수 있습니다.
그 전의 Tween과는 관련 없이 코드가 실행된 직후 타이머가 돌아가고, 4초 후에 실행됩니다.
Sequence sequence = DOTween.Sequence();
sequence.Append(square1.DOMoveX(0, 1));
sequence.Insert(4, square2.DOMoveX(0, 1)); // 윗 줄의 Tween과 관련 없이 4초 후에 실행
- AppendInterval() :
원하는 시간만큼 기다릴 수 있습니다. Append를 사용할 때 원하는 만큼 기다리게 하고 실행시킬 수 있고,
Join(), Append()는 영향을 받지만 Insert()는 영향을 받지 않습니다.
Sequence sequence = DOTween.Sequence();
sequence.Append(square1.DOMoveX(0, 1));
sequence.AppendInterval(1);
sequence.Append(square2.DOMoveX(0, 1)); // 1초 기다렸다가 실행
- Callback() :
AppendCallBack, InsertCallBack, JoinCallback 등이 있는데, AppendCallback은 Append와 같이
자신의 순서가 되었을 때 이벤트를 등록하고, 자신의 순서 전에 실행한 Tween(Insert는 순서랄 게 없기 때문에
그냥 무시합니다.)이 끝나면 이벤트를 실행합니다. InsertCallBack은 코드가 실행되면 이벤트를 등록하고,
그때부터 타이머가 돌아가 정해진 시간만큼 되면 이벤트를 실행합니다. JoinCallback은 순서가 되면 이벤트를
등록하고, 등록된 후 부터 가장 먼저 실행된 Tween과 같이 실행됩니다.
Sequence sequence = DOTween.Sequence();
sequence.JoinCallback(() => Debug.Log("Join 끝남" + Time.time)); // 가장 먼저 실행된 Tween(Insert(0))과 함께 실행 (0초)
sequence.AppendInterval(1); // 1초 기다리기
sequence.Append(square1.DOMoveX(0, 5)); // 위의 Interval이 끝나면
sequence.Append(square2.DOMoveX(-10, 5)); // 위의 Tween 끝나면 실행
sequence.Insert(7, square1.DOMoveX(10, 0.1f)); // AppendInterval과 관련 없이 7초에 실행
sequence.AppendCallback(() => Debug.Log("Append 끝남" + Time.time)); // 위의 Tween이 시작하면(Insert는 순서가 없기 때문에 무시)
// 위의 Append가 끝났을 때 실행할 이벤트를 등록하고 끝나면 이벤트 실행
sequence.Join(square2.DOMoveX(-15, 1)); // 위의 AppendCallback과 동시 실행
sequence.Append(square1.DOMoveX(3, 1)); // 위의 Join 끝나면 실행
sequence.InsertCallback(3.5f, () => Debug.Log("Insert 끝남" + Time.time)); // 코드 실행 3.5초 후 실행
Result: 순서가 있긴 하지만 Insert나 Callback이 있어서 여러 가지 실험하느라 머리가 아픈데, 정말 유용할 것 같아서 많이 써보면서 연습해야겠다는 생각이 들었습니다.
'UnityEngine' 카테고리의 다른 글
| [Unity] Layout Element (0) | 2025.09.04 |
|---|---|
| [Unity] Spline (0) | 2025.09.03 |
| [Unity] Unity 이벤트 메서드 (5) | 2025.08.18 |
| [Unity] Y-Sorting (1) | 2025.08.17 |
| [Unity] 블랜드 트리(Blend Tree) (3) | 2025.08.16 |