1.MaterialPropertyBlock
2.通过Material的Set方法
3.Shader全局属性(Global Shader Properties)
1.MaterialPropertyBlock
运行时修改材质属性, 而不会创建新的材质实例(不会增加内存开销)
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方法
这种方法会修改材质的属性, 如果材质是共享的, 那么所有使用该材质的对象都会受到影响; 如果不想影响其他对象, 可以
先复制一份材质(使用Material.Instantiate)
private Material material;
void Start()
{
Renderer renderer = GetComponent<Renderer>();
material = renderer.material;
material.SetColor("_Color", color);
material.SetFloat("_FloatValue", floatValue);
}
3.Shader全局属性(Global Shader Properties)
这种方法设置的值会对所有Shader中同名的全局属性生效
void Start()
{
Shader.SetGlobalColor("_GlobalColor", color);
Shader.SetGlobalFloat("_GlobalFloat", floatValue);
}