camera_tracker.gd 855 B

1234567891011121314151617181920212223242526272829303132333435
  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. print("From ", position, " to ", target, ", there are ", current_distance, "m")
  17. if current_distance > _max_distance:
  18. print(current_distance, " is above ", _max_distance)
  19. var diff: float = current_distance - _max_distance
  20. set_position(position + transform.basis * Vector3.FORWARD * diff)
  21. func _on_focus_required(node: Node3D) -> void:
  22. track(node)