using System; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Serialization; namespace ZXL.Scripts.UI { public class ZMouse : MonoBehaviour { private static ZMouse instance; public static ZMouse Instance => instance; public bool isMouseDown0 = false; public bool isMouseUp0 = false; public bool isMouseDown1 = false; public bool isMouseUp1 = false; public bool isDragging0 = false; public GameObject downData; public GameObject upData; public Vector2 startPosition; public Vector2 endPosition; public Vector2 delta; public Vector2 deltaUI; public Action MouseDown0; public Action MouseUp0; public Action MouseDragEnd0; public Action MouseDown1; public Action MouseUp1; public Action MouseDragEnd1; private void Awake() { instance = this; } private void Update() { delta = Input.mousePosition; Vector2 screenpos = Input.mousePosition; deltaUI.x = screenpos.x - (Screen.width / 2); deltaUI.y = screenpos.y - (Screen.height / 2); if (Input.GetMouseButtonDown(0)) { isMouseDown0 = true; isMouseUp0 = false; var obj = GetObj(); downData = obj; MouseDown0?.Invoke(downData); startPosition = Input.mousePosition; } else if (Input.GetMouseButtonUp(0)) { isMouseDown0 = false; isMouseUp0 = true; var obj = GetObj(); upData = obj; MouseUp0?.Invoke(downData, upData); if (isDragging0) MouseDragEnd0?.Invoke(downData, upData); endPosition = Input.mousePosition; } else if (Input.GetMouseButton(0)) { isMouseDown0 = true; isMouseUp0 = false; if (delta != startPosition) { isDragging0 = true; } } else { downData = null; upData = null; isMouseDown0 = false; isMouseUp0 = false; isDragging0 = false; } if (Input.GetMouseButtonDown(1)) { isMouseDown1 = true; isMouseUp1 = false; var obj = GetObj(); downData = obj; MouseDown1?.Invoke(obj); } else if (Input.GetMouseButtonUp(1)) { isMouseDown1 = false; isMouseUp1 = true; var obj = GetObj(); upData = obj; MouseUp1?.Invoke(downData, upData); } else if (Input.GetMouseButton(1)) { isMouseDown1 = true; isMouseUp1 = false; } else { isMouseDown1 = false; isMouseUp1 = false; } } GameObject GetObj() { Ray2D ray = new Ray2D(Input.mousePosition, Vector2.right); var hit2D = Physics2D.Raycast(ray.origin, ray.direction); if (hit2D.collider != null) { UnityEngine.Debug.Log(hit2D.collider.gameObject.name); return hit2D.collider.gameObject; } return null; } } }