背包拖拽功能实现基本上需要用到 IBeginDragHandler, IDragHandler, IEndDragHandler这三个类
IBeginDragHandler 是在开始拖拽时使用
IDragHandler 是在拖拽的过程中使用
IEndDragHandler 在拖拽结束的时候使用
那么背包拖拽功能实现的基本思路是
假设每个背包有一个网格和一个物品,如果背包内没有东西用空物品代替
当开始拖拽的时候记录下现在的坐标
在拖拽途中不断改变被拖拽对象的位置坐标
在结束拖拽时 两个物品互换父亲节点并且将物品的当地坐标转化为0
Vector3 CIPosition;//要交换位置的物品位置
public void OnBeginDrag(PointerEventData eventData)
{
CIPosition = eventData.position;//这个是用来记录原始坐标的
transform.position = eventData.position;
}
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position;
transform.GetComponent<Image>().raycastTarget = false;//设置射线不能穿过物体
}
public void OnEndDrag(PointerEventData eventData)
{
GameObject go = eventData.pointerCurrentRaycast.gameObject;//得到当前鼠标坐标下的物体信息
Transform Cparent;
if (go.tag == TagManage.bagItem && go.transform.parent != transform.parent)
//如果物体的标签和背包物品的标签一样并且他们的父亲节点不同,进行交换
{
//对父亲节点进行交换
Cparent = transform.parent;
transform.parent = go.transform.parent;
go.transform.parent = Cparent;
//将坐标转化为当地0坐标
transform.localPosition = Vector3.zero;
go.transform.localPosition = Vector3.zero;
}
else
{
transform.position = CIPosition;
}
transform.GetComponent<Image>().raycastTarget = true;
}
最后
以上就是粗暴曲奇最近收集整理的关于Unity背包拖拽功能的实现(UGUI)的全部内容,更多相关Unity背包拖拽功能内容请搜索靠谱客的其他文章。
发表评论 取消回复