1. DOTween의 경로 애니메이션(Path Animation)
곡선으로 이동하거나 내가 원하는 경로를 지정해두고 해당 경로를 움직이게 할 수 있다.
using DG.Tweening;
using UnityEngine;
public class PathMovement : MonoBehaviour
{
public Vector3[] pathPoints; // 경로를 그려줄 점들을 정의합니다.
private void Start()
{
// 지정된 경로를 따라 3초 동안 움직임
transform.DOPath(pathPoints, 3f, PathType.CatmullRom)
.SetEase(Ease.Linear)
.SetLoops(-1, LoopType.Yoyo); // 무한 반복하며 왔다갔다 함 (요요 ㅋㅋ)
}
}
2. 트윈 콜백과 이벤트
트윈 콜백을 사용하면 애니메이션 시작 전, 후, 혹은 특정상황에서 원하는 행동을 할 수 있습니다.
public class CallbackExample : MonoBehaviour
{
private void Start()
{
// 2초 동안 오브젝트를 특정 위치로 이동시키고 완료 시 콜백 실행
transform.DOMove(new Vector3(0, 5, 0), 2f)
.OnStart(() => Debug.Log("애니메이션 시작"))
.OnComplete(() => Debug.Log("애니메이션 완료"))
.OnKill(() => Debug.Log("애니메이션 취소"));
}
}
찾아보면 이 함수 외에도 아주 많다.
3. DOTween의 연속적인 애니메이션 (1편에서 배웠던 Sequence의 심화내용이다.)
여러 오브젝트를 동시에 제어하거나 연속적으로 제어할 수 있다.
public class AdvancedSequenceExample : MonoBehaviour
{
public Transform box1;
public Transform box2;
private void Start()
{
Sequence sequence = DOTween.Sequence();
// 첫 번째 상자가 오른쪽으로 이동 (1초)
sequence.Append(box1.DOMoveX(3, 1f).SetEase(Ease.OutSine));
// 첫 번째 상자가 이동한 후, 두 번째 상자가 위로 올라감 (1.5초)
sequence.Append(box2.DOMoveY(2, 1.5f).SetEase(Ease.OutBounce));
// 두 상자가 동시에 회전 (2초)
sequence.Join(box1.DORotate(new Vector3(0, 180, 0), 2f, RotateMode.WorldAxisAdd));
sequence.Join(box2.DORotate(new Vector3(0, -180, 0), 2f, RotateMode.WorldAxisAdd));
}
}
이렇게 복잡한게 이렇게 간단한 코드로 되다니..미친놈..
4. Ease 함수 커스터마이징
기본적으로 제공해주는 Ease함수를 커스터마이징하여 개발자가 원하는 정밀한 애니메이션 연출이 가능하다.
public class CustomEaseExample : MonoBehaviour
{
private void Start()
{
// 사용자 정의 Ease 함수로 애니메이션 실행
transform.DOMoveX(5, 3f).SetEase(MyCustomEase);
}
// 사용자 정의 Ease 함수 (단순한 곡선)
private float MyCustomEase(float time, float duration, float overshootOrAmplitude, float period)
{
return Mathf.Sin(time / duration * Mathf.PI * 0.5f); // 부드럽게 가속하는 커스텀 곡선
}
}
이놈은 커스터마이징도 간단하다
5. Loops와 애니메이션 반복
DOTween은 트윈을 반복할 수 있는 SetLoops() 메서드를 제공한다. 반복횟수와 유형도 지정할 수 있다.
( LoopType에는 다양한 반복 방식이 있으니 필요하다면 검색해보자)
public class LoopExample : MonoBehaviour
{
private void Start()
{
// 오브젝트를 좌우로 반복해서 이동
transform.DOMoveX(3, 1f)
.SetEase(Ease.InOutSine)
.SetLoops(-1, LoopType.Yoyo); // 무한히 왔다갔다 반복
}
}
6. Tweener의 조작
DOTween은 생성된 트윈 객체를 관리 및 조작할 수 있다.
public class PausePlayExample : MonoBehaviour
{
private Tweener moveTween;
private void Start()
{
// 트윈을 생성하고 Tweener타입의 moveTween에 참조 저장
moveTween = transform.DOMoveX(5, 2f).SetEase(Ease.Linear);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
moveTween.Pause(); // 애니메이션 일시 정지
}
else if (Input.GetKeyDown(KeyCode.R))
{
moveTween.Play(); // 애니메이션 재개
}
else if (Input.GetKeyDown(KeyCode.S))
{
moveTween.Restart(); // 애니메이션 다시 시작
}
}
}
여기까지가 오늘 내용이다.
이런 저런 내용들을 보면서 느낀건 게임을 기획하는 기획자나 게임 디자이너가 상상한걸 구현해줄 수 있는 기능들이 많은것같다.
연출을 생각한다면 DOTween은 정말 좋은 녀석인것이 느껴진다.
'[UNITY],[C#] > TIL : UNITY' 카테고리의 다른 글
[Unity] 최적화 방법들을 알아보자 (0) | 2024.11.20 |
---|---|
3. DOTween 활용하기 (0) | 2024.11.18 |
1. DOTween 이랑 씨름하기 (0) | 2024.11.14 |
[Unity]의존성 주입과 SO의 콜라보 (1) | 2024.11.12 |
[Unity] ScriptableObject를 다양하게 사용해보자 (0) | 2024.11.11 |