我正在使用新的HDRP / LitTesselation着色器。
我想在运行时更改Base Color + Opacity
:
我将此代码添加到了游戏对象的脚本中:
void start()
{
Color color = new Color(100, 50, 100, 150);
//Fetch the Renderer from the GameObject
Renderer rend = GetComponent<Renderer>();
//Set the main Color of the Material to green
rend.material.shader = Shader.Find("_Color");
rend.material.SetColor("_Color", color);
}
但是它会在着色器中生成Hidden/InternalShaderError
错误。谁能指出我正确的方向?
答案 0 :(得分:1)
我通过如下修改这些行使其工作:
rend.material.shader = Shader.Find("HDRenderPipeline/LitTessellation");
rend.material.SetColor("_BaseColor", color);
答案 1 :(得分:0)
此行很可能是该问题:
Color color = new Color(100, 50, 100, 150);
根据Unity docs,应将颜色初始化为0到1的值,而不是较大的数字。我的猜测是,如果您相应地更改color
变量的值,将解决此问题。您的其余代码似乎遵循here的格式。
尝试以下方法:
Color color = new Color(0.39f, 0.196f, 0.39f, 0.588f);
答案 2 :(得分:0)
这是用于HDRP / Lit:
private Material _mat;
void Start()
{
Renderer nRend = GetComponent<Renderer>();
_mat = nRend.material;
}
void Update()
{
Color nNew = //do whatever you want here
_mat.SetColor("_BaseColor", nNew);
}
我曾经读过,应该使用“ sharedMaterial”代替“ material”。 但是,我认为那只是一个错字。我认为“ sharedMaterial”会影响所有HDRP / Lit材料。