Unity中的UI事件

1.图片不规则点击事件处理-精灵像素检测法
  UGUI在处理控件是否被点击的时候,主要是根据IsRaycastLocationValid这个方法的返回值来进行判断的,而这个方法用到的基本原理则是判断指定点对应像素的RGBA数值中的Alpha是否大于某个指定临界值。例如,我们知道半透明通常是指Alpha=0.5,而对一个后缀名为png格式的图片来说半透明或者完全透明的区域理论上不应该被响应的,所以根据这个原理,我们只需要设定一个透明度的临界值,然后对当前鼠标位置对应的像素进行判断就可以了,因此这种方法叫做精灵像素检测。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
/// <summary>
/// 不规则区域Button
/// </summary>
[RequireComponent(typeof(RectTransform))
[RequireComponent(typeof(Image))]
public class IrregulaButton : MonoBehaviour{
    [Tooltip("设定Sprite响应的Alpha阈值")]
    [Range(0, 0.5f)]
    public float alpahThreshold = 0.5f;
    private void Awake(){
        var image = this.GetComponent<Image>();
        if (null != image){
            image.alphaHitTestMinimumThreshold = alpahThreshold;
        }
    }
}
注:
  (1).图片需要开启Read/Writeable属性
  开启Texture的Read/Writeable属性,但是这样这张图片就不能打进我们的图集里面了,必须以散图的形式存在于工程当中,不利于统一管理。而且开启了Read/Writeable属性属性的话,在程序运行的时候,它会在内存中多复制出来一份,必然会影响到游戏的运行效率。所以尽量还是减少游戏中这种不规则UI的出现。
  (2).像素检测有偏移,不准确的问题
  实际点击的时候经常会有偏移(经常偏下一些),有的透明的地方可以点击,而明明是不透明的地方却不能点击。
  对于周围有空白区域的图片,我们需要在Unity图片导入设置的时候,将Mesh Type格式设置为Full Rect,而unity导入时默认帮我们设置的是Tight模式。
 
2.Canvas点击事件
(1)必须添加Graphic Raycaster组件
(2)Canvas Group必须勾选Blocks Raycasts

原文地址:https://www.cnblogs.com/tqw1215/p/14760005.html