我正在 Unity 中创建一个 3D 游戏,基本上,我有一个游戏扫描仪使用的着色器,多个东西是可扫描的,这意味着有多种材质具有相同的着色器。该着色器是使用着色器图创建的。
我想全局修改着色器中使用它的所有材质的属性。
这是我尝试用来修改属性的行:
void FixedUpdate()
{
if(Input.GetMouseButton(1))
{
scannableMat.shader.SetGlobalFloat("_offset", 2);
}
}
但是我收到此错误:
Member 'Shader.SetGlobalFloat(string, float)' cannot be accessed with an instance reference; qualify it with a type name instead (CS0176)
我尝试禁用暴露设置,但没有成功。我对 Shadergraph 还很陌生,所以我不知道我想要它做的事情是否可行,但是任何能够实现相同目标的解决方法都将受到赞赏。抱歉,如果这是一个简单的解决方案,请提前致谢。
首先请注意,为单一材质设置“全局浮动”是没有意义的。
可能您正在寻找的实际上只是
scannableMat.SetFloat("_offset", 2)
。但是,如果您的材质是原始材质的“实例”,则这将不起作用,并且设置全局着色器值将是更好的选择。
如果您有 MeshRenderer 的参考并且您的材质不是实例,则可以使用 meshRenderer.sharedMaterial.SetFloat("_offset", 2)
。
最后,如果您确实想为所有着色器设置全局值,请尝试Shader.SetGlobalFloat("_offset", 2)
。