📚

UnityのDOTweenとSequence

2023/04/10に公開

ChatGPTがいい感じに吐いてくれたのでメモ

using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class MoveAndScaleImage : MonoBehaviour
{
    public RectTransform imageTransform;
    public Vector2 startPosition = new Vector2(-474f, 145f);
    public Vector2 targetPosition = new Vector2(525f, 66f);
    public float moveDuration = 2f;
    public float scaleDuration = 1f;
    public float scaleAmount = 2f;
    public float fadeDuration = 1f;
    public float fogDuration = 1f;
    public float backDuration = 1f;
    public Ease moveEase = Ease.Linear;
    public Ease scaleEase = Ease.OutElastic;
    public Ease fadeEase = Ease.Linear;
    public Ease fogEase = Ease.Linear;
    public Ease backEase = Ease.Linear;
    public Image fadeImage;
    public RectTransform fogTransform;

    void Start()
    {
        // Sequence を作成します。
        Sequence sequence = DOTween.Sequence();

        // 画像の初期位置を設定します。
        imageTransform.anchoredPosition = startPosition;

        // 移動アニメーションを追加します。
        sequence.Append(imageTransform.DOAnchorPos(targetPosition, moveDuration).SetEase(moveEase));

        // 拡大アニメーションを追加します。
        sequence.Append(imageTransform.DOScale(scaleAmount, scaleDuration).SetEase(scaleEase));

        // 黒いモヤをフェードインするアニメーションを追加します。
        sequence.Append(fadeImage.DOFade(1f, fadeDuration).SetEase(fadeEase));

        // 黒いモヤを拡大するアニメーションを追加します。
        sequence.Join(fogTransform.DOScale(1f, fogDuration).SetEase(fogEase));

        // 初期位置に戻るアニメーションを追加します。
        sequence.Append(imageTransform.DOAnchorPos(startPosition, backDuration).SetEase(backEase));

        // 黒いモヤをフェードアウトするアニメーションを追加します。
        sequence.Join(fadeImage.DOFade(0f, fadeDuration).SetEase(fadeEase));

        // 黒いモヤを縮小するアニメーションを追加します。
        sequence.Join(fogTransform.DOScale(0f, fogDuration).SetEase(fogEase));

        // 画像を縮小するアニメーションを追加します。
        sequence.Join(imageTransform.DOScale(0f, scaleDuration).SetEase(scaleEase));

        // ゲームオブジェクトを非表示にするアニメーションを追加します。
        sequence.OnComplete(() =>
        {
            gameObject.SetActive(false);
        });
    }
}

Discussion