左键点击拖动是一种,右键点击拖动另一种
GetOverUI() 这个是读取当前鼠标下的UI 参数为这个UI的Canvas
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class DragGUI : MonoBehaviour
{
private Canvas canvas;
private RectTransform rect;
Vector2 pos;
private Vector2 offset;
private GameObject go;
void Start()
{
rect = this.GetComponent<RectTransform>();
canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
}
void Update()
{
if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1))
{
Debug.Log(rect.anchoredPosition);
float X = Input.mousePosition.x - Screen.width / 2f;
float Y = Input.mousePosition.y - Screen.height / 2f;
pos = new Vector2(X, Y);
Debug.Log(pos);
offset = rect.anchoredPosition - pos;
go = GetOverUI(transform.root.gameObject);
}
if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1))
{
go = null;
}
if (Input.GetMouseButton(0))
{
float X = Input.mousePosition.x - Screen.width / 2f;
float Y = Input.mousePosition.y - Screen.height / 2f;
pos = new Vector2(X, Y);
if (go == rect.gameObject)
{
rect.localPosition = pos + offset;
}
}
if (Input.GetMouseButton(1))
{
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
Input.mousePosition, canvas.worldCamera, out pos))
{
if (go == rect.gameObject)
{
rect.localPosition = pos + offset;
}
}
}
}
public GameObject GetOverUI(GameObject canvas)
{
PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
pointerEventData.position = Input.mousePosition;
GraphicRaycaster gr = canvas.GetComponent<GraphicRaycaster>();
List<RaycastResult> results = new List<RaycastResult>();
gr.Raycast(pointerEventData, results);
if (results.Count != 0)
{
return results[0].gameObject;
}
return null;
}
}