代码修改材质参数

1、 如何得到对象使用的材质

  • 获取到对象的渲染器Renderer

Mesh Renderer和Skinned Mesh Renderer都继承Renderer,可以用里式替换原则父类获取、装载子类对象

  • 通过渲染器获取到对应材质

可以利用渲染器中的material或者sharedMaterial来获取物体的材质,如果存在多个材质,可以使用renderer.materials或renderer.sharedMaterials来获取

material和sharedMaterial的区别

material:

material属性会返回对象的实例化材质, 相当于它会为对象创建一个该材质的独立副本,通过material属性修改材质时,这些更改只会影响这个特定对象,而不会影响使用相同材质的其他对象,使用material会增加内存消耗,因为每个对象都有自己独立的材质副本,但是可以单独修改单个对象

sharedMaterial:

sharedMaterial属性会返回对象的共享材质,相当于它返回的是所有使用这个材质的对象共享的同一个材质实例,通过sharedMaterial属性修改材质时,这些更改会影响所有使用这个材质的对象

使用sharedMaterial不会增加内存消耗,但是会批量修改所有使用该材质的对象

cs 复制代码
//sharedMaterial和material的区别
//sharedMaterial:一个是改一个都变
//material:一个是改一个不会影响其它使用相同材质球的对象
//得到主材质球
material = renderer.material;//renderer.sharedMaterial;
//得到所有的材质球
Material[] materials = renderer.sharedMaterials; //renderer.materials;

2、如何修改材质属性以及常用方法

颜色:材质对象中有color成员用于颜色修改

纹理:材质对象中有mainTexture成员用于主纹理修改

通用修改方式:材质中有各种Set方法,用于修改属性,通过传入属性名,以及对应值进行赋值

注意:属性值以SubShader中声明的属性名为准,而不是面板上的显示

修改Shader:调用材质中shader属性进行修改,利用Shader.Find(Shader名)方法得到对应Shader

cs 复制代码
// 修改颜色
material.color = color;
// 修改主纹理
material.mainTexture = Resources.Load<Texture2D>("路径");

if(material.HasColor("_Color"))
{
    material.SetColor("_Color", color);
    print(material.GetColor("_Color"));
}
                

if(material.HasFloat("_FresnelScale"))
    material.SetFloat("_FresnelScale", fresnelScale);

//修改渲染队列
material.renderQueue = 2000;
 
// 修改材质球使用的shader
material.shader = Shader.Find("Unlit/Lesson80_Fresnel");

material.SetTextureOffset("_MainTex", new Vector2(0.5f, 0.5f));
material.SetTextureScale("_MainTex", new Vector2(0.5f, 0.5f));
相关推荐
心前阳光19 分钟前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
纪纯1 小时前
PicoVR Unity Integration SDK 3.4 常用交互API
unity·游戏引擎·vr·pico
龙智DevSecOps解决方案2 小时前
3A 游戏优化技术栈:如何打通引擎级分析工具与 DevOps 持续集成管线?
unity·性能优化·游戏开发·技术美术·perforce·unrealengine
葛兰岱尔3 小时前
从 SolidWorks 到 Three.js,从 Inventor 到 Unity——制造业CAD模型“几何-语义一体化“转换,不再是天方夜谭!
开发语言·javascript·unity
玉夏6 小时前
【Shader基础】UV 与纹理采样 Part1
unity·着色器·uv
zdr尽职尽责6 小时前
Unity录像功能
学习·ui·unity·游戏引擎
真鬼1237 小时前
【Unity Cursor】AI规矩
unity·游戏引擎
mxwin7 小时前
Unity Shader 深入理解 LinearEyeDepth 与 DepthTexture
unity·游戏引擎
小贺儿开发7 小时前
Unity3D VR 全景图游览
unity·渲染·vr·虚拟现实·全景图·漫游·互动
avi911118 小时前
Unity 商业插件之(四)粒子系统,古法射击子弹轨迹 ,附加:HDRP Built-in Particle Shaders 最新的高级管线粒子Shader
unity·游戏引擎·粒子系统·particle·拖尾效果