如何给 TextureRect 着色?

How to tint a TextureRect?

有没有办法在 Godot 4.3 中为 TextureRect 着色?例如:想象一个透明背景上的白色图标分配给 TextureRect。有没有办法用任意颜色绘制白色图标?

在“检查器”面板的“可见性”下,您会找到 modulateself_modulate 属性。您可以使用它们对任何 CanvasItem(包括任何 Control 和任何 Node2D)进行着色(或通过着色 alpha 更改不透明度)。

属性 modulateself_modulate 的不同之处在于它们适用于哪个项目。 属性 modulate 适用于它所应用的项目及其子项,而 self_modulate 仅适用于该项目而不适用于其任何子项。


当然,您也可以创建和设置自定义 ShaderMaterial。参见 CanvasItem shaders。使用片段功能,您可以在其中设置所需的任何颜色。

例如,此着色器将保留纹理中的 alpha,但将所有内容设置为红色:

shader_type canvas_item;

void fragment()
{
    COLOR.a = texture(TEXTURE, UV).a;
    COLOR.rgb = vec3(1.0, 0.0, 0.0);
}

或者这个其他示例将保留红色和 alpha(它将红色和 alpha 乘以 1,绿色和蓝色乘以 0):

shader_type canvas_item;

void fragment()
{
    COLOR = texture(TEXTURE, UV) * vec4(1.0, 0.0, 0.0, 1.0);
}

而且,是的,这些结合了。 modulateself_modulate 的效果在着色器 material.

之后应用