动态改变属性的Shader
Dynamically change property of Shader
我在 Unity 的游戏对象上有一个着色器,我们称之为 FooShader。 FooShader中有个public属性叫_fooVal
我要实时更新
我在同一个游戏对象上创建了一个空白的 C# 脚本。
我的第一个问题是如何引用这个 FooShader
着色器?然后一旦我有一个正确的参考更改其 _fooVal
属性?
我尝试使用以下方法获取对着色器的引用,但它不起作用。
gameObject.material._fooVal
如果我没有正确理解你的问题,你不能直接访问着色器中的变量,你必须使用 material 对象上的方法。尝试使用以下代码获取渲染器组件并在其着色器中设置(例如)浮点数的值:
Renderer rend = GetComponent<Renderer>();
rend.material.SetFloat("_fooVal", 2.0f /* Your value here */);
这是 Unity3D reference on materials - 还有 SetInt
、SetColor
、SetVector
和其他方法,具体取决于您尝试更新的变量类型。
我在 Unity 的游戏对象上有一个着色器,我们称之为 FooShader。 FooShader中有个public属性叫_fooVal
我要实时更新
我在同一个游戏对象上创建了一个空白的 C# 脚本。
我的第一个问题是如何引用这个 FooShader
着色器?然后一旦我有一个正确的参考更改其 _fooVal
属性?
我尝试使用以下方法获取对着色器的引用,但它不起作用。
gameObject.material._fooVal
如果我没有正确理解你的问题,你不能直接访问着色器中的变量,你必须使用 material 对象上的方法。尝试使用以下代码获取渲染器组件并在其着色器中设置(例如)浮点数的值:
Renderer rend = GetComponent<Renderer>();
rend.material.SetFloat("_fooVal", 2.0f /* Your value here */);
这是 Unity3D reference on materials - 还有 SetInt
、SetColor
、SetVector
和其他方法,具体取决于您尝试更新的变量类型。