鼠标拖动界面移动
主要逻辑在这一块, 大坑在红色箭头那, 这个坐标z不是鼠标的屏幕坐标的z值,参考:将屏幕坐标转换为世界坐标。
下面是源码,脚本挂在当前需要拖拽的界面上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class DragPanel : MonoBehaviour,IDragHandler,IEndDragHandler
{
//Vector3 mousePos=Vector3.zero;
Vector3 currentLocalMousePos = Vector3.zero;
void Start()
{
}
public void OnDrag(PointerEventData eventData)
{
Vector3 mouseLocalPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.farClipPlane));
if (currentLocalMousePos == Vector3.zero)
{
currentLocalMousePos = mouseLocalPos;
}
else
{
Vector3 lerp = mouseLocalPos - currentLocalMousePos;
currentLocalMousePos = mouseLocalPos;
transform.position = new Vector3(transform.position.x+lerp.x, transform.position.y + lerp.y);
}
}
// Start is called before the first frame update
// Update is called once per frame
void Update()
{
}
public void OnEndDrag(PointerEventData eventData)
{
currentLocalMousePos = Vector3.zero;
}
}