void IEndDragHandler.OnEndDrag(PointerEventData eventData) { //拖拽事件处理。 //发射射线并得到射线击中的物体 GameObject go = eventData.pointerCurrentRaycast.gameObject; Debug.Log(go); if (go != null) { //1、目的地是空格子。 if (go.tag == Tags.inventoryItem) { //判断是否是原来的格子 if (go == transform.parent.gameObject) { //其实可以直接写,但是这样舒服- - SetIconPos(transform, go); Debug.Log("物品信息不需要发生变化"); } else { //先获取两个item上面的脚本,然后进行数据交换,清空旧的父物体 Debug.Log("交换item信息到item:" + go); InventoryItem oldParent = transform.parent.GetComponent <InventoryItem>(); InventoryItem newParent = go.GetComponent <InventoryItem>(); SetIconPos(transform, go); newParent.SetId(oldParent.id, oldParent.num); oldParent.ClearInfo(); } } else if (go.tag == Tags.inventoryIcon) { Debug.Log("目的地有物体"); //2、目的地有物体 //先获取两个item上的脚本,然后交换位置,交换信息 InventoryItem oldParent = transform.parent.GetComponent <InventoryItem>(); InventoryItem newParent = go.transform.parent.gameObject.GetComponent <InventoryItem>(); SetIconPos(transform, newParent.gameObject); SetIconPos(go.transform, oldParent.gameObject); int id = oldParent.id; int num = oldParent.num; oldParent.SetId(newParent.id, newParent.num); newParent.SetId(id, num); } else { //3、目的地不是格子 SetIconPos(transform, transform.parent.gameObject); Debug.Log("目的地没有格子,回到原来位置"); } } else { //4、拖拽到物品栏之外、可以作为删除操作,不知道后面有没有 //先进行归位处理 SetIconPos(transform, transform.parent.gameObject); Debug.Log("目的地没有格子,回到原来位置"); } mCanvasGroup.blocksRaycasts = true;//自身接受射线检测 }