1、记得slot槽位添加box collider
2、TopPos是创建空物体放到UI最下层,使拖拽时的物品最先渲染
3、添加好slot和item标签,脚本挂在物品Image身上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class DragProps : EventTrigger
{
private Transform nowparent;//原先的父物体
private Transform TopPos;//作为拖拽物品最先渲染
void Start()
{
TopPos = GameObject.FindWithTag("Top").transform;
}
public override void OnBeginDrag(PointerEventData eventData)
{
nowparent = transform.parent;
//transform.parent = TopPos;
transform.SetParent(TopPos, false);
}
public override void OnDrag(PointerEventData eventData)
{
transform.position = Input.mousePosition;
IsRaycast(false);
}
public override void OnEndDrag(PointerEventData eventData)
{
GameObject go = eventData.pointerCurrentRaycast.gameObject;
IsRaycast(true);
if (go.tag == "slot")
{
SetPosandParent(transform, go.transform);
}
else if (go.tag == "item")
{
Transform GoParent = go.transform.parent;
SetPosandParent(go.transform, nowparent);
SetPosandParent(transform, GoParent);
}
else
{
SetPosandParent(transform, nowparent);
return;
}
}
private void IsRaycast(bool flag)
{
transform.GetComponent<Image>().raycastTarget = flag;
}
private void SetPosandParent(Transform trans, Transform parent)
{
//trans.parent = parent;
//trans.position = parent.position;
trans.SetParent(parent, false);
trans.localPosition = Vector3.zero;
}
}