一、PC/拖拽UI至某个地方
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class DragUIOnPC : MonoBehaviour, IDragHandler, IPointerDownHandler
{
private Vector2 Pos;
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position - Pos;
}
public void OnPointerDown(PointerEventData eventData)
{
Pos = eventData.position - (Vector2)transform.position;
}
}
二、移动端/使用步骤
由于 OnDrag不能在移动端使用
则调用 IPointerDownHandler + IPointerUpHandler
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class DragUIOnMobile : MonoBehaviour,IPointerDownHandler,IPointerUpHandler {
private GameObject AnswerItem = null;
private bool IsDrag = false;
void Update()
{
AroundByMobileInput();
}
//开始拖拽
public void OnPointerDown(PointerEventData eventData)
{
IsDrag = true;
AnswerItem = this.gameObject;
}
//结束拖拽
public void OnPointerUp(PointerEventData eventData)
{
IsDrag = false;
AnswerItem = null;
}
protected void AroundByMobileInput()
{
print(IsDrag);
if (Input.touchCount == 1 )
{
if (AnswerItem != null)
{
AnswerItem.GetComponent<RectTransform>().position = new Vector3(Input.GetTouch(0).position.x + -10, Input.GetTouch(0).position.y + 20, 0);
if (Input.touches[0].phase == TouchPhase.Moved)
{
}
}
}
}
}
如果你需要拖到某个地方将拖拽的UI吸附到当前位置,则需要利用OnTriggerEnter2D去触发碰撞(这个挺简单就不写了)