Guest User

Improved 3D Navigation Experiment Latest Attempt (UNFINISHED)

a guest
Nov 10th, 2025
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extends Node3D
  2.  
  3. @onready var camera_pivot: Node3D = $CameraPivot
  4. @onready var scene_camera: Camera3D = $CameraPivot/Camera3D
  5. @onready var camera_up_vector: Vector3 = scene_camera.global_basis.y
  6. @onready var camera_right_vector: Vector3 = scene_camera.global_basis.x
  7.  
  8. var base_value := 1.0
  9. var rotation_speed := 0.05
  10. var input_vector: Vector2 = Vector2.ZERO
  11.  
  12.  
  13. func _unhandled_input(event: InputEvent) -> void:
  14.    
  15.     if event is InputEventMouseButton:
  16.         if Input.is_mouse_button_pressed(MOUSE_BUTTON_WHEEL_LEFT):
  17.             if event.shift_pressed:
  18.                 input_vector.x = -base_value
  19.                 pan_camera()
  20.             if event.ctrl_pressed:
  21.                 zoom_camera(base_value)
  22.             else:
  23.                 camera_pivot.rotation.y -= rotation_speed
  24.        
  25.         elif Input.is_mouse_button_pressed(MOUSE_BUTTON_WHEEL_UP):
  26.             if event.ctrl_pressed:
  27.                 zoom_camera(-base_value)
  28.             else:
  29.                 camera_pivot.rotation.x -= rotation_speed
  30.            
  31.         elif Input.is_mouse_button_pressed(MOUSE_BUTTON_WHEEL_DOWN):
  32.             if event.ctrl_pressed:
  33.                 zoom_camera(base_value)
  34.             else:
  35.                 camera_pivot.rotation.x += rotation_speed
  36.        
  37.         elif Input.is_mouse_button_pressed(MOUSE_BUTTON_WHEEL_RIGHT):
  38.             if event.shift_pressed:
  39.                 pan_camera()
  40.             if event.ctrl_pressed:
  41.                 zoom_camera(-base_value)
  42.             else:
  43.                 camera_pivot.rotation.y += rotation_speed
  44.  
  45.  
  46. func zoom_camera(input_value: float):
  47.     var max_dist := 10.0
  48.     scene_camera.position.z += (input_value * 0.25)
  49.     scene_camera.position.z = clampf(scene_camera.position.z, 1.0, max_dist)
  50.  
  51.  
  52. func pan_camera():
  53.     var move_dir = (camera_right_vector * input_vector.x) + (camera_up_vector * input_vector.y)
  54.     print("panning camera")
  55.     return move_dir
  56.    
  57.  
Advertisement
Add Comment
Please, Sign In to add comment