CShape代码修改材质
Unity中想要通过C#修改Shader中相关参数信息
一般都是通过材质去进行修改的
需要使用材质提供的各种相关方法进行修改
一、获取对象使用的材质
- 获取到对象的渲染器的Renderer
MeshRenderer和Skinned Mesh Renderer都继承Renderer
通过里氏替换的原则父类获取,装载子类对象 - 通过渲染器获取到对应的材质
通过利用渲染器中的material或者sharedMaterial来获取物体的材质
如果存在多个材质,可以通过使用renderer.materials或是renderer.sharedMaterial获取
material和sharedMaterial的区别: - material
material属性会返回对象的实例化材质,相当于他会为对象创建一个该材质的独立副本
当你通过material属性修改材质时,这些更改只会影响这个特定对象,而不会影响使用相同材质的其他对象
使用material会增加性能的消耗 - sharedMaterial
sharedMaterial属性会返回对象的共享材质,相当于它返回的时使用这个材质的对象共享的一个材质实例
当你通过sharedMaterial属性修改材质时,这些更改会影响所有使用这个材质的对象
使用sharedMaterial不会会增加性能的消耗
二、如何修改材质的属性
- 颜色
材质对象中有Color成员用于颜色修改 - 纹理
材质对象中有mainTexture成员用于主纹理修改 - 通用的修改方式
材质中有各种Set的方法,用于修改属性
通过传入属性名,以及对应值进行赋值
注意:这里的属性值以SubShader中声明的属性名为准,并非面板上显示的内容名material.SetColor("_Color",color); - 修改Shader
调用材质中shader属性进行修改
利用Shader.Find(Shader名)得到对应的Shader
三、常用方法
- 判断某个类型指定名字属性是否存在
material.HasXX("属性名") - 获取某个属性的值
material.GetXX("属性名") - 修改渲染队列
material.RenderQueue = 100; - 设置纹理缩放偏移
material.SetTextureOffSet("_MainTexture",new Vector2(0.5f,0.5f));material.SetTextureScale("_MainTexture",new Vector2(0.5f,0.5f)); - ···