1.7 C#传递参数给Shader

1.MaterialPropertyBlock

2.通过Material的Set方法

3.Shader全局属性(Global Shader Properties)


1.MaterialPropertyBlock

csharp 复制代码
运行时修改材质属性, 而不会创建新的材质实例(不会增加内存开销)
csharp 复制代码
private Renderer renderer;
private MaterialPropertyBlock propertyBlock;

void Start()
{
    renderer = GetComponent<Renderer>();
    propertyBlock = new MaterialPropertyBlock();
}

void Update()
{
    // 获取当前渲染器的属性块
    renderer.GetPropertyBlock(propertyBlock);
    // 设置颜色属性
    propertyBlock.SetColor("_Color", color);
    // 设置浮点数属性
    propertyBlock.SetFloat("_FloatValue", floatValue);
    // 将属性块应用回渲染器
    renderer.SetPropertyBlock(propertyBlock);
}

2.通过Material的Set方法

csharp 复制代码
这种方法会修改材质的属性, 如果材质是共享的, 那么所有使用该材质的对象都会受到影响; 如果不想影响其他对象, 可以

先复制一份材质(使用Material.Instantiate)
csharp 复制代码
private Material material;

void Start()
{
    // 获取渲染器上的材质,这里会创建一份新的材质实例(如果材质不是实例化的,则会实例化)
    Renderer renderer = GetComponent<Renderer>();
    // 使用material会创建实例,使用sharedMaterial则不会创建实例但会修改共享材质
    material = renderer.material; 

	material.SetColor("_Color", color);
    material.SetFloat("_FloatValue", floatValue);
}

3.Shader全局属性(Global Shader Properties)

csharp 复制代码
这种方法设置的值会对所有Shader中同名的全局属性生效

void Start()
{
    Shader.SetGlobalColor("_GlobalColor", color);
    Shader.SetGlobalFloat("_GlobalFloat", floatValue);
}
相关推荐
米芝鱼4 天前
UnityURP3D管线自定义功能shader
游戏·unity·shader·urp·着色器
雪下的新火6 天前
ASE07-魔法药剂炼制效果
经验分享·unity·shader·ase·游戏效果
17岁的勇气2 个月前
Unity Shader unity文档学习笔记(二十二):雪地几种实现方式(1. 2D贴花式 2.3D曲面细分并且实现顶点偏移)
笔记·学习·unity·shader
淡海水2 个月前
【URP】Unity[内置Shader]光照着色器Lit
unity·游戏引擎·shader·urp·着色器·lit
雪下的新火2 个月前
爆炸特效-Unity-04-shader&粒子系统
经验分享·笔记·unity·游戏引擎·shader·粒子系统
寻水的鱼、、3 个月前
【Unity Shader学习笔记】(二)图形显示系统
unity·shader
淡海水4 个月前
【URP】Unity Shader Tags
unity·游戏引擎·渲染·shader·tag·urp
淡海水4 个月前
【URP】Unity 插入自定义RenderPass
unity·游戏引擎·渲染·shader·renderpass
benben0444 个月前
《Unity Shader入门精要》学习笔记一
unity·shader