Unity 2018.3 HDRP - 以编程方式更改材质颜色?

Posted

技术标签:

【中文标题】Unity 2018.3 HDRP - 以编程方式更改材质颜色?【英文标题】:Unity 2018.3 HDRP - Change material color programatically? 【发布时间】:2019-06-14 08:20:40 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我通过如下修改这些行使其工作:


rend.material.shader = Shader.Find("HDRenderPipeline/LitTessellation"); 
rend.material.SetColor("_BaseColor", color);

【讨论】:

如果您认为这是正确的解决方案,请将此答案标记为已接受并关闭此问题。 :)【参考方案2】:

这是用于 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 材质。

【讨论】:

【参考方案3】:

这个问题很可能与这一行有关:

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);

【讨论】:

谢谢。我试过了,但在着色器上仍然出现同样的错误:“Hidden/InternalShaderError”。

以上是关于Unity 2018.3 HDRP - 以编程方式更改材质颜色?的主要内容,如果未能解决你的问题,请参考以下文章

unity HDRP 一些坑 (物体变黑问题。。等等)

我无法打开任何统一的 HDRP 项目

Unity项目升级到HDRP后模型变成紫红色怎么办?

Unity HDRP之次表面散射

Unity高清渲染管道HDRP,如何实现雾的效果?

Unity 2018.3:如何在整个 3D 模型的一部分上应用纹理?