在本文章开始之前,如果你还不了解什么是扩展函数,请跳转到该链接了解一下如何编写扩展函数
Material的三个组成部分(个人观点)
unity中的材质,有三个重要组成部分,只要对它们进行复制,即可实现材质属性的复制。
一、shader:材质使用的shader
二、renderQueue:材质的渲染队列
三、图片资源、颜色、数值:这一部分涉及很多东西,但是unity官方提供了一个CopyPropertiesFromMaterial函数进行复制,我们只需要调用它即可。
扩展函数的编写
public static class MaterialExpand
{
public static void CopyFrom(this Material mat,Material target)
{
mat.shader = target.shader;
mat.renderQueue = target.renderQueue;
mat.CopyPropertiesFromMaterial(target);
}
}
创建一个静态类,在该类中编写material的扩展函数,参数为目标材质;
在该函数中将本材质的shader和renderQueue设置成目标材质的,实现对shader和渲染队列的复制;
再调用CopyPropertiesFromMaterial函数实现对图片资源、颜色、数值的复制;
注意shader的设置需要在CopyPropertiesFromMaterial函数调用之前,因为不同shader用到的资源是不一样的,顺序弄反unity会报错
扩展函数的测试
[SerializeField]
MeshRenderer meshRenderer;
[SerializeField]
Material targetMat;
public void CopyMaterial()
{
meshRenderer.material.CopyFrom(targetMat);
}
使用上面的脚本测试复制如下两种材质
创建一个立方体,将其网格渲染器拖入脚本中,并创建一个按钮调用脚本中的函数。运行游戏,将以上两个材质分别拖到脚本中,再点击按钮,可以看到立方体的材质属性复制成功
—————————此文章到此就结束了—————————
欢迎到B站给 @内個_shei_鸭 UID229806705 点个关注嘎^_^