最近在实现一个场景物体拖拽功能,发现了一个很有意思的坑:
如图,我使用一些unity自带事件
IPointerEnterHandler,IPointerExitHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
等初步实现了拖拽系统(drag-drop),drag物体被鼠标拖拽后,只能在drop物体上释放。这样drop物体就必须是一个dummy物体。其实都是射线检测,完成度99%,一切都没问题,就在一个地方卡壳了:图中的蓝色方块,我想在初始位置也设置一个drop,但是如果在初始时,给这个drop加上collider的话,这个collider就会阻挡射线,从而导致无法拖动蓝色块,但如果不加collider,蓝色块可以拖动,但是无法在次物体上drop,因为它没有collider,射线探测不到。构成了一个死循环。
搞了N久,无意中发现,运行游戏后,手动在编辑器中打开、关闭一次drop的collider,一切就完美解决了,于是用以下代码解决了这个问题:
private void Start()
{
//if start droper, disable collider otherwise it will overlap drag object's collider
if (initDroper)
{
GetComponent<Collider>().enabled = false;
GetComponent<Collider>().enabled = true;
}
}
这样就行!好开心!
网友评论