I did camera targeting in 2d for bossfights

extends Camera2D

@export_category("targeting")
@export var target: Node2D
@export var minimun_distance := 160.0
@export_custom(PROPERTY_HINT_LINK, "link") var camera_border_offset := Vector2(0.2, 0.2)

func _process(delta: float) -> void:
  var interpolated_position: Vector2

  if target:
    var target_pos = target.position
    var average_pos: Vector2 = (get_parent().global_position + target_pos) / 2

    interpolated_position = lerp(global_position, average_pos, delta*5)

    var zoom_amount: float = clamp(get_parent().position.distance_to(target_pos), minimun_distance, INF)/1000
    zoom = lerp(
        zoom, 
        Vector2.ONE/(zoom_amount) - camera_border_offset*Vector2.ONE/(zoom_amount),
        delta*2
        )
  else:
    interpolated_position = lerp(global_position, get_parent().global_position, delta*5)

  global_position = interpolated_position

script should be attached to camera2d, camera2d inherits player.
i would like to upload the video but unfortunately i cant

I did not test this setup yet… It looks a clean setup.. So .. cool post!.