using System; using UnityEngine; 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 isDragging = false; public GameObject downData; public GameObject upData; public Action MouseDown0; public Action MouseUp0; public Action MouseDown1; public Action MouseUp1; private void Awake() { instance = this; } private void Update() { if (Input.GetMouseButtonDown(0)) { isMouseDown0 = true; isMouseUp0 = false; var obj = GetObj(); downData = obj; MouseDown0?.Invoke(downData); } else if (Input.GetMouseButtonUp(0)) { isMouseDown0 = false; isMouseUp0 = true; var obj = GetObj(); upData = obj; MouseUp0?.Invoke(downData, upData); } else if (Input.GetMouseButton(0)) { isMouseDown0 = true; isMouseUp0 = false; } else { downData = null; upData = null; isMouseDown0 = false; isMouseUp0 = 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; } } }