1.前言
在研究UGUI源码时会有一些好的想法产生或者借鉴,在这里面最大的一点就是Tween。曾经补间动画一致采用DoTween,但是对与简单使用或者少量使用时引入整个插件又不值得,所以都是自己写一个。曾将看到Tween.js实现后一直想自己实现一个轻量级的,一致没有行动,但是unity的CoroutineTween.cs提供了一个比较好的实现。
2.源码
using System.Collections;
using UnityEngine.Events;
namespace UnityEngine.UI.CoroutineTween
{
// Base interface for tweeners,
// using an interface instead of
// an abstract class as we want the
// tweens to be structs.
internal interface ITweenValue
{
void TweenValue(float floatPercentage);
bool ignoreTimeScale {
get; }
float duration {
get; }
bool ValidTarget();
}
// Color tween class, receives the
// TweenValue callback and then sets
// the value on the target.
internal struct ColorTween : ITweenValue
{
public enum ColorTweenMode
{
All,
RGB,
Alpha
}
public class ColorTweenCallback : UnityEvent<Color> {
}
private ColorTweenCallback m_Target;
private Color m_StartColor;
private Color m_TargetColor;
private ColorTweenMode m_TweenMode;
private float m_Duration;
private bool m_IgnoreTimeScale;
public Color startColor
{
get {
return m_StartColor; }
set {
m_StartColor = value; }
}
public Color targetColor
{
get {
return m_TargetColor; }
set {
m_TargetColor = value; }
}
public ColorTweenMode tweenMode