EditorTool3D/Assets/ZXL/Scripts/UI/ZMouse.cs

103 lines
2.8 KiB
C#

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<object> MouseDown0;
public Action<object, object> MouseUp0;
public Action<object> MouseDown1;
public Action<object, object> 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;
}
}
}