Unity:尝试使用 .SetGlobalFloat 设置全局着色器属性

问题描述 投票:0回答:1

我正在 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 还很陌生,所以我不知道我想要它做的事情是否可行,但是任何能够实现相同目标的解决方法都将受到赞赏。抱歉,如果这是一个简单的解决方案,请提前致谢。

c# unity-game-engine shader shader-graph
1个回答
0
投票

首先请注意,为单一材质设置“全局浮动”是没有意义的。

可能您正在寻找的实际上只是

scannableMat.SetFloat("_offset", 2)
。但是,如果您的材质是原始材质的“实例”,则这将不起作用,并且设置全局着色器值将是更好的选择。 如果您有 MeshRenderer 的参考并且您的材质不是实例,则可以使用

meshRenderer.sharedMaterial.SetFloat("_offset", 2)

最后,如果您确实想为所有着色器设置全局值,请尝试

Shader.SetGlobalFloat("_offset", 2)

    

© www.soinside.com 2019 - 2024. All rights reserved.