代码修改材质参数

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));
相关推荐
Allen747419 小时前
ComfyUI 自动化生产 3D资产 工作流笔记
图像处理·opencv·unity·自然语言处理·3d模型生成·confyui
nnsix1 天前
Unity Windows11 打字中文显示不出来输入法的候选框
unity
adogai1 天前
unity mcp接入 实现一句话生成游戏!
游戏·unity·游戏引擎
mxwin1 天前
Unity Shader 逐像素光照 vs 逐顶点光照性能与画质的权衡策略
unity·游戏引擎·shader·着色器
CDN3601 天前
游戏盾导致 Unity/UE 引擎崩溃的主要原因排查?
游戏·unity·游戏引擎
mxwin2 天前
Unity URP 全局光照 (GI) 完全指南 Lightmap 采样与实时 GI(光照探针、反射探针)的 Shader 集成
unity·游戏引擎·shader·着色器
mxwin2 天前
Unity URP 溶解效果基于噪声纹理与 clip 函数实现物体渐隐渐显
unity·游戏引擎·shader
CheerWWW2 天前
GameFramework——Download篇
笔记·学习·unity·c#
mxwin2 天前
Unity URP 下的 Early-Z / Depth Prepass 解决复杂片元着色器造成的 Overdraw 问题
unity·游戏引擎·着色器
mxwin2 天前
Unity Shader 顶点色:利用模型顶点颜色传递渲染数据
unity·游戏引擎·shader