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 - 以编程方式更改材质颜色?的主要内容,如果未能解决你的问题,请参考以下文章