unity鼠标拖拽平面物体
- 将这个脚本直接拖拽到需要进行拖拽的平面物体上即可,代码如下
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class UIDragByMocha : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
[Header("是否精准拖拽")]
public bool m_isPrecision;
private Vector3 m_offset;
private RectTransform m_rt;
void Start()
{
m_rt = gameObject.GetComponent<RectTransform>();
}
public void OnBeginDrag(PointerEventData eventData)
{
if (m_isPrecision)
{
Vector3 tWorldPos;
RectTransformUtility.ScreenPointToWorldPointInRectangle(m_rt, eventData.position, eventData.pressEventCamera, out tWorldPos);
m_offset = transform.position - tWorldPos;
}
else
{
m_offset = Vector3.zero;
}
SetDraggedPosition(eventData);
}
public void OnDrag(PointerEventData eventData)
{
SetDraggedPosition(eventData);
}
public void OnEndDrag(PointerEventData eventData)
{
SetDraggedPosition(eventData);
}
private void SetDraggedPosition(PointerEventData eventData)
{
Vector3 globalMousePos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_rt, eventData.position, eventData.pressEventCamera, out globalMousePos))
{
m_rt.position = globalMousePos + m_offset;
}
}
}