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().slotIndex; transform.SetParent(transform.parent.parent); // 避免拖拽时物品被遮挡 transform.position = eventData.position; GetComponent().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().slotIndex]; myBag.itemList[eventData.pointerCurrentRaycast.gameObject.GetComponentInParent().slotIndex] = temp; eventData.pointerCurrentRaycast.gameObject.transform.parent.position = originalParent.transform.position; eventData.pointerCurrentRaycast.gameObject.transform.parent.SetParent(originalParent); GetComponent().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().slotIndex] = myBag.itemList[currentItemIndex]; if (eventData.pointerCurrentRaycast.gameObject.GetComponent().slotIndex != currentItemIndex) myBag.itemList[currentItemIndex] = null; // 如果放回原处则不执行该句,避免放回原处后物品消失 GetComponent().blocksRaycasts = true; // 开启射线阻挡,否则无法再次选中移动的物品 } // 如果移到格子外 ,则物品自动回到原来的位置 else { transform.SetParent(originalParent); transform.position = originalParent.position; GetComponent().blocksRaycasts = true; // 开启射线阻挡,否则无法再次选中移动的物品 } } // 如果移到背包外,则物品自动回到原来的位置 else { // 物品回到初始位置 transform.SetParent(originalParent); transform.position = originalParent.position; GetComponent().blocksRaycasts = true; // 开启射线阻挡,否则无法再次选中移动的物品 } } }