Quick answer: Bind tween to the target node via target.create_tween(). Or guard callback with is_instance_valid(target).

Effect tweens an enemy’s scale on death. Enemy frees mid-tween. Console fills with “freed object” errors.

The Fix

# Bind tween to target lifetime
var tw = enemy.create_tween()
tw.tween_property(enemy, "scale", Vector3.ZERO, 0.5)
tw.tween_callback(enemy.queue_free)

# Or weakref + guard
var w = weakref(enemy)
var tw2 = get_tree().create_tween()
tw2.tween_callback(func():
    var n = w.get_ref()
    if n: n.modulate = Color.RED
)

Node-bound tween dies with its target. Weakref + guard handles cross-node tweens safely.

Verifying

Trigger death tween. Free mid-way. Console clean (or check ignored). Without guards: error spam.

“Bind to target. Or weakref guard. No errors.”

Related Issues

For tween parallel, see parallel. For tween finished, see finished signal.

Bind. Or guard. Tween clean.