1.获取对象使用的材质
2.如何修改材质属性
3.材质常用的方法
Unity中想要通过C#代码修改Shader相关参数信息, 我们一般都是通过材质去进行修改的, 需要使用材质提供的相关方法进行修改
1.获取对象使用的材质
1).获取对象的渲染器Render
Mesh Renderer和Skinned Mesh Renderer都继承Renderer
2).通过渲染器获取到对应的材质
a.获取一个材质, 通过渲染器的material或sharedMaterial
b.获取多个材质, 通过渲染器的materials或sharedMaterials
[material和sharedMaterial的区别]
a.material
material属性返回对象的实例化材质, 相当于为对象创建一个材质的独立副本, 当"你通过material属性修改材质时, 这些更改只会影响这个
特定对象, 而不会影响使用相同材质的其他对象; 使用material会增加内存消耗, 因为每个对象都有自己独立的材质副本, 但是可以单独修改
单个对象
b.sharedMaterial
sharedMaterial属性会返回对象的共享材质, 相当于它返回的是所有使用这个材质的对象共享的同一个材质实例; 当你通过sharedMaterial
属性修改材质时, 这些更改会影响所有使用这个材质的对象; 使用sharedMaterial不会增加内存消耗, 但是会批量修改所有使用该材质的对象
2.如何修改材质属性
1).材质对象中有color成员用于颜色修改
material.color = color;
2).材质对象中有mainTexture成员用于主纹理修改
material.mainTexture = Resources.Load<Texture2D>("路径");
3).材质中有各种Set方法, 用于修改属性; 通过传入属性名, 以及对应值进行赋值
"注: 属性值以SubShader中声明的属性名为准, 而不是面板上的显示"
a.material.SetColor("_Color", color);
b.material.SetFloat("_FresnelScale", fresnelScale);
4).利用Shader.Find(Shader名)方法得到对应Shader
material.shader = Shader.Find("Unlit/Lesson80_Fresnel");
3.材质常用的方法
1).判断某类型知道名字属性是否存在
material.HasFloat("_FresnelScale")
2).获取某个属性值
material.GetColor("_Color")
3).修改渲染队列
material.renderQueue = 2000;
4).设置纹理缩放偏移
a.material.SetTextureScale("_MainTex", new Vector2(0.5f, 0.5f));
b.material.SetTextureOffset("_MainTex", new Vector2(0.5f, 0.5f));