在 Unity UGUI 中,如果某个按钮被其他 UI 元素挡住,点击时事件会被前置的 UI 拦截,位于下层的按钮就无法被触发。
这时可以让挡在前面的 UI 元素支持点击穿透,让射线继续向下传递到真正需要响应的按钮上。
实现方式
给需要穿透的 UI 元素挂上一个脚本,实现 ICanvasRaycastFilter 接口,并在 IsRaycastLocationValid 中直接返回 false,这样该元素就不会被判定为射线的有效落点,点击事件会穿透到下层的目标按钮。
public class SwallowTouch : MonoBehaviour, ICanvasRaycastFilter
{
public bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
{
return false;
}
}