拖动收取的功能实现

发布于 2018-02-05  538 次阅读


Unity 中的拖动事件

为了实现下图的拖动效果:

export

Manager 部分

在这里我们需要定义一个管理鼠标按下的Manager,并实现以下接口:

IBeginDragHandler
IDragHandler
DragHandler

当鼠标按下时,我们通知对应image上的脚本现在鼠标按下。
当鼠标松开时,我们通知对应image上的脚本现在鼠标松开。

Image 部分

在对应的Image脚本里,需要实现如下接口:

IPointerEnterHandler
IPointerDownHandler

当鼠标按下时,且鼠标在我这里悬停,则关闭显示。
当鼠标点到我时,则关闭显示。

代码部分

DragManager
public class DragManager : MonoBehaviour,IBeginDragHandler, IDragHandler, IEndDragHandler {

    private List<ActiveControll> footPrint;

    private void Awake() {

        footPrint = new List<ActiveControll>();

        for (int i = 0; i < this.transform.childCount; i++) {

            footPrint.Add(this.transform.GetChild(i).GetComponent<ActiveControll>());
        }
    }

    public void OnBeginDrag(PointerEventData eventData) {

        for (int i = 0; i < footPrint.Count; i++) {

            footPrint[i].onDrag = true;
        }
    }

    public void OnDrag(PointerEventData eventData) {

    }

    public void OnEndDrag(PointerEventData eventData) {

        for (int i = 0; i < footPrint.Count; i++) {

            footPrint[i].onDrag = false;
        }
    }
}
ActiveControll
public class ActiveControll : MonoBehaviour, IPointerEnterHandler, IPointerDownHandler {

    public bool onDrag = false;

    public void OnPointerDown(PointerEventData eventData) {

        this.gameObject.SetActive(false);
    }

    public void OnPointerEnter(PointerEventData eventData) {

        if(onDrag) {

            this.gameObject.SetActive(false);
        }
    }
}
Hierarchy 层级

WX20180205-172744


What doesn’t kill you makes you stronger.