Files
godot-demo-projects/3d/physics_tests/utils/camera_orbit.gd
2025-10-11 05:03:59 -07:00

35 lines
801 B
GDScript

extends Camera3D
const ROTATION_COEFF = 0.02
var _rotation_enabled: bool = false
var _rotation_pivot: Node3D
func _ready() -> void:
_initialize_pivot.call_deferred()
func _unhandled_input(input_event: InputEvent) -> void:
if input_event is InputEventMouseButton:
if input_event.button_index == MOUSE_BUTTON_RIGHT:
_rotation_enabled = input_event.pressed
return
if not _rotation_enabled:
return
if input_event is InputEventMouseMotion:
var rotation_delta: float = input_event.screen_relative.x
_rotation_pivot.rotate(Vector3.UP, -rotation_delta * ROTATION_COEFF)
func _initialize_pivot() -> void:
_rotation_pivot = Node3D.new()
var camera_parent := get_parent()
camera_parent.add_child(_rotation_pivot)
camera_parent.remove_child(self)
_rotation_pivot.add_child(self)