随笔-Unity中修改Spine材质

        我们在Unity中使用Spine动画时,往往需要在材质上添加一些效果,比如描边、闪光等等。

  

         这些效果其实在Spine插件中就给我们提供好了对应的Shader,路径分别是:Spine/Outline/Skeleton、Spine/Skeleton Fill。虽然有插件上给我提供好了这些常用的Shader,单独的一个Spine动画我们只需要修改一下就好了,但是往往我们一个项目中肯定不会只使用单独的一个Spine动画,正常情况下会同时使用同一个Spine制作许多了预制。这种情况下,我们修改一个对象的Shader上的数值。其他的也会跟着修改。这就是我们想要的了,这时我们可以使用MaterialPropertyBlock(材质属性块),来替换Material属性操作。首先我们来看看官方API是怎么介绍的(以下是机翻,想知道具体的可以去官网自己查查看)

        下面我贴出一部分伪代码,可以供大家参考参考,具体怎么使用还是需要根据大家自己项目需求来编写逻辑。

    //获取Spine的Mesh
    MeshRenderer r;

    MaterialPropertyBlock mpb;

    private void PlayAnimation()
    {
        r = skeletonAnimation.GetComponent<MeshRenderer>();
        mpb = new MaterialPropertyBlock();

        SetMaterialSpine(1);

        //利用DOTeen让Spine的颜色由白色渐渐变成正常的颜色
        DOTween.To(() => 1f, SetMaterialSpine, 0f,1).SetEase(Ease.Linear)
            .SetAutoKill(false).SetTarget(this).SetDelay(1f);
    }

    private void SetMaterialSpine(float f) 
    {
        if (mpbSpine != null)
        {
            mpbSpine.SetFloat("_FillPhase", f);
            r.SetPropertyBlock(mpbSpine);
        }
    }

        这段伪代码的大致作用就是先把Spine动画变成纯白色。延迟1s之后在1s之内逐渐恢复到原本的颜色。一段很简单的使用。我们使用了MaterialPropertyBlock的方法来更换材质的Shader属性。这样只会修改我们需要修改的对象上的Shader属性而不会影响到其他对象的材质。达到了我们可以灵活控制的目的。下图就是我们运行起来之后的效果:

猜你喜欢

转载自blog.csdn.net/zhangchong5522/article/details/126973510
今日推荐