根据图片的透明度来判断是否点击到了适当区域(如果a值是0,说明完全透明,则判断为没点击,否则判断为触发点击)
using UnityEngine; using System.Collections; using UnityEngine.UI; public class Demo : Image { Image image; void Start() { image = GetComponent<Image>(); } public override bool IsRaycastLocationValid(Vector2 V, Camera C) //继承Image并重写Image的这个方法 QQ 745701540 { float a = 0; if (Input.GetMouseButtonDown(0)) { //-------------------------------------------------------- //鼠标坐标 float x, y; x = Input.mousePosition.x; y = Input.mousePosition.y; //图片的实际宽高 Rect R = new Rect(); R.x = image.rectTransform.rect.width; R.y = image.rectTransform.rect.height; //图片左下角坐标 Vector2 v_you = image.rectTransform.position - new Vector3(R.x / 2, R.y / 2); //真实像素点颜色值 int x_z, y_z; x_z = (int)((x - v_you.x) / R.x * image.preferredWidth);//像素宽高比实际宽高 y_z = (int)((y - v_you.y) / R.y * image.preferredHeight); a = image.sprite.texture.GetPixel(x_z, y_z).a; } if (a > 0) { Debug.Log("S"); return true; } else return false; } }
将脚本赋给Image图片,然后将图片的格式改为Advanced, 勾上Read/Write Enabled。
因为继承了Image,所以脚本上也会出现Raycast Target等一系列属性,勾掉它,否则加上Image的,相当于两个触发,点击一次会触发两次方法。