[UNITY],[C#]/TIL : UNITY

1. DOTween 이랑 씨름하기

네,가능합니다 2024. 11. 14. 00:27

이번 개인과제때 TODween을 써보려고 설치해뒀는데 안써본거 써볼바엔 차라리 코드로 구현하는게 더 빠를것같아서 전부 코드로 때려박았다.

 

이런 나쁜행동을 하지 못하게 나를 두트윈씨랑 씨름하게 만들어야겠다.

 

자주 쓰이는 예제들을 보면서 익숙해지고 어디에 사용할지 생각하는 시간을 가져봐야겠다.

 

자세한 설명은 코드블럭의 주석에 하겠다.

 

1. UI애니메이션

public class UIButtonEffect : MonoBehaviour
{
    public void OnButtonClicked()
    {
        // 버튼 클릭 시 크기 살짝 커졌다가 원래 크기로 돌아오는 애니메이션 (뽀잉 하는 느낌)
        transform.DOScale(1.2f, 0.2f).SetEase(Ease.OutQuad)
            .OnComplete(() => transform.DOScale(1f, 0.2f).SetEase(Ease.InQuad));
    }
}

 

2. 카메라 애니메이션

public class CameraController : MonoBehaviour
{
    public Transform target;

    public void FocusOnTarget()
    {
        // 카메라를 목표 위치로 1.5초 동안 이동하며 줌 효과 적용
        transform.DOMove(target.position, 1.5f).SetEase(Ease.OutExpo);
        Camera.main.DOFieldOfView(30f, 1.5f).SetEase(Ease.OutQuad);
    }
}

 

3. 오브젝트가 나타날때 점점 커지는 효과

public class Item : MonoBehaviour
{
    private void Start()
    {
        // 아이템이 생성될때 크기가 0에서 1로 변화
        transform.localScale = Vector3.zero;
        transform.DOScale(1f, 0.5f).SetEase(Ease.OutBounce);
    }
}

 

4. 체인 애니메이션

(여러 트윈을 순차적으로 실행하여 복잡한 애니메이션을 쉽게 구성할 수 있음)

좀 중요한 부분이라 정리를 먼저 해야할것같다.

아래의 예제의 목표는 다음과 같다.

 

1. 상자가 등장할 때 0에서 1로 커짐

2. 상자가 위로 부드럽게 떠오름

3. 상자가 빛나는 이펙트와 함께 회전함

 

using DG.Tweening;
using UnityEngine;

public class ChestAnimation : MonoBehaviour
{
    public Light chestLight;

    private void Start()
    {
        // 체인 애니메이션을 위한 Sequence 생성
        Sequence sequence = DOTween.Sequence();

        // 1: 상자가 등장할 때 크기가 0에서 1로 커짐 (0.5초 동안)
        sequence.Append(transform.DOScale(Vector3.one, 0.5f).SetEase(Ease.OutBack));

        // 2: 0.3초 지연 후 상자가 부드럽게 위로 떠오름 (1초 동안)
        sequence.AppendInterval(0.3f);
        sequence.Append(transform.DOMoveY(transform.position.y + 1f, 1f).SetEase(Ease.InOutSine));

        // 3: 상자가 떠오른 후 빛이 서서히 밝아짐 (0.5초 동안)
        sequence.Join(chestLight.DOIntensity(5f, 0.5f));

        // 4: 상자가 천천히 회전 (2초 동안)
        sequence.Append(transform.DORotate(new Vector3(0, 180, 0), 2f, RotateMode.WorldAxisAdd).SetEase(Ease.Linear));

        // 5: 애니메이션이 완료된 후 로그 출력
        sequence.OnComplete(() => Debug.Log("완료"));
    }
}

 

이런식으로 사용이 가능하다. 그냥 상상만 하는걸 개발자가 힘만 내면 만들 수 있다는거다.