2

我目前正在开发一款游戏,玩家可以在其中堆叠一堆 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))
4

1 回答 1

1

你的代码有很多问题,也许你应该考虑先写一个 2D 游戏来熟悉编程和 godot,然后再开始一个 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 数学非常有用,我真的建议您在继续之前阅读文档。这有助于使您的代码尽可能简单。

于 2018-06-21T21:04:04.920 回答