유니티 DOTween Documentation 공부하기 #1편

저번에 작성한 DOTween 포스팅은 DOTween에 대한 설명과 간단한 사용방법이였습니다.

이번에는 DOTween에 사용할 수 있는 API들에는 무엇이 있는지 Docu를 통해 알아보고자 합니다.

 

신나서 쓰는 Dotween Pro 에셋 사용법

Dotween이란? Dotween은 빠르고 효율적이며 안전성을 갖춘 애니메이션 엔진으로, C#에 최적화되어 있습니다. 높은 수준의 유연성과 커스터마이징을 유지하면서 단순하고 사용하기 쉬운 것으로 잘 알

wlsdn629.tistory.com

 

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

 


용어 설명

DOTween을 사용하기 위해서는 DOTween에서 자주 사용하는 용어들에 대해 알아야 합니다.

  • Tweener: 값을 제어하고 애니메이션화하는 트윈입니다.
  • Sequence: 값을 제어하는 대신 다른 트윈들을 제어하고 그룹으로 애니메이션화하는 특별한 트윈입니다.
  • Tween: Tweener와 Sequence를 모두 가리키는 일반적인 단어입니다.
  • Nested tween: Sequence 내에 포함된 트윈입니다.
  • DO: 모든 트윈 단축키에 대한 접두사입니다. 
  • Set: 트윈에 연결할 수 있는 모든 설정에 대한 접두사입니다.
  • On: 트윈에 연결할 수 있는 모든 콜백에 대한 접두사입니다. 

 

예시

DO : transform.DOMoveX(100, 1);

Set:  myTween.SetLoops(4, LoopType.Yoyo).SetSpeedBased();

On : myTween.OnStart(myStartFunction).OnComplete(myCompleteFunction);

 


DOTween.Init

 

트윈을 처음 만들 때, DOTween은 기본값을 사용하여 자동으로 초기화됩니다.

자동으로 하지 않고 직접 초기화하려면, 트윈을 만들기 전에DOTween.Init() 메서드를 한 번 호출하시면 됩니다. (이후에 호출하면 효과가 없습니다).

 

선택적으로, Init 메서드에 SetCapacity를 연결하여 최대 Tweener/Sequences 초기 용량을 설정할 수 있습니다.

 

// EXAMPLE A: initialize with the preferences set in DOTween's Utility Panel
DOTween.Init();
// EXAMPLE B: initialize with custom settings, and set capacities immediately
DOTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(200, 10);

 


Tweener 만들기

트위너는 특정 값을 애니메이션화하는 역할을 합니다. 트위너를 만드는데에는 3가지 방법이 있습니다.

 

The generic way

일반적인 방법으로, 트윈할 때 가장 유연하게 대처할 수 있습니다. public, private, static 등 거의 모든 값들을 트윈할 수 있습니다.

 

예시는 아래와 같습니다.

static DOTween.To(getter, setter, to, float duration)
항목  설명
getter 트윈할 속성의 값을 반환하는 대리자입니다. 람다로 작성할 수 있습니다.
setter 트윈할 속성의 값을 설정하는 대리자입니다. 람다로 작성할 수 있습니다.
to 도달할 종료 값입니다.
duration 트윈의 지속 시간입니다.

 

// myVector라는 벡터는 1초 뒤에 Vector3(3,4,8)가 됩니다.
DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1);
// myFloat라는 변수는 1초 뒤에 52가 됩니다.
DOTween.To(()=> myFloat, x=> myFloat = x, 52, 1);

 


The shortcuts way

숏컷 방식은, Transform, Rigidbody, Material과 같은 일부 알려진 Unity 객체에 대한 단축키를 포함하고 있습니다. 

 

예시는 아래와 같습니다.

transform.DOMove(new Vector3(2,3,4), 1);
rigidbody.DOMove(new Vector3(2,3,4), 1);
material.DOColor(Color.green, 1);

 


Additional generic ways

일반적인 방식에서 추가 된 방식에 대한 소개입니다.

 

예시는 아래와 같습니다.

DOTween.Punch(getter, setter, Vector3 direction, float duration, int vibrato, float elasticity): 주어진 방향으로 ‘펀치’ 효과를 적용하여 값을 트윈합니다. 펀치 효과는 값이 먼저 지정된 방향으로 이동한 다음 원래 위치로 되돌아오는 것을 의미합니다.
DOTween.Shake(getter, setter, float duration, float/Vector3 strength, int vibrato, float randomness, bool ignoreZAxis): ‘흔들림’ 효과를 적용하여 값을 트윈합니다. 흔들림 효과는 값이 무작위로 주어진 강도로 흔들리는 것을 의미합니다.
DOTween.ToAlpha(getter, setter, float to, float duration): 알파(투명도) 값을 트윈합니다.
DOTween.ToArray(getter, setter, float to, float duration): 배열의 각 요소를 트윈합니다.
DOTween.ToAxis(getter, setter, float to, float duration, AxisConstraint axis): 지정된 축을 따라 값을 트윈합니다.
DOTween.To(setter, float startValue, float endValue, float duration): 시작 값에서 종료 값으로 값을 트윈합니다. 이 메서드는 가상 트윈을 생성합니다.

 


Sequence 만들기

 

시퀀스는 속성이나 값을 애니메이션화 하지 않고, 다른 트위너나 시퀀스를 그룹으로 애니메이션합니다. 즉, 시퀀스는 여러 트위너를 순차적으로 또는 동시에 실행하는 복합적인 애니메이션을 생성 및 제어하는데 사용됩니다.

 

시퀀스를 만드는 예시는 아래와 같습니다.

Sequence mySequence = DOTween.Sequence();

 

 

시퀀스에 트윈을 더하거나, interval, 콜백을 더하면 됩니다. 더할 때는 반드시 시퀀스가 시작되기 전에 적용해야 합니다.

 

다음 메서드들을 확장하여 사용 할 수 있습니다.

 

  1. Append(Tween tween): 주어진 트윈을 시퀀스의 끝에 추가합니다. 
  2. AppendCallback(TweenCallback callback): 주어진 콜백을 시퀀스의 끝에 추가합니다. 
  3. AppendInterval(float interval): 주어진 간격을 시퀀스의 끝에 추가합니다. 
  4. Insert(float atPosition, Tween tween): 주어진 시간 위치에 트윈을 삽입합니다.
  5. InsertCallback(float atPosition, TweenCallback callback): 주어진 시간 위치에 콜백을 삽입합니다. 
  6. Join(Tween tween): 주어진 트윈을 시퀀스에 마지막으로 추가된 트윈이나 콜백과 동시에 삽입합니다.
    • 예를 들어,mySequence.Join(transform.DORotate(new Vector3(0,180,0), 1))는 transform을 1초 동안 (0,180,0)으로 회전하는 트윈을 시퀀스에 추가하고, 이 트윈은 이전에 추가된 트윈과 동시에 재생됩니다.
  7. Prepend(Tween tween): 주어진 트윈을 시퀀스의 시작 부분에 추가하고, 나머지 내용(트윈)을 시간적으로 앞으로 밀어냅니다. 
  8. PrependCallback(TweenCallback callback): 주어진 콜백을 시퀀스의 시작 부분에 추가합니다. 
  9. PrependInterval(float interval): 주어진 간격을 시퀀스의 시작 부분에 추가하고, 나머지 내용을 시간적으로 앞으로 밀어냅니다. 

 

mySequence.Append(transform.DOMoveX(45, 1));
mySequence.AppendCallback(MyCallback);
mySequence.AppendInterval(interval);
mySequence.Insert(1, transform.DOMoveX(45, 1));
mySequence.InsertCallback(1, MyCallback);
mySequence.Join(transform.DORotate(new Vector3(0,180,0), 1));     
mySequence.Prepend(transform.DOMoveX(45, 1));
mySequence.PrependCallback(MyCallback);
mySequence.PrependInterval(interval);

 

위 메서드를 사용한 예시는 아래와 같습니다.

Sequence mySequence = DOTween.Sequence();
mySequence.Append(transform.DOMoveX(45, 1));
mySequence.Append(transform.DORotate(new Vector3(0,180,0), 1));
mySequence.PrependInterval(1);
mySequence.Insert(0, transform.DOScale(new Vector3(3,3,3), mySequence.Duration()));

 

위 코드는 아래와 같습니다.

Sequence mySequence = DOTween.Sequence();
mySequence.Append(transform.DOMoveX(45, 1))
.Append(transform.DORotate(new Vector3(0,180,0), 1))
.PrependInterval(1)
.Insert(0, transform.DOScale(new Vector3(3,3,3), mySequence.Duration()));

 


테스트

[SerializeField] private float shakeDuratoin = 1.5f;
[SerializeField] private Ease EaseMode;
[SerializeField] private float delay;   

void Test()
{
	Sequence mySequence = DOTween.Sequence();
    
	mySequence.Insert(delay, transform.DOShakeRotation(shakeDuratoin, Vector3.one, 15, 90f, true, ShakeRandomnessMode.Full))
            .Insert(delay + shakeDuratoin, transform.DOLocalMoveY(-1f, 1f).SetEase(EaseMode))
            .Join(transform.DOScale(Vector3.zero, 1f))
            .AppendInterval(waitForResetting)
            .AppendCallback(Resetting);
}

 

delay를 주어 시작 딜레이를 주었으며, 처음에 1.5초 동안 흔들리다가 아래로 떨어지면서 스케일이 작아지는 Block을 만들어봤습니다.

 

그 후에는 Resetting함수를 호출해주어 Origin Position 및 스케일로 초기화 되도록 해주었습니다.

Skake Block


Tweener and Sequence settings

Chained settings

Chained callbacks

 

이 내용부터 다음 포스터에서 다뤄 보겠습니다.