| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | class_name CameraTrackerextends Camera3D## Track object in subject view@export var max_distance: float = 10@export var camera_height: float = 1var _tracked_node: Node3Dfunc track(node: Node3D) -> void:	_tracked_node = nodefunc _process(_delta: float) -> void:	if _tracked_node == null:		return	look_at(_tracked_node.get_global_position())	_adjust_distance()func _adjust_distance() -> void:	var target: Vector3 = _tracked_node.get_global_position()	_adjust_max_distance_from(target)	_adjust_min_distance_from(target)func _adjust_max_distance_from(target: Vector3) -> void:	var current_distance: float = position.distance_to(target)	if current_distance > max_distance:		var diff: float = current_distance - max_distance		position += transform.basis * Vector3.FORWARD * difffunc _adjust_min_distance_from(target: Vector3) -> void:	var target_height: float = target.y + camera_height	if position.y < target_height:		position.y = target_heightfunc _on_focus_required(node: Node3D) -> void:	track(node)
 |