public class Bag : EventTrigger{
//物品最开始的父物体
public Transform nowParent;
//物品拖拽中的父物体
private Transform dragParent;
public string[] tags = new string[] { "bag", "goods" };
private void Start()
{
// dragParent = GameObject.Find("DragParent").transform;
string item="qqq";
string mString= Array.Find(tags, p => p == item);
print(mString);
}
public override void OnPointerClick(PointerEventData eventData)
{
//射线碰撞点的信息
print(eventData.pointerCurrentRaycast);
}//当前物体的位置跟随鼠标进行移动
transform.position = Input.mousePosition;
//拖拽中将物体的射击检测关闭 以便结束拖拽的时候可以去检测物体下方的物体
public override void OnBeginDrag(PointerEventData eventData)
{
nowParent = transform.parent;
}
public override void OnDrag(PointerEventData eventData)
{
//当前物体的位置跟随鼠标进行移动
transform.position = Input.mousePosition;
//拖拽中将物体的射击检测关闭 以便结束拖拽的时候可以去检测物体下方的物体
GetComponent<Image>().raycastTarget = false;
//将拖拽中的物体父物体改为深度值较高的空物体,以便我们在拖拽中可以看到他
transform.SetParent(dragParent);
}
public override void OnEndDrag(PointerEventData eventData)
{
GameObject go = eventData.pointerCurrentRaycast.gameObject;
//如果是别的UI或者go为空 让拖拽的物品回归原位
//go.tag!="bag"||go.tag!="goods"
if (go == null || Array.Find(tags, p => p == go.tag)==null)
{
transform.position = nowParent.position;
transform.SetParent(nowParent);
GetComponent<Image>().raycastTarget = true;
return;
}
//如果是格子 将拖拽的物品放到格子的位置,并且和格子成为父子物体的关系
if (go.tag == "bag")
{
transform.position = go.transform.position;
transform.SetParent(go.transform);
}
else if (go.tag == "goods")
{
//如果是格子当中有物品,那么交换两个物品位置
//将拖拽的物体放到当前格子中
transform.position = go.transform.parent.position;
transform.SetParent(go.transform.parent);
//将现在格子当中的物体移动到当前拖拽物体原来的位置
go.transform.position = nowParent.position;
go.transform.SetParent(nowParent);
}
transform.GetComponent<Image>().raycastTarget = true;
}
public void SetPosAndParent(Transform child, Transform parent)
{
child.position = parent.position;
child.SetParent(parent);
}
public void IsRayCastOn(bool flag)
{
GetComponent<Image>().raycastTarget = flag;
}
}