Unity[DoTween]-TransformTweenアニメーションシーケンスを編集可能にする方法

DoTweenのアニメーションシーケンス機能を使用する場合、次のようなコードを記述する必要があります。

DOTween.Sequence()
    .Append(transform.DOMove(new Vector3(1f, 2f, 3f), 1f))
    .Append(transform.DORotate(new Vector3(0f, 0f, 0f), 1f));

この記事で紹介したコンテンツは、次の図に示すように、DoTweenのこのアニメーションシーケンスのエディターで編集できます。

実装コード:

using System;
using DG.Tweening;
using UnityEngine;

namespace SK.Framework
{
    [Serializable]
    public sealed class TransformTweenAnimation
    {
        public Transform actor;

        public TransformTweenAnimationType type;

        public SpaceType space;

        public bool isCustom;

        public Vector3 startValue;

        public Vector3 endValue;

        public float duration = 1f;

        public float delay;

        public Ease ease;

        public RotateMode rotateMode;

        public Tween Play()
        {
            switch (type)
            {
                case TransformTweenAnimationType.Move:
                    switch (space)
                    {
                        case SpaceType.Local:
                            if (isCustom) actor.localPosition = startValue;
                            return actor.DOLocalMove(endValue, duration).SetDelay(delay).SetEase(ease);
                        case SpaceType.Global:
                            if (isCustom) actor.position = startValue;
                            return actor.DOMove(endValue, duration).SetDelay(delay).SetEase(ease);
                        default: return null;
                    }
                case TransformTweenAnimationType.Rotate:
                    switch (space)
                    {
                        case SpaceType.Local:
                            if (isCustom) actor.localRotation = Quaternion.Euler(startValue);
                            return actor.DOLocalRotate(endValue, duration, rotateMode).SetDelay(delay).SetEase(ease);
                        case SpaceType.Global:
                            if (isCustom) actor.rotation = Quaternion.Euler(startValue);
                            return actor.DORotate(endValue, duration, rotateMode).SetDelay(delay).SetEase(ease); 
                        default: return null;
                    }
                case TransformTweenAnimationType.Scale:
                    if (isCustom) actor.localScale = startValue;
                    return actor.DOScale(endValue, duration).SetDelay(delay).SetEase(ease);
                default: return null;
            }
        }
    }
}
namespace SK.Framework
{
    public enum TransformTweenAnimationType 
    {
        Move,

        Rotate,

        Scale
    }
}

namespace SK.Framework
{
    public enum SpaceType 
    {
        Local,

        Global
    }
}
using System;
using DG.Tweening;

namespace SK.Framework
{
    [Serializable]
    public sealed class TransformTweenAnimations
    {
        public bool isSequence;

        public TransformTweenAnimation[] tweens = new TransformTweenAnimation[0];

        public void Play()
        {
            if (isSequence)
            {
                Sequence sequence = DOTween.Sequence();
                for (int i = 0; i < tweens.Length; i++)
                {
                    sequence.Append(tweens[i].Play());
                }
                sequence.Play();
            }
            else
            {
                for (int i = 0; i < tweens.Length; i++)
                {
                    tweens[i].Play();
                }
            }
        }
    }
}

使用例:

using UnityEngine;
using SK.Framework;

public class TEST : MonoBehaviour
{
    [SerializeField] private TransformTweenAnimations animations;

    private void Start()
    {
        animations.Play();
    }
}

   パブリックアカウント「ContemporaryWildProgrammer」へようこそ

おすすめ

転載: blog.csdn.net/qq_42139931/article/details/123917884
おすすめ