使用DoTween的动画序列功能时,我们需要编写类似这样的代码:
代码语言:javascript复制DOTween.Sequence()
.Append(transform.DOMove(new Vector3(1f, 2f, 3f), 1f))
.Append(transform.DORotate(new Vector3(0f, 0f, 0f), 1f));
本文介绍的内容可以将DoTween的这种动画序列在编辑器中进行编辑,如图所示:
实现代码:
代码语言:javascript复制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;
}
}
}
}
代码语言:javascript复制namespace SK.Framework
{
public enum TransformTweenAnimationType
{
Move,
Rotate,
Scale
}
}
代码语言:javascript复制namespace SK.Framework
{
public enum SpaceType
{
Local,
Global
}
}
代码语言:javascript复制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();
}
}
}
}
}
代码语言:javascript复制使用示例:
代码语言:javascript复制using UnityEngine;
using SK.Framework;
public class TEST : MonoBehaviour
{
[SerializeField] private TransformTweenAnimations animations;
private void Start()
{
animations.Play();
}
}