Unity 实现在Canvas 模式为camera的情况下 移动鼠标进行物件拖拽,同时限定范围
using UnityEngine;
public class DragUI : MonoBehaviour
{
private bool isDragging = false; // 是否正在拖动
private Vector3 startPosition; // 物体起始位置
private RectTransform rectTransform; // 当前UI物体的RectTransform组件
// 可移动范围
Vector2 minPosition;
Vector2 maxPosition;
void Start()
{
rectTransform = GetComponent<RectTransform>();
SetLimitPos();
}
void SetLimitPos()
{
minPosition = new Vector2(0, 0);
maxPosition = new Vector2(Screen.width, Screen.height);
minPosition = Camera.main.ScreenToWorldPoint(minPosition);
maxPosition = Camera.main.ScreenToWorldPoint(maxPosition);
Debug.Log("minPosition:" + minPosition);
Debug.Log("maxPosition:" + maxPosition);
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
// 记录起始位置,并开始拖动状态
isDragging = true;
startPosition = rectTransform.position;
}
if (isDragging)
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePosition.z = rectTransform.position.z;
mousePosition.x = Mathf.Clamp(mousePosition.x, minPosition.x, maxPosition.x);
mousePosition.y = Mathf.Clamp(mousePosition.y, minPosition.y, maxPosition.y);
rectTransform.position = mousePosition;
}
if (Input.GetMouseButtonUp(0))
{
// 结束拖动状态
isDragging = false;
}
}
}