今天做一个功能,类似与吃鸡游戏的小地图和大地图,功能大概包括周围人物怪物标识,场景物资标识,玩家和队友再地图上的标点和 自身与标点的划线、缩放、拖拽等
因为设计点击和拖拽,所以需要单独监听这两个事件,但是我发现UGUI 的事件执行顺序是这样的
点击一下的事件执行顺序1
2
3
4
5
6OnPointerDown
OnInitializePotentialDrag
OnPointerEnter
OnPointerUp
OnPointerClick
OnPointerExit
当我按下并拖动的事件执行顺序1
2
3
4
5
6
7
8
9OnPointerDown
OnInitializePotentialDrag
OnPointerEnter
OnBeginDrag
OnDrag
OnPointerUp
OnPointerClick
OnEndDrag
OnPointerExit
可以看出 当同一个物体我们同时监听它的点击事件和拖动事件的时候,是不能直接通过OnPointerClick或者OnPointerDown来得到的,因为当我们拖动的时候也会执行这两个事件,所以用以下解决方案。
- 设置一个bool变量
- OnPointerDown事件把变量设为true
- OnDrag设为false,或者OnBeginDrag
- 在OnPointerUp事件触发的时候判断这边变量是否为true,如果是true 则认为是点击,否则是拖动
很简单,代码就不写了。
写一下测试代码吧。后续有机会再写一下关于Entitas的笔记。
1 | using UnityEngine; |