【问题标题】:Tween color overlay of Spine animationSpine 动画的补间颜色叠加
【发布时间】:2019-05-14 15:50:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: unity3d spine


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,我找到了一个最简单的方法... DOTween.To(getter,setter,endValue, duration) 就是这样,不写扩展,只是那个命令。它有效!根据您的回答,我将其标记为正确!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2011-03-01
      • 1970-01-01
      相关资源
      最近更新 更多