我在Unity中有一个关于gameObject的着色器,我们称它为FooShader。在FooShader中有一个名为_fooVal
的公共财产,我想实时更新。动态改变着色器的属性
我在同一个gameObject上创建了一个空白的C#脚本。 我的第一个问题是我该如何参考这个着色器FooShader
?然后我有一个正确的参考改变其_fooVal
财产?
我试过使用以下来获取对着色器的引用,但它不起作用。
gameObject.material._fooVal
我在Unity中有一个关于gameObject的着色器,我们称它为FooShader。在FooShader中有一个名为_fooVal
的公共财产,我想实时更新。动态改变着色器的属性
我在同一个gameObject上创建了一个空白的C#脚本。 我的第一个问题是我该如何参考这个着色器FooShader
?然后我有一个正确的参考改变其_fooVal
财产?
我试过使用以下来获取对着色器的引用,但它不起作用。
gameObject.material._fooVal
如果我正确理解你的问题,你不能直接访问着色器中的变量,你必须使用材质对象上的方法。试试下面的代码,让您的渲染器组件和设置的值(例如)在其着色浮法:
Renderer rend = GetComponent<Renderer>();
rend.material.SetFloat("_fooVal", 2.0f /* Your value here */);
这里是Unity3D reference on materials - 也有SetInt
,SetColor
,SetVector
和其他取决于方法你正试图更新什么类型的变量。
谢谢,巨大的帮助 –
Unity包含ShaderUtil来遍历着色器参数(请参阅https://docs.unity3d.com/ScriptReference/ShaderUtil.html中的Unity文档)。通过了解参数,您可以使用SetFloat,SetColor等来设置它们。 –