首页 > 编程语言 > 详细

Unity中的UI事件

时间:2021-05-12 20:21:44      阅读:18      评论:0      收藏:0      [点我收藏+]
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模式。

Unity中的UI事件

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!