unity shadergraph全局变量
时间: 2025-03-15 11:03:36 浏览: 86
### Unity ShaderGraph 中使用全局变量的方法
在 Unity ShaderGraph 中,可以通过定义公共属性来创建全局变量。这些全局变量可以在 C# 脚本中访问并动态修改其值[^3]。以下是具体方法:
#### 1. 创建全局变量
在 ShaderGraph 编辑器中,右键点击空白区域,选择 **Create Parameter** 来创建一个新的参数节点。可以选择不同的数据类型(如 Float、Vector、Color 等)作为全局变量。
- 参数一旦被创建,默认会显示为材质球上的公开属性。
- 这些参数可以用于控制着色器的行为或外观,例如颜色、强度或其他数值。
#### 2. 访问全局变量
要在脚本中设置或读取这些全局变量的值,需先获取材质对象,并通过 `Material.SetFloat` 或其他对应类型的 setter 方法完成操作。
```csharp
// 假设我们有一个名为 "MyFloatParameter" 的浮点型全局变量
meshRenderer_mat.SetFloat("_MyFloatParameter", newValue);
```
上述代码片段展示了如何利用 C# 设置 ShaderGraph 中定义的一个 float 类型全局变量 `_MyFloatParameter` 的新值[^4]。
#### 3. 平滑过渡与条件判断
当某些情况下需要对全局变量应用额外逻辑处理时,可以借助 HLSL 函数或者 ShaderGraph 提供的功能节点实现复杂运算。例如,在交互式效果设计里经常需要用到平滑步进函数 smoothstep[] 对输入范围做限制[^5]。
---
### 示例:动态改变光照强度
假设我们需要制作一个随时间变化而逐渐变亮的灯光效果,则可在 ShaderGraph 内部设定好基础亮度调节机制后,再由外部脚本来驱动这个过程:
```csharp
using UnityEngine;
public class LightIntensityController : MonoBehaviour {
public Material material;
private void Update() {
float intensity = Mathf.PingPong(Time.time, 1f); // 循环波动 [0..1]
material.SetFloat("_LightIntensity", intensity);
}
}
```
这里演示了一个简单的周期性光强变动例子,其中 "_LightIntensity" 是预先配置好的 ShaderGraph 变量名称。
---
阅读全文
相关推荐

















