Quick answer: Use set_parallel(true) after creating the tween, or call .parallel() on each tweener you want to run alongside the previous one.
A UI element should scale and fade in simultaneously. The tween scales first, then fades — they run one after another instead of together.
Default Is Sequential
var t = create_tween()
t.tween_property(node, "scale", Vector2.ONE, 0.3)
t.tween_property(node, "modulate:a", 1.0, 0.3) # runs AFTER scale
Each tween_property is a step; steps run in sequence by default.
Fix: set_parallel
var t = create_tween().set_parallel(true)
t.tween_property(node, "scale", Vector2.ONE, 0.3)
t.tween_property(node, "modulate:a", 1.0, 0.3) # runs WITH scale
All tweeners run together.
Fix: Per-Tweener parallel()
var t = create_tween()
t.tween_property(node, "scale", Vector2.ONE, 0.3)
t.parallel().tween_property(node, "modulate:a", 1.0, 0.3)
parallel() makes the next tweener run alongside the previous. Mix sequential and parallel in one tween.
Chained Sequences
t.tween_property(...) # step 1
t.parallel().tween_property(...) # with step 1
t.tween_property(...) # step 2 (after both)
parallel() only affects the immediately following tweener. Next plain call resumes sequential.
Verifying
UI element scales and fades together in 0.3s, not 0.6s total. Timeline feels snappy.
“Tweens are sequential by default. set_parallel for all, parallel() for one.”
For complex UI choreography, sketch the timeline on paper first — which steps overlap, which follow. Then translate to parallel()/sequential calls.