【问题标题】:Dynamically change property of Shader动态改变Shader的属性
【发布时间】:2015-08-14 08:19:28
【问题描述】:

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

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

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

gameObject.material._fooVal

【问题讨论】:

标签: c# unity3d shader


【解决方案1】:

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

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

这里是Unity3D reference on materials - 还有SetIntSetColorSetVector 和其他方法,具体取决于您要更新的变量类型。

【讨论】:

  • 为什么 SetFloat 必须在 Update() 中,而不是在 Start() 中?
  • @MatanMarciano 只是因为提问者想要实时更新值。如果只想设置一次,可以放在Start()中。
猜你喜欢
  • 1970-01-01
  • 2016-01-24
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2015-10-05
  • 2019-08-11
相关资源
最近更新 更多