zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    TreeSet和TreeMap中“相等”元素可能并不相等
    求众数——摩尔投票
    5802. 统计好数字的数目
    快速幂
    LCP 07.传递消息
    332. 重新安排行程(欧拉回路问题)
    126. 单词接龙 II
    879. 盈利计划
    287. 寻找重复数
    239. 滑动窗口最大值
  • 原文地址:https://www.cnblogs.com/tqw1215/p/14760005.html
Copyright © 2011-2022 走看看