extends Camera3D @export var rail : Path3D @export var target : Node3D @export var seek_easing : float = 1.0 var crv : Curve3D var cur_offset : float var tgt_offset : float var target_pos # Called when the node enters the scene tree for the first time. func init(): crv = rail.curve target_pos = target.position tgt_offset = crv.get_closest_offset( target.position ) func seek_target(): if target_pos != target.position: target_pos = target_pos.move_toward( target.position , target.position.distance_to(target_pos)/seek_easing ) # distancia entre los puntos dividido entre easing look_at( target_pos + Vector3(0.0,0.70,0.0) ) func constraint_to_rail(): tgt_offset = crv.get_closest_offset( target.position ) cur_offset = move_toward( cur_offset , tgt_offset , abs(tgt_offset - cur_offset )/ (seek_easing * 100) ) print((tgt_offset - cur_offset )) position = crv.sample_baked( cur_offset ) func _ready(): init() func _process(delta): constraint_to_rail() seek_target()