我正在尝试制作一个可拖放的GameObject,它可以放在容器内,但是当我释放鼠标按钮时,即使鼠标在容器上(也是拖动的对象),OnDrop
也不会在容器上引发。要使其工作,我必须选择拖动的GameObject在它的边缘,这样鼠标就在容器上,而不是当我释放鼠标按钮时可拖动的。
根据我所见,统一处理的拖放是基于Raycast的,而Raycast可以配置为忽略特定层中的对象,这要归功于LayerMask
,问题是我找不到任何东西来应用LayerMask
有没有办法这样做,或任何解决办法,可以让掉落目标知道被拖到他身上?
发布于 2019-01-29 10:01:51
在某些组件上有一个称为Raycast Target
的复选框,在CanvasGroup
上有一个名为Blocks Raycasts
的复选框。因此,当您释放拖动时,您的鼠标在您要拖动的对象之上。您可以取消正在拖动的对象上的复选框,这样光线投射就可以通过。如果您想要使用LayerMask,或者您想要投射多个目标,您可以为它创建一个自定义的光线投射解决方案和您自己的接口。
GraphicRaycaster.Raycast --这个例子解释了如何为光线投射创建自定义行为。您可以将其与OnDrop结合使用,但如果需要的话,我建议您自己编写。但在目前的系统下,这很可能是可以实现的。我打赌EventSystem所做的基本上是检查按钮按下,当按钮被按下/释放它的射线投射,如果对象点击实现IDropHandler,然后调用OnDrop。使用自定义系统,您可以拥有LayerMask,这将告诉您在光线投射时要击中哪一层。
https://gamedev.stackexchange.com/questions/167602
复制