camera_tracker.gd 719 B

123456789101112131415161718192021222324252627282930313233
  1. class_name CameraTracker
  2. extends Camera3D
  3. ## Track object in subject view
  4. @onready var _max_distance: float = 10
  5. var _tracked_node: Node3D
  6. func track(node: Node3D) -> void:
  7. _tracked_node = node
  8. func _process(_delta: float) -> void:
  9. if _tracked_node == null:
  10. return
  11. look_at(_tracked_node.get_global_position())
  12. _adjust_distance()
  13. func _adjust_distance() -> void:
  14. var target: Vector3 = _tracked_node.get_global_position()
  15. var current_distance: float = position.distance_to(target)
  16. if current_distance > _max_distance:
  17. var diff: float = current_distance - _max_distance
  18. set_position(position + transform.basis * Vector3.FORWARD * diff)
  19. func _on_focus_required(node: Node3D) -> void:
  20. track(node)