如何在Godot发动机中拖动运动体(3D)

如何在Godot发动机中拖动运动体(3D),3d,mouse,drag,godot,gdscript,3d,Mouse,Drag,Godot,Gdscript,我目前正在做一个游戏,玩家可以堆叠一堆3D对象,所以我想让他们拖动一个对象并将其放置在上面 我在谷歌上搜索了很多次如何拖动/制作一个对象来跟随鼠标光标,但不幸的是,我没有找到这样做的方法。如果有人知道怎么做,请告诉我 这里我附上了我的代码。它会检测鼠标位置,但当我点击屏幕时,对象会向右上移动,而不会跟随光标 extends KinematicBody var velocity = Vector3() const SPEED = 300 func _physics_process(delt

我目前正在做一个游戏,玩家可以堆叠一堆3D对象,所以我想让他们拖动一个对象并将其放置在上面

我在谷歌上搜索了很多次如何拖动/制作一个对象来跟随鼠标光标,但不幸的是,我没有找到这样做的方法。如果有人知道怎么做,请告诉我

这里我附上了我的代码。它会检测鼠标位置,但当我点击屏幕时,对象会向右上移动,而不会跟随光标

extends KinematicBody

var velocity = Vector3()

const SPEED = 300 

func _physics_process(delta):
    if(Input.is_action_pressed("mouse_down")):

        var mouse  = get_viewport().get_mouse_position()

        print(mouse)

        var velocity = Vector3(mouse.x-get_translation().x,mouse.y-get_translation().y,0)

        velocity = velocity.normalized()*SPEED*delta

        velocity = move_and_slide(velocity, Vector3(0,1,0))

<>你的代码有多个问题,也许你应该先写一个2D游戏来熟悉编程和戈多,然后开始3D游戏,这是更复杂和令人沮丧的。

不过,我想回答你的问题。您希望对象跟随鼠标稍微延迟一点,还是希望对象直接位于光标下方。对于后者,只需将实体位置设置为鼠标位置,如:

var mouse_pos  = get_viewport().get_mouse_position()
self.position = mouse_pos # The self is just for better understanding
如果要稍微延迟拖动对象,必须计算鼠标与对象之间的距离。 以下是一个可能的解决方案:

func _physics_process(delta):
    if Input.is_action_pressed("mouse_down"):
        var mouse_pos  = get_viewport().get_mouse_position()
        var direction = mouse_pos - position
        move_and_slide(direction)
正如我所说,3d环境使一切变得更加困难,因为很难获得正确的x、y和z位置


此外,Godots math for vectors非常有用,我真的建议您在继续之前阅读。这有助于使您的代码尽可能简单。

嗨,magenulcus,非常感谢您阅读并回答我的问题!是的,我决定用2D来做。3D对我来说太多了。呵呵,祝你过得愉快,再次感谢你分享你的知识!我希望这也能帮助其他人。