3.3 屏幕后处理(3) - C#动态修改材质球

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));
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值