// 注册按钮的拖拽监听,拖拽结束时丢弃物品 private void addDragAndDrop(GButton btn) { btn.onTouchBegin.Add((EventContext evenContext) => { if (touchID == -1) { InputEvent inputEvent = (InputEvent)evenContext.data; touchID = inputEvent.touchId; Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y)); float posX = localPos.x; float posY = localPos.y; startX = posX; startY = posY; dragIcon.url = btn.icon; dragIcon.SetXY(posX - dragIcon.width / 2, posY - dragIcon.height / 2); dragIcon.visible = true; evenContext.CaptureTouch(); } }); btn.onTouchMove.Add((EventContext evenContext) => { InputEvent inputEven = (InputEvent)evenContext.data; if (touchID != -1 && inputEven.touchId == touchID) { Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEven.x, inputEven.y)); float posX = localPos.x; float posY = localPos.y; dragIcon.SetXY(posX - dragIcon.width / 2, posY - dragIcon.height / 2); } }); btn.onTouchEnd.Add((EventContext evenContext) => { InputEvent inputEvent = (InputEvent)evenContext.data; if (touchID != -1 && touchID == inputEvent.touchId) { Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y)); // 计算偏移量,判断为点击还是丢弃 float deltaX = Mathf.Abs(startX - localPos.x); float deltaY = Mathf.Abs(startY - localPos.y); float redio = Mathf.Sqrt(deltaX * deltaX + deltaY * deltaY); // 在一个固定圆弧内 if (redio < useRedio) { Debug.Log("使用"); useGoods(btn); } else { Debug.Log("丢弃"); dropGoods(btn); } touchID = -1; } }); }
public void StartDrag(GObject source, string icon, object sourceData, int touchPointID = -1) { if (_agent.parent != null) { return; } _sourceData = sourceData; _agent.url = icon; GRoot.inst.AddChild(_agent); Vector2 pt = source.LocalToGlobal(new Vector2(0, 0)); _agent.SetXY(pt.x, pt.y); _agent.StartDrag(null, touchPointID); }