【问题标题】:Unity 2018.3 HDRP - Change material color programatically?Unity 2018.3 HDRP - 以编程方式更改材质颜色?
【发布时间】: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 错误。谁能指出我正确的方向?

【问题讨论】:

    标签: c# unity3d


    【解决方案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”。
      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2015-05-25
      • 2015-12-06
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      相关资源
      最近更新 更多