ui拖拽功能

本功能的拖拽继承与EventTrigger,由于是在lua中实现的功能,所以需要导出EventTriggerListener脚本

public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger

lua中调用的写法:

EventTriggerListener.Get(skillCloneItemGo).onBeginDrag = self.OnStartDragSkillItem
EventTriggerListener.Get(skillCloneItemGo).onDrag = self.OnDragSkillItem
EventTriggerListener.Get(skillCloneItemGo).onEndDrag = self.OnEndDragSkillItem
拖拽回调方法
function SkillTreeView:OnStartDragSkillItem(data)
    if this.move ~= true then
        this.move = true
        this.DragImage = UnityEngine.GameObject.Instantiate(ImageObj)
        this.DragTrans = this.DragImage.transform:GetComponent('RectTransform')
        Transform_SetParent(this.DragImage.transform,data.pointerPress.transform)
        this.DragImage.gameObject:SetActive(true)
        -- 设置层级
        local canvas = this.DragImage.transform:GetComponent("Canvas")
        canvas.overrideSorting = true
        canvas.sortingOrder = this.Layer + 1
    end
end
function SkillTreeView:OnDragSkillItem(data)
    if this.move then
        if this.drag ~= true then
            this.drag = true
        end
        -- 这里不是用position做基础偏移,所以偏移值要除以屏幕缩放比例 (UnityEngine.Screen.width/1920)
        this.DragTrans.anchoredPosition = this.DragTrans.anchoredPosition + data.delta/(UnityEngine.Screen.width/1920)
    end
end
function SkillTreeView:OnEndDragSkillItem(data)
    if this.move == false or this.drag == false then
        return
    end
    this.move = false
    this.drag = false

        后面可以加拖拽以后的逻辑了。

难点就是如果用anchoredPosition 或者localPosition 就一定要考虑屏幕的缩放 如图:

猜你喜欢

转载自blog.csdn.net/CSDNzhizunbao/article/details/85244590