【发布时间】:2018-10-22 00:59:06
【问题描述】:
我需要设置一个着色器的变量,而没有环绕它的材质。
我会解释问题以及为什么它不像问题“How can I access shader variables from script?”。
问题
我的着色器与此类似(删除了 99% 的不相关样板代码):
Shader "Hidden/XShader"
{
Properties
{
_x ("", float) = 0
}
SubShader
{
Pass
{
float _x;
half4 frag(v2f i) : SV_Target
{
// "col" and "wpos" have been correctly defined
if (wpos.x >= _x)
{
col.r = 1;
} else {
col.r = 0;
}
return col;
}
}
}
}
这个着色器是通过Edit->Project Settings->Graphics->Deferred 选项设置的。它是主相机使用的默认着色器。
现在我需要从附加到相机的代码中设置_x 值:
public class XCameraController : MonoBehaviour
{
public float x;
void Update()
{
<something>.SetFloat("_x", x);
}
}
<something> 占位符通常是一种材质,因为在那里定义了 SetFloat()。但是相机和着色器没有材质。 material 的概念甚至不适用于默认着色器。
我已经在网上和文档中搜索了几个小时。我承认我失败了,在这里不知所措。我想它一定很简单,但我找不到任何文档。
我不指望一个已实施的解决方案,我可以找到帮助的指针就足够了!
【问题讨论】: