我们在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属性而不会影响到其他对象的材质。达到了我们可以灵活控制的目的。下图就是我们运行起来之后的效果:文章来源:https://www.toymoban.com/news/detail-507249.html
文章来源地址https://www.toymoban.com/news/detail-507249.html
到了这里,关于随笔-Unity中修改Spine材质的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!