最近slg项目中有个需求,场景中有地块,给武将上阵,同时支持拖动,点击等基本操作,同时又要打开UI替换武将,需要处理点击穿透的问题
需求点:
1.点击地块,打开UI,但是不能点穿导致再次打开(其他办法也行不在这讨论);
2.打开UI,阻挡射线点击,和第一点需求差不多
3.Canvas Group只能解决 让射线响应 UI不被响应的需求,而不是UI开启时射线不响应的需求
地块最基本的box collider响应ray
场景中点击需要打开对应UI,操作一系列上阵创模等功能,但是打开UI的同时,点击到场景中这些碰撞盒,会持续响应,UI上BG image raycasttarget 并不能阻挡射线检测,这时需要代码中做一系列操作.
1.首先UI父物体上添加GraphicRaycaster组件,我这里mask只选了UI,其他不知道,没测试过,
2. 声明各种变量并找到
private GraphicRaycaster RaycastInCanvas;
private EventSystem eventSystem;
3.前任程序的做法是在Update中通过射线检测及完成各种需求
主要做法是Input.GetMouseButtonDown(0) 点击时在判断,增加下列代码
private bool CheckUiRaycastObjects()
{
PointerEventData eventData = new PointerEventData(eventSystem);
eventData.pressPosition = Inpu