Unity3D利用扩展函数实现材质属性复制

在本文章开始之前,如果你还不了解什么是扩展函数,请跳转到该链接了解一下如何编写扩展函数

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  点个关注嘎^_^

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值