Unity 2018.3 HDRP-是否以编程方式更改材料颜色?

时间:2019-01-20 22:27:37

标签: c# unity3d

我正在使用新的HDRP / LitTesselation着色器。

我想在运行时更改Base Color + Opacity

img

我将此代码添加到了游戏对象的脚本中:

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错误。谁能指出我正确的方向?

3 个答案:

答案 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材料。