实现物品拖拽与放置的功能

效果图

场景搭建

创建场景,节点如下

场景图

脚本编写

godot内置了物品拖拽与放置功能,相关函数列表如下

需要注意改拖拽方法只适用于继承自Control的节点

  • get_drag_data: 当发生拖拽的时候获取的元素
  • set_drag_preview: 拖拽之后显示的图标
  • can_drop_data: 是否能够放置元素在这
  • drop_data: 当放下元素后执行的操作

创建一个脚本,全选PanelContainer并在Script属性栏中将Script设置为当前脚本

extends PanelContainer

func get_drag_data(position):
    if has_node("Sprite"):
        var texture = TextureRect.new()
        texture.texture = $Sprite.texture
        texture.rect_scale = $Sprite.scale
        set_drag_preview(texture)
        return $Sprite
    return false

func can_drop_data(position, data):
    return true

func drop_data(position, data):
    if data and !has_node("Sprite"):
        self.add_child(data.duplicate())
        data.queue_free()