Problem with force_raycast_update()

Godot Version

3.5

Question

I’m having a problem with the force_raycast_update() function in my game. When I use force_raycast_update(), the player character, who is a Rigidbody in zero gravity, seems to stop moving. However, functions bound to other buttons still work correctly. Without force_raycast_update(), the laser passes through the meteorite without affecting it.

Player

extends RigidBody2D

var speed = 0
var maxSpeed = 800
var acceleration = 15
var direction_vector = Vector2()
var target_angle = 0
var screen_size = Vector2()

onready var ship_particle = get_node("Particles2D")
func _process(delta):
	position.x = wrapf(position.x, -50, screen_size.x+50)
	position.y = wrapf(position.y, -50, screen_size.y+50)
	
	var mouse_position = get_viewport().get_mouse_position()
	direction_vector = mouse_position - self.position
	target_angle = direction_vector.angle()+ PI / 2
	var current_angle = rotation
	var angle_difference = target_angle - current_angle
	angle_difference = wrapf(angle_difference, -PI, PI)
	set_angular_velocity(angle_difference * 10) 
	
	if Input.is_action_pressed("rcm"):
		if speed < maxSpeed:
			speed += acceleration
		self.applied_force = direction_vector.normalized() * speed
		ship_particle.emitting = true

func _input(event):
	if event is InputEventMouseButton:
		if event.button_index == BUTTON_RIGHT and not event.pressed:
			speed = 0
			self.applied_force = direction_vector.normalized() * speed
			ship_particle.emitting = false

func _on_Player_ready():
	screen_size = get_viewport().get_size()

LaserGun

extends RayCast2D

var is_casting = false setget set_is_casting
onready var laser_line = get_node("Line2D")
onready var laser_tween = get_node("Tween")
onready var laser_particle = get_node("Particles2D")

func _ready():
	set_physics_process(false)
	laser_line.points[1] = Vector2.ZERO
func _input(event):
	if event is InputEventMouseButton:
		if event.button_index == BUTTON_LEFT and not event.pressed and is_casting:
			self.is_casting = false
			set_physics_process(is_casting)
			laser_particle.emitting = is_casting
		if event.button_index == BUTTON_LEFT and event.pressed and not is_casting:
			self.is_casting = true
			set_physics_process(is_casting)
			laser_particle.emitting = is_casting
			

func _physics_process(delta):
	var castPoint = cast_to
	force_raycast_update()
	if is_colliding():
		castPoint = to_local(get_collision_point())
	
	laser_line.points[1] = castPoint
	
func set_is_casting(cast: bool):
	is_casting = cast
	if is_casting:
		appear()
	else:
		disappear()

func appear():
	laser_tween.stop_all()
	laser_tween.interpolate_property(laser_line, "width", 0, 3.0, 0.2)
	laser_tween.start()

func disappear():
	laser_tween.stop_all()
	laser_tween.interpolate_property(laser_line, "width", 3.0, 0, 0.1)
	laser_tween.start()