camera_tracker.gd 729 B

12345678910111213141516171819202122232425262728293031323334
  1. class_name CameraTracker
  2. extends Camera3D
  3. ## Track object in subject view
  4. @export 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. push_error()
  17. if current_distance > max_distance:
  18. var diff: float = current_distance - max_distance
  19. set_position(position + transform.basis * Vector3.FORWARD * diff)
  20. func _on_focus_required(node: Node3D) -> void:
  21. track(node)