动态更改Shader的属性

时间:2015-08-13 23:25:21

标签: c# unity3d shader

我在Unity中的游戏对象上有一个着色器,让我们称之为FooShader。在FooShader中有一个名为_fooVal的公共属性,我想实时更新。

我在同一个gameObject上创建了一个空白的C#脚本。 我的第一个问题是如何引用此FooShader着色器?然后,一旦我有正确的引用更改其_fooVal属性?

我已尝试使用以下内容获取对Shader的引用,但它不起作用。

gameObject.material._fooVal

1 个答案:

答案 0 :(得分:4)

如果我正确理解您的问题,您无法直接在着色器中访问变量,您必须使用材质对象上的方法。尝试使用以下代码获取渲染器组件并在其着色器中设置(例如)浮点值:

Renderer rend = GetComponent<Renderer>();
rend.material.SetFloat("_fooVal", 2.0f /* Your value here */);

以下是Unity3D reference on materials - 还有SetIntSetColorSetVector以及其他方法,具体取决于您尝试更新的变量类型。