I want to create a “gradual colour change” effect in Godot.
eg: some_set_font_color_func(Color8(255,n,n)
where n gradually decreases to make the text fade from white to red.
I can’t figure out what function I would use in place of some_set_font_color_func
to change a font’s colour.
Godot themes are somewhat confusing. Given some var var UI:control
how would I set the colour of any font(s) contained within that node?
Tried copying this post into chatGPT:
extends Control var label: Label var color_change_speed: float = 1.0 var current_color: Color = Color(1, 1, 1, 1) # Initial color (white) func _ready(): label = $Label # Assuming your Label node is named "Label" label.modulate = current_color # Call a function to start the gradual color change start_color_change() func start_color_change(): # Schedule a function to be called every frame # The function `_process(delta)` will be called continuously set_process(true) func _process(delta): # Gradually decrease the red component of the color current_color.r -= color_change_speed * delta # Set the modified color to the label label.modulate = current_color # Check if the red component has reached a certain threshold (e.g., 0) if current_color.r <= 0: # Stop the color change set_process(false)
Helpful or counterproductive? I’ll give it a try later.
Update:
modulate
seems to be a Godot 4 function, so this won’t work for me.ChatGPT doesn’t seem to be too helpful, but I tried a little more. Here’s how it went:
Me: “Sorry. I’m using gotot 3. Label doesn’t seem to have
.modulate
.”shader_type canvas_item; uniform vec4 base_color : hint_color = vec4(1.0, 1.0, 1.0, 1.0); uniform float color_change_speed : hint_range(0.1, 5.0) = 1.0; void fragment() { // Calculate the time-based color change float time = mod(TIME, 1.0); vec4 modified_color = vec4(1.0, time, time, 1.0); // Apply the base color and the modified color COLOR = base_color * modified_color; }
Me: “What about
set_color
after giving the control node a theme? Would that be a good way to do this? I haven’t been able to getset_color
to work, as I can’t figure out whatname
andtheme_type
should be.”extends Control var label: Label var color_rect: ColorRect var color_change_speed: float = 1.0 func _ready(): label = $Label # Assuming your Label node is named "Label" color_rect = $ColorRect # Assuming your ColorRect node is named "ColorRect" # Call a function to start the gradual color change start_color_change() func start_color_change(): # Schedule a function to be called every frame set_process(true) func _process(delta): # Gradually decrease the red component of the color color_rect.modulate.r -= color_change_speed * delta # Set the modified color to the label label.modulate = color_rect.modulate # Check if the red component has reached a certain threshold (e.g., 0) if color_rect.modulate.r <= 0: # Stop the color change
set_process(false)
Me: “I don’t really understand shaders, and I’ve already tried to create a theme. Could you just explain
set_color
with examples of whatname
andtheme_type
may be in case that helps?”# Assuming 'UI' is your Control node UI.set_color("font_color", "Label", Color(1.0, 0.5, 0.5)) # Example values, adjust as needed
Me: “Don’t worry. Godot 3 is an older LTS version, so it’s documentation probably won’t get update much. Jan 2022 knowledge is fine.”
Me: “That solved my problem. Thank you.”
It’s scary how good AI is getting.