вращение персонажа вокруг своей оси с помощью круговых движений пальца по экрану

Задача такая: осуществить вращение персонажа вокруг своей оси с помощью круговых движений пальца по экрану. Был эксперимент с лучами,

func _process(_delta):
look_at_cursor()
func look_at_cursor():
    var player_position = global_transform.origin
    var drop_plane = Plane(Vector3(0, 1, 0), player_position.y)
    var mouse_position = get_viewport().get_mouse_position()
    var ray_length  = 1000
    var ray_start = $Position3D/Camera.project_ray_origin(mouse_position)
    var end_ray = ray_start + $Position3D/Camera.project_ray_normal(mouse_position) * ray_length
    var cursor_pos = drop_plane.intersects_ray(ray_start, end_ray)
    look_at(cursor_pos, Vector3.UP)
    shoot_point = end_ray

но в данном случае водить пальцем нужно строго вокруг персонажа. Хотелось бы этого избежать и сделать чтобы в любом месте экрана можно было управлять поворотом персонажа. Вариант с джойстиком рассматривать не хочется, реализовали через InputEventScreenDrag, но персонаж ведёт себя не совсем корректно.

func _input(event):
    if event is InputEventScreenDrag:
        var rotx = event.relative.x * rot_speed 
        var roty = event.relative.y * rot_speed
        rotate_y(rotx+roty)

Ответы (0 шт):