You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行时修改材质Shader属性并获取Opacity属性引用

在Unity运行时修改Shader的Opacity属性方案

首先要明确:Shader面板显示的Opacity是友好名称,实际代码中需要用Shader定义里的属性标识符(通常是下划线开头,比如_Opacity,这是Unity的常规命名规范)。以下是两种可靠的实现方式:

1. 直接通过属性名称修改

如果只需要偶尔修改,直接用属性名称调用SetFloat即可:

// 获取目标材质实例(从Renderer组件获取,生成独立实例不影响其他物体)
Material targetMaterial = GetComponent<Renderer>().material;

// 设置Opacity值(范围0-1,0为完全透明,1为完全不透明)
targetMaterial.SetFloat("_Opacity", 0.5f);

2. 预获取属性ID(高频修改更高效)

如果需要频繁修改该属性,建议先获取属性的哈希ID,避免重复字符串查找的性能损耗:

// 类内成员变量存储属性ID
private int _opacityPropertyId;

void Start()
{
    // 提前获取属性的哈希ID
    _opacityPropertyId = Shader.PropertyToID("_Opacity");
}

void Update()
{
    Material targetMaterial = GetComponent<Renderer>().material;
    // 通过ID修改属性值
    targetMaterial.SetFloat(_opacityPropertyId, 0.5f);
}

关键注意点

  • 用Renderer.material会生成材质实例,修改仅作用于当前物体;若用Renderer.sharedMaterial,会修改所有使用该材质的物体,谨慎使用。
  • 务必确认Shader代码中确实存在对应属性,比如Shader里会有类似_Opacity ("Opacity", Range(0,1)) = 1.0的定义。

内容的提问来源于stack exchange,提问作者Sameer Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:26:00