Godot Version
4.2.1
Question
I first defined targetrotation and targetposition
@onready var spring_arm = $SpringArm3D
# Camera smoothing variables
var target_position = Vector3()
var target_rotation = Vector3()
var smoothing_speed = 5.0
func _ready() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
target_position = spring_arm.global_transform.origin
target_rotation = spring_arm.rotation
Then I tried to make the camera turn smoothly
func _unhandled_input(event) -> void:
if event is InputEventMouseMotion and moving_camera:
target_rotation.x -= event.relative.y * mouse_sensitivity
target_rotation.x = clamp(target_rotation.x, deg_to_rad(-90), deg_to_rad(30))
target_rotation.y -= event.relative.x * mouse_sensitivity
if event is InputEventJoypadMotion:
pass
if event.is_action_pressed("Pause"):
$PauseMenu.pause()
func smooth_camera(delta):
var target_rot_quat = Quaternion().from_euler(target_rotation)
spring_arm.global_transform.origin = spring_arm.global_transform.origin.lerp(global_transform.origin, smoothing_speed * delta) + Vector3(0,.15,0)
spring_arm.rotation = spring_arm.rotation.slerp(target_rot_quat, smoothing_speed * delta)
print(spring_arm.rotation.y)
However, this line causes me all the issue
spring_arm.rotation = spring_arm.rotation.slerp(target_rot_quat, smoothing_speed * delta)
Slerp doesn’t take in quaternions but I really need something to rotate around a circle without spinning out of control once rotation reaches past pi,
spring_arm.rotation = spring_arm.rotation.lerp(target_rotation, smoothing_speed * delta)
This is an older version of this line, when i rotate too much the camera spins out of control, which is why I wanted to use the quaternion, if I didn’t want camera smoothness I could;ve settled for just:
spring_arm.rotation = target_rotation
so can you help me find a way to make smooth camera movement in godot 4.2.1? A lot of resources are from older versions