0

我使用从 Spine 导入的 Unity3D 和角色动画。我想在这些字符上添加颜色叠加。例如,我有一个角色,我想让它成为“阴影”角色,所以我以这种方式在它上面添加黑色:

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

不过,我想要一个介于常规颜色和新颜色之间的 Tween。但是,不幸的是,我不能用 DOTween 的 DOColor 方法来做到这一点。我试试

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

但是 Skeleton 的 DOColor 方法不存在。那么实现这一点的方法是什么?

4

2 回答 2

2

DoColor、DoMove 等是为 unity 内置组件编写的快捷方式和扩展方法。SkeletonAnimationDoTween 扩展方法不支持。你可以像这样补间它的颜色属性:

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);   
    } 


}

于 2019-05-14T22:35:27.653 回答
0

如果您正在使用 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 函数的输入会很糟糕),因为由于您想更改类内部的颜色,因此需要在 Utilities.DOColor() 中传递到达引用.

于 2021-09-13T23:43:38.247 回答