2-finger zoom (2d-camera) for mobile game doesn't work

Godot Version

4.2.1

Question

Hello,

we are programming a mobile game. We are currently having problems with the zoom. The camera control itself works on both PC and Android. However, zooming with two fingers does not work. No matter what I have tried, no zoom is performed.

Perhaps one of you has a script for this that you can make available?

Here is our script:

extends Camera2D

@export var min_zoom := 0.25
@export var max_zoom := 1.0
@export var zoom_rate := 16.0
@export var zoom_delta := 0.1
@export var drag_speed := 1.0

@onready var target_zoom: float = zoom.x
@onready var hud := $HUD as HUD

func _physics_process(delta: float) ā†’ void:
zoom.x = lerp(zoom.x, target_zoom, zoom_rate * delta)
zoom.y = lerp(zoom.y, target_zoom, zoom_rate * delta)

func _unhandled_input(event: InputEvent) ā†’ void:
if event is InputEventPanGesture:
var zoom_factor:float = 1.0
if(event.factor > 1.0):
zoom_factor = 1.0 * event.delta * zoom_delta
elif(event.factor < 1.0):
zoom_factor = -1.0 * event.delta * zoom_delta

    target_zoom = clamp(target_zoom + zoom_factor, min_zoom, max_zoom)

if event is InputEventMouseButton:
    if event.button_index == MOUSE_BUTTON_WHEEL_UP:
        target_zoom = min(target_zoom + zoom_delta, max_zoom)
    if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
        target_zoom = max(target_zoom - zoom_delta, min_zoom)
    if event.pressed:
        if event.button_index == MOUSE_BUTTON_LEFT:
            Input.set_default_cursor_shape(Input.CURSOR_DRAG)
    elif event.button_index == MOUSE_BUTTON_LEFT:
        Input.set_default_cursor_shape(Input.CURSOR_ARROW)

if event is InputEventMouseMotion and \
        event.button_mask == MOUSE_BUTTON_LEFT:
    position -= event.relative * drag_speed / zoom

Does no one have any advice?

This does not have multi-touch support. use the InputEventScreenDrag class

func _input(event):
if event is InputEventScreenDrag:
pass
if event is InputEventMagnifyGesture:
pass

Thank you very much! Iā€™m on the road today. I will try it out tomorrow! :v: