Ao usar o recurso de sequência de animação do DoTween, precisamos escrever um código como este:
DOTween.Sequence()
.Append(transform.DOMove(new Vector3(1f, 2f, 3f), 1f))
.Append(transform.DORotate(new Vector3(0f, 0f, 0f), 1f));
O conteúdo apresentado neste artigo pode ser editado no editor desta sequência de animação do DoTween, conforme mostra a figura:
Código de implementação:
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();
}
}
}
}
}
Exemplo de uso:
using UnityEngine;
using SK.Framework;
public class TEST : MonoBehaviour
{
[SerializeField] private TransformTweenAnimations animations;
private void Start()
{
animations.Play();
}
}
Bem-vindo à conta pública "Programador Selvagem Contemporâneo"