Spine 动画的补间颜色叠加

Tween color overlay of Spine animation

我正在使用从 Spine 导入的 Unity3D 和角色动画。我想在这些字符上添加颜色叠加层。例如,我有一个字符,我想把它变成一个 "shadow" 字符,所以我用这种方式在上面添加了黑色:

GetComponent<SkeletonAnimation>().Skeleton.color = new Color(0f,0f,0f);

尽管如此,我想要一个介于常规颜色和新颜色之间的补间。但是,不幸的是,我不能用 DOTween 的 DOColor 方法来做。我试试

GetComponent<SkeletonAnimation>().Skeleton.DOColor(Color.Black,1);

但是骨骼的 DOColor 方法不存在。那么实现这个目标的方法是什么?

DoColor、DoMove等是为unity的built-in组件编写的快捷方式和扩展方法。 SkeletonAnimation DoTween 扩展方法不支持。您可以像这样补间它的颜色 属性:

Color yourColor = Color.white; //GetComponent<SkeletonAnimation>().Skeleton.color
Color targetColor = Color.black;
float duration = 1f;
DOTween.To(() => yourColor, co => { yourColor = co;  }, targetColor, duration);

此外,您可以编写自己的扩展程序:


public static class MyExtensions{

    public static Tweener DOColor(this SkeletonAnimation target, 
    Color endValue, float duration)
    {
    DOTween.To(() => target.color, 
               co => { target.color = co; }, 
               endValue, 
               duration);   
    } 


}

如果您正在使用 UI,对于 SkeletonGraphic,以下代码有效。

public static class Utilities
{
    public static void DOColor(SkeletonGraphic skeletonGraphic, Color endValue, float duration)
    {
        DOTween.To(() => skeletonGraphic.color, 
            newColor => { skeletonGraphic.color = newColor; }, 
            endValue, 
            duration);
    }
}

然后你可以这样调用:

private SkeletonGraphic _skeletonGraphic;

private void Start()
{
    _skeletonGraphic = spineAnimationParent.GetComponentInChildren<SkeletonGraphic>();
}

Utilities.DOColor(_skeletonGraphic, Color.grey, 0.5f);

重要的是不要按值传递颜色(即 _skeletonGraphic.color 作为 DOColor 函数的输入会很糟糕),因为既然您想更改 class 内部的颜色,您需要在 Utilities.DOColor().

中传递 reach 引用