Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态更改着色器的属性_C#_Unity3d_Shader - Fatal编程技术网

C# 动态更改着色器的属性

C# 动态更改着色器的属性,c#,unity3d,shader,C#,Unity3d,Shader,我在Unity中的游戏对象上有一个着色器,我们称之为FooShader。在FooShader中有一个名为_fooVal的公共属性,我想实时更新 我在同一个游戏对象上创建了一个空白的C脚本。 我的第一个问题是如何引用此FooShader?然后一旦我有了一个正确的引用,就改变它的_fooVal属性 我尝试使用以下方法来获取着色器的引用,但它不起作用 gameObject.material._fooVal 如果我正确理解了您的问题,则无法直接访问着色器中的变量,必须使用材质对象上的方法。尝试使用以下

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

我在同一个游戏对象上创建了一个空白的C脚本。 我的第一个问题是如何引用此FooShader?然后一旦我有了一个正确的引用,就改变它的_fooVal属性

我尝试使用以下方法来获取着色器的引用,但它不起作用

gameObject.material._fooVal

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

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

以下是-还有SetInt、SetColor、SetVector和其他方法,具体取决于您尝试更新的变量类型。

Unity包含ShaderUtil以循环使用着色器参数。请参阅位于的Unity文档。通过了解参数,您可以使用SetFloat、SetColor等设置参数。为什么SetFloat必须在内部更新,而不是在开始时仅更新一次?@MatanMarciano,因为询问者希望实时更新值。如果只想设置一次,可以将其设置为“开始”。