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

  • 相关阅读:
    PAT 1010. 一元多项式求导 (25)
    PAT 1009. 说反话 (20) JAVA
    PAT 1009. 说反话 (20)
    PAT 1007. 素数对猜想 (20)
    POJ 2752 Seek the Name, Seek the Fame KMP
    POJ 2406 Power Strings KMP
    ZOJ3811 Untrusted Patrol
    Codeforces Round #265 (Div. 2) 题解
    Topcoder SRM632 DIV2 解题报告
    Topcoder SRM631 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/tqw1215/p/14760005.html
Copyright © 2011-2022 走看看