如果一个按钮有一半的区域被Image挡住,那么被挡住的按钮区域的点击事件就会被拦截掉。解决这个问题有两个方法。
- 修改Hierarchy视图中的树状结构。如下图所示,把Image2放到Image1的下面,这样渲染上Image2在Image1前面,这样点击被挡住区域就会被响应了, Text的原理一样。
2.通过重写Image类,让Image不参与射线检测。
继承Image 重写 IsRaycastLocationValid 直接返回 false就行了。
C#
1 2 3 4 5 6 7 8 9 10 | using UnityEngine; using System.Collections; using UnityEngine.UI; public class ImagePlus : Image {
override public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera) { return false; } }
|
如果你想整体的关闭某个父节点下的所有UI事件。把如下脚本绑定在父节点上即可。
1 2 3 4 5 6 7 8 9 10 11 | using UnityEngine; using System.Collections;
public class UIFocus : MonoBehaviour ,ICanvasRaycastFilter { public bool IsFocus= false; public bool IsRaycastLocationValid (Vector2 sp, Camera eventCamera) { return IsFocus; } } |
3.加個UGUI內建的CanvasGroup組件, 把Interactable和Blocks Raycasts選項取消。