Godot 4.2.1
I have simple godot 4.2.1 version project, and normally project it work and there is not any notifications in debugger or any kind of bugs, but I dont know why I am not able to drag object, even settings click_left in Input Map, in the past it was work but when I migrate to godot 4.2.1 it is not work, any idea?
DragManager.gd:
extends Node3D
var MergeManager
var canMove = true
@export var isDragging = false
@export var lerpSpeed := 5.0
@export var yOffset := 1.0
var draggedObject = null
var hoveredObject = null
var offset : Vector3
func _ready():
MergeManager = get_node("../MergeManager")
func _process(_delta):
if canMove == false:
return
if Input.is_action_just_pressed("click_left"):
StartDrag()
if Input.is_action_just_released("click_left"):
StopDrag()
if draggedObject == null:
return
if Input.is_action_pressed("click_left"):
var newPos = ScreenPointToRay()
newPos.y = offset.y
draggedObject.global_transform.origin = newPos
func ScreenPointToRay():
var spaceState = get_world_3d().direct_space_state
var mousePos = get_viewport().get_mouse_position()
var camera = get_tree().root.get_camera_3d()
var rayOrigin = camera.project_ray_origin(mousePos)
var rayEnd = rayOrigin + camera.project_ray_normal(mousePos) * 2000
var params = PhysicsRayQueryParameters3D.new()
params.from = rayOrigin
params.to = rayEnd
params.exclude = []
params.collision_mask = 1
var rayArray = spaceState.intersect_ray(params)
if rayArray.has("position"):
return rayArray["position"]
return Vector3()
func StartDrag():
if hoveredObject == null:
return
draggedObject = hoveredObject
var newPos = ScreenPointToRay()
offset = newPos
offset.y = yOffset
isDragging = true
draggedObject.OnDragStart()
func StopDrag():
if draggedObject != null:
draggedObject.OnDragEnd()
isDragging = false
draggedObject = null
func SetHovered(hovered):
hoveredObject = hovered
and Object.gd:
extends RigidBody3D
var draggable = false
var targetPos : Vector3
var varAlph = 0.0
var DragManager
@export var myId : int = 0
var scaleTween : Tween
# Called when the node enters the scene tree for the first time.
func _ready():
DragManager = get_node("../../DragManager")
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(delta):
if draggable == false:
return
global_transform.origin = global_transform.origin.lerp(targetPos, DragManager.lerpSpeed * delta)
func _on_mouse_entered():
DragManager.SetHovered(self)
func _on_mouse_exited():
DragManager.SetHovered(null)
func OnDragStart():
draggable = true
gravity_scale = 0
if freeze == true:
freeze = false
DoScaleAnim()
func OnDragEnd():
draggable = false
gravity_scale = 1
func SendMeToCenter():
freeze = false
var dir := Vector3.UP * 9.0 - global_transform.origin
dir = dir.normalized()
self.apply_central_impulse(dir * 8.0)
func DoScaleAnim():
if scaleTween != null and scaleTween.is_running():
scaleTween.kill()
var animTime = 0.25
scaleTween = create_tween()
scaleTween.tween_property(self, "scale", Vector3.ONE * 1.2, animTime / 2)
await get_tree().create_timer(animTime / 2).timeout
scaleTween = create_tween()
scaleTween.tween_property(self, "scale", Vector3.ONE, animTime / 2)