c# - 动态改变着色器的属性

标签 c# unity3d shader

我在 Unity 的游戏对象上有一个着色器,我们称它为 FooShader。在 FooShader 中有一个名为 _fooVal 的公共(public)属性,我想实时更新。

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

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

gameObject.material._fooVal

最佳答案

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

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

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

关于c# - 动态改变着色器的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000049/

相关文章:

opengl - 如何在 OpenGL 4 的着色器中设置 gl_Vertex?

c# - DLL 必须位于 nuget 包中的 lib 文件夹中

c# - IBM Watson 对话服务错误 : cannot convert from 'method group' to 'conversation.onMessage'

unity3d - 在 Unity 5 中更改相机 (Oculus Rift) 位置

java - 如何从 Unity Android 插件调用非静态方法?

opengl-es - Cocos2d 3(模糊)着色器

c# - .NET core OPTIONS 请求返回 405 错误

c# - 如何使用 Code First 在 ASP.NET MVC 5 Identity 2.0 中为 AspNetUser 表(Id 列)的客户表(CreatedBy 列)添加外键

javascript - CefSharp - 获取 AJAX 请求的结果

c++ - 没有使用 glShadeModel(GL_SMOOTH) 的颜色插值