You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
4.1 KiB
84 lines
4.1 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
|
|
public class ItemOnDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
|
|
{
|
|
public Transform originalParent; // 记录原先的父级
|
|
public Inventory myBag;
|
|
public Slot slot;
|
|
public int currentItemIndex; // 当前被拖拽物品的下标
|
|
|
|
public void OnBeginDrag(PointerEventData eventData)
|
|
{
|
|
originalParent = transform.parent;
|
|
currentItemIndex = originalParent.GetComponent<Slot>().slotIndex;
|
|
transform.SetParent(transform.parent.parent); // 避免拖拽时物品被遮挡
|
|
transform.position = eventData.position;
|
|
GetComponent<CanvasGroup>().blocksRaycasts = false;
|
|
}
|
|
|
|
public void OnDrag(PointerEventData eventData)
|
|
{
|
|
transform.position = eventData.position;
|
|
// Debug.Log(eventData.pointerCurrentRaycast.gameObject.name);
|
|
}
|
|
|
|
public void OnEndDrag(PointerEventData eventData)
|
|
{
|
|
// 如果将物品移动到背包内,则改变位置
|
|
if (eventData.pointerCurrentRaycast.gameObject != null)
|
|
{
|
|
// 如果格子中有物品,则交换位置
|
|
if (eventData.pointerCurrentRaycast.gameObject.name == "Item Image")
|
|
{
|
|
// 交换物品在背包中显示的位置
|
|
transform.SetParent(eventData.pointerCurrentRaycast.gameObject.transform.parent.parent);
|
|
transform.position = eventData.pointerCurrentRaycast.gameObject.transform.parent.parent.position;
|
|
|
|
// 交换物品在背包中的下标
|
|
var temp = myBag.itemList[currentItemIndex];
|
|
myBag.itemList[currentItemIndex] = myBag.itemList[eventData.pointerCurrentRaycast.gameObject.GetComponentInParent<Slot>().slotIndex];
|
|
myBag.itemList[eventData.pointerCurrentRaycast.gameObject.GetComponentInParent<Slot>().slotIndex] = temp;
|
|
|
|
eventData.pointerCurrentRaycast.gameObject.transform.parent.position = originalParent.transform.position;
|
|
eventData.pointerCurrentRaycast.gameObject.transform.parent.SetParent(originalParent);
|
|
GetComponent<CanvasGroup>().blocksRaycasts = true; // 开启射线阻挡,否则无法再次选中移动的物品
|
|
}
|
|
|
|
// 如果格子中没有物品,则将物品放至此位置
|
|
else if (eventData.pointerCurrentRaycast.gameObject.name == "Slot(Clone)")
|
|
{
|
|
// 改变物品在背包中显示的位置
|
|
transform.SetParent(eventData.pointerCurrentRaycast.gameObject.transform);
|
|
transform.position = eventData.pointerCurrentRaycast.gameObject.transform.position;
|
|
|
|
// 改变物品在背包中的下标
|
|
myBag.itemList[eventData.pointerCurrentRaycast.gameObject.GetComponentInParent<Slot>().slotIndex] = myBag.itemList[currentItemIndex];
|
|
if (eventData.pointerCurrentRaycast.gameObject.GetComponent<Slot>().slotIndex != currentItemIndex)
|
|
myBag.itemList[currentItemIndex] = null; // 如果放回原处则不执行该句,避免放回原处后物品消失
|
|
|
|
GetComponent<CanvasGroup>().blocksRaycasts = true; // 开启射线阻挡,否则无法再次选中移动的物品
|
|
}
|
|
|
|
// 如果移到格子外 ,则物品自动回到原来的位置
|
|
else
|
|
{
|
|
transform.SetParent(originalParent);
|
|
transform.position = originalParent.position;
|
|
GetComponent<CanvasGroup>().blocksRaycasts = true; // 开启射线阻挡,否则无法再次选中移动的物品
|
|
}
|
|
}
|
|
|
|
// 如果移到背包外,则物品自动回到原来的位置
|
|
else
|
|
{
|
|
// 物品回到初始位置
|
|
transform.SetParent(originalParent);
|
|
transform.position = originalParent.position;
|
|
GetComponent<CanvasGroup>().blocksRaycasts = true; // 开启射线阻挡,否则无法再次选中移动的物品
|
|
}
|
|
}
|
|
}
|