本功能的拖拽继承与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 就一定要考虑屏幕的缩放 如图: